@ampath-kenya/ngx-openmrs-formentry 3.0.0-alpha9 → 3.0.0-ampath.1-beta.0

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 (441) hide show
  1. package/abstract-controls-extension/afe-control-type.d.ts +1 -1
  2. package/abstract-controls-extension/afe-form-array.d.ts +2 -3
  3. package/abstract-controls-extension/afe-form-control.d.ts +1 -1
  4. package/abstract-controls-extension/afe-form-group.d.ts +1 -1
  5. package/ampath-kenya-ngx-openmrs-formentry.d.ts +48 -74
  6. package/ampath-kenya-ngx-openmrs-formentry.metadata.json +1 -1
  7. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +5729 -9376
  8. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -1
  9. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +1 -16
  10. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -1
  11. package/change-tracking/control-relation.d.ts +4 -4
  12. package/change-tracking/control-relations.d.ts +3 -3
  13. package/components/check-box/checkbox.component.d.ts +1 -2
  14. package/components/date-time-picker/date-time-picker.component.d.ts +1 -2
  15. package/components/date-time-picker/date-time-picker.module.d.ts +0 -3
  16. package/components/file-upload/file-upload.component.d.ts +25 -0
  17. package/components/file-upload/file-upload.module.d.ts +2 -0
  18. package/components/file-upload/secure.pipe.d.ts +5 -5
  19. package/components/ngx-date-time-picker/ngx-date-time-picker.component.d.ts +52 -0
  20. package/components/{ngx-datetime-picker/ngx-datetime-picker.module.d.ts → ngx-date-time-picker/ngx-date-time-picker.module.d.ts} +0 -3
  21. package/components/ngx-time-picker/ngx-time-picker.component.d.ts +13 -0
  22. package/components/ngx-time-picker/ngx-time-picker.module.d.ts +2 -0
  23. package/components/{ngx-remote-select/ngx-remote-select.component.d.ts → remote-select/remote-select.component.d.ts} +8 -12
  24. package/components/remote-select/remote-select.module.d.ts +2 -0
  25. package/components/select/diacritics.d.ts +844 -0
  26. package/components/select/option-list.d.ts +36 -0
  27. package/components/select/option.d.ts +17 -0
  28. package/components/select/select-dropdown.component.d.ts +40 -0
  29. package/components/select/select-dropdown.component.style.d.ts +1 -0
  30. package/components/select/select.component.d.ts +96 -108
  31. package/components/select/select.component.style.d.ts +1 -0
  32. package/encounter-viewer/display-controls/file-preview.component.d.ts +25 -0
  33. package/encounter-viewer/display-controls/question-control.component.d.ts +15 -0
  34. package/encounter-viewer/display-controls/remote-answer.component.d.ts +17 -0
  35. package/encounter-viewer/encounter-container/encounter-container.component.d.ts +15 -0
  36. package/encounter-viewer/encounter-pdf-viewer.service.d.ts +27 -0
  37. package/encounter-viewer/encounter-view/encounter-viewer.component.d.ts +30 -0
  38. package/encounter-viewer/encounter-viewer.module.d.ts +2 -0
  39. package/encounter-viewer/encounter-viewer.service.d.ts +16 -0
  40. package/esm2015/abstract-controls-extension/afe-control-type.js +2 -1
  41. package/esm2015/abstract-controls-extension/afe-form-array.js +2 -1
  42. package/esm2015/abstract-controls-extension/afe-form-control.js +2 -1
  43. package/esm2015/abstract-controls-extension/afe-form-group.js +2 -1
  44. package/esm2015/abstract-controls-extension/control-extensions.js +2 -1
  45. package/esm2015/abstract-controls-extension/index.js +2 -1
  46. package/esm2015/abstract-controls-extension/value-change.listener.js +2 -2
  47. package/esm2015/ampath-kenya-ngx-openmrs-formentry.js +40 -65
  48. package/esm2015/change-tracking/control-relation.js +2 -1
  49. package/esm2015/change-tracking/control-relations.js +2 -1
  50. package/esm2015/components/afe-ng-select.component.js +3 -2
  51. package/esm2015/components/appointments-overview/appointments-overview.component.js +78 -33
  52. package/esm2015/components/check-box/checkbox.component.js +24 -3
  53. package/esm2015/components/check-box/checkbox.module.js +3 -2
  54. package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +93 -4
  55. package/esm2015/components/date-time-picker/date-time-picker.component.js +109 -5
  56. package/esm2015/components/date-time-picker/date-time-picker.module.js +3 -2
  57. package/esm2015/components/date-time-picker/picker-modal/modal.component.js +13 -5
  58. package/esm2015/components/date-time-picker/pipes/moment.pipe.js +3 -2
  59. package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +51 -4
  60. package/esm2015/components/file-upload/file-upload.component.js +130 -0
  61. package/esm2015/components/file-upload/file-upload.module.js +28 -0
  62. package/esm2015/components/file-upload/secure.pipe.js +5 -3
  63. package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +259 -0
  64. package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +43 -0
  65. package/esm2015/components/ngx-time-picker/ngx-time-picker.component.js +78 -0
  66. package/esm2015/components/ngx-time-picker/ngx-time-picker.module.js +16 -0
  67. package/esm2015/components/remote-select/remote-select.component.js +171 -0
  68. package/esm2015/components/remote-select/remote-select.module.js +18 -0
  69. package/esm2015/components/select/diacritics.js +856 -0
  70. package/esm2015/components/select/option-list.js +180 -0
  71. package/esm2015/components/select/option.js +30 -0
  72. package/esm2015/components/select/select-dropdown.component.js +162 -0
  73. package/esm2015/components/select/select-dropdown.component.style.js +59 -0
  74. package/esm2015/components/select/select.component.js +493 -216
  75. package/esm2015/components/select/select.component.style.js +102 -0
  76. package/esm2015/components/select/select.module.js +11 -24
  77. package/esm2015/encounter-viewer/display-controls/file-preview.component.js +111 -0
  78. package/esm2015/encounter-viewer/display-controls/question-control.component.js +94 -0
  79. package/esm2015/encounter-viewer/display-controls/remote-answer.component.js +81 -0
  80. package/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +50 -0
  81. package/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +437 -0
  82. package/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +301 -0
  83. package/esm2015/encounter-viewer/encounter-viewer.module.js +36 -0
  84. package/esm2015/encounter-viewer/encounter-viewer.service.js +162 -0
  85. package/esm2015/form-entry/control-alerts/alert-helpers.js +2 -1
  86. package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -2
  87. package/esm2015/form-entry/control-calculators/can-calculate.js +2 -2
  88. package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -2
  89. package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -2
  90. package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +2 -1
  91. package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +2 -1
  92. package/esm2015/form-entry/data-sources/data-sources.js +5 -3
  93. package/esm2015/form-entry/data-sources/dummy-data-source.js +2 -1
  94. package/esm2015/form-entry/directives/historical-value-directive.js +4 -2
  95. package/esm2015/form-entry/error-renderer/error-renderer.component.js +20 -4
  96. package/esm2015/form-entry/expression-runner/expression-runner.js +13 -16
  97. package/esm2015/form-entry/form-entry.module.js +29 -25
  98. package/esm2015/form-entry/form-factory/control-relations.factory.js +4 -2
  99. package/esm2015/form-entry/form-factory/form-control.service.js +4 -2
  100. package/esm2015/form-entry/form-factory/form-node.js +2 -4
  101. package/esm2015/form-entry/form-factory/form.factory.js +4 -2
  102. package/esm2015/form-entry/form-factory/form.js +2 -1
  103. package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +4 -2
  104. package/esm2015/form-entry/form-factory/question.factory.js +158 -23
  105. package/esm2015/form-entry/form-factory/show-messages.factory.js +4 -2
  106. package/esm2015/form-entry/form-factory/validation.factory.js +4 -2
  107. package/esm2015/form-entry/form-renderer/form-renderer.component.css.js +8 -12
  108. package/esm2015/form-entry/form-renderer/form-renderer.component.js +458 -9
  109. package/esm2015/form-entry/helpers/historical-expression-helper-service.js +4 -2
  110. package/esm2015/form-entry/helpers/historical-field-helper-service.js +2 -5
  111. package/esm2015/form-entry/helpers/js-expression-helper.js +2 -5
  112. package/esm2015/form-entry/question-models/checkbox.model.js +2 -1
  113. package/esm2015/form-entry/question-models/conditional-validation.model.js +2 -1
  114. package/esm2015/form-entry/question-models/date-question.js +3 -1
  115. package/esm2015/form-entry/question-models/date-validation.model.js +2 -1
  116. package/esm2015/form-entry/question-models/decimal-point-validation.model.js +20 -0
  117. package/esm2015/form-entry/question-models/file-upload-question.js +2 -1
  118. package/esm2015/form-entry/question-models/group-question.js +2 -1
  119. package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -2
  120. package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -2
  121. package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -2
  122. package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -2
  123. package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -2
  124. package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -2
  125. package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -2
  126. package/esm2015/form-entry/question-models/interfaces/nested-questions.js +2 -1
  127. package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -2
  128. package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -2
  129. package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -2
  130. package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -2
  131. package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -2
  132. package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -2
  133. package/esm2015/form-entry/question-models/interfaces/time-question-options.js +2 -0
  134. package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -2
  135. package/esm2015/form-entry/question-models/js-expression-validation.model.js +2 -1
  136. package/esm2015/form-entry/question-models/max-validation.model.js +2 -1
  137. package/esm2015/form-entry/question-models/min-validation.model.js +2 -1
  138. package/esm2015/form-entry/question-models/models.js +2 -1
  139. package/esm2015/form-entry/question-models/multi-select-question.js +2 -1
  140. package/esm2015/form-entry/question-models/pair.model.js +2 -1
  141. package/esm2015/form-entry/question-models/question-base.js +2 -1
  142. package/esm2015/form-entry/question-models/rendering-type.js +2 -1
  143. package/esm2015/form-entry/question-models/repeating-question.js +2 -1
  144. package/esm2015/form-entry/question-models/select-option.js +2 -1
  145. package/esm2015/form-entry/question-models/select-question.js +2 -1
  146. package/esm2015/form-entry/question-models/test-order-question.js +2 -1
  147. package/esm2015/form-entry/question-models/text-area-input-question.js +2 -1
  148. package/esm2015/form-entry/question-models/text-input-question.js +2 -1
  149. package/esm2015/form-entry/question-models/time-question.js +11 -0
  150. package/esm2015/form-entry/question-models/ui-select-question.js +2 -1
  151. package/esm2015/form-entry/question-models/validation.model.js +2 -1
  152. package/esm2015/form-entry/services/debug-mode.service.js +4 -2
  153. package/esm2015/form-entry/services/form-errors.service.js +3 -2
  154. package/esm2015/form-entry/services/form-schema-compiler.service.js +4 -2
  155. package/esm2015/form-entry/services/historical-encounter-data.service.js +4 -2
  156. package/esm2015/form-entry/utils/messages.js +2 -1
  157. package/esm2015/form-entry/validators/conditional-answered.validator.js +2 -1
  158. package/esm2015/form-entry/validators/conditional-required.validator.js +2 -1
  159. package/esm2015/form-entry/validators/date.validator.js +2 -1
  160. package/esm2015/form-entry/validators/future-date-restriction.validator.js +2 -1
  161. package/esm2015/form-entry/validators/js-expression.validator.js +2 -1
  162. package/esm2015/form-entry/validators/max-date.validator.js +2 -1
  163. package/esm2015/form-entry/validators/max.validator.js +2 -1
  164. package/esm2015/form-entry/validators/min-date.validator.js +2 -1
  165. package/esm2015/form-entry/validators/min.validator.js +2 -1
  166. package/esm2015/form-entry/validators/required.validator.js +2 -1
  167. package/esm2015/form-entry/validators/validations.js +2 -1
  168. package/esm2015/form-entry/value-adapters/encounter.adapter.js +5 -3
  169. package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +5 -11
  170. package/esm2015/form-entry/value-adapters/obs.adapter.js +5 -6
  171. package/esm2015/form-entry/value-adapters/order.adapter.js +3 -2
  172. package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +8 -3
  173. package/esm2015/form-entry/value-adapters/value.adapter.js +2 -2
  174. package/esm2015/public_api.js +52 -2
  175. package/esm2015/shared.module.js +3 -2
  176. package/esm5/abstract-controls-extension/afe-control-type.js +9 -0
  177. package/esm5/abstract-controls-extension/afe-form-array.js +99 -0
  178. package/esm5/abstract-controls-extension/afe-form-control.js +97 -0
  179. package/esm5/abstract-controls-extension/afe-form-group.js +71 -0
  180. package/esm5/abstract-controls-extension/control-extensions.js +6 -0
  181. package/esm5/abstract-controls-extension/index.js +6 -0
  182. package/esm5/abstract-controls-extension/value-change.listener.js +2 -0
  183. package/esm5/ampath-kenya-ngx-openmrs-formentry.js +45 -0
  184. package/esm5/change-tracking/control-relation.js +60 -0
  185. package/esm5/change-tracking/control-relations.js +47 -0
  186. package/esm5/components/afe-ng-select.component.js +88 -0
  187. package/esm5/components/appointments-overview/appointments-overview.component.js +127 -0
  188. package/esm5/components/check-box/checkbox.component.js +89 -0
  189. package/esm5/components/check-box/checkbox.module.js +19 -0
  190. package/esm5/components/date-time-picker/date-picker/date-picker.component.js +188 -0
  191. package/esm5/components/date-time-picker/date-time-picker.component.js +113 -0
  192. package/esm5/components/date-time-picker/date-time-picker.module.js +39 -0
  193. package/esm5/components/date-time-picker/picker-modal/modal.component.js +34 -0
  194. package/esm5/components/date-time-picker/pipes/moment.pipe.js +18 -0
  195. package/esm5/components/date-time-picker/time-picker/time-picker.component.js +119 -0
  196. package/esm5/components/file-upload/file-upload.component.js +128 -0
  197. package/esm5/components/file-upload/file-upload.module.js +32 -0
  198. package/esm5/components/file-upload/secure.pipe.js +107 -0
  199. package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +221 -0
  200. package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +47 -0
  201. package/esm5/components/ngx-time-picker/ngx-time-picker.component.js +74 -0
  202. package/esm5/components/ngx-time-picker/ngx-time-picker.module.js +20 -0
  203. package/esm5/components/remote-select/remote-select.component.js +165 -0
  204. package/esm5/components/remote-select/remote-select.module.js +22 -0
  205. package/esm5/components/select/diacritics.js +861 -0
  206. package/esm5/components/select/option-list.js +225 -0
  207. package/esm5/components/select/option.js +32 -0
  208. package/esm5/components/select/select-dropdown.component.js +132 -0
  209. package/esm5/components/select/select-dropdown.component.style.js +3 -0
  210. package/esm5/components/select/select.component.js +457 -0
  211. package/esm5/components/select/select.component.style.js +3 -0
  212. package/esm5/components/select/select.module.js +20 -0
  213. package/esm5/encounter-viewer/display-controls/file-preview.component.js +111 -0
  214. package/esm5/encounter-viewer/display-controls/question-control.component.js +106 -0
  215. package/esm5/encounter-viewer/display-controls/remote-answer.component.js +88 -0
  216. package/esm5/encounter-viewer/encounter-container/encounter-container.component.js +47 -0
  217. package/esm5/encounter-viewer/encounter-pdf-viewer.service.js +523 -0
  218. package/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +187 -0
  219. package/esm5/encounter-viewer/encounter-viewer.module.js +40 -0
  220. package/esm5/encounter-viewer/encounter-viewer.service.js +167 -0
  221. package/esm5/form-entry/control-alerts/alert-helpers.js +45 -0
  222. package/esm5/form-entry/control-alerts/can-generate-alert.js +2 -0
  223. package/esm5/form-entry/control-calculators/can-calculate.js +2 -0
  224. package/esm5/form-entry/control-hiders-disablers/can-disable.js +2 -0
  225. package/esm5/form-entry/control-hiders-disablers/can-hide.js +2 -0
  226. package/esm5/form-entry/control-hiders-disablers/disabler-helper.js +38 -0
  227. package/esm5/form-entry/control-hiders-disablers/hider-helpers.js +45 -0
  228. package/esm5/form-entry/data-sources/data-sources.js +39 -0
  229. package/esm5/form-entry/data-sources/dummy-data-source.js +107 -0
  230. package/esm5/form-entry/directives/historical-value-directive.js +74 -0
  231. package/esm5/form-entry/error-renderer/error-renderer.component.js +64 -0
  232. package/esm5/form-entry/expression-runner/expression-runner.js +159 -0
  233. package/esm5/form-entry/form-entry.module.js +111 -0
  234. package/esm5/form-entry/form-factory/control-relations.factory.js +245 -0
  235. package/esm5/form-entry/form-factory/form-control.service.js +122 -0
  236. package/esm5/form-entry/form-factory/form-node.js +117 -0
  237. package/esm5/form-entry/form-factory/form.factory.js +138 -0
  238. package/esm5/form-entry/form-factory/form.js +214 -0
  239. package/esm5/form-entry/form-factory/hiders-disablers.factory.js +70 -0
  240. package/esm5/form-entry/form-factory/question.factory.js +980 -0
  241. package/esm5/form-entry/form-factory/show-messages.factory.js +34 -0
  242. package/esm5/form-entry/form-factory/validation.factory.js +191 -0
  243. package/esm5/form-entry/form-renderer/form-renderer.component.css.js +3 -0
  244. package/esm5/form-entry/form-renderer/form-renderer.component.js +219 -0
  245. package/esm5/form-entry/helpers/historical-expression-helper-service.js +43 -0
  246. package/esm5/form-entry/helpers/historical-field-helper-service.js +37 -0
  247. package/esm5/form-entry/helpers/js-expression-helper.js +243 -0
  248. package/esm5/form-entry/question-models/checkbox.model.js +17 -0
  249. package/esm5/form-entry/question-models/conditional-validation.model.js +15 -0
  250. package/esm5/form-entry/question-models/date-question.js +19 -0
  251. package/esm5/form-entry/question-models/date-validation.model.js +16 -0
  252. package/esm5/form-entry/question-models/decimal-point-validation.model.js +22 -0
  253. package/esm5/form-entry/question-models/file-upload-question.js +19 -0
  254. package/esm5/form-entry/question-models/group-question.js +18 -0
  255. package/esm5/form-entry/question-models/interfaces/base-options.js +2 -0
  256. package/esm5/form-entry/question-models/interfaces/checkbox-options.js +2 -0
  257. package/esm5/form-entry/question-models/interfaces/data-source.js +2 -0
  258. package/esm5/form-entry/question-models/interfaces/date-question-options.js +2 -0
  259. package/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
  260. package/esm5/form-entry/question-models/interfaces/group-question-options.js +2 -0
  261. package/esm5/form-entry/question-models/interfaces/multi-select-options.js +2 -0
  262. package/esm5/form-entry/question-models/interfaces/nested-questions.js +12 -0
  263. package/esm5/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
  264. package/esm5/form-entry/question-models/interfaces/select-option.js +2 -0
  265. package/esm5/form-entry/question-models/interfaces/select-question-options.js +2 -0
  266. package/esm5/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
  267. package/esm5/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
  268. package/esm5/form-entry/question-models/interfaces/text-question-options.js +2 -0
  269. package/esm5/form-entry/question-models/interfaces/time-question-options.js +2 -0
  270. package/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
  271. package/esm5/form-entry/question-models/js-expression-validation.model.js +14 -0
  272. package/esm5/form-entry/question-models/max-validation.model.js +15 -0
  273. package/esm5/form-entry/question-models/min-validation.model.js +15 -0
  274. package/esm5/form-entry/question-models/models.js +13 -0
  275. package/esm5/form-entry/question-models/multi-select-question.js +17 -0
  276. package/esm5/form-entry/question-models/pair.model.js +10 -0
  277. package/esm5/form-entry/question-models/question-base.js +27 -0
  278. package/esm5/form-entry/question-models/rendering-type.js +10 -0
  279. package/esm5/form-entry/question-models/repeating-question.js +17 -0
  280. package/esm5/form-entry/question-models/select-option.js +10 -0
  281. package/esm5/form-entry/question-models/select-question.js +18 -0
  282. package/esm5/form-entry/question-models/test-order-question.js +21 -0
  283. package/esm5/form-entry/question-models/text-area-input-question.js +19 -0
  284. package/esm5/form-entry/question-models/text-input-question.js +16 -0
  285. package/esm5/form-entry/question-models/time-question.js +16 -0
  286. package/esm5/form-entry/question-models/ui-select-question.js +17 -0
  287. package/esm5/form-entry/question-models/validation.model.js +10 -0
  288. package/esm5/form-entry/services/debug-mode.service.js +26 -0
  289. package/esm5/form-entry/services/form-errors.service.js +21 -0
  290. package/esm5/form-entry/services/form-schema-compiler.service.js +254 -0
  291. package/esm5/form-entry/services/historical-encounter-data.service.js +180 -0
  292. package/esm5/form-entry/utils/messages.js +17 -0
  293. package/esm5/form-entry/validators/conditional-answered.validator.js +50 -0
  294. package/esm5/form-entry/validators/conditional-required.validator.js +44 -0
  295. package/esm5/form-entry/validators/date.validator.js +22 -0
  296. package/esm5/form-entry/validators/future-date-restriction.validator.js +25 -0
  297. package/esm5/form-entry/validators/js-expression.validator.js +30 -0
  298. package/esm5/form-entry/validators/max-date.validator.js +28 -0
  299. package/esm5/form-entry/validators/max.validator.js +22 -0
  300. package/esm5/form-entry/validators/min-date.validator.js +28 -0
  301. package/esm5/form-entry/validators/min.validator.js +22 -0
  302. package/esm5/form-entry/validators/required.validator.js +16 -0
  303. package/esm5/form-entry/validators/validations.js +9 -0
  304. package/esm5/form-entry/value-adapters/encounter.adapter.js +178 -0
  305. package/esm5/form-entry/value-adapters/obs-adapter-helper.js +509 -0
  306. package/esm5/form-entry/value-adapters/obs.adapter.js +737 -0
  307. package/esm5/form-entry/value-adapters/order.adapter.js +227 -0
  308. package/esm5/form-entry/value-adapters/person-attribute.adapter.js +96 -0
  309. package/esm5/form-entry/value-adapters/value.adapter.js +2 -0
  310. package/esm5/public_api.js +52 -0
  311. package/esm5/shared.module.js +20 -0
  312. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +5093 -6889
  313. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
  314. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +10737 -0
  315. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
  316. package/form-entry/data-sources/data-sources.d.ts +1 -1
  317. package/form-entry/directives/historical-value-directive.d.ts +2 -2
  318. package/form-entry/error-renderer/error-renderer.component.d.ts +1 -1
  319. package/form-entry/expression-runner/expression-runner.d.ts +6 -6
  320. package/form-entry/form-factory/form-control.service.d.ts +3 -3
  321. package/form-entry/form-factory/form-node.d.ts +9 -10
  322. package/form-entry/form-factory/form.d.ts +6 -7
  323. package/form-entry/form-factory/question.factory.d.ts +7 -1
  324. package/form-entry/form-factory/validation.factory.d.ts +10 -10
  325. package/form-entry/form-renderer/form-renderer.component.css.d.ts +1 -1
  326. package/form-entry/form-renderer/form-renderer.component.d.ts +4 -6
  327. package/form-entry/helpers/js-expression-helper.d.ts +1 -1
  328. package/form-entry/question-models/date-question.d.ts +2 -0
  329. package/form-entry/question-models/decimal-point-validation.model.d.ts +10 -0
  330. package/form-entry/question-models/interfaces/base-options.d.ts +1 -0
  331. package/form-entry/question-models/interfaces/time-question-options.d.ts +3 -0
  332. package/form-entry/question-models/question-base.d.ts +4 -0
  333. package/form-entry/question-models/rendering-type.d.ts +1 -1
  334. package/form-entry/question-models/time-question.d.ts +5 -0
  335. package/form-entry/services/form-errors.service.d.ts +2 -1
  336. package/form-entry/services/form-schema-compiler.service.d.ts +16 -16
  337. package/form-entry/services/historical-encounter-data.service.d.ts +3 -3
  338. package/form-entry/utils/messages.d.ts +9 -9
  339. package/form-entry/value-adapters/encounter.adapter.d.ts +2 -2
  340. package/form-entry/value-adapters/order.adapter.d.ts +9 -9
  341. package/form-entry/value-adapters/person-attribute.adapter.d.ts +1 -1
  342. package/package.json +18 -16
  343. package/public_api.d.ts +50 -1
  344. package/components/input/input.directive.d.ts +0 -28
  345. package/components/input/input.module.d.ts +0 -2
  346. package/components/input/label.component.d.ts +0 -87
  347. package/components/input/text-area.directive.d.ts +0 -21
  348. package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +0 -13
  349. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +0 -189
  350. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +0 -15
  351. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +0 -73
  352. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +0 -5
  353. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +0 -7
  354. package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +0 -77
  355. package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +0 -139
  356. package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +0 -109
  357. package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +0 -120
  358. package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +0 -141
  359. package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +0 -90
  360. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +0 -122
  361. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +0 -152
  362. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +0 -51
  363. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +0 -21
  364. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +0 -8
  365. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +0 -157
  366. package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +0 -86
  367. package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +0 -5
  368. package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +0 -7
  369. package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +0 -35
  370. package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +0 -129
  371. package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +0 -93
  372. package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +0 -56
  373. package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +0 -49
  374. package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +0 -5
  375. package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +0 -70
  376. package/components/ngx-pick-datetime/lib/utils/index.d.ts +0 -4
  377. package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +0 -11
  378. package/components/ngx-remote-select/ngx-remote-select.module.d.ts +0 -2
  379. package/components/ngx-tabset/components/tab-set.d.ts +0 -15
  380. package/components/ngx-tabset/components/tab.d.ts +0 -10
  381. package/components/ngx-tabset/directives/hover-class.directive.d.ts +0 -8
  382. package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +0 -11
  383. package/components/number-input/number-input.component.d.ts +0 -148
  384. package/components/number-input/number-input.module.d.ts +0 -2
  385. package/components/select/optgroup.directive.d.ts +0 -3
  386. package/components/select/option.directive.d.ts +0 -3
  387. package/esm2015/components/input/input.directive.js +0 -55
  388. package/esm2015/components/input/input.module.js +0 -29
  389. package/esm2015/components/input/label.component.js +0 -139
  390. package/esm2015/components/input/text-area.directive.js +0 -40
  391. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +0 -52
  392. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +0 -28
  393. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +0 -115
  394. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +0 -7
  395. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +0 -346
  396. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +0 -10
  397. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +0 -30
  398. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +0 -149
  399. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +0 -432
  400. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +0 -353
  401. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +0 -362
  402. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +0 -337
  403. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +0 -252
  404. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +0 -379
  405. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +0 -601
  406. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +0 -60
  407. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +0 -69
  408. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +0 -21
  409. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +0 -515
  410. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +0 -154
  411. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +0 -63
  412. package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +0 -24
  413. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +0 -83
  414. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +0 -293
  415. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +0 -56
  416. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +0 -208
  417. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +0 -113
  418. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +0 -29
  419. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +0 -228
  420. package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +0 -5
  421. package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +0 -26
  422. package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +0 -119
  423. package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +0 -18
  424. package/esm2015/components/ngx-tabset/components/tab-set.js +0 -67
  425. package/esm2015/components/ngx-tabset/components/tab.js +0 -38
  426. package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +0 -26
  427. package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +0 -40
  428. package/esm2015/components/number-input/number-input.component.js +0 -203
  429. package/esm2015/components/number-input/number-input.module.js +0 -15
  430. package/esm2015/components/select/optgroup.directive.js +0 -17
  431. package/esm2015/components/select/option.directive.js +0 -17
  432. package/esm2015/form-entry/directives/collapse-animations.js +0 -11
  433. package/esm2015/form-entry/directives/collapse.directive.js +0 -157
  434. package/esm2015/form-entry/pipes/time-ago.pipe.js +0 -107
  435. package/esm2015/lib/index.js +0 -49
  436. package/form-entry/directives/collapse-animations.d.ts +0 -4
  437. package/form-entry/directives/collapse.directive.d.ts +0 -42
  438. package/form-entry/pipes/time-ago.pipe.d.ts +0 -11
  439. package/lib/index.d.ts +0 -49
  440. package/styles/ngx-formentry.css +0 -317
  441. package/styles/picker.min.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ampath-kenya-ngx-openmrs-formentry.js","sources":["../../../projects/ngx-formentry/src/form-entry/services/debug-mode.service.ts","../../../projects/ngx-formentry/src/form-entry/pipes/time-ago.pipe.ts","../../../projects/ngx-formentry/src/form-entry/services/form-errors.service.ts","../../../projects/ngx-formentry/src/change-tracking/control-relation.ts","../../../projects/ngx-formentry/src/change-tracking/control-relations.ts","../../../projects/ngx-formentry/src/form-entry/control-hiders-disablers/hider-helpers.ts","../../../projects/ngx-formentry/src/form-entry/control-alerts/alert-helpers.ts","../../../projects/ngx-formentry/src/form-entry/control-hiders-disablers/disabler-helper.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/form-node.ts","../../../projects/ngx-formentry/src/form-entry/question-models/validation.model.ts","../../../projects/ngx-formentry/src/form-entry/question-models/js-expression-validation.model.ts","../../../projects/ngx-formentry/src/form-entry/question-models/conditional-validation.model.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/control-relations.factory.ts","../../../projects/ngx-formentry/src/form-entry/expression-runner/expression-runner.ts","../../../projects/ngx-formentry/src/abstract-controls-extension/afe-form-control.ts","../../../projects/ngx-formentry/src/abstract-controls-extension/afe-form-group.ts","../../../projects/ngx-formentry/src/abstract-controls-extension/afe-form-array.ts","../../../projects/ngx-formentry/src/abstract-controls-extension/afe-control-type.ts","../../../projects/ngx-formentry/src/form-entry/question-models/question-base.ts","../../../projects/ngx-formentry/src/form-entry/validators/conditional-required.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/conditional-answered.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/required.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/date.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/min.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/max.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/min-date.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/max-date.validator.ts","../../../projects/ngx-formentry/src/form-entry/validators/future-date-restriction.validator.ts","../../../projects/ngx-formentry/src/form-entry/helpers/js-expression-helper.ts","../../../projects/ngx-formentry/src/form-entry/validators/validations.ts","../../../projects/ngx-formentry/src/form-entry/validators/js-expression.validator.ts","../../../projects/ngx-formentry/src/form-entry/utils/messages.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/validation.factory.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/hiders-disablers.factory.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/show-messages.factory.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/form-control.service.ts","../../../projects/ngx-formentry/src/form-entry/form-renderer/form-renderer.component.css.ts","../../../projects/ngx-formentry/src/form-entry/data-sources/data-sources.ts","../../../projects/ngx-formentry/src/form-entry/form-renderer/form-renderer.component.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/form.ts","../../../projects/ngx-formentry/src/form-entry/error-renderer/error-renderer.component.ts","../../../projects/ngx-formentry/src/form-entry/helpers/historical-field-helper-service.ts","../../../projects/ngx-formentry/src/form-entry/directives/historical-value-directive.ts","../../../projects/ngx-formentry/src/form-entry/directives/collapse-animations.ts","../../../projects/ngx-formentry/src/form-entry/directives/collapse.directive.ts","../../../projects/ngx-formentry/src/components/number-input/number-input.component.ts","../../../projects/ngx-formentry/src/components/number-input/number-input.module.ts","../../../projects/ngx-formentry/src/components/date-time-picker/date-picker/date-picker.component.ts","../../../projects/ngx-formentry/src/components/date-time-picker/time-picker/time-picker.component.ts","../../../projects/ngx-formentry/src/components/date-time-picker/picker-modal/modal.component.ts","../../../projects/ngx-formentry/src/components/date-time-picker/pipes/moment.pipe.ts","../../../projects/ngx-formentry/src/components/date-time-picker/date-time-picker.component.ts","../../../projects/ngx-formentry/src/components/date-time-picker/date-time-picker.module.ts","../../../projects/ngx-formentry/src/components/ngx-datetime-picker/ngx-datetime-picker.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/calendar.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/timer.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time.class.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/dialog/dialog-config.class.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/dialog/dialog-container.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/utils/object.utils.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/utils/index.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/dialog/dialog.service.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/calendar-body.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/timer-box.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/dialog/dialog.module.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/date-time.module.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.ts","../../../projects/ngx-formentry/src/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.ts","../../../projects/ngx-formentry/src/components/ngx-datetime-picker/ngx-datetime-picker.module.ts","../../../projects/ngx-formentry/src/form-entry/question-models/select-option.ts","../../../projects/ngx-formentry/src/components/afe-ng-select.component.ts","../../../projects/ngx-formentry/src/form-entry/services/form-schema-compiler.service.ts","../../../projects/ngx-formentry/src/form-entry/question-models/text-input-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/text-area-input-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/select-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/ui-select-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/date-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/multi-select-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/interfaces/nested-questions.ts","../../../projects/ngx-formentry/src/form-entry/question-models/group-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/repeating-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/checkbox.model.ts","../../../projects/ngx-formentry/src/form-entry/question-models/file-upload-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/test-order-question.ts","../../../projects/ngx-formentry/src/form-entry/question-models/date-validation.model.ts","../../../projects/ngx-formentry/src/form-entry/question-models/max-validation.model.ts","../../../projects/ngx-formentry/src/form-entry/question-models/min-validation.model.ts","../../../projects/ngx-formentry/src/form-entry/data-sources/dummy-data-source.ts","../../../projects/ngx-formentry/src/form-entry/services/historical-encounter-data.service.ts","../../../projects/ngx-formentry/src/form-entry/helpers/historical-expression-helper-service.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/question.factory.ts","../../../projects/ngx-formentry/src/form-entry/form-factory/form.factory.ts","../../../projects/ngx-formentry/src/form-entry/value-adapters/obs-adapter-helper.ts","../../../projects/ngx-formentry/src/form-entry/value-adapters/obs.adapter.ts","../../../projects/ngx-formentry/src/form-entry/value-adapters/order.adapter.ts","../../../projects/ngx-formentry/src/form-entry/value-adapters/encounter.adapter.ts","../../../projects/ngx-formentry/src/form-entry/value-adapters/person-attribute.adapter.ts","../../../projects/ngx-formentry/src/components/ngx-remote-select/ngx-remote-select.component.ts","../../../projects/ngx-formentry/src/components/ngx-remote-select/ngx-remote-select.module.ts","../../../projects/ngx-formentry/src/components/appointments-overview/appointments-overview.component.ts","../../../projects/ngx-formentry/src/components/check-box/checkbox.component.ts","../../../projects/ngx-formentry/src/components/check-box/checkbox.module.ts","../../../projects/ngx-formentry/src/components/file-upload/secure.pipe.ts","../../../projects/ngx-formentry/src/shared.module.ts","../../../projects/ngx-formentry/src/components/ngx-tabset/components/tab.ts","../../../projects/ngx-formentry/src/components/ngx-tabset/components/tab-set.ts","../../../projects/ngx-formentry/src/components/ngx-tabset/directives/hover-class.directive.ts","../../../projects/ngx-formentry/src/components/ngx-tabset/modules/ngx-tabset.module.ts","../../../projects/ngx-formentry/src/components/select/select.component.ts","../../../projects/ngx-formentry/src/components/select/option.directive.ts","../../../projects/ngx-formentry/src/components/select/optgroup.directive.ts","../../../projects/ngx-formentry/src/components/select/select.module.ts","../../../projects/ngx-formentry/src/components/input/text-area.directive.ts","../../../projects/ngx-formentry/src/components/input/label.component.ts","../../../projects/ngx-formentry/src/components/input/input.directive.ts","../../../projects/ngx-formentry/src/components/input/input.module.ts","../../../projects/ngx-formentry/src/form-entry/form-entry.module.ts","../../../projects/ngx-formentry/src/form-entry/question-models/pair.model.ts","../../../projects/ngx-formentry/src/form-entry/question-models/rendering-type.ts","../../../projects/ngx-formentry/src/lib/index.ts","../../../projects/ngx-formentry/src/ampath-kenya-ngx-openmrs-formentry.ts"],"sourcesContent":["/*\nThis service checks if the debug mode on ng2-amrs\nhas been enabled by checking cookies.\nIf the debug mode has been enabled then\nit returns true and all fields are displayed\nfor use by testers\n*/\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DebugModeService {\n public cookieKey = 'formDebug';\n\n constructor() {}\n public debugEnabled(): boolean {\n // check if the hidefield\n return false;\n }\n}\n","import {\n Pipe,\n PipeTransform,\n NgZone,\n ChangeDetectorRef,\n OnDestroy,\n } from \"@angular/core\";\n @Pipe({\n name: \"timeAgo\",\n pure: false,\n })\n export class TimeAgoPipe implements PipeTransform, OnDestroy {\n private timer: number;\n constructor(\n private changeDetectorRef: ChangeDetectorRef,\n private ngZone: NgZone\n ) {}\n transform(value: string) {\n this.removeTimer();\n const d = new Date(value);\n const now = new Date();\n const seconds = Math.round(Math.abs((now.getTime() - d.getTime()) / 1000));\n const timeToUpdate = Number.isNaN(seconds)\n ? 1000\n : this.getSecondsUntilUpdate(seconds) * 1000;\n this.timer = this.ngZone.runOutsideAngular(() => {\n if (typeof window !== \"undefined\") {\n return window.setTimeout(() => {\n this.ngZone.run(() => this.changeDetectorRef.markForCheck());\n }, timeToUpdate);\n }\n return null;\n });\n const minutes = Math.round(Math.abs(seconds / 60));\n const hours = Math.round(Math.abs(minutes / 60));\n const days = Math.round(Math.abs(hours / 24));\n const months = Math.round(Math.abs(days / 30.416));\n const years = Math.round(Math.abs(days / 365));\n if (Number.isNaN(seconds)) {\n return \"\";\n } else if (seconds <= 45) {\n return \"a few seconds ago\";\n } else if (seconds <= 90) {\n return \"a minute ago\";\n } else if (minutes <= 45) {\n return minutes + \" minutes ago\";\n } else if (minutes <= 90) {\n return \"an hour ago\";\n } else if (hours <= 22) {\n return hours + \" hours ago\";\n } else if (hours <= 36) {\n return \"a day ago\";\n } else if (days <= 25) {\n return days + \" days ago\";\n } else if (days <= 45) {\n return \"a month ago\";\n } else if (days <= 345) {\n return months + \" months ago\";\n } else if (days <= 545) {\n return \"a year ago\";\n } else {\n // (days > 545)\n return years + \" years ago\";\n }\n }\n ngOnDestroy(): void {\n this.removeTimer();\n }\n private removeTimer() {\n if (this.timer) {\n window.clearTimeout(this.timer);\n this.timer = null;\n }\n }\n private getSecondsUntilUpdate(seconds: number) {\n const min = 60;\n const hr = min * 60;\n const day = hr * 24;\n if (seconds < min) {\n // less than 1 min, update every 2 secs\n return 2;\n } else if (seconds < hr) {\n // less than an hour, update every 30 secs\n return 30;\n } else if (seconds < day) {\n // less then a day, update every 5 mins\n return 300;\n } else {\n // update every hour\n return 3600;\n }\n }\n }\n\n","import { Injectable } from '@angular/core';\nimport { Subject , Observable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { AfeFormControl } from '../../public_api';\nimport { AfeFormArray, AfeFormGroup } from '../../abstract-controls-extension';\n\n@Injectable()\nexport class FormErrorsService {\n // Observable string sources\n public static control: AfeFormControl | AfeFormArray | AfeFormGroup = null;\n public static tab: number = null;\n public announceErrorFieldSource = new Subject<string>();\n public announceErrorField$: Observable<\n any\n > = this.announceErrorFieldSource.asObservable();\n public announceErrorField(error: string) {\n this.announceErrorFieldSource.next(error);\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\n// import { CanHide } from '../form-entry/control-hiders-disablers/can-hide';\n// import { CanDisable } from '../form-entry/control-hiders-disablers/can-disable';\n\nexport class ControlRelation {\n private _control: AbstractControl;\n private _relatedTo: AbstractControl;\n private _lastUpdateValue: any;\n\n constructor(control: AbstractControl, relatedTo: AbstractControl) {\n this._control = control;\n this._relatedTo = relatedTo;\n this._registerForChangesFromRelatedControl();\n }\n\n get control(): AbstractControl {\n return this._control;\n }\n\n get relatedTo(): AbstractControl {\n return this._relatedTo;\n }\n\n get lastUpdateValue(): any {\n return this._lastUpdateValue;\n }\n\n updateControlBasedOnRelation(newValue: any): boolean {\n if (newValue !== this._lastUpdateValue) {\n this._lastUpdateValue = newValue;\n\n if ((this._control as any).updateCalculatedValue) {\n (this._control as any).updateCalculatedValue();\n }\n\n this._control.updateValueAndValidity();\n if ((this._control as any).updateHiddenState) {\n (this._control as any).updateHiddenState();\n }\n\n if ((this._control as any).updateDisabledState) {\n (this._control as any).updateDisabledState();\n }\n\n if ((this._control as any).updateAlert) {\n (this._control as any).updateAlert();\n }\n return true;\n }\n return false;\n }\n\n private _registerForChangesFromRelatedControl() {\n this._relatedTo.valueChanges.subscribe((value) => {\n this.updateControlBasedOnRelation(value);\n });\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { ControlRelation } from './control-relation';\n\nexport class ControlRelations {\n private _relationFor: AbstractControl;\n private _relations: ControlRelation[];\n private _otherRelations: any = [];\n\n constructor(\n relationFor: AbstractControl,\n relatedTo?: AbstractControl | AbstractControl[]\n ) {\n this._relationFor = relationFor;\n this._relations = [];\n\n if (relatedTo) {\n this.addRelatedControls(relatedTo);\n }\n }\n\n get relationsFor(): AbstractControl {\n return this._relationFor;\n }\n\n get relations(): ControlRelation[] {\n return this._relations;\n }\n\n get otherRelations() {\n return this._otherRelations;\n }\n\n addRelatedControls(relatedTo: AbstractControl | AbstractControl[]) {\n if (relatedTo instanceof AbstractControl) {\n this.relations.push(new ControlRelation(this._relationFor, relatedTo));\n }\n\n if (relatedTo instanceof Array) {\n for (let i = 0; i < relatedTo.length; i++) {\n this.relations.push(\n new ControlRelation(this._relationFor, relatedTo[i])\n );\n }\n }\n }\n}\n","import { CanHide, Hider } from './can-hide';\nexport class HiderHelper {\n public hideControl(control: CanHide) {\n control.hidden = true;\n if (control.disable) {\n control.disable();\n }\n }\n\n public showControl(control: CanHide) {\n control.hidden = false;\n }\n\n public setHiderForControl(control: CanHide, hider: Hider) {\n control.hiders.push(hider);\n }\n\n public clearHidersForControl(control: CanHide) {\n control.hiders.splice(0);\n control.hidden = false;\n }\n\n public evaluateControlHiders(control: CanHide) {\n let hiddenValue = false;\n control.hiders.forEach((hider) => {\n hider.reEvaluateHidingExpression();\n if (hider.toHide === true) {\n hiddenValue = true;\n }\n });\n\n control.hidden = hiddenValue;\n if (control.hidden && control.disable) {\n control.disable();\n // control.setValue(null);\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanHide) {\n if (control.updateHiddenState) {\n control.valueChanges.subscribe((val) => {\n control.updateHiddenState();\n });\n }\n }\n}\n","import { CanGenerateAlert, Alert } from './can-generate-alert';\nexport class AlertHelper {\n public hideAlert(control: Alert) {\n control.shown = false;\n }\n\n public showAlert(control: Alert) {\n control.shown = true;\n }\n\n public setAlertsForControl(control: CanGenerateAlert, alert: Alert) {\n control.alerts.push(alert);\n }\n\n public clearAlertsForControl(control: CanGenerateAlert) {\n control.alerts.splice(0);\n control.alert = '';\n }\n\n public evaluateControlAlerts(control: CanGenerateAlert) {\n let messageValue = '';\n control.alerts.forEach((message) => {\n message.reEvaluateAlertExpression();\n if (message.shown === true) {\n messageValue = message.alertMessage;\n } else {\n messageValue = '';\n }\n });\n\n control.alert = messageValue;\n // if (control.message && control.disable) {\n // control.disable();\n // // control.setValue(null);\n // }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanGenerateAlert) {\n if (control.updateAlert) {\n control.valueChanges.subscribe((val) => {\n control.updateAlert();\n });\n }\n }\n}\n","import { CanDisable, Disabler } from './can-disable';\nexport class DisablerHelper {\n public setDisablerForControl(control: CanDisable, disabler: Disabler) {\n control.disablers.push(disabler);\n }\n\n public clearDisablersForControl(control: CanDisable) {\n control.disablers.splice(0);\n control.disable();\n }\n\n public evaluateControlDisablers(control: CanDisable) {\n let toDisable = false;\n control.disablers.forEach((hider) => {\n hider.reEvaluateDisablingExpression();\n if (hider.toDisable === true) {\n toDisable = true;\n }\n });\n\n // console.log('Control', control);\n\n if (toDisable) {\n control.disable();\n } else {\n control.enable();\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanDisable) {\n if (control.updateDisabledState) {\n control.valueChanges.subscribe((val) => {\n control.updateDisabledState();\n });\n }\n }\n}\n","\nimport { FormFactory } from './form.factory';\nimport { Form } from './form';\n\n// import { AfeControlType, AfeFormArray, AfeFormGroup, AfeFormControl } from '../../abstract-controls-extension';\nimport { QuestionBase, RepeatingQuestion } from '../question-models/models';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nexport interface ChildNodeCreatedListener {\n addChildNodeCreatedListener(func: any);\n\n fireChildNodeCreatedListener(node: GroupNode);\n}\n\nexport type CreateArrayChildNodeFunction = (\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n) => GroupNode;\n\nexport interface RemoveArrayChildNodeFunction {\n (index: number, node: ArrayNode);\n}\n\nexport abstract class NodeBase {\n public abstract children?: any;\n private _control: AfeFormControl | AfeFormArray | AfeFormGroup;\n private _questionModel: QuestionBase;\n private _form: Form;\n private _path: string;\n\n public initialValue: any;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n this._control = control;\n this._questionModel = question;\n this._form = form;\n this._path = parentPath ? parentPath + '.' + question.key : question.key;\n }\n\n public get question(): QuestionBase {\n return this._questionModel;\n }\n\n public get control(): AfeFormControl | AfeFormArray | AfeFormGroup {\n return this._control;\n }\n\n public get form(): Form {\n return this._form;\n }\n\n public get path(): string {\n return this._path;\n }\n removeAt(index: number) { }\n\n createChildNode() { }\n removeChildNode() { }\n}\n\nexport class LeafNode extends NodeBase {\n get children() {\n return null;\n }\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n }\n}\n\nexport class GroupNode extends NodeBase {\n private _children: any;\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = {};\n }\n\n public get children(): any {\n return this._children;\n }\n\n public setChild(key: string, node: NodeBase) {\n this.children[key] = node;\n }\n}\n\nexport class ArrayNode extends NodeBase implements ChildNodeCreatedListener {\n private childNodeCreatedEvents: any[] = [];\n private _children: GroupNode[];\n public createChildFunc: CreateArrayChildNodeFunction;\n public removeChildFunc: RemoveArrayChildNodeFunction;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n private formFactory?: FormFactory,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = [];\n this.childNodeCreatedEvents = [];\n }\n\n public get children(): GroupNode[] {\n return this._children;\n }\n\n public createChildNode(): GroupNode {\n if (this.createChildFunc) {\n const g: GroupNode = this.createChildFunc(\n this.question as RepeatingQuestion,\n this,\n this.formFactory\n );\n this.fireChildNodeCreatedListener(g);\n return g;\n }\n return null;\n }\n\n public removeAt(index: number) {\n const removePrompt = confirm('Are you sure you want to remove?');\n if (removePrompt) {\n if (this.removeChildFunc) {\n this.removeChildFunc(index, this);\n }\n }\n }\n\n addChildNodeCreatedListener(func: any) {\n this.childNodeCreatedEvents.push(func);\n }\n\n fireChildNodeCreatedListener(node: GroupNode) {\n for (let i = 0; i < this.childNodeCreatedEvents.length; i++) {\n const func: any = this.childNodeCreatedEvents[i];\n func(node);\n }\n }\n}\n","export class ValidationModel {\n type: string;\n\n message: string;\n\n constructor(validations: any) {\n this.type = validations.type;\n this.message = validations.message || null;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class JsExpressionValidationModel extends ValidationModel {\n failsWhenExpression: string;\n\n constructor(validations: any) {\n super(validations);\n this.failsWhenExpression = validations.failsWhenExpression;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class ConditionalValidationModel extends ValidationModel {\n referenceQuestionId: string;\n referenceQuestionAnswers: any;\n\n constructor(validations: any) {\n super(validations);\n this.referenceQuestionId = validations.referenceQuestionId;\n this.referenceQuestionAnswers = validations.referenceQuestionAnswers;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// import { ControlRelation } from '../../change-tracking/control-relation';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\nimport { Form } from './form';\n\n@Injectable()\nexport class ControlRelationsFactory {\n constructor() {}\n\n buildRelations(rootNode: GroupNode) {\n const controlsStore: any = this.mapControlIds(rootNode, {});\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key)) {\n const nodeBase: NodeBase = controlsStore[key];\n\n this.setRelations(controlsStore, nodeBase);\n }\n }\n }\n\n buildArrayNodeRelations(node: GroupNode) {\n const form: Form = node.form;\n\n if (!form) {\n return;\n }\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for controls in the same array\n this.buildRelations(node);\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const child: NodeBase = rootControlsStore[key];\n\n if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n this.setRelations(arrayControlStore, child);\n }\n }\n }\n }\n\n // define relations for controls outside the group to controls in this group\n this.createRelationsToArrayControls(node);\n\n // fire relations\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const child: NodeBase = arrayControlStore[id];\n const control: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n control.updateHiddenState();\n control.updateAlert();\n }\n }\n }\n\n createRelationsToArrayControls(node: GroupNode) {\n const form: Form = node.form;\n\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n // loop through form controls\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const rChild: NodeBase = rootControlsStore[key];\n\n const parentNodePath = node.path.substring(\n 0,\n node.path.lastIndexOf('.')\n );\n\n if (rChild.path.indexOf(parentNodePath + '.') === -1) {\n // loop through controls in the array group\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const aChild: NodeBase = arrayControlStore[id];\n const aChildId = aChild.question.key;\n if (this.hasRelation(aChildId, rChild.question)) {\n const nodes: Array<NodeBase> = node.form.searchNodeByPath(\n rootNode,\n parentNodePath,\n []\n );\n if (nodes.length > 0) {\n const an = nodes[0] as ArrayNode;\n const rootControl = rChild.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (\n rootControl.controlRelations.otherRelations.indexOf(an) ===\n -1\n ) {\n rootControl.controlRelations.otherRelations.push(an);\n }\n\n (aChild.control as\n | AfeFormControl\n | AfeFormArray).addValueChangeListener((value) => {\n if ((rootControl as any).updateCalculatedValue) {\n (rootControl as any).updateCalculatedValue();\n }\n\n rootControl.updateValueAndValidity();\n if ((rootControl as any).updateHiddenState) {\n (rootControl as any).updateHiddenState();\n }\n\n if ((rootControl as any).updateAlert) {\n (rootControl as any).updateAlert();\n }\n\n if ((rootControl as any).updateDisabledState) {\n (rootControl as any).updateDisabledState();\n }\n });\n }\n }\n }\n }\n }\n }\n }\n }\n\n getRelationsForControl(\n id,\n node: GroupNode\n ): Array<AfeFormControl | AfeFormArray> {\n const relations: Array<AfeFormControl | AfeFormArray> = new Array<\n AfeFormControl | AfeFormArray\n >();\n\n const nodeBaseArray: Array<NodeBase> = node.form.searchNodeByQuestionId(id);\n\n if (nodeBaseArray.length > 0) {\n const nodeBase: NodeBase = nodeBaseArray[0];\n\n const controlList: any = this.mapControlIds(node, {});\n\n for (const key in controlList) {\n if (controlList.hasOwnProperty(key)) {\n if (\n this.hasRelation(controlList[key].question.key, nodeBase.question)\n ) {\n relations.push(controlList[key].control);\n }\n }\n }\n }\n return relations;\n }\n\n mapControlIds(node: GroupNode, controlsStore: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.mapControlIds(child, controlsStore);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n } else if (child instanceof ArrayNode) {\n const questionBase: QuestionBase = (child as ArrayNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n }\n }\n }\n\n return controlsStore;\n }\n\n setRelations(controlsStore: any, nodeBase: NodeBase) {\n const questionBase: QuestionBase = nodeBase.question;\n\n const id = questionBase.key;\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key) && key !== id) {\n const node: NodeBase = controlsStore[key];\n const question: QuestionBase = node.question;\n\n if (this.hasRelation(id, question, nodeBase)) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n\n // add conditional required and conditional answered relations\n if (typeof question.required === 'object') {\n const required: any = question.required;\n\n if (required.type === 'conditionalRequired') {\n if (required.referenceQuestionId === id) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n }\n }\n }\n }\n }\n\n hasRelation(id: string, questionBase: QuestionBase, nodeBase?: NodeBase) {\n let hasRelation = false;\n\n if (questionBase.validators && questionBase.validators.length > 0) {\n questionBase.validators.forEach((element) => {\n if (element instanceof JsExpressionValidationModel) {\n const model: JsExpressionValidationModel = element as JsExpressionValidationModel;\n\n const failsWhenExpression: string = model.failsWhenExpression;\n if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (\n element instanceof ConditionalValidationModel &&\n element.type === 'conditionalAnswered' &&\n element.referenceQuestionId === id\n ) {\n hasRelation = true;\n }\n });\n }\n\n // add hiders and disablers relations\n if (!hasRelation) {\n if (typeof questionBase.hide === 'string') {\n const hide: string = questionBase.hide as string;\n\n if (hide.length > 0 && hide.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (typeof questionBase.hide === 'object') {\n const hideObj: any = questionBase.hide;\n\n if (hideObj.field === id) {\n hasRelation = true;\n }\n }\n\n if (questionBase.alert && typeof questionBase.alert === 'object') {\n hasRelation = true;\n }\n\n if (typeof questionBase.disable === 'string') {\n const disable: string = questionBase.disable as string;\n\n if (disable.length > 0 && disable.indexOf(id) !== -1) {\n hasRelation = true;\n }\n }\n }\n\n // add calculate expressions relations\n if (\n !hasRelation &&\n questionBase.calculateExpression &&\n questionBase.calculateExpression.length > 0 &&\n questionBase.calculateExpression.indexOf(id) !== -1\n ) {\n hasRelation = true;\n }\n\n return hasRelation;\n }\n\n addRelationToControl(\n control: AfeFormControl | AfeFormArray,\n related: AfeFormControl | AfeFormArray\n ) {\n // let relations = control.controlRelations.relations;\n //\n // let hasRelation = false;\n //\n // relations.forEach(element => {\n //\n // let controlRelation: ControlRelation = element as ControlRelation;\n //\n // let relation: AfeFormControl | AfeFormArray = controlRelation.control as AfeFormControl | AfeFormArray;\n //\n // if ( control.uuid !== undefined && control.uuid === relation.uuid ) {\n // hasRelation = true;\n // }\n // });\n\n // if ( !hasRelation ) {\n control.controlRelations.addRelatedControls(related);\n // }\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension/control-extensions';\nimport { ArrayNode } from '../form-factory/form-node';\nimport { ControlRelationsFactory } from '../form-factory/control-relations.factory';\nimport { Form } from '../form-factory/form';\nimport * as moment_ from 'moment';\nimport { Injectable } from \"@angular/core\";\n\nconst moment = moment_;\n@Injectable()\nexport class ExpressionRunner {\n getRunnable(\n expression: string,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n helper: any,\n dataDependencies: any,\n form?: Form\n ): Runnable {\n const runner = this;\n const runnable: Runnable = {\n run: () => {\n /* tslint:disable */\n let scope: any = {};\n if (control.uuid) {\n scope[control.uuid] = control.value;\n }\n window['moment'] = moment;\n // scope.moment = moment;\n scope['myValue'] = control.value;\n runner.getControlRelationValueString(control, scope);\n runner.getHelperMethods(helper, scope);\n runner.getDataDependencies(dataDependencies, scope);\n\n if (form) {\n // console.error('Form defined', form);\n runner.getDataDependencies(\n form.dataSourcesContainer.dataSources,\n scope\n );\n }\n\n let paramList = '';\n let argList = '';\n for (let o in scope) {\n paramList = paramList === '' ? paramList + o : paramList + ',' + o;\n argList =\n argList === ''\n ? argList + \"scope['\" + o + \"']\"\n : argList + \",scope['\" + o + \"']\";\n }\n\n // prevent more than one return statements\n if (expression.indexOf('return') === -1) {\n expression = 'return ' + expression;\n }\n const afeDynamicFunc = new Function(paramList, expression);\n scope[Symbol.iterator] = function* () {\n var k;\n for (k in this) {\n yield this[k];\n }\n };\n\n try {\n if (Object.keys(scope).indexOf('undefined') >= 0) {\n console.warn('Missing reference found', expression, scope);\n return false;\n }\n //console.log('Result====>',res)\n //console.log('results: ', eval(funcDeclarationCode + funcCallCode));\n return afeDynamicFunc.call(this, ...scope);\n } catch (e) {\n // if (window['error_count']) {\n // window['error_count'] = window['error_count'] + 1;\n // } else {\n // window['error_count'] = 1;\n // }\n // console.error(window['error_count'] + ' Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n // console.error('Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n\n // Uncomment the line above during debugging\n // console.error('Error running expression:' + expression, scope);\n\n return false;\n }\n /* tslint:enable */\n }\n };\n return runnable;\n }\n\n private getControlRelationValueString(\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n scope: any\n ) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n if (relation.relatedTo) {\n const related = relation.relatedTo as any;\n const relatedAsControl = relation.relatedTo as AbstractControl;\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n scope[related.uuid] = relation.relatedTo.value;\n } else {\n scope[related.uuid] =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.otherRelations &&\n control.controlRelations.otherRelations.length > 0\n ) {\n control.controlRelations.otherRelations.forEach((node) => {\n if (node instanceof ArrayNode) {\n const arrayNode: ArrayNode = node as ArrayNode;\n const uuid = control.uuid;\n\n const controlRelationsFactory: ControlRelationsFactory = new ControlRelationsFactory();\n let relationsForControl: Array<AfeFormControl | AfeFormArray> = [];\n // get all related controls\n arrayNode.children.forEach((child) => {\n relationsForControl = relationsForControl.concat(\n controlRelationsFactory.getRelationsForControl(uuid, child)\n );\n });\n\n this.setControlArrayValues(\n control as AfeFormControl | AfeFormArray,\n relationsForControl,\n scope\n );\n }\n });\n }\n }\n\n private setControlArrayValues(\n control: AfeFormControl | AfeFormArray,\n relationsForControl: Array<AfeFormControl | AfeFormArray>,\n scope: any\n ) {\n const keys: Array<string> = this._getFormControlKeys(relationsForControl);\n\n keys.forEach((key) => {\n const values: any = this._getValuesForKey(key, relationsForControl);\n scope[key] = values;\n });\n }\n\n private _getFormControlKeys(\n array: Array<AfeFormControl | AfeFormArray>\n ): Array<string> {\n const keys: Array<string> = [];\n array.forEach((control) => {\n if (keys.indexOf(control.uuid) === -1) {\n keys.push(control.uuid);\n }\n });\n\n return keys;\n }\n\n private _getValuesForKey(\n key: string,\n array: Array<AfeFormControl | AfeFormArray>\n ): any {\n const values: any = [];\n\n array.forEach((control) => {\n if (control.uuid === key) {\n values.push(control.value);\n }\n });\n\n return values;\n }\n\n private getHelperMethods(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n\n private getDataDependencies(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n}\n\nexport interface Runnable {\n run();\n}\n","import {\n FormControl,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControlOptions\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { CanCalculate } from '../form-entry/control-calculators/can-calculate';\nimport { ExpressionRunner } from '../form-entry/expression-runner/expression-runner';\n\nclass AfeFormControl\n extends FormControl\n implements\n CanHide,\n CanDisable,\n CanCalculate,\n CanGenerateAlert,\n ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n public uuid: string;\n public pathFromRoot: string;\n\n hidden = false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n calculator: Function;\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n constructor(\n formState?: any,\n validator?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(formState, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue('');\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n setCalculatorFn(newCalculator: Function) {\n this.calculator = newCalculator;\n }\n\n updateCalculatedValue() {\n if (this.calculator) {\n const _val = this.calculator.call(ExpressionRunner, {});\n this.setValue(_val);\n }\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\nexport { AfeFormControl };\n","import {\n FormGroup,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\n\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\n\nexport class AfeFormGroup\n extends FormGroup\n implements CanHide, CanDisable, CanGenerateAlert {\n private _controlRelations: ControlRelations;\n\n public uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue({});\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","import {\n FormArray,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\n\nexport class AfeFormArray\n extends FormArray\n implements CanHide, CanDisable, CanGenerateAlert, ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n private _uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n\n constructor(\n controls: AbstractControl[],\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.alerts = [];\n this.disablers = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get uuid(): string {\n return this._uuid;\n }\n set uuid(val: string) {\n this._uuid = val;\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue([]);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (this.alerts.length > 0) {\n this.updateAlert();\n }\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","export enum AfeControlType {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n None\n}\n","import { BaseOptions } from './interfaces/base-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\nimport { ValidationModel } from './validation.model';\n\nexport class QuestionBase implements BaseOptions {\n type: string;\n order?: number;\n questionOptions?: any;\n questions?: any;\n placeholder?: any;\n hidden?: any;\n showTime?: any;\n showWeek?: any;\n historicalDisplay?: any;\n rows?: any;\n showWeeksAdder?: any;\n key: string;\n alert?: any;\n\n label?: string;\n renderingType: string;\n\n defaultValue?: any;\n originalValue?: any;\n enableHistoricalValue?: boolean;\n showHistoricalValueDate?: boolean;\n historicalDataValue?: any;\n extras?: any;\n dataSource?: string;\n dataSourceOptions?: any;\n\n controlType?: AfeControlType;\n validators?: Array<ValidationModel>;\n required?: boolean;\n hide?: string | boolean;\n disable?: string | boolean;\n calculateExpression?: string;\n options?: any;\n\n constructor(options: BaseOptions) {\n this.defaultValue = options.defaultValue;\n this.originalValue = options.originalValue;\n this.extras = options.extras;\n this.renderingType = options.type;\n this.key = options.key || '';\n this.label = options.label || '';\n this.validators = options.validators || [];\n this.required = options.required;\n this.hide = options.hide;\n this.disable = options.disable;\n this.alert = options.alert;\n this.historicalDataValue = options.historicalDataValue;\n this.calculateExpression = options.calculateExpression;\n }\n\n setHistoricalValue(v: boolean) {\n this.enableHistoricalValue = v;\n }\n showHistoricalEncounterDate(v?: boolean) {\n this.showHistoricalValueDate = v === undefined ? true : v;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalRequiredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let isRequired: boolean;\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n relationValue = relation.relatedTo.value;\n } else {\n relationValue =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) !== -1\n ) {\n isRequired = true;\n }\n\n if (isRequired && !value) {\n return { conditional_required: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalAnsweredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let successCondition: any = true;\n\n if (value) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (Array.isArray(relatedAsControl.value)) {\n relationValue = relatedAsControl.value;\n } else {\n relationValue =\n relatedAsControl.value &&\n typeof relatedAsControl.value === 'object' &&\n relatedAsControl.value.value\n ? relatedAsControl.value.value\n : relatedAsControl.value;\n }\n }\n\n if (!relationValue) {\n successCondition = false;\n } else if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) === -1\n ) {\n successCondition = false;\n }\n });\n }\n }\n\n if (!successCondition) {\n return { conditional_answered: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class RequiredValidator {\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value: any = control.value;\n const isEmpty: boolean =\n value == null || (typeof value === 'string' && value.length === 0);\n\n return isEmpty ? { required: true } : null;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class DateValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n\n if (value && value.length !== 0) {\n // YYYY-MM-DD or DD-MM-YYYY\n const test: boolean = !/Invalid|NaN/.test(new Date(value).toString());\n\n return test ? null : { date: true };\n } else {\n return null;\n }\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MinValidator {\n validate(min: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v >= min\n ? null\n : { min: { requiredValue: min, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MaxValidator {\n validate(max: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v <= max\n ? null\n : { max: { requiredValue: max, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MinDateValidator {\n validate(min: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() < min.getTime()\n ? { mindate: { requiredDate: min, actualDate: newDate } }\n : null;\n } else {\n return { mindate: { requiredDate: min } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MaxDateValidator {\n validate(max: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() > max.getTime()\n ? { maxdate: { requiredDate: max, actualDate: newDate } }\n : null;\n } else {\n return { maxdate: { requiredDate: max } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class FutureDateRestrictionValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n const now: Date = new Date();\n\n if (value && value.length !== 0) {\n if (!new DateValidator().validate(value)) {\n const d: Date = new Date(value);\n\n return d.getTime() > now.getTime()\n ? { futureDateRestriction: true }\n : null;\n }\n }\n\n return null;\n }\n}\n","import * as _ from 'lodash';\nimport { Injectable } from \"@angular/core\";\n@Injectable()\nexport class JsExpressionHelper {\n calcBMI(height, weight) {\n let r;\n if (height && weight) {\n r = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n return height && weight ? parseFloat(r) : null;\n }\n\n calcBSA(height: number, weight: number) {\n let result;\n if (height && weight) {\n result = Math.sqrt((height * weight) / 3600).toFixed(2);\n }\n return height && weight ? parseFloat(result) : null;\n }\n\n calcBMIForAgeZscore(bmiForAgeRef, height, weight) {\n let bmi;\n const maxAgeInDays = 1856;\n if (height && weight) {\n bmi = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n const refSectionObject = _.first(bmiForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (bmi < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= bmi) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return bmi && refSectionObject ? formattedSDValue : null;\n }\n calcWeightForHeightZscore(weightForHeightRef, height, weight) {\n let refSection;\n let formattedSDValue;\n if (height && weight) {\n height = parseFloat(height).toFixed(1);\n }\n const standardHeightMin = 45;\n const standardMaxHeight = 110;\n if (height < standardHeightMin || height > standardMaxHeight) {\n formattedSDValue = -4;\n } else {\n refSection = _.filter(weightForHeightRef, (refObject) => {\n return parseFloat(refObject['Length']).toFixed(1) === height;\n });\n }\n\n const refSectionObject = _.first(refSection);\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (weight < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= weight) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight ? formattedSDValue : null;\n }\n\n calcHeightForAgeZscore(heightForAgeRef, height, weight) {\n const refSectionObject = _.first(heightForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (height < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= height) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight && refSectionObject ? formattedSDValue : null;\n }\n\n isEmpty(val) {\n if (\n val === undefined ||\n val === null ||\n val === '' ||\n val === 'null' ||\n val === 'undefined'\n ) {\n return true;\n }\n\n if (Array.isArray(val) && val.length === 0) {\n return true;\n }\n return false;\n }\n\n arrayContains(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n\n let contains = true;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) === -1) {\n contains = false;\n }\n }\n\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n extractRepeatingGroupValues(key, array) {\n const values = array.map(function (item) {\n return item[key];\n });\n return values;\n }\n formatDate(value, format, offset) {\n format = format || 'yyyy-MM-dd';\n offset = offset || '+0300';\n\n if (!(value instanceof Date)) {\n value = new Date(value);\n if (value === null || value === undefined) {\n throw new Error(\n 'DateFormatException: value passed ' + 'is not a valid date'\n );\n }\n }\n\n return value; // TODO implement this\n // return $filter('date')(value, format, offset);\n }\n\n arrayContainsAny(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n let contains = false;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) !== -1) {\n contains = true;\n }\n }\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n\n get helperFunctions() {\n const helper = this;\n return {\n arrayContainsAny: helper.arrayContainsAny,\n calcBMI: helper.calcBMI,\n calcBMIForAgeZscore: helper.calcBMIForAgeZscore,\n calcWeightForHeightZscore: helper.calcWeightForHeightZscore,\n calcHeightForAgeZscore: helper.calcHeightForAgeZscore,\n isEmpty: helper.isEmpty,\n arrayContains: helper.arrayContains,\n extractRepeatingGroupValues: helper.extractRepeatingGroupValues\n };\n }\n}\n","export class Validations {\n public static JSExpressionValidatorsEnabled = false;\n\n constructor() {}\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ExpressionRunner } from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { Validations } from './validations';\n\nexport class JsExpressionValidator {\n constructor() {}\n\n validate(model: JsExpressionValidationModel, form?: any) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n if (!Validations.JSExpressionValidatorsEnabled) {\n return null;\n }\n\n const expression = model.failsWhenExpression;\n const helper = new JsExpressionHelper();\n const dataDependencies = {};\n\n const helperFunctions = helper.helperFunctions;\n const runnable = new ExpressionRunner().getRunnable(\n expression,\n control,\n helperFunctions,\n dataDependencies,\n form\n );\n\n if (runnable.run()) {\n return {\n js_expression: { expression: expression, message: model.message }\n };\n }\n\n return null;\n };\n }\n}\n","export class Messages {\n public static readonly REQUIRED_FIELD_MSG = 'This field is required!';\n\n public static readonly INVALID_DATE_MSG = 'Provided date is invalid!';\n\n public static readonly FUTURE_DATE_RESTRICTION_MSG =\n 'Future date is not allowed!';\n\n public static readonly MIN_LENGTH_MSG = 'Min Length should be {minLength}';\n\n public static readonly MAX_LENGTH_MSG = 'Max Length should be {maxLength}';\n\n public static readonly MAX_DATE_MSG = 'Max Date should be {maxDate}';\n\n public static readonly MIN_DATE_MSG = 'Min Date should be {minDate}';\n\n public static readonly MAX_MSG = 'Max value should be {max}';\n\n public static readonly MIN_MSG = 'Min value should be {min}';\n}\n","import { Injectable } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport * as _ from 'lodash';\n\nimport { ConditionalRequiredValidator } from '../validators/conditional-required.validator';\nimport { ConditionalAnsweredValidator } from '../validators/conditional-answered.validator';\nimport { RequiredValidator } from '../validators/required.validator';\nimport { DateValidator } from '../validators/date.validator';\nimport { MinValidator } from '../validators/min.validator';\nimport { MaxValidator } from '../validators/max.validator';\nimport { MinDateValidator } from '../validators/min-date.validator';\nimport { MaxDateValidator } from '../validators/max-date.validator';\nimport { FutureDateRestrictionValidator } from '../validators/future-date-restriction.validator';\nimport { JsExpressionValidator } from '../validators/js-expression.validator';\nimport { QuestionBase } from '../question-models/question-base';\nimport { Messages } from '../utils/messages';\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\n@Injectable()\nexport class ValidationFactory {\n constructor() {}\n\n getValidators(question: QuestionBase, form?: any) {\n const list: Array<any> = [];\n\n if (question.validators) {\n _.forEach(question.validators, (validator: ValidationModel) => {\n switch (validator.type) {\n case 'date':\n list.push(this.dateValidator);\n const allowFutureDates: boolean = (<DateValidationModel>validator)\n .allowFutureDates;\n\n if (!allowFutureDates) {\n list.push(this.futureDateRestrictionValidator);\n }\n break;\n case 'js_expression':\n list.push(\n this.jsExpressionValidator.validate(\n <JsExpressionValidationModel>validator,\n form\n )\n );\n break;\n case 'max':\n list.push(\n this.getMaxValueValidator((<MaxValidationModel>validator).max)\n );\n break;\n case 'min':\n list.push(\n this.getMinValueValidator((<MinValidationModel>validator).min)\n );\n break;\n case 'conditionalRequired':\n list.push(\n this.conditionalRequiredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n case 'conditionalAnswered':\n list.push(\n this.conditionalAnsweredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n }\n });\n }\n\n if (\n question.required &&\n typeof question.required === 'string' &&\n question.required === 'true'\n ) {\n list.push(this.requiredValidator);\n } else {\n // TODO - handle custom required validator\n }\n\n return list;\n }\n\n get conditionalRequiredValidator(): ConditionalRequiredValidator {\n return new ConditionalRequiredValidator();\n }\n\n get conditionalAnsweredValidator(): ConditionalAnsweredValidator {\n return new ConditionalAnsweredValidator();\n }\n\n get requiredValidator(): any {\n return new RequiredValidator().validate;\n }\n\n get dateValidator(): any {\n return new DateValidator().validate;\n }\n\n get futureDateRestrictionValidator(): any {\n return new FutureDateRestrictionValidator().validate;\n }\n\n get maxDateValidator(): any {\n return new MaxDateValidator().validate;\n }\n\n get minDateValidator(): any {\n return new MinDateValidator().validate;\n }\n\n get minLengthValidator(): any {\n return Validators.minLength;\n }\n\n get maxLengthValidator() {\n return Validators.maxLength;\n }\n\n public getMinValueValidator(min: number): any {\n return new MinValidator().validate(min);\n }\n\n public getMaxValueValidator(max: number): any {\n return new MaxValidator().validate(max);\n }\n\n get jsExpressionValidator() {\n return new JsExpressionValidator();\n }\n\n public errors(errors: any, question: QuestionBase): Array<string> {\n const messages: Array<string> = [];\n\n for (const property in errors) {\n if (errors.hasOwnProperty(property)) {\n switch (property) {\n case 'required':\n messages.push(Messages.REQUIRED_FIELD_MSG);\n break;\n case 'date':\n messages.push(Messages.INVALID_DATE_MSG);\n break;\n case 'futureDateRestriction':\n messages.push(Messages.FUTURE_DATE_RESTRICTION_MSG);\n break;\n case 'minlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{minLength}',\n errors.minlength.requiredLength\n )\n );\n break;\n case 'maxlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{maxLength}',\n errors.maxlength.requiredLength\n )\n );\n break;\n case 'maxdate':\n messages.push(\n Messages.MAX_DATE_MSG.replace(\n '{maxDate}',\n errors.maxdate.requiredDate\n )\n );\n break;\n case 'mindate':\n messages.push(\n Messages.MIN_DATE_MSG.replace(\n '{minDate}',\n errors.mindate.requiredDate\n )\n );\n break;\n case 'max':\n messages.push(\n Messages.MAX_MSG.replace('{max}', errors.max.requiredValue)\n );\n break;\n case 'min':\n messages.push(\n Messages.MIN_MSG.replace('{min}', errors.min.requiredValue)\n );\n break;\n case 'js_expression':\n messages.push(errors['js_expression'].message);\n break;\n case 'conditional_required':\n messages.push(errors['conditional_required'].message);\n break;\n case 'conditional_answered':\n messages.push(errors['conditional_answered'].message);\n break;\n }\n }\n }\n\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Disabler } from '../control-hiders-disablers/can-disable';\nimport { Hider } from '../control-hiders-disablers/can-hide';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n// Add ability to display all fields for debugging\nimport { DebugModeService } from './../services/debug-mode.service';\n\n@Injectable()\nexport class HidersDisablersFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper,\n private _debugModeService: DebugModeService\n ) {}\n\n getJsExpressionDisabler(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Disabler {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.disable as string,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const disabler: Disabler = {\n toDisable: false,\n disableWhenExpression: question.disable as string,\n reEvaluateDisablingExpression: () => {\n const result = runnable.run();\n disabler.toDisable = result;\n }\n };\n return disabler;\n }\n\n getJsExpressionHider(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Hider {\n const hide: any = question.hide;\n const value: string =\n typeof hide === 'object'\n ? this.convertHideObjectToString(hide)\n : (question.hide as string);\n\n // check if debugging has been enabled\n\n const debugEnabled = this._debugModeService.debugEnabled();\n\n const runnable: Runnable = this.expressionRunner.getRunnable(\n value,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n\n const hider: Hider = {\n toHide: false,\n hideWhenExpression: value,\n reEvaluateHidingExpression: () => {\n /* if debug is enabled then hiders to be false\n else run the normal eveluator i.e runnable.run()\n */\n if (debugEnabled === true) {\n hider.toHide = false;\n } else {\n hider.toHide = runnable.run();\n }\n }\n };\n return hider;\n }\n\n convertHideObjectToString(hide: any) {\n if (hide.value instanceof Array) {\n const arrayStr: string = \"'\" + hide.value.join(\"','\") + \"'\";\n const exp = '!arrayContains([' + arrayStr + '],' + hide.field + ')';\n return exp;\n }\n\n return '';\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Alert } from '../control-alerts/can-generate-alert';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n\n@Injectable()\nexport class AlertsFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper\n ) {}\n getJsExpressionshowAlert(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Alert {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.alert.alertWhenExpression,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const showAlert: Alert = {\n shown: false,\n alertWhenExpression: question.alert.alertWhenExpression,\n alertMessage: question.alert.message,\n reEvaluateAlertExpression: () => {\n const result = runnable.run();\n showAlert.shown = result;\n }\n };\n return showAlert;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n AfeControlType\n} from '../../abstract-controls-extension';\n\nimport { NestedQuestion } from '../question-models/interfaces/nested-questions';\n\nimport { QuestionBase } from '../question-models/question-base';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { HidersDisablersFactory } from './hiders-disablers.factory';\nimport { AlertsFactory } from './show-messages.factory';\nimport { Form } from './form';\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\n\n@Injectable()\nexport class FormControlService {\n controls = [];\n validationFactory: ValidationFactory;\n hidersDisablersFactory: HidersDisablersFactory;\n\n constructor(\n validationFactory: ValidationFactory,\n hidersDisablersFactory: HidersDisablersFactory,\n private alertsFactory: AlertsFactory\n ) {\n this.validationFactory = validationFactory;\n this.hidersDisablersFactory = hidersDisablersFactory;\n }\n\n generateControlModel(\n questionModel: QuestionBase | NestedQuestion,\n parentControl: AfeFormGroup,\n generateChildren: boolean,\n form?: Form\n ): AfeFormControl | AfeFormArray | AfeFormGroup {\n if (questionModel instanceof QuestionBase) {\n if (questionModel.controlType === AfeControlType.AfeFormArray) {\n return this.generateFormArray(questionModel, parentControl, form);\n }\n if (questionModel.controlType === AfeControlType.AfeFormGroup) {\n return this.generateFormGroupModel(\n questionModel,\n generateChildren,\n parentControl,\n form\n );\n }\n\n if (questionModel.controlType === AfeControlType.AfeFormControl) {\n return this.generateFormControl(questionModel, parentControl, form);\n }\n }\n return null;\n }\n\n generateFormGroupModel(\n question: QuestionBase,\n generateChildren: boolean,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormGroup {\n const formGroup = new AfeFormGroup({});\n this.wireHidersDisablers(question, formGroup, form);\n this.wireAlerts(question, formGroup, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formGroup);\n }\n\n const asGroup = question as QuestionGroup;\n\n if (generateChildren && asGroup && asGroup.questions.length > 0) {\n this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);\n }\n\n return formGroup;\n }\n\n _generateFormGroupChildrenModel(\n questions: QuestionBase[],\n parentControl: AfeFormGroup,\n form?: Form\n ) {\n if (questions.length > 0) {\n questions.forEach((element) => {\n const generated = this.generateControlModel(\n element,\n parentControl,\n true,\n form\n );\n if (generated !== null) {\n parentControl.addControl(element.key, generated);\n }\n });\n }\n }\n\n generateFormArray(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormArray {\n const validators = this.validationFactory.getValidators(question, form);\n let formArray: AfeFormArray;\n if (validators && validators.length > 0) {\n formArray = new AfeFormArray([], validators[0]);\n } else {\n formArray = new AfeFormArray([]);\n }\n formArray.uuid = question.key;\n this.wireHidersDisablers(question, formArray, form);\n this.wireAlerts(question, formArray, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formArray);\n }\n\n return formArray;\n }\n\n generateFormControl(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormControl {\n const value = question.defaultValue || '';\n const validators = this.validationFactory.getValidators(question, form);\n\n const control = new AfeFormControl(value, validators);\n control.uuid = question.key;\n this.wireHidersDisablers(question, control, form);\n this.wireAlerts(question, control, form);\n this.wireCalculator(\n question,\n control,\n form ? form.dataSourcesContainer.dataSources : null\n );\n\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, control);\n }\n\n return control;\n }\n\n private wireAlerts(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.alert && question.alert !== '') {\n const alert = this.alertsFactory.getJsExpressionshowAlert(\n question,\n control,\n form\n );\n control.setAlertFn(alert);\n }\n }\n private wireHidersDisablers(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.hide && question.hide !== '') {\n const hider = this.hidersDisablersFactory.getJsExpressionHider(\n question,\n control,\n form\n );\n control.setHidingFn(hider);\n }\n\n if (question.disable && question.disable !== '') {\n const disable = this.hidersDisablersFactory.getJsExpressionDisabler(\n question,\n control,\n form\n );\n control.setDisablingFn(disable);\n }\n }\n\n private wireCalculator(\n question: QuestionBase,\n control: AfeFormControl,\n dataSource?: any\n ) {\n if (question.calculateExpression && question.calculateExpression !== '') {\n const helper: JsExpressionHelper = new JsExpressionHelper();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n question.calculateExpression,\n control,\n helper.helperFunctions,\n dataSource\n );\n // this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class\n control.setCalculatorFn(runnable.run);\n }\n }\n}\n","export const DEFAULT_STYLES = `a {\n color: white;\n text-decoration: none;\n font-size: 12px;\n text-transform: uppercase;\n }\n\n ul {\n list-style-type: none;\n margin: 2px auto;\n position: relative;\n }\n\n li {\n display: block;\n padding: 10px 20px;\n white-space: nowrap;\n transition: all 0.3s ease-in;\n border-bottom: 4px solid transparent;\n }\n\n li:hover {\n border-bottom: 4px solid white;\n opacity: 0.7;\n cursor: pointer;\n }\n\n .owl-theme .owl-controls .owl-nav {\n position: absolute;\n width: 100%;\n top: 0;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"] {\n position: absolute;\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"]:hover {\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav .owl-next {\n right: 0;\n transform: translate(120%);\n }\n\n .owl-theme .owl-controls .owl-nav .owl-prev {\n left: 0;\n transform: translate(-120%);\n }\n\n .slick-initialized .swipe-tab-content {\n position: relative;\n min-height: 365px;\n }\n @media screen and (min-width: 767px) {\n .slick-initialized .swipe-tab-content {\n min-height: 500px;\n }\n }\n .slick-initialized .swipe-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n background: none;\n border: 0;\n color: #757575;\n cursor: pointer;\n text-align: center;\n border-bottom: 2px solid rgba(51, 122, 183, 0);\n transition: all 0.5s;\n }\n .slick-initialized .swipe-tab:hover {\n color: #337AB7;\n }\n .slick-initialized .swipe-tab.active-tab {\n border-bottom-color: #337AB7;\n color: #337AB7;\n font-weight: bold;\n }\n\n .disabled {\n opacity: .5;\n pointer-events: none;\n }\n\n .select2-container {\n margin-top: -5px;\n }\n\n .btn {\n padding: 0px 12px !important;\n }\n\n .form-tooltip{\n color:rgb(51, 122, 183);\n display: inline-block;\n }\n .question-info{\n opacity:0;\n height:0px;\n display: none;\n transition-duration: opacity 1s ease-out;\n transtion-delay: 0.5s;\n padding-top: 2px;\n padding-bottom: 2px;\n color: #696969;\n border-style: ridge;\n border-width: 1px;\n border-color: #337ab7;\n margin-top: 2px;\n }\n .hide-info{\n display:none;\n height:0px;\n }\n .form-tooltip:hover ~ .question-info {\n display:block;\n opacity:1;\n height:auto;\n }\n .form-tooltip .tooltipcontent::after {\n content: \" \";\n position: absolute;\n bottom: 100%; /* At the top of the tooltip */\n right: 0%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: #337ab7;\n border-left-color: transparent;\n }\n\n ng-select.form-control {\n padding-top: 0;\n height: auto;\n padding-bottom: 0;\n }\n\n .forms-dropdown-menu {\n max-height: 450px;\n overflow-y: scroll;\n }\n .no-border {\n border: 0;\n box-shadow: none;\n}\n.text-danger{\n color: var(--cds-support-01, #da1e28);\n}\n.error{\n margin-bottom: 3rem;\n}\n.afe-control{\n margin-bottom: 1.5rem;\n}\n[hidden] {\n display: none !important;\n}\n `;\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DataSources {\n private _dataSources: any = {};\n constructor() {}\n\n get dataSources(): any {\n return this._dataSources;\n }\n\n registerDataSource(key: string, dataSource: any, unWrap = false) {\n if (unWrap) {\n // tslint:disable-next-line:forin\n for (const o in dataSource) {\n // console.log('registering', o, dataSource[o]);\n this.registerDataSource(o, dataSource[o], false);\n }\n }\n if (this.dataSources[key]) {\n console.warn('Overriding registered data source', key);\n }\n this._dataSources[key] = dataSource;\n }\n\n clearDataSource(key: string) {\n delete this._dataSources[key];\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Inject,\n Output,\n EventEmitter\n} from '@angular/core';\n// import 'hammerjs';\nimport { DEFAULT_STYLES } from './form-renderer.component.css';\nimport { DOCUMENT } from '@angular/common';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, LeafNode, GroupNode } from '../form-factory/form-node';\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { FormErrorsService } from '../services/form-errors.service';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { SelectOption } from '../question-models/interfaces/select-option';\n\n// import { concat, of, Observable, Subject, BehaviorSubject } from 'rxjs';\n// import * as _ from 'lodash';\n\n// import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, map } from 'rxjs/operators';\n// import { QuestionBase } from '../question-models';\n\n@Component({\n selector: 'form-renderer',\n templateUrl: 'form-renderer.component.html',\n styles: ['../../style/app.css', DEFAULT_STYLES]\n})\nexport class FormRendererComponent implements OnInit {\n @Input() public parentComponent: FormRendererComponent;\n @Input() public node: NodeBase;\n @Input() public parentGroup: AfeFormGroup;\n public childComponents: FormRendererComponent[] = [];\n public showTime: boolean;\n public showWeeks: boolean;\n public activeTab: number;\n public dataSource: DataSource;\n public isCollapsed = false;\n public auto: any;\n public followFocus = true;\n public cacheActive = false;\n public isNavigation = true;\n public type = 'default';\n inlineDatePicker: Date = new Date();\n\n\n constructor(\n private validationFactory: ValidationFactory,\n private dataSources: DataSources,\n private formErrorsService: FormErrorsService,\n @Inject(DOCUMENT) private document: any\n ) {\n this.activeTab = 0;\n }\n\n public ngOnInit() {\n this.setUpRemoteSelect();\n this.setUpFileUpload();\n if (this.node && this.node.form) {\n const tab = this.node.form.valueProcessingInfo.lastFormTab;\n if (tab && tab !== this.activeTab) {\n this.activeTab = tab;\n }\n }\n if (this.node && this.node.question.renderingType === 'form') {\n this.formErrorsService.announceErrorField$.subscribe((error) => {\n this.scrollToControl(error);\n });\n }\n\n if (this.node && this.node.question.renderingType === 'section') {\n this.isCollapsed = !(this.node.question as QuestionGroup).isExpanded;\n }\n\n if (this.parentComponent) {\n this.parentComponent.addChildComponent(this);\n }\n }\n\n public addChildComponent(child: FormRendererComponent) {\n this.childComponents.push(child);\n }\n\n public setUpRemoteSelect() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'remote-select'\n ) {\n // let selectQuestion = this.node.form.searchNodeByQuestionId(this.node.question.key)[0];\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n /*\n let defaltValues = of([]);\n if (this.dataSource.resolveSelectedValue(selectQuestion.control.value)) {\n defaltValues = this.dataSource.resolveSelectedValue(selectQuestion.control.value).pipe(\n catchError(() => of([])), // empty list on error\n );\n }\n this.items$ = concat(\n defaltValues,\n this.itemsInput$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n tap(() => this.itemsLoading = true),\n switchMap(term => this.dataSource.searchOptions(term).pipe(\n catchError(() => of([])), // empty list on error\n tap(() => {\n this.itemsLoading = false\n })\n ))\n )\n );\n */\n if (this.dataSource && this.node.question.dataSourceOptions) {\n this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;\n }\n }\n }\n\n public setUpFileUpload() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'file'\n ) {\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n // console.log('Key', this.node.question);\n // console.log('Data source', this.dataSource);\n }\n }\n\n checkSection(node: NodeBase) {\n if (node.question.renderingType === 'section') {\n let groupChildrenHidden = false;\n const allSectionControlsHidden = Object.keys(node.children).every((k) => {\n const innerNode = node.children[k];\n if (innerNode instanceof GroupNode) {\n groupChildrenHidden = Object.keys(innerNode.children).every(\n (i) => innerNode.children[i].control.hidden\n );\n }\n return node.children[k].control.hidden || groupChildrenHidden;\n });\n return !allSectionControlsHidden;\n }\n return true;\n }\n\n public clickTab(tabNumber) {\n this.activeTab = tabNumber;\n }\n\n public loadPreviousTab() {\n if (!this.isCurrentTabFirst()) {\n this.clickTab(this.activeTab - 1);\n document.body.scrollTop = 0;\n }\n }\n\n public isCurrentTabFirst() {\n return this.activeTab === 0;\n }\n\n public isCurrentTabLast() {\n return this.activeTab === this.node.question['questions'].length - 1;\n }\n\n public loadNextTab() {\n if (!this.isCurrentTabLast()) {\n this.clickTab(this.activeTab + 1);\n document.body.scrollTop = 0;\n }\n }\n public tabSelected($event) {\n this.activeTab = $event;\n this.setPreviousTab();\n }\n public setPreviousTab() {\n if (this.node && this.node.form) {\n this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;\n }\n }\n public hasErrors() {\n return this.node.control.touched && !this.node.control.valid;\n }\n\n public errors() {\n return this.getErrors(this.node);\n }\n\n public scrollToControl(error: string) {\n const tab: number = +error.split(',')[0];\n const elSelector = error.split(',')[1] + 'id';\n\n // the tab components\n const tabComponent: FormRendererComponent = this.childComponents[tab];\n\n this.clickTab(tab);\n\n setTimeout(() => {\n // expand all sections\n tabComponent.childComponents.forEach((section) => {\n section.isCollapsed = false;\n\n setTimeout(() => {\n const element: any = this.document.getElementById(elSelector);\n if (element !== null && element.focus) {\n element.focus();\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n });\n }, 200);\n }\n\n public onDateChanged(node: LeafNode) {\n // console.log('Node', node);\n this.node = node;\n }\n\n public upload(event) {\n // console.log('Event', event);\n // console.log('Data', this.dataSource);\n }\n\n public toggleInformation(infoId) {\n const e = document.getElementById(infoId);\n\n if (e.style.display === 'block') {\n e.style.display = 'none';\n } else {\n e.style.display = 'block';\n }\n }\n private getErrors(node: NodeBase) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n\n}\n","import * as _ from 'lodash';\n\nimport { FormFactory } from './form.factory';\nimport { QuestionFactory } from './question.factory';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { QuestionBase } from '../question-models/question-base';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\n\nexport class Form {\n public rootNode: GroupNode;\n public valueProcessingInfo: any = {};\n public existingOrders: any = {};\n private _dataSourcesContainer: DataSources;\n private _showErrors = false;\n constructor(\n public schema: any,\n public formFactory: FormFactory,\n public questionFactory: QuestionFactory\n ) {\n this._dataSourcesContainer = new DataSources();\n }\n\n get dataSourcesContainer(): DataSources {\n return this._dataSourcesContainer;\n }\n\n searchNodeByPath(node: GroupNode, path, found: Array<NodeBase>) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n this.searchNodeByPath(child, path, found);\n } else if (child instanceof LeafNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n } else if (child instanceof ArrayNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n const aChild: ArrayNode = child as ArrayNode;\n\n aChild.children.forEach((aChildNode) => {\n this.searchNodeByPath(aChildNode, path, found);\n });\n }\n }\n }\n\n return found;\n }\n\n searchNodeByQuestionId(\n questionId: string,\n questionType?: string\n ): Array<NodeBase> {\n const found = [];\n if (questionType) {\n this.searchNodeByQuestionType(this.rootNode, questionType, found);\n } else {\n this.findNodesByQuestionId(this.rootNode, questionId, found);\n }\n return found;\n }\n\n searchNodeByQuestionType(\n rootNode: any,\n questionType: string,\n found: Array<NodeBase>\n ) {\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.searchNodeByQuestionType(\n nodeAsGroup.children[o],\n questionType,\n found\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.searchNodeByQuestionType(node, questionType, found);\n });\n }\n\n if (rootNode instanceof LeafNode) {\n const questionBase: QuestionBase = rootNode.question;\n\n if (\n questionBase.extras &&\n questionBase.extras.type &&\n questionBase.extras.type === questionType\n ) {\n found.push(rootNode);\n }\n }\n }\n\n private findNodesByQuestionId(\n rootNode: NodeBase,\n questionId: string,\n results: Array<NodeBase>\n ) {\n if (rootNode.question.key === questionId) {\n results.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.findNodesByQuestionId(\n nodeAsGroup.children[o],\n questionId,\n results\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.findNodesByQuestionId(node, questionId, results);\n });\n }\n }\n\n get valid() {\n return this.rootNode.control.valid;\n }\n\n set showErrors(show: boolean) {\n this._showErrors = show;\n }\n\n get showErrors() {\n return this._showErrors;\n }\n\n markInvalidControls(node: GroupNode, invalidControlNodes?: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.markInvalidControls(child, invalidControlNodes);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n const c: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (!c.valid && !c.disabled) {\n if (invalidControlNodes) {\n invalidControlNodes.push(child);\n }\n\n c.markAsTouched();\n }\n }\n } else if (child instanceof ArrayNode) {\n const arrayNode: ArrayNode = child as ArrayNode;\n\n if (\n arrayNode &&\n arrayNode.children &&\n arrayNode.children.length > 0\n ) {\n _.forEach(arrayNode.children, (groupNode: any) => {\n this.markInvalidControls(groupNode, invalidControlNodes);\n });\n }\n }\n }\n }\n\n return invalidControlNodes;\n }\n\n updateHiddenDisabledStateForAllControls() {\n this._updateHiddenDisabledStateForAllControls(this.rootNode);\n }\n\n updateAlertsForAllControls() {\n this._updateAlertsForAllControls(this.rootNode);\n }\n\n private _updateAlertsForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateAlert) {\n (rootNode.control as any).updateAlert();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateAlertsForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateAlertsForAllControls(node);\n });\n }\n }\n private _updateHiddenDisabledStateForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateDisabledState) {\n (rootNode.control as any).updateDisabledState();\n }\n\n if ((rootNode.control as any).updateHiddenState) {\n (rootNode.control as any).updateHiddenState();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateHiddenDisabledStateForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateHiddenDisabledStateForAllControls(node);\n });\n }\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as _ from 'lodash';\n\nimport { Form } from '../form-factory/form';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { NodeBase, LeafNode } from '../form-factory/form-node';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { FormErrorsService } from '../services/form-errors.service';\n\n@Component({\n selector: 'error-renderer',\n templateUrl: 'error-renderer.component.html',\n styleUrls: ['./error-renderer.component.css']\n})\nexport class ErrorRendererComponent implements OnInit {\n @Input() form: Form;\n\n constructor(\n private validationFactory: ValidationFactory,\n private formErrorsService: FormErrorsService\n ) {}\n\n ngOnInit() {}\n\n showErrors() {\n return !this.form.valid && this.form.showErrors;\n }\n\n get errorNodes() {\n const invalidControls = this.form.markInvalidControls(\n this.form.rootNode,\n []\n );\n return invalidControls;\n }\n\n getControlError(node: LeafNode) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n\n announceErrorField(errorNode: LeafNode) {\n const nodes: Array<NodeBase> = this.form.searchNodeByQuestionId(\n errorNode.path.substring(0, errorNode.path.indexOf('.'))\n );\n\n _.forEach(nodes, (node: NodeBase) => {\n if (node.question.renderingType === 'page') {\n const pageIndex: number = this.getPageIndex(node);\n this.formErrorsService.announceErrorField(\n pageIndex + ',' + errorNode.question.key\n );\n }\n });\n }\n\n getPageIndex(node: NodeBase) {\n const questionGroup: QuestionGroup = this.form.rootNode\n .question as QuestionGroup;\n return questionGroup.questions.indexOf(node.question);\n }\n}\n","import * as _ from 'lodash';\nimport { QuestionBase } from '../question-models/question-base';\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class HistoricalFieldHelperService {\n public getDisplayTextFromOptions(\n question: QuestionBase,\n valueProperty: string,\n displayProperty: string\n ): string {\n let displayText = '';\n const historicalValue = question.historicalDataValue;\n if (_.isArray(historicalValue.value)) {\n let valueConverted = 0;\n _.each(historicalValue.value, (val) => {\n _.each(question.options, (option) => {\n if (option[valueProperty] === val) {\n if (valueConverted === 0) {\n displayText = displayText + option[displayProperty];\n } else {\n displayText = displayText + ', ' + option[displayProperty];\n }\n valueConverted++;\n }\n });\n });\n } else {\n _.each(question.options, (option) => {\n if (option[valueProperty] === historicalValue.value) {\n displayText = option[displayProperty];\n }\n });\n }\n return displayText;\n }\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\n\nimport { HistoricalFieldHelperService } from '../helpers/historical-field-helper-service';\nimport * as _ from 'lodash';\nimport { NodeBase } from '../form-factory/form-node';\n\n@Directive({\n selector: `[node]`\n})\nexport class HistoricalValueDirective {\n @Input() _node: NodeBase;\n @Output() _nodeChange = new EventEmitter<Object>();\n\n historicalDisplay: string;\n\n constructor(private historicalFieldHelper: HistoricalFieldHelperService) {}\n\n @HostListener('click', ['$event'])\n setValue(e) {\n if (e.target.name === 'historyValue') {\n if (\n this._node &&\n (!this.compareString(this._node.question.renderingType, 'page') ||\n !this.compareString(this._node.question.renderingType, 'section'))\n ) {\n this._node.control.setValue(\n this._node.question.historicalDataValue.value\n );\n\n this._node.question[\n 'historicalValue'\n ] = this._node.question.historicalDataValue;\n e.stopPropagation();\n this._nodeChange.emit(this._node);\n }\n }\n }\n private compareString(a, b) {\n if (a === b) {\n return true;\n } else {\n return false;\n }\n }\n @Input()\n set node(node: NodeBase) {\n if (node) {\n this._node = node;\n if (\n this._node.question.enableHistoricalValue &&\n !_.isUndefined(this._node.question.historicalDataValue)\n ) {\n const display: any = { text: '', _date: '' };\n if (\n this._node.question.renderingType === 'select' ||\n this._node.question.renderingType === 'multi-select' ||\n this._node.question.renderingType === 'single-select'\n ) {\n display.text = this.historicalFieldHelper.getDisplayTextFromOptions(\n this._node.question,\n 'value',\n 'label'\n );\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n } else if (!_.isUndefined(this._node.question.historicalDataValue)) {\n display.text = this._node.question.historicalDataValue.value;\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n }\n }\n }\n }\n}\n","import {\n animate,\n style,\n AnimationMetadata\n } from '@angular/animations';\n\n export const COLLAPSE_ANIMATION_TIMING = '400ms cubic-bezier(0.4,0.0,0.2,1)';\n\n export const expandAnimation: AnimationMetadata[] = [\n style({ height: 0, visibility: 'hidden' }),\n animate(\n COLLAPSE_ANIMATION_TIMING,\n style({ height: '*', visibility: 'visible' })\n )\n ];\n\n export const collapseAnimation: AnimationMetadata[] = [\n style({ height: '*', visibility: 'visible' }),\n animate(\n COLLAPSE_ANIMATION_TIMING,\n style({ height: 0, visibility: 'hidden' })\n )\n ];\n","/* tslint:disable:no-host-metadata-property */\nimport {\n AnimationBuilder,\n AnimationFactory,\n AnimationPlayer\n } from '@angular/animations';\n\n import {\n AfterViewChecked,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n Renderer2\n } from '@angular/core';\n\n import {\n collapseAnimation,\n expandAnimation\n } from './collapse-animations';\n\n @Directive({\n selector: '[collapse]',\n exportAs: 'bs-collapse',\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '[class.collapse]': 'true'\n }\n })\n export class CollapseDirective implements AfterViewChecked {\n /** This event fires as soon as content collapses */\n @Output() collapsed: EventEmitter<CollapseDirective> = new EventEmitter();\n /** This event fires when collapsing is started */\n @Output() collapses: EventEmitter<CollapseDirective> = new EventEmitter();\n /** This event fires as soon as content becomes visible */\n @Output() expanded: EventEmitter<CollapseDirective> = new EventEmitter();\n /** This event fires when expansion is started */\n @Output() expands: EventEmitter<CollapseDirective> = new EventEmitter();\n // shown\n @HostBinding('class.in')\n @HostBinding('class.show')\n @HostBinding('attr.aria-expanded')\n isExpanded = true;\n collapseNewValue = true;\n // hidden\n @HostBinding('attr.aria-hidden') isCollapsed = false;\n // stale state\n @HostBinding('class.collapse') isCollapse = true;\n // animation state\n @HostBinding('class.collapsing') isCollapsing = false;\n\n @Input()\n set display(value: string) {\n if (!this.isAnimated) {\n this._renderer.setStyle(this._el.nativeElement, 'display', value);\n\n return;\n }\n\n this._display = value;\n\n if (value === 'none') {\n this.hide();\n\n return;\n }\n\n this.show();\n }\n /** turn on/off animation */\n @Input() isAnimated = false;\n /** A flag indicating visibility of content (shown or hidden) */\n @Input()\n set collapse(value: boolean) {\n this.collapseNewValue = value;\n if (!this._player || this._isAnimationDone) {\n this.isExpanded = value;\n this.toggle();\n }\n }\n\n get collapse(): boolean {\n return this.isExpanded;\n }\n\n private _display = 'block';\n private _isAnimationDone?: boolean;\n private _player?: AnimationPlayer;\n private _stylesLoaded = false;\n\n private _COLLAPSE_ACTION_NAME = 'collapse';\n private _EXPAND_ACTION_NAME = 'expand';\n\n private readonly _factoryCollapseAnimation: AnimationFactory;\n private readonly _factoryExpandAnimation: AnimationFactory;\n\n constructor(\n private _el: ElementRef,\n private _renderer: Renderer2,\n _builder: AnimationBuilder\n ) {\n this._factoryCollapseAnimation = _builder.build(collapseAnimation);\n this._factoryExpandAnimation = _builder.build(expandAnimation);\n }\n\n ngAfterViewChecked(): void {\n this._stylesLoaded = true;\n\n if (!this._player || !this._isAnimationDone) {\n return;\n }\n\n this._player.reset();\n this._renderer.setStyle(this._el.nativeElement, 'height', '*');\n }\n\n /** allows to manually toggle content visibility */\n toggle(): void {\n if (this.isExpanded) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /** allows to manually hide content */\n hide(): void {\n this.isCollapsing = true;\n this.isExpanded = false;\n this.isCollapsed = true;\n this.isCollapsing = false;\n\n this.collapses.emit(this);\n\n this._isAnimationDone = false;\n\n this.animationRun(this.isAnimated, this._COLLAPSE_ACTION_NAME)(() => {\n this._isAnimationDone = true;\n if (this.collapseNewValue !== this.isCollapsed && this.isAnimated) {\n this.show();\n\n return;\n }\n this.collapsed.emit(this);\n this._renderer.setStyle(this._el.nativeElement, 'display', 'none');\n });\n }\n /** allows to manually show collapsed content */\n show(): void {\n this._renderer.setStyle(this._el.nativeElement, 'display', this._display);\n\n this.isCollapsing = true;\n this.isExpanded = true;\n this.isCollapsed = false;\n this.isCollapsing = false;\n\n this.expands.emit(this);\n\n this._isAnimationDone = false;\n this.animationRun(this.isAnimated, this._EXPAND_ACTION_NAME)(() => {\n this._isAnimationDone = true;\n if (this.collapseNewValue !== this.isCollapsed && this.isAnimated) {\n this.hide();\n\n return;\n }\n this.expanded.emit(this);\n this._renderer.removeStyle(this._el.nativeElement, 'overflow');\n });\n }\n\n animationRun(isAnimated: boolean, action: string) {\n if (!isAnimated || !this._stylesLoaded) {\n return (callback: () => void) => callback();\n }\n\n this._renderer.setStyle(this._el.nativeElement, 'overflow', 'hidden');\n this._renderer.addClass(this._el.nativeElement, 'collapse');\n\n const factoryAnimation = (action === this._EXPAND_ACTION_NAME)\n ? this._factoryExpandAnimation\n : this._factoryCollapseAnimation;\n\n if (this._player) {\n this._player.destroy();\n }\n\n this._player = factoryAnimation.create(this._el.nativeElement);\n this._player.play();\n\n return (callback: () => void) => this._player?.onDone(callback);\n }\n }\n","import {\n Component,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n Output,\n TemplateRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\n/**\n * Used to emit changes performed on number input components.\n */\nexport class NumberChangeEvent {\n /**\n * Contains the `NumberInputComponent` that has been changed.\n */\n source: NumberInputComponent;\n /**\n * The value of the `NumberInputComponent` field encompassed in the `NumberChange` class.\n */\n value: number;\n}\n\n@Component({\n selector: 'number-input',\n templateUrl: 'number-input.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberInputComponent),\n multi: true\n }\n ]\n})\nexport class NumberInputComponent implements ControlValueAccessor {\n /**\n * Variable used for creating unique ids for number input components.\n */\n static numberCount = 0;\n\n /**\n * `light` or `dark` number input theme.\n */\n @Input() theme: 'light' | 'dark' = 'dark';\n /**\n * Set to `true` for a disabled number input.\n */\n @Input() disabled = false;\n /**\n * Set to `true` for a loading number component.\n */\n @Input() skeleton = false;\n /**\n * Set to `true` for an invalid number component.\n */\n @Input() invalid = false;\n /**\n * The unique id for the number component.\n */\n @Input() id = `number-${NumberInputComponent.numberCount}`;\n /**\n * Number input field render size\n */\n @Input() size: 'sm' | 'md' | 'xl' = 'md';\n /**\n * Reflects the required attribute of the `input` element.\n */\n @Input() required: boolean;\n /**\n * Sets the value attribute on the `input` element.\n */\n @Input() set value(v: any) {\n if (v === '' || v === null) {\n this._value = null;\n return;\n }\n this._value = Number(v);\n }\n\n get value() {\n return this._value;\n }\n /**\n * Sets the min attribute on the `input` element.\n */\n @Input() min = null;\n /**\n * Sets the max attribute on the `input` element.\n */\n @Input() max = null;\n /**\n * Sets the text inside the `label` tag.\n */\n @Input() label: string | TemplateRef<any>;\n /**\n * Sets the optional helper text.\n */\n @Input() helperText: string | TemplateRef<any>;\n /**\n * Sets the invalid text.\n */\n @Input() invalidText: string | TemplateRef<any>;\n /**\n * Sets the amount the number controls increment and decrement by.\n */\n @Input() step = 1;\n /**\n * If `step` is a decimal, we may want precision to be set to go around floating point precision.\n */\n @Input() precision: number;\n /**\n * Set to `true` to show a warning (contents set by warningText)\n */\n @Input() warn = false;\n /**\n * Sets the warning text\n */\n @Input() warnText: string | TemplateRef<any>;\n /**\n * Emits event notifying other classes when a change in state occurs in the input.\n */\n @Output() change = new EventEmitter<NumberChangeEvent>();\n /**\n * Sets the decrement label text\n */\n @Input() decrementLabel = 'Decrease';\n /**\n * Sets the increment label text\n */\n @Input() incrementLabel = 'Increase';\n\n protected _value = 0;\n\n /**\n * Creates an instance of `Number`.\n */\n constructor() {\n NumberInputComponent.numberCount++;\n }\n\n /**\n * This is the initial value set to the component\n * @param value The input value.\n */\n public writeValue(value: any) {\n this.value = value;\n }\n\n /**\n * Sets a method in order to propagate changes back to the form.\n */\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control has been touched.\n * @param fn Callback to be triggered when the number input is touched.\n */\n public registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n @HostListener('focusout')\n focusOut() {\n this.onTouched();\n }\n\n /**\n * Sets the disabled state through the model\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /**\n * Called when number input is blurred. Needed to properly implement `ControlValueAccessor`.\n */\n onTouched: () => any = () => {};\n\n /**\n * Method set in `registerOnChange` to propagate changes back to the form.\n */\n propagateChange = (_: any) => {};\n\n /**\n * Adds `step` to the current `value`.\n */\n onIncrement(): void {\n const val = this._value || 0;\n\n if (this.max === null || val + this.step <= this.max) {\n this.value = parseFloat((val + this.step).toPrecision(this.precision));\n } else {\n this.value = this.max;\n }\n\n this.emitChangeEvent();\n }\n\n /**\n * Subtracts `step` to the current `value`.\n */\n onDecrement(): void {\n const val = this._value || 0;\n\n if (this.min === null || val - this.step >= this.min) {\n this.value = parseFloat((val - this.step).toPrecision(this.precision));\n } else {\n this.value = this.min;\n }\n\n this.emitChangeEvent();\n }\n\n /**\n * Creates a class of `NumberChange` to emit the change in the `Number`.\n */\n emitChangeEvent(): void {\n const event = new NumberChangeEvent();\n event.source = this;\n event.value = this.value;\n this.change.emit(event);\n this.propagateChange(this.value);\n }\n\n onNumberInputChange(event) {\n this.value = event.target.value;\n this.emitChangeEvent();\n }\n\n public isTemplate(value) {\n return value instanceof TemplateRef;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { NumberInputComponent } from './number-input.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n exports: [NumberInputComponent],\n declarations: [NumberInputComponent],\n providers: []\n})\nexport class NumberInputModule {}\n","/**\n * date-picker.component\n */\n\nimport { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport * as _ from 'lodash';\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./date-picker.component.css');\n// const myDpTpl: string = require('./date-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.css']\n})\nexport class DatePickerComponent implements OnInit {\n public dayNames: Array<string>;\n\n @Input() public initDate: any;\n @Input() public locale = 'en';\n @Input() public viewFormat = 'll';\n @Input() public returnObject = 'js';\n @Output() public onDatePickerCancel = new EventEmitter<boolean>();\n @Output() public onSelectDate = new EventEmitter<any>();\n\n public calendarDate: Moment;\n public selectedDate: Moment;\n public currentMonth: any;\n public today: Moment;\n public currentYear: number;\n public onDisplayMonths = false;\n public onDisplayYears = false;\n public displayYearsIndex = 0;\n public displayYearRange: Array<number>;\n public fullYearRange: Array<any>;\n public monthsShort: Array<string> = moment.monthsShort();\n public calendarDays: Array<Moment>;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.initValue();\n // default to current year range\n _.each(this.fullYearRange, (v, i) => {\n this.currentYear = this.calendarDate.clone().startOf('year').year();\n if (v.indexOf(this.currentYear) !== -1) {\n this.displayYearsIndex = i;\n }\n });\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n this.generateCalendar();\n }\n\n public prev(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex--;\n if (this.displayYearsIndex < 0) {\n this.displayYearsIndex = 0;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n } else {\n this.calendarDate = this.calendarDate.clone().subtract(1, 'M');\n }\n this.generateCalendar();\n }\n\n public showMonthSelection(): void {\n this.onDisplayMonths = true;\n this.onDisplayYears = false;\n }\n\n public showYearSelection(): void {\n this.onDisplayYears = true;\n this.onDisplayMonths = false;\n }\n\n public next(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex++;\n if (this.displayYearsIndex >= this.fullYearRange.length) {\n this.displayYearsIndex = this.fullYearRange.length - 1;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex++];\n } else {\n this.calendarDate = this.calendarDate.clone().add(1, 'M');\n }\n this.generateCalendar();\n }\n\n public selectDay(day: Moment): void {\n const daysDifference = day.diff(\n this.calendarDate.clone().startOf('date'),\n 'days'\n );\n day = this.calendarDate.clone().add(daysDifference, 'd');\n const selectedDay = this.parseToReturnObjectType(day);\n this.onSelectDate.emit(selectedDay);\n this.cancelDatePicker();\n return;\n }\n\n public selectMonth(month: string) {\n this.calendarDate = this.calendarDate.clone().month(month);\n this.onDisplayMonths = false;\n this.generateCalendar();\n }\n\n public selectYear(year: number) {\n this.calendarDate = this.calendarDate.clone().year(year);\n this.onDisplayYears = false;\n this.generateCalendar();\n }\n\n public selectToday(): void {\n const today = this.parseToReturnObjectType(moment());\n this.onSelectDate.emit(today);\n this.cancelDatePicker();\n return;\n }\n\n public clearPickDate(): void {\n this.onSelectDate.emit(null);\n this.cancelDatePicker();\n return;\n }\n\n public cancelDatePicker(): void {\n this.onDatePickerCancel.emit(false);\n return;\n }\n\n protected generateYears(): void {\n const currentYear = moment().year();\n const startYr = this.calendarDate.clone().subtract(100, 'y').year();\n // const endYr = this.calendarDate.clone().add(10, 'y').year();\n const years = [];\n for (let year = startYr; year <= currentYear; year++) {\n years.push(year);\n }\n\n this.fullYearRange = _.chunk(years, 14);\n }\n\n protected initValue() {\n // set moment locale (default is en)\n moment.locale(this.locale);\n // set today value\n this.today = moment().startOf('date');\n this.currentMonth = this.monthsShort[moment().month()];\n this.currentYear = moment().year();\n\n // set week days name array\n this.dayNames = moment.weekdaysShort(true);\n\n // check if the input initDate has value\n if (this.initDate) {\n this.calendarDate =\n this.returnObject === 'string'\n ? moment(this.initDate, this.viewFormat)\n : moment(this.initDate);\n this.selectedDate = this.calendarDate.clone().startOf('date');\n } else {\n this.calendarDate = moment();\n }\n this.generateYears();\n }\n\n protected generateCalendar(): void {\n this.calendarDays = [];\n const start =\n 0 -\n ((this.calendarDate.clone().startOf('month').day() +\n (7 - moment.localeData().firstDayOfWeek())) %\n 7);\n const end = 41 + start; // iterator ending point\n\n for (let i = start; i <= end; i += 1) {\n const day = this.calendarDate.clone().startOf('month').add(i, 'days');\n this.calendarDays.push(day);\n }\n }\n\n protected parseToReturnObjectType(day: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return day.toDate();\n\n case 'string':\n return day.format(this.viewFormat);\n\n case 'moment':\n return day;\n\n case 'json':\n return day.toJSON();\n\n case 'array':\n return day.toArray();\n\n case 'iso':\n return day.toISOString();\n\n case 'object':\n return day.toObject();\n\n default:\n return day;\n }\n }\n}\n","/**\n * time-picker.component\n */\n\nimport { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./time-picker.component.css');\n// const myDpTpl: string = require('./time-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'time-picker',\n templateUrl: './time-picker.component.html',\n styleUrls: ['./time-picker.component.css']\n})\nexport class TimePickerComponent implements OnInit {\n @Input() initTime: any;\n @Input() showSecond = true;\n @Input() viewFormat = 'hh:mm A';\n @Input() use12Hour = false;\n @Input() returnObject = 'js';\n @Output() onSelectTime = new EventEmitter<any>();\n @Output() onTimePickerCancel = new EventEmitter<boolean>();\n hourFormat = 'HH';\n public time: Moment;\n\n constructor() {}\n\n ngOnInit(): void {\n if (this.use12Hour) {\n this.hourFormat = 'hh';\n }\n this.time = this.initTime\n ? moment(this.initTime, this.viewFormat)\n : moment();\n\n // check if the input initDate has value\n if (this.initTime) {\n this.time =\n this.returnObject === 'string'\n ? moment(this.initTime, this.viewFormat)\n : moment(this.initTime);\n } else {\n this.time = moment();\n }\n }\n\n increaseHour(): void {\n this.time = this.time.clone().add(1, 'h');\n }\n\n decreaseHour(): void {\n this.time = this.time.clone().subtract(1, 'h');\n }\n\n increaseMinute() {\n this.time = this.time.clone().add(1, 'm');\n }\n\n decreaseMinute() {\n this.time = this.time.clone().subtract(1, 'm');\n }\n\n increaseSecond(): void {\n this.time = this.time.clone().add(1, 's');\n }\n\n decreaseSecond(): void {\n this.time = this.time.clone().subtract(1, 's');\n }\n\n selectTime(): void {\n const selectTime = this.parseToReturnObjectType(this.time);\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n selectNow(): void {\n const selectTime = this.parseToReturnObjectType(moment());\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n clearTime(): void {\n this.onSelectTime.emit(null);\n this.cancelTimePicker();\n return;\n }\n\n cancelTimePicker(): void {\n this.onTimePickerCancel.emit(false);\n return;\n }\n\n protected parseToReturnObjectType(time: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return time.toDate();\n\n case 'string':\n return time.format(this.viewFormat);\n\n case 'moment':\n return time;\n\n case 'json':\n return time.toJSON();\n\n case 'array':\n return time.toArray();\n\n case 'iso':\n return time.toISOString();\n\n case 'object':\n return time.toObject();\n\n default:\n return time;\n }\n }\n}\n","/**\n * modal.component\n */\n\nimport {\n Component,\n Output,\n OnInit,\n EventEmitter,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./modal.component.css');\n// const myDpTpl: string = require('./modal.component.html');\n// webpack2_\n\n@Component({\n selector: 'picker-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: []\n})\nexport class ModalComponent implements OnInit {\n @Output() onOverlayClick = new EventEmitter<boolean>();\n\n constructor() {}\n\n ngOnInit() {}\n\n closeModal() {\n this.onOverlayClick.emit(false);\n }\n}\n","/**\n * moment.pipe\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Moment } from 'moment/moment';\n\n@Pipe({ name: 'moment' })\nexport class MomentPipe implements PipeTransform {\n transform(moment: Moment, format?: string): string {\n return format ? moment.format(format) : moment.format('MMM DD, YYYY');\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as moment_ from 'moment';\n\nconst Moment = moment_;\n\n@Component({\n selector: 'date-time-picker',\n templateUrl: './date-time-picker.component.html',\n styleUrls: ['./date-time-picker.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor {\n @Input() modelValue: any;\n @Input() showDate = true;\n @Input() showTime = false;\n @Input() showWeeks = false;\n @Input() weeks: number[] = [2, 4, 6, 8, 12, 16, 24];\n @Output() onDateChange = new EventEmitter<any>();\n public showDatePicker = false;\n public showTimePicker = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor() {}\n\n ngOnInit() {}\n\n weeksSelected(count) {\n const now = new Date();\n const nextDate = now.setDate(now.getDate() + count * 7);\n this.value = Moment(nextDate).format();\n }\n setDate(date: any): void {\n if (date && date !== '') {\n this.value = Moment(date).format();\n } else {\n this.value = date;\n }\n }\n\n setTime(time: any): void {\n if (time && time !== '') {\n this.value = Moment(time).format();\n } else {\n this.value = time;\n }\n return;\n }\n\n toggleDatePicker(status: boolean): void {\n this.showDatePicker = status;\n /*setTimeout(function() {\n let _body = document.getElementById('content-wrapper').getBoundingClientRect(),\n elem = document.getElementById('section-modal-main');\n if (elem) {\n let elemBox = elem.getBoundingClientRect();\n if (elemBox.bottom > _body.bottom) {\n elem.style.bottom = '36px';\n }\n }\n }, 0);*/\n return;\n }\n\n toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n get value() {\n return this.modelValue;\n }\n\n set value(val) {\n this.modelValue = val;\n this.onDateChange.emit(val);\n this.onChange(val);\n this.onTouched();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n writeValue(value) {\n if (value instanceof Date) {\n this.value = Moment(value).format();\n } else {\n this.value = value;\n }\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { TimePickerComponent } from './time-picker/time-picker.component';\nimport { ModalComponent } from './picker-modal/modal.component';\nimport { MomentPipe } from './pipes/moment.pipe';\nimport { DateTimePickerComponent } from './date-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n exports: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n providers: []\n})\nexport class DateTimePickerModule {}\n","import { Component, forwardRef , Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Component({\n selector: 'ngx-datetimepicker',\n templateUrl: './ngx-datetime-picker.html',\n styleUrls: ['./ngx-datetime-picker.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDatetimeComponent),\n multi: true\n }\n ]\n})\nexport class NgxDatetimeComponent implements ControlValueAccessor {\n value: String | Date = '';\n isDisabled = false;\n @Input() id = ''\n;\n onChange = (_: any) => { };\n onTouch = () => { };\n onInput($event: any) {\n this.onTouch();\n this.onChange(moment($event.value).format());\n }\n\n writeValue(value: any): void {\n if (value && value !== '') {\n this.value = moment(value).format();\n } else {\n this.value = '';\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n}\n","/**\n * date-time-picker-intl.service\n */\n\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class OwlDateTimeIntl {\n\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n readonly changes: Subject<void> = new Subject<void>();\n\n /** A label for the up second button (used by screen readers). */\n upSecondLabel = 'Add a second';\n\n /** A label for the down second button (used by screen readers). */\n downSecondLabel = 'Minus a second';\n\n /** A label for the up minute button (used by screen readers). */\n upMinuteLabel = 'Add a minute';\n\n /** A label for the down minute button (used by screen readers). */\n downMinuteLabel = 'Minus a minute';\n\n /** A label for the up hour button (used by screen readers). */\n upHourLabel = 'Add a hour';\n\n /** A label for the down hour button (used by screen readers). */\n downHourLabel = 'Minus a hour';\n\n /** A label for the previous month button (used by screen readers). */\n prevMonthLabel = 'Previous month';\n\n /** A label for the next month button (used by screen readers). */\n nextMonthLabel = 'Next month';\n\n /** A label for the previous year button (used by screen readers). */\n prevYearLabel = 'Previous year';\n\n /** A label for the next year button (used by screen readers). */\n nextYearLabel = 'Next year';\n\n /** A label for the previous multi-year button (used by screen readers). */\n prevMultiYearLabel = 'Previous 21 years';\n\n /** A label for the next multi-year button (used by screen readers). */\n nextMultiYearLabel = 'Next 21 years';\n\n /** A label for the 'switch to month view' button (used by screen readers). */\n switchToMonthViewLabel = 'Change to month view';\n\n /** A label for the 'switch to year view' button (used by screen readers). */\n switchToMultiYearViewLabel = 'Choose month and year';\n\n /** A label for the cancel button */\n cancelBtnLabel = 'Cancel';\n\n /** A label for the set button */\n setBtnLabel = 'Set';\n\n /** A label for the range 'from' in picker info */\n rangeFromLabel = 'From';\n\n /** A label for the range 'to' in picker info */\n rangeToLabel = 'To';\n\n /** A label for the hour12 button (AM) */\n hour12AMLabel = 'AM';\n\n /** A label for the hour12 button (PM) */\n hour12PMLabel = 'PM';\n}\n","/**\n * date-time-adapter.class\n */\nimport { Observable, Subject } from 'rxjs';\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\n\n/** InjectionToken for date time picker that can be used to override default locale code. */\nexport const OWL_DATE_TIME_LOCALE = new InjectionToken<string>(\n 'OWL_DATE_TIME_LOCALE',\n {\n providedIn: 'root',\n factory: OWL_DATE_TIME_LOCALE_FACTORY\n }\n);\n\n/** @docs-private */\nexport function OWL_DATE_TIME_LOCALE_FACTORY(): string {\n return inject(LOCALE_ID);\n}\n\n/** Provider for OWL_DATE_TIME_LOCALE injection token. */\nexport const OWL_DATE_TIME_LOCALE_PROVIDER = {\n provide: OWL_DATE_TIME_LOCALE,\n useExisting: LOCALE_ID\n};\n\nexport abstract class DateTimeAdapter<T> {\n /** The locale to use for all dates. */\n protected locale: any;\n\n /** A stream that emits when the locale changes. */\n protected _localeChanges = new Subject<void>();\n get localeChanges(): Observable<void> {\n return this._localeChanges;\n }\n\n /** total milliseconds in a day. */\n protected readonly millisecondsInDay = 86400000;\n\n /** total milliseconds in a minute. */\n protected readonly milliseondsInMinute = 60000;\n\n /**\n * Get the year of the given date\n */\n abstract getYear(date: T): number;\n\n /**\n * Get the month of the given date\n * 0 -- January\n * 11 -- December\n * */\n abstract getMonth(date: T): number;\n\n /**\n * Get the day of the week of the given date\n * 0 -- Sunday\n * 6 -- Saturday\n * */\n abstract getDay(date: T): number;\n\n /**\n * Get the day num of the given date\n */\n abstract getDate(date: T): number;\n\n /**\n * Get the hours of the given date\n */\n abstract getHours(date: T): number;\n\n /**\n * Get the minutes of the given date\n */\n abstract getMinutes(date: T): number;\n\n /**\n * Get the seconds of the given date\n */\n abstract getSeconds(date: T): number;\n\n /**\n * Get the milliseconds timestamp of the given date\n */\n abstract getTime(date: T): number;\n\n /**\n * Gets the number of days in the month of the given date.\n */\n abstract getNumDaysInMonth(date: T): number;\n\n /**\n * Get the number of calendar days between the given dates.\n * If dateLeft is before dateRight, it would return positive value\n * If dateLeft is after dateRight, it would return negative value\n */\n abstract differenceInCalendarDays(dateLeft: T, dateRight: T): number;\n\n /**\n * Gets the name for the year of the given date.\n */\n abstract getYearName(date: T): string;\n\n /**\n * Get a list of month names\n */\n abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n /**\n * Get a list of week names\n */\n abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n /**\n * Gets a list of names for the dates of the month.\n */\n abstract getDateNames(): string[];\n\n /**\n * Return a Date object as a string, using the ISO standard\n */\n abstract toIso8601(date: T): string;\n\n /**\n * Check if the give dates are equal\n */\n abstract isEqual(dateLeft: T, dateRight: T): boolean;\n\n /**\n * Check if the give dates are the same day\n */\n abstract isSameDay(dateLeft: T, dateRight: T): boolean;\n\n /**\n * Checks whether the given date is valid.\n */\n abstract isValid(date: T): boolean;\n\n /**\n * Gets date instance that is not valid.\n */\n abstract invalid(): T;\n\n /**\n * Checks whether the given object is considered a date instance by this DateTimeAdapter.\n */\n abstract isDateInstance(obj: any): boolean;\n\n /**\n * Add the specified number of years to the given date\n */\n abstract addCalendarYears(date: T, amount: number): T;\n\n /**\n * Add the specified number of months to the given date\n */\n abstract addCalendarMonths(date: T, amount: number): T;\n\n /**\n * Add the specified number of days to the given date\n */\n abstract addCalendarDays(date: T, amount: number): T;\n\n /**\n * Set the hours to the given date.\n */\n abstract setHours(date: T, amount: number): T;\n\n /**\n * Set the minutes to the given date.\n */\n abstract setMinutes(date: T, amount: number): T;\n\n /**\n * Set the seconds to the given date.\n */\n abstract setSeconds(date: T, amount: number): T;\n\n /**\n * Creates a date with the given year, month, date, hour, minute and second. Does not allow over/under-flow of the\n * month and date.\n */\n abstract createDate(year: number, month: number, date: number): T;\n abstract createDate(\n year: number,\n month: number,\n date: number,\n hours: number,\n minutes: number,\n seconds: number\n ): T;\n\n /**\n * Clone the given date\n */\n abstract clone(date: T): T;\n\n /**\n * Get a new moment\n * */\n abstract now(): T;\n\n /**\n * Formats a date as a string according to the given format.\n */\n abstract format(date: T, displayFormat: any): string;\n\n /**\n * Parse a user-provided value to a Date Object\n */\n abstract parse(value: any, parseFormat: any): T | null;\n\n /**\n * Compare two given dates\n * 1 if the first date is after the second,\n * -1 if the first date is before the second\n * 0 if dates are equal.\n * */\n compare(first: T, second: T): number {\n if (!this.isValid(first) || !this.isValid(second)) {\n throw Error('JSNativeDate: Cannot compare invalid dates.');\n }\n\n const dateFirst = this.clone(first);\n const dateSecond = this.clone(second);\n\n const diff = this.getTime(dateFirst) - this.getTime(dateSecond);\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1;\n } else {\n // Return 0 if diff is 0; return NaN if diff is NaN\n return diff;\n }\n }\n\n /**\n * Check if two given dates are in the same year\n * 1 if the first date's year is after the second,\n * -1 if the first date's year is before the second\n * 0 if two given dates are in the same year\n * */\n compareYear(first: T, second: T): number {\n if (!this.isValid(first) || !this.isValid(second)) {\n throw Error('JSNativeDate: Cannot compare invalid dates.');\n }\n\n const yearLeft = this.getYear(first);\n const yearRight = this.getYear(second);\n\n const diff = yearLeft - yearRight;\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1;\n } else {\n return 0;\n }\n }\n\n /**\n * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n * string). The default implementation does not allow any deserialization, it simply checks that\n * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n * method on all of it's `@Input()` properties that accept dates. It is therefore possible to\n * support passing values from your backend directly to these properties by overriding this method\n * to also deserialize the format used by your backend.\n */\n deserialize(value: any): T | null {\n if (\n value == null ||\n (this.isDateInstance(value) && this.isValid(value))\n ) {\n return value;\n }\n return this.invalid();\n }\n\n /**\n * Sets the locale used for all dates.\n */\n setLocale(locale: any) {\n this.locale = locale;\n this._localeChanges.next();\n }\n\n /**\n * Clamp the given date between min and max dates.\n */\n clampDate(date: T, min?: T | null, max?: T | null): T {\n if (min && this.compare(date, min) < 0) {\n return min;\n }\n if (max && this.compare(date, max) > 0) {\n return max;\n }\n return date;\n }\n}\n","/**\n * date-time-format.class\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport interface OwlDateTimeFormats {\n parseInput: any;\n fullPickerInput: any;\n datePickerInput: any;\n timePickerInput: any;\n monthYearLabel: any;\n dateA11yLabel: any;\n monthYearA11yLabel: any;\n}\n\n/** InjectionToken for date time picker that can be used to override default format. */\nexport const OWL_DATE_TIME_FORMATS = new InjectionToken<OwlDateTimeFormats>('OWL_DATE_TIME_FORMATS');\n","/* tslint:disable:no-host-metadata-property */\n/**\n * calendar.component\n */\n\nimport {\n AfterContentInit,\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output\n} from '@angular/core';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport {\n OWL_DATE_TIME_FORMATS,\n OwlDateTimeFormats\n} from './adapter/date-time-format.class';\nimport { SelectMode } from './date-time.class';\nimport { take } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'owl-date-time-calendar',\n exportAs: 'owlDateTimeCalendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n host: {\n '[class.owl-dt-calendar]': 'owlDTCalendarClass'\n },\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OwlCalendarComponent<T>\n implements OnInit, AfterContentInit, AfterViewChecked, OnDestroy {\n @Input()\n get minDate(): T | null {\n return this._minDate;\n }\n\n set minDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n value = this.getValidDate(value);\n\n this._minDate = value\n ? this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(value),\n this.dateTimeAdapter.getMonth(value),\n this.dateTimeAdapter.getDate(value)\n )\n : null;\n }\n @Input()\n get maxDate(): T | null {\n return this._maxDate;\n }\n\n set maxDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n value = this.getValidDate(value);\n\n this._maxDate = value\n ? this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(value),\n this.dateTimeAdapter.getMonth(value),\n this.dateTimeAdapter.getDate(value)\n )\n : null;\n }\n @Input()\n get pickerMoment() {\n return this._pickerMoment;\n }\n\n set pickerMoment(value: T) {\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment =\n this.getValidDate(value) || this.dateTimeAdapter.now();\n }\n @Input()\n get selected(): T | null {\n return this._selected;\n }\n\n set selected(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n }\n @Input()\n get selecteds(): T[] {\n return this._selecteds;\n }\n\n set selecteds(values: T[]) {\n this._selecteds = values.map(v => {\n v = this.dateTimeAdapter.deserialize(v);\n return this.getValidDate(v);\n });\n }\n\n get periodButtonText(): string {\n return this.isMonthView\n ? this.dateTimeAdapter.format(\n this.pickerMoment,\n this.dateTimeFormats.monthYearLabel\n )\n : this.dateTimeAdapter.getYearName(this.pickerMoment);\n }\n\n get periodButtonLabel(): string {\n return this.isMonthView\n ? this.pickerIntl.switchToMultiYearViewLabel\n : this.pickerIntl.switchToMonthViewLabel;\n }\n\n get prevButtonLabel(): string {\n if (this._currentView === 'month') {\n return this.pickerIntl.prevMonthLabel;\n } else if (this._currentView === 'year') {\n return this.pickerIntl.prevYearLabel;\n } else {\n return null;\n }\n }\n\n get nextButtonLabel(): string {\n if (this._currentView === 'month') {\n return this.pickerIntl.nextMonthLabel;\n } else if (this._currentView === 'year') {\n return this.pickerIntl.nextYearLabel;\n } else {\n return null;\n }\n }\n get currentView(): 'month' | 'year' | 'multi-years' {\n return this._currentView;\n }\n\n set currentView(view: 'month' | 'year' | 'multi-years') {\n this._currentView = view;\n this.moveFocusOnNextTick = true;\n }\n\n get isInSingleMode(): boolean {\n return this.selectMode === 'single';\n }\n\n get isInRangeMode(): boolean {\n return (\n this.selectMode === 'range' ||\n this.selectMode === 'rangeFrom' ||\n this.selectMode === 'rangeTo'\n );\n }\n\n get showControlArrows(): boolean {\n return this._currentView !== 'multi-years';\n }\n\n get isMonthView() {\n return this._currentView === 'month';\n }\n\n /**\n * Bind class 'owl-dt-calendar' to host\n * */\n get owlDTCalendarClass(): boolean {\n return true;\n }\n\n constructor(\n private elmRef: ElementRef,\n private pickerIntl: OwlDateTimeIntl,\n private ngZone: NgZone,\n private cdRef: ChangeDetectorRef,\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\n @Optional()\n @Inject(OWL_DATE_TIME_FORMATS)\n private dateTimeFormats: OwlDateTimeFormats\n ) {\n this.intlChangesSub = this.pickerIntl.changes.subscribe(() => {\n this.cdRef.markForCheck();\n });\n }\n /**\n * Date filter for the month and year view\n * */\n @Input()\n dateFilter: Function;\n\n /**\n * Set the first day of week\n */\n @Input()\n firstDayOfWeek = 0;\n\n /** The minimum selectable date. */\n private _minDate: T | null;\n\n /** The maximum selectable date. */\n private _maxDate: T | null;\n\n /** The current picker moment */\n private _pickerMoment: T;\n\n @Input()\n selectMode: SelectMode;\n\n /** The currently selected moment. */\n private _selected: T | null;\n\n private _selecteds: T[] = [];\n\n /**\n * The view that the calendar should start in.\n */\n @Input()\n startView: 'month' | 'year' | 'multi-years' = 'month';\n\n /**\n * Whether to hide dates in other months at the start or end of the current month.\n * */\n @Input()\n hideOtherMonths: boolean;\n\n /** Emits when the currently picker moment changes. */\n @Output()\n pickerMomentChange = new EventEmitter<T>();\n\n /** Emits when the currently selected date changes. */\n @Output()\n selectedChange = new EventEmitter<T>();\n\n /** Emits when any date is selected. */\n @Output()\n userSelection = new EventEmitter<void>();\n\n /**\n * Emits the selected year. This doesn't imply a change on the selected date\n * */\n @Output()\n readonly yearSelected = new EventEmitter<T>();\n\n /**\n * Emits the selected month. This doesn't imply a change on the selected date\n * */\n @Output()\n readonly monthSelected = new EventEmitter<T>();\n\n private _currentView: 'month' | 'year' | 'multi-years';\n\n private intlChangesSub = Subscription.EMPTY;\n\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n private moveFocusOnNextTick = false;\n\n /**\n * Date filter for the month and year view\n */\n public dateFilterForViews = (date: T) => {\n return (\n !!date &&\n (!this.dateFilter || this.dateFilter(date)) &&\n (!this.minDate ||\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\n (!this.maxDate ||\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\n );\n }\n\n public ngOnInit() {}\n\n public ngAfterContentInit(): void {\n this._currentView = this.startView;\n }\n\n public ngAfterViewChecked() {\n if (this.moveFocusOnNextTick) {\n this.moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n\n public ngOnDestroy(): void {\n this.intlChangesSub.unsubscribe();\n }\n\n /**\n * Toggle between month view and year view\n */\n public toggleViews(): void {\n this.currentView =\n this._currentView === 'month' ? 'multi-years' : 'month';\n }\n\n /**\n * Handles user clicks on the previous button.\n * */\n public previousClicked(): void {\n this.pickerMoment = this.isMonthView\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1)\n : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1);\n\n this.pickerMomentChange.emit(this.pickerMoment);\n }\n\n /**\n * Handles user clicks on the next button.\n * */\n public nextClicked(): void {\n this.pickerMoment = this.isMonthView\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1)\n : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1);\n\n this.pickerMomentChange.emit(this.pickerMoment);\n }\n\n public dateSelected(date: T): void {\n if (!this.dateFilterForViews(date)) {\n return;\n }\n\n this.selectedChange.emit(date);\n\n /*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||\n this.isInRangeMode) {\n this.selectedChange.emit(date);\n }*/\n }\n\n /**\n * Change the pickerMoment value and switch to a specific view\n */\n public goToDateInView(\n date: T,\n view: 'month' | 'year' | 'multi-years'\n ): void {\n this.handlePickerMomentChange(date);\n this.currentView = view;\n return;\n }\n\n /**\n * Change the pickerMoment value\n */\n public handlePickerMomentChange(date: T): void {\n this.pickerMoment = this.dateTimeAdapter.clampDate(\n date,\n this.minDate,\n this.maxDate\n );\n this.pickerMomentChange.emit(this.pickerMoment);\n return;\n }\n\n public userSelected(): void {\n this.userSelection.emit();\n }\n\n /**\n * Whether the previous period button is enabled.\n */\n public prevButtonEnabled(): boolean {\n return (\n !this.minDate || !this.isSameView(this.pickerMoment, this.minDate)\n );\n }\n\n /**\n * Whether the next period button is enabled.\n */\n public nextButtonEnabled(): boolean {\n return (\n !this.maxDate || !this.isSameView(this.pickerMoment, this.maxDate)\n );\n }\n\n /**\n * Focus to the host element\n * */\n public focusActiveCell() {\n this.ngZone.runOutsideAngular(() => {\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.elmRef.nativeElement\n .querySelector('.owl-dt-calendar-cell-active')\n .focus();\n });\n });\n }\n\n public selectYearInMultiYearView(normalizedYear: T): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n public selectMonthInYearView(normalizedMonth: T): void {\n this.monthSelected.emit(normalizedMonth);\n }\n\n /**\n * Whether the two dates represent the same view in the current view mode (month or year).\n */\n private isSameView(date1: T, date2: T): boolean {\n if (this._currentView === 'month') {\n return !!(\n date1 &&\n date2 &&\n this.dateTimeAdapter.getYear(date1) ===\n this.dateTimeAdapter.getYear(date2) &&\n this.dateTimeAdapter.getMonth(date1) ===\n this.dateTimeAdapter.getMonth(date2)\n );\n } else if (this._currentView === 'year') {\n return !!(\n date1 &&\n date2 &&\n this.dateTimeAdapter.getYear(date1) ===\n this.dateTimeAdapter.getYear(date2)\n );\n } else {\n return false;\n }\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | null {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : null;\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * timer.component\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Optional,\n Output\n} from '@angular/core';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { take } from 'rxjs/operators';\n\n@Component({\n exportAs: 'owlDateTimeTimer',\n selector: 'owl-date-time-timer',\n templateUrl: './timer.component.html',\n styleUrls: ['./timer.component.scss'],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.owl-dt-timer]': 'owlDTTimerClass',\n '[attr.tabindex]': 'owlDTTimeTabIndex'\n }\n})\nexport class OwlTimerComponent<T> implements OnInit {\n /** The current picker moment */\n private _pickerMoment: T;\n @Input()\n get pickerMoment() {\n return this._pickerMoment;\n }\n\n set pickerMoment(value: T) {\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment =\n this.getValidDate(value) || this.dateTimeAdapter.now();\n }\n\n /** The minimum selectable date time. */\n private _minDateTime: T | null;\n @Input()\n get minDateTime(): T | null {\n return this._minDateTime;\n }\n\n set minDateTime(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDateTime = this.getValidDate(value);\n }\n\n /** The maximum selectable date time. */\n private _maxDateTime: T | null;\n @Input()\n get maxDateTime(): T | null {\n return this._maxDateTime;\n }\n\n set maxDateTime(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDateTime = this.getValidDate(value);\n }\n\n private isPM = false; // a flag indicates the current timer moment is in PM or AM\n\n /**\n * Whether to show the second's timer\n */\n @Input()\n showSecondsTimer: boolean;\n\n /**\n * Whether the timer is in hour12 format\n */\n @Input()\n hour12Timer: boolean;\n\n /**\n * Hours to change per step\n */\n @Input()\n stepHour = 1;\n\n /**\n * Minutes to change per step\n */\n @Input()\n stepMinute = 1;\n\n /**\n * Seconds to change per step\n */\n @Input()\n stepSecond = 1;\n\n get hourValue(): number {\n return this.dateTimeAdapter.getHours(this.pickerMoment);\n }\n\n /**\n * The value would be displayed in hourBox.\n * We need this because the value displayed in hourBox it not\n * the same as the hourValue when the timer is in hour12Timer mode.\n * */\n get hourBoxValue(): number {\n let hours = this.hourValue;\n\n if (!this.hour12Timer) {\n return hours;\n } else {\n if (hours === 0) {\n hours = 12;\n this.isPM = false;\n } else if (hours > 0 && hours < 12) {\n this.isPM = false;\n } else if (hours === 12) {\n this.isPM = true;\n } else if (hours > 12 && hours < 24) {\n hours = hours - 12;\n this.isPM = true;\n }\n\n return hours;\n }\n }\n\n get minuteValue(): number {\n return this.dateTimeAdapter.getMinutes(this.pickerMoment);\n }\n\n get secondValue(): number {\n return this.dateTimeAdapter.getSeconds(this.pickerMoment);\n }\n\n get upHourButtonLabel(): string {\n return this.pickerIntl.upHourLabel;\n }\n\n get downHourButtonLabel(): string {\n return this.pickerIntl.downHourLabel;\n }\n\n get upMinuteButtonLabel(): string {\n return this.pickerIntl.upMinuteLabel;\n }\n\n get downMinuteButtonLabel(): string {\n return this.pickerIntl.downMinuteLabel;\n }\n\n get upSecondButtonLabel(): string {\n return this.pickerIntl.upSecondLabel;\n }\n\n get downSecondButtonLabel(): string {\n return this.pickerIntl.downSecondLabel;\n }\n\n get hour12ButtonLabel(): string {\n return this.isPM\n ? this.pickerIntl.hour12PMLabel\n : this.pickerIntl.hour12AMLabel;\n }\n\n @Output()\n selectedChange = new EventEmitter<T>();\n\n get owlDTTimerClass(): boolean {\n return true;\n }\n\n get owlDTTimeTabIndex(): number {\n return -1;\n }\n\n constructor(\n private ngZone: NgZone,\n private elmRef: ElementRef,\n private pickerIntl: OwlDateTimeIntl,\n private cdRef: ChangeDetectorRef,\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>\n ) {}\n\n public ngOnInit() {}\n\n /**\n * Focus to the host element\n * */\n public focus() {\n this.ngZone.runOutsideAngular(() => {\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.elmRef.nativeElement.focus();\n });\n });\n }\n\n /**\n * Set the hour value via typing into timer box input\n * We need this to handle the hour value when the timer is in hour12 mode\n * */\n public setHourValueViaInput(hours: number): void {\n if (this.hour12Timer && this.isPM && hours >= 1 && hours <= 11) {\n hours = hours + 12;\n } else if (this.hour12Timer && !this.isPM && hours === 12) {\n hours = 0;\n }\n\n this.setHourValue(hours);\n }\n\n public setHourValue(hours: number): void {\n const m = this.dateTimeAdapter.setHours(this.pickerMoment, hours);\n this.selectedChange.emit(m);\n this.cdRef.markForCheck();\n }\n\n public setMinuteValue(minutes: number): void {\n const m = this.dateTimeAdapter.setMinutes(this.pickerMoment, minutes);\n this.selectedChange.emit(m);\n this.cdRef.markForCheck();\n }\n\n public setSecondValue(seconds: number): void {\n const m = this.dateTimeAdapter.setSeconds(this.pickerMoment, seconds);\n this.selectedChange.emit(m);\n this.cdRef.markForCheck();\n }\n\n public setMeridiem(event: any): void {\n this.isPM = !this.isPM;\n\n let hours = this.hourValue;\n if (this.isPM) {\n hours = hours + 12;\n } else {\n hours = hours - 12;\n }\n\n if (hours >= 0 && hours <= 23) {\n this.setHourValue(hours);\n }\n\n this.cdRef.markForCheck();\n event.preventDefault();\n }\n\n /**\n * Check if the up hour button is enabled\n */\n public upHourEnabled(): boolean {\n return (\n !this.maxDateTime ||\n this.compareHours(this.stepHour, this.maxDateTime) < 1\n );\n }\n\n /**\n * Check if the down hour button is enabled\n */\n public downHourEnabled(): boolean {\n return (\n !this.minDateTime ||\n this.compareHours(-this.stepHour, this.minDateTime) > -1\n );\n }\n\n /**\n * Check if the up minute button is enabled\n */\n public upMinuteEnabled(): boolean {\n return (\n !this.maxDateTime ||\n this.compareMinutes(this.stepMinute, this.maxDateTime) < 1\n );\n }\n\n /**\n * Check if the down minute button is enabled\n */\n public downMinuteEnabled(): boolean {\n return (\n !this.minDateTime ||\n this.compareMinutes(-this.stepMinute, this.minDateTime) > -1\n );\n }\n\n /**\n * Check if the up second button is enabled\n */\n public upSecondEnabled(): boolean {\n return (\n !this.maxDateTime ||\n this.compareSeconds(this.stepSecond, this.maxDateTime) < 1\n );\n }\n\n /**\n * Check if the down second button is enabled\n */\n public downSecondEnabled(): boolean {\n return (\n !this.minDateTime ||\n this.compareSeconds(-this.stepSecond, this.minDateTime) > -1\n );\n }\n\n /**\n * PickerMoment's hour value +/- certain amount and compare it to the give date\n * 1 is after the comparedDate\n * -1 is before the comparedDate\n * 0 is equal the comparedDate\n * */\n private compareHours(amount: number, comparedDate: T): number {\n const hours = this.dateTimeAdapter.getHours(this.pickerMoment) + amount;\n const result = this.dateTimeAdapter.setHours(this.pickerMoment, hours);\n return this.dateTimeAdapter.compare(result, comparedDate);\n }\n\n /**\n * PickerMoment's minute value +/- certain amount and compare it to the give date\n * 1 is after the comparedDate\n * -1 is before the comparedDate\n * 0 is equal the comparedDate\n * */\n private compareMinutes(amount: number, comparedDate: T): number {\n const minutes =\n this.dateTimeAdapter.getMinutes(this.pickerMoment) + amount;\n const result = this.dateTimeAdapter.setMinutes(\n this.pickerMoment,\n minutes\n );\n return this.dateTimeAdapter.compare(result, comparedDate);\n }\n\n /**\n * PickerMoment's second value +/- certain amount and compare it to the give date\n * 1 is after the comparedDate\n * -1 is before the comparedDate\n * 0 is equal the comparedDate\n * */\n private compareSeconds(amount: number, comparedDate: T): number {\n const seconds =\n this.dateTimeAdapter.getSeconds(this.pickerMoment) + amount;\n const result = this.dateTimeAdapter.setSeconds(\n this.pickerMoment,\n seconds\n );\n return this.dateTimeAdapter.compare(result, comparedDate);\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | null {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : null;\n }\n}\n","/**\n * date-time-picker.animations\n */\nimport {\n animate, animateChild,\n AnimationTriggerMetadata,\n group,\n query,\n state,\n style,\n transition,\n trigger\n} from '@angular/animations';\n\nexport const owlDateTimePickerAnimations: {\n readonly transformPicker: AnimationTriggerMetadata;\n readonly fadeInPicker: AnimationTriggerMetadata;\n} = {\n\n transformPicker: trigger('transformPicker', [\n state('void', style({opacity: 0, transform: 'scale(1, 0)'})),\n state('enter', style({opacity: 1, transform: 'scale(1, 1)'})),\n transition('void => enter', group([\n query('@fadeInPicker', animateChild(), { optional: true }),\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')\n ])),\n transition('enter => void', animate('100ms linear', style({opacity: 0})))\n ]),\n\n fadeInPicker: trigger('fadeInPicker', [\n state('enter', style({opacity: 1})),\n state('void', style({opacity: 0})),\n transition('void => enter', animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')),\n ])\n};\n","/* tslint:disable:no-host-metadata-property */\n/**\n * date-time-picker-container.component\n */\n\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n Optional,\n ViewChild\n} from '@angular/core';\nimport { AnimationEvent } from '@angular/animations';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { OwlCalendarComponent } from './calendar.component';\nimport { OwlTimerComponent } from './timer.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OwlDateTime, PickerType } from './date-time.class';\nimport { Observable, Subject } from 'rxjs';\nimport { owlDateTimePickerAnimations } from './date-time-picker.animations';\nimport {\n DOWN_ARROW,\n LEFT_ARROW,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW\n} from '@angular/cdk/keycodes';\n\n@Component({\n exportAs: 'owlDateTimeContainer',\n selector: 'owl-date-time-container',\n templateUrl: './date-time-picker-container.component.html',\n styleUrls: ['./date-time-picker-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n animations: [\n owlDateTimePickerAnimations.transformPicker,\n owlDateTimePickerAnimations.fadeInPicker\n ],\n host: {\n '(@transformPicker.done)': 'handleContainerAnimationDone($event)',\n '[class.owl-dt-container]': 'owlDTContainerClass',\n '[class.owl-dt-popup-container]': 'owlDTPopupContainerClass',\n '[class.owl-dt-dialog-container]': 'owlDTDialogContainerClass',\n '[class.owl-dt-inline-container]': 'owlDTInlineContainerClass',\n '[class.owl-dt-container-disabled]': 'owlDTContainerDisabledClass',\n '[attr.id]': 'owlDTContainerId',\n '[@transformPicker]': 'owlDTContainerAnimation',\n }\n})\nexport class OwlDateTimeContainerComponent<T>\n implements OnInit, AfterContentInit, AfterViewInit {\n @ViewChild(OwlCalendarComponent, { static: false })\n calendar: OwlCalendarComponent<T>;\n @ViewChild(OwlTimerComponent, { static: false })\n timer: OwlTimerComponent<T>;\n\n public picker: OwlDateTime<T>;\n public activeSelectedIndex = 0; // The current active SelectedIndex in range select mode (0: 'from', 1: 'to')\n\n /**\n * Stream emits when try to hide picker\n * */\n private hidePicker$ = new Subject<any>();\n\n get hidePickerStream(): Observable<any> {\n return this.hidePicker$.asObservable();\n }\n\n /**\n * Stream emits when try to confirm the selected value\n * */\n private confirmSelected$ = new Subject<any>();\n\n get confirmSelectedStream(): Observable<any> {\n return this.confirmSelected$.asObservable();\n }\n\n private pickerOpened$ = new Subject<any>();\n\n get pickerOpenedStream(): Observable<any> {\n return this.pickerOpened$.asObservable();\n }\n\n /**\n * The current picker moment. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n private _clamPickerMoment: T;\n\n get pickerMoment() {\n return this._clamPickerMoment;\n }\n\n set pickerMoment(value: T) {\n if (value) {\n this._clamPickerMoment = this.dateTimeAdapter.clampDate(\n value,\n this.picker.minDateTime,\n this.picker.maxDateTime\n );\n }\n this.cdRef.markForCheck();\n }\n\n get pickerType(): PickerType {\n return this.picker.pickerType;\n }\n\n get cancelLabel(): string {\n return this.pickerIntl.cancelBtnLabel;\n }\n\n get setLabel(): string {\n return this.pickerIntl.setBtnLabel;\n }\n\n /**\n * The range 'from' label\n * */\n get fromLabel(): string {\n return this.pickerIntl.rangeFromLabel;\n }\n\n /**\n * The range 'to' label\n * */\n get toLabel(): string {\n return this.pickerIntl.rangeToLabel;\n }\n\n /**\n * The range 'from' formatted value\n * */\n get fromFormattedValue(): string {\n const value = this.picker.selecteds[0];\n return value\n ? this.dateTimeAdapter.format(value, this.picker.formatString)\n : '';\n }\n\n /**\n * The range 'to' formatted value\n * */\n get toFormattedValue(): string {\n const value = this.picker.selecteds[1];\n return value\n ? this.dateTimeAdapter.format(value, this.picker.formatString)\n : '';\n }\n\n /**\n * Cases in which the control buttons show in the picker\n * 1) picker mode is 'dialog'\n * 2) picker type is NOT 'calendar' and the picker mode is NOT 'inline'\n * */\n get showControlButtons(): boolean {\n return (\n this.picker.pickerMode === 'dialog' ||\n (this.picker.pickerType !== 'calendar' &&\n this.picker.pickerMode !== 'inline')\n );\n }\n\n get containerElm(): HTMLElement {\n return this.elmRef.nativeElement;\n }\n\n get owlDTContainerClass(): boolean {\n return true;\n }\n\n get owlDTPopupContainerClass(): boolean {\n return this.picker.pickerMode === 'popup';\n }\n\n get owlDTDialogContainerClass(): boolean {\n return this.picker.pickerMode === 'dialog';\n }\n\n get owlDTInlineContainerClass(): boolean {\n return this.picker.pickerMode === 'inline';\n }\n\n get owlDTContainerDisabledClass(): boolean {\n return this.picker.disabled;\n }\n\n get owlDTContainerId(): string {\n return this.picker.id;\n }\n\n get owlDTContainerAnimation(): any {\n return this.picker.pickerMode === 'inline' ? '' : 'enter';\n }\n\n constructor( private cdRef: ChangeDetectorRef,\n private elmRef: ElementRef,\n private pickerIntl: OwlDateTimeIntl,\n @Optional() private dateTimeAdapter: DateTimeAdapter<T> ) {\n }\n\n public ngOnInit() {}\n\n public ngAfterContentInit(): void {\n this.initPicker();\n }\n\n public ngAfterViewInit(): void {\n this.focusPicker();\n }\n\n public handleContainerAnimationDone(event: AnimationEvent): void {\n const toState = event.toState;\n if (toState === 'enter') {\n this.pickerOpened$.next();\n }\n }\n\n public dateSelected(date: T): void {\n let result;\n\n if (this.picker.isInSingleMode) {\n result = this.dateSelectedInSingleMode(date);\n if (result) {\n this.pickerMoment = result;\n this.picker.select(result);\n } else {\n // we close the picker when result is null and pickerType is calendar.\n if (this.pickerType === 'calendar') {\n this.hidePicker$.next(null);\n }\n }\n return;\n }\n\n if (this.picker.isInRangeMode) {\n result = this.dateSelectedInRangeMode(date);\n if (result) {\n this.pickerMoment = result[this.activeSelectedIndex];\n this.picker.select(result);\n }\n }\n }\n\n public timeSelected(time: T): void {\n this.pickerMoment = this.dateTimeAdapter.clone(time);\n\n if (!this.picker.dateTimeChecker(this.pickerMoment)) {\n return;\n }\n\n if (this.picker.isInSingleMode) {\n this.picker.select(this.pickerMoment);\n return;\n }\n\n if (this.picker.isInRangeMode) {\n const selecteds = [...this.picker.selecteds];\n\n // check if the 'from' is after 'to' or 'to'is before 'from'\n // In this case, we set both the 'from' and 'to' the same value\n if (\n (this.activeSelectedIndex === 0 &&\n selecteds[1] &&\n this.dateTimeAdapter.compare(\n this.pickerMoment,\n selecteds[1]\n ) === 1) ||\n (this.activeSelectedIndex === 1 &&\n selecteds[0] &&\n this.dateTimeAdapter.compare(\n this.pickerMoment,\n selecteds[0]\n ) === -1)\n ) {\n selecteds[0] = this.pickerMoment;\n selecteds[1] = this.pickerMoment;\n } else {\n selecteds[this.activeSelectedIndex] = this.pickerMoment;\n }\n\n this.picker.select(selecteds);\n }\n }\n\n /**\n * Handle click on cancel button\n */\n public onCancelClicked(event: any): void {\n this.hidePicker$.next(null);\n event.preventDefault();\n return;\n }\n\n /**\n * Handle click on set button\n */\n public onSetClicked(event: any): void {\n if (!this.picker.dateTimeChecker(this.pickerMoment)) {\n this.hidePicker$.next(null);\n event.preventDefault();\n return;\n }\n\n this.confirmSelected$.next(event);\n event.preventDefault();\n return;\n }\n\n /**\n * Handle click on inform radio group\n */\n public handleClickOnInfoGroup(event: any, index: number): void {\n this.setActiveSelectedIndex(index);\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Handle click on inform radio group\n */\n public handleKeydownOnInfoGroup(\n event: any,\n next: any,\n index: number\n ): void {\n switch (event.keyCode) {\n case DOWN_ARROW:\n case RIGHT_ARROW:\n case UP_ARROW:\n case LEFT_ARROW:\n next.focus();\n this.setActiveSelectedIndex(index === 0 ? 1 : 0);\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case SPACE:\n this.setActiveSelectedIndex(index);\n event.preventDefault();\n event.stopPropagation();\n break;\n\n default:\n return;\n }\n }\n\n /**\n * Set the value of activeSelectedIndex\n */\n private setActiveSelectedIndex(index: number): void {\n if (\n this.picker.selectMode === 'range' &&\n this.activeSelectedIndex !== index\n ) {\n this.activeSelectedIndex = index;\n\n const selected = this.picker.selecteds[this.activeSelectedIndex];\n if (this.picker.selecteds && selected) {\n this.pickerMoment = this.dateTimeAdapter.clone(selected);\n }\n }\n return;\n }\n\n private initPicker(): void {\n this.pickerMoment = this.picker.startAt || this.dateTimeAdapter.now();\n this.activeSelectedIndex = this.picker.selectMode === 'rangeTo' ? 1 : 0;\n }\n\n /**\n * Select calendar date in single mode,\n * it returns null when date is not selected.\n */\n private dateSelectedInSingleMode(date: T): T | null {\n if (this.dateTimeAdapter.isSameDay(date, this.picker.selected)) {\n return null;\n }\n\n return this.updateAndCheckCalendarDate(date);\n }\n\n /**\n * Select dates in range Mode\n */\n private dateSelectedInRangeMode(date: T): T[] | null {\n let from = this.picker.selecteds[0];\n let to = this.picker.selecteds[1];\n\n const result = this.updateAndCheckCalendarDate(date);\n\n if (!result) {\n return null;\n }\n\n // if the given calendar day is after or equal to 'from',\n // set ths given date as 'to'\n // otherwise, set it as 'from' and set 'to' to null\n if (this.picker.selectMode === 'range') {\n if (\n this.picker.selecteds &&\n this.picker.selecteds.length &&\n !to &&\n from &&\n this.dateTimeAdapter.differenceInCalendarDays(result, from) >= 0\n ) {\n to = result;\n this.activeSelectedIndex = 1;\n } else {\n from = result;\n to = null;\n this.activeSelectedIndex = 0;\n }\n } else if (this.picker.selectMode === 'rangeFrom') {\n from = result;\n\n // if the from value is after the to value, set the to value as null\n if (to && this.dateTimeAdapter.compare(from, to) > 0) {\n to = null;\n }\n } else if (this.picker.selectMode === 'rangeTo') {\n to = result;\n\n // if the from value is after the to value, set the from value as null\n if (from && this.dateTimeAdapter.compare(from, to) > 0) {\n from = null;\n }\n }\n\n return [from, to];\n }\n\n /**\n * Update the given calendar date's time and check if it is valid\n * Because the calendar date has 00:00:00 as default time, if the picker type is 'both',\n * we need to update the given calendar date's time before selecting it.\n * if it is valid, return the updated dateTime\n * if it is not valid, return null\n */\n private updateAndCheckCalendarDate(date: T): T {\n let result;\n\n // if the picker is 'both', update the calendar date's time value\n if (this.picker.pickerType === 'both') {\n result = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(date),\n this.dateTimeAdapter.getMonth(date),\n this.dateTimeAdapter.getDate(date),\n this.dateTimeAdapter.getHours(this.pickerMoment),\n this.dateTimeAdapter.getMinutes(this.pickerMoment),\n this.dateTimeAdapter.getSeconds(this.pickerMoment)\n );\n result = this.dateTimeAdapter.clampDate(\n result,\n this.picker.minDateTime,\n this.picker.maxDateTime\n );\n } else {\n result = this.dateTimeAdapter.clone(date);\n }\n\n // check the updated dateTime\n return this.picker.dateTimeChecker(result) ? result : null;\n }\n\n /**\n * Focus to the picker\n * */\n private focusPicker(): void {\n if (this.picker.pickerMode === 'inline') {\n return;\n }\n\n if (this.calendar) {\n this.calendar.focusActiveCell();\n } else if (this.timer) {\n this.timer.focus();\n }\n }\n}\n","/**\n * date-time.class\n */\nimport { Component, EventEmitter, Inject, Injectable, Input, Optional } from '@angular/core';\nimport {\n coerceBooleanProperty,\n coerceNumberProperty\n} from '@angular/cdk/coercion';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport {\n OWL_DATE_TIME_FORMATS,\n OwlDateTimeFormats\n} from './adapter/date-time-format.class';\n\nlet nextUniqueId = 0;\n\nexport type PickerType = 'both' | 'calendar' | 'timer';\n\nexport type PickerMode = 'popup' | 'dialog' | 'inline';\n\nexport type SelectMode = 'single' | 'range' | 'rangeFrom' | 'rangeTo';\n\n@Injectable()\nexport abstract class OwlDateTime<T> {\n @Input()\n get showSecondsTimer(): boolean {\n return this._showSecondsTimer;\n }\n\n set showSecondsTimer(val: boolean) {\n this._showSecondsTimer = coerceBooleanProperty(val);\n }\n @Input()\n get hour12Timer(): boolean {\n return this._hour12Timer;\n }\n\n set hour12Timer(val: boolean) {\n this._hour12Timer = coerceBooleanProperty(val);\n }\n @Input()\n get stepHour(): number {\n return this._stepHour;\n }\n\n set stepHour(val: number) {\n this._stepHour = coerceNumberProperty(val, 1);\n }\n @Input()\n get stepMinute(): number {\n return this._stepMinute;\n }\n\n set stepMinute(val: number) {\n this._stepMinute = coerceNumberProperty(val, 1);\n }\n @Input()\n get stepSecond(): number {\n return this._stepSecond;\n }\n\n set stepSecond(val: number) {\n this._stepSecond = coerceNumberProperty(val, 1);\n }\n @Input()\n get firstDayOfWeek() {\n return this._firstDayOfWeek;\n }\n\n set firstDayOfWeek(value: number) {\n value = coerceNumberProperty(value, 0);\n if (value > 6 || value < 0) {\n this._firstDayOfWeek = 0;\n } else {\n this._firstDayOfWeek = value;\n }\n }\n @Input()\n get hideOtherMonths(): boolean {\n return this._hideOtherMonths;\n }\n\n set hideOtherMonths(val: boolean) {\n this._hideOtherMonths = coerceBooleanProperty(val);\n }\n get id(): string {\n return this._id;\n }\n\n abstract get selected(): T | null;\n\n abstract get selecteds(): T[] | null;\n\n abstract get dateTimeFilter(): (date: T | null) => boolean;\n\n abstract get maxDateTime(): T | null;\n\n abstract get minDateTime(): T | null;\n\n abstract get selectMode(): SelectMode;\n\n abstract get startAt(): T | null;\n\n abstract get opened(): boolean;\n\n abstract get pickerMode(): PickerMode;\n\n abstract get pickerType(): PickerType;\n\n abstract get isInSingleMode(): boolean;\n\n abstract get isInRangeMode(): boolean;\n\n get formatString(): string {\n return this.pickerType === 'both'\n ? this.dateTimeFormats.fullPickerInput\n : this.pickerType === 'calendar'\n ? this.dateTimeFormats.datePickerInput\n : this.dateTimeFormats.timePickerInput;\n }\n\n get disabled(): boolean {\n return false;\n }\n\n constructor(\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\n @Optional()\n @Inject(OWL_DATE_TIME_FORMATS)\n protected dateTimeFormats: OwlDateTimeFormats\n ) {\n if (!this.dateTimeAdapter) {\n throw Error(\n `OwlDateTimePicker: No provider found for DateTimeAdapter. You must import one of the following ` +\n `modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +\n `custom implementation.`\n );\n }\n\n if (!this.dateTimeFormats) {\n throw Error(\n `OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following ` +\n `modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +\n `custom implementation.`\n );\n }\n\n this._id = `owl-dt-picker-${nextUniqueId++}`;\n }\n /**\n * Whether to show the second's timer\n */\n private _showSecondsTimer = false;\n\n /**\n * Whether the timer is in hour12 format\n */\n private _hour12Timer = false;\n\n /**\n * The view that the calendar should start in.\n */\n @Input()\n startView: 'month' | 'year' | 'multi-years' = 'month';\n\n /**\n * Hours to change per step\n */\n private _stepHour = 1;\n\n /**\n * Minutes to change per step\n */\n private _stepMinute = 1;\n\n /**\n * Seconds to change per step\n */\n private _stepSecond = 1;\n\n /**\n * Set the first day of week\n */\n private _firstDayOfWeek = 0;\n\n /**\n * Whether to hide dates in other months at the start or end of the current month.\n */\n private _hideOtherMonths = false;\n\n private _id: string;\n\n abstract yearSelected: EventEmitter<T>;\n\n abstract monthSelected: EventEmitter<T>;\n\n abstract select(date: T | T[]): void;\n\n abstract selectYear(normalizedYear: T): void;\n\n abstract selectMonth(normalizedMonth: T): void;\n\n /**\n * Date Time Checker to check if the give dateTime is selectable\n */\n public dateTimeChecker = (dateTime: T) => {\n return (\n !!dateTime &&\n (!this.dateTimeFilter || this.dateTimeFilter(dateTime)) &&\n (!this.minDateTime ||\n this.dateTimeAdapter.compare(dateTime, this.minDateTime) >=\n 0) &&\n (!this.maxDateTime ||\n this.dateTimeAdapter.compare(dateTime, this.maxDateTime) <= 0)\n );\n }\n\n protected getValidDate(obj: any): T | null {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : null;\n }\n}\n","/**\n * dialog-config.class\n */\nimport { ViewContainerRef } from '@angular/core';\nimport { NoopScrollStrategy, ScrollStrategy } from '@angular/cdk/overlay';\n\nlet uniqueId = 0;\n\n/** Possible overrides for a dialog's position. */\nexport interface DialogPosition {\n /** Override for the dialog's top position. */\n top?: string;\n\n /** Override for the dialog's bottom position. */\n bottom?: string;\n\n /** Override for the dialog's left position. */\n left?: string;\n\n /** Override for the dialog's right position. */\n right?: string;\n}\n\nexport class OwlDialogConfig {\n /**\n * ID of the element that describes the dialog.\n */\n public ariaDescribedBy?: string | null = null;\n\n /**\n * Whether to focus the dialog when the dialog is opened\n */\n public autoFocus ? = true;\n\n /** Whether the dialog has a backdrop. */\n public hasBackdrop ? = true;\n\n /**\n * Custom style for the backdrop\n * */\n public backdropStyle?: any;\n\n /** Data being injected into the child component. */\n public data?: any = null;\n\n /** Whether the user can use escape or clicking outside to close a modal. */\n public disableClose ? = false;\n\n /**\n * ID for the modal. If omitted, a unique one will be generated.\n */\n public id?: string;\n\n /**\n * The ARIA role of the dialog element.\n */\n public role?: 'dialog' | 'alertdialog' = 'dialog';\n\n /**\n * Custom class for the pane\n * */\n public paneClass?: string | string[] = '';\n\n /**\n * Mouse Event\n * */\n public event?: MouseEvent = null;\n\n /**\n * Custom class for the backdrop\n * */\n public backdropClass?: string | string[] = '';\n\n /**\n * Whether the dialog should close when the user goes backwards/forwards in history.\n * */\n public closeOnNavigation = true;\n\n /** Width of the dialog. */\n public width = '';\n\n /** Height of the dialog. */\n public height = '';\n\n /**\n * The min-width of the overlay panel.\n * If a number is provided, pixel units are assumed.\n * */\n public minWidth?: number | string;\n\n /**\n * The min-height of the overlay panel.\n * If a number is provided, pixel units are assumed.\n * */\n public minHeight?: number | string;\n\n /**\n * The max-width of the overlay panel.\n * If a number is provided, pixel units are assumed.\n * */\n public maxWidth?: number | string = '85vw';\n\n /**\n * The max-height of the overlay panel.\n * If a number is provided, pixel units are assumed.\n * */\n public maxHeight?: number | string;\n\n /** Position overrides. */\n public position?: DialogPosition;\n\n /**\n * The scroll strategy when the dialog is open\n * Learn more this from https://material.angular.io/cdk/overlay/overview#scroll-strategies\n * */\n public scrollStrategy?: ScrollStrategy = new NoopScrollStrategy();\n\n public viewContainerRef?: ViewContainerRef;\n\n constructor() {\n this.id = `owl-dialog-${uniqueId++}`;\n }\n}\n","/**\n * dialog-ref.class\n */\nimport { AnimationEvent } from '@angular/animations';\nimport { Location } from '@angular/common';\nimport { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { OwlDialogContainerComponent } from './dialog-container.component';\nimport { DialogPosition } from './dialog-config.class';\nimport { Observable, Subject, Subscription, SubscriptionLike as ISubscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\n\nexport class OwlDialogRef<T> {\n\n private result: any;\n\n private _beforeClose$ = new Subject<any>();\n\n private _afterOpen$ = new Subject<any>();\n\n private _afterClosed$ = new Subject<any>();\n\n /** Subscription to changes in the user's location. */\n private locationChanged: ISubscription = Subscription.EMPTY;\n\n /**\n * The instance of component opened into modal\n * */\n public componentInstance: T;\n\n /** Whether the user is allowed to close the dialog. */\n public disableClose = this.container.config.disableClose;\n\n constructor( private overlayRef: OverlayRef,\n private container: OwlDialogContainerComponent,\n public readonly id: string,\n location?: Location ) {\n\n this.container.animationStateChanged\n .pipe(\n filter(( event: AnimationEvent ) => event.phaseName === 'done' && event.toState === 'enter'),\n take(1)\n )\n .subscribe(() => {\n this._afterOpen$.next();\n this._afterOpen$.complete();\n });\n\n this.container.animationStateChanged\n .pipe(\n filter(( event: AnimationEvent ) => event.phaseName === 'done' && event.toState === 'exit'),\n take(1)\n )\n .subscribe(() => {\n this.overlayRef.dispose();\n this.locationChanged.unsubscribe();\n this._afterClosed$.next(this.result);\n this._afterClosed$.complete();\n this.componentInstance = null!;\n });\n\n this.overlayRef.keydownEvents()\n .pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose))\n .subscribe(() => this.close());\n\n if (location) {\n this.locationChanged = location.subscribe(() => {\n if (this.container.config.closeOnNavigation) {\n this.close();\n }\n });\n }\n }\n\n public close( dialogResult?: any ) {\n this.result = dialogResult;\n\n this.container.animationStateChanged\n .pipe(\n filter(( event: AnimationEvent ) => event.phaseName === 'start'),\n take(1)\n )\n .subscribe(() => {\n this._beforeClose$.next(dialogResult);\n this._beforeClose$.complete();\n this.overlayRef.detachBackdrop();\n });\n\n this.container.startExitAnimation();\n }\n\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n public backdropClick(): Observable<any> {\n return this.overlayRef.backdropClick();\n }\n\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n public keydownEvents(): Observable<KeyboardEvent> {\n return this.overlayRef.keydownEvents();\n }\n\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n public updatePosition( position?: DialogPosition ): this {\n const strategy = this.getPositionStrategy();\n\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n } else {\n strategy.centerHorizontally();\n }\n\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n } else {\n strategy.centerVertically();\n }\n\n this.overlayRef.updatePosition();\n\n return this;\n }\n\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize( width: string = 'auto', height: string = 'auto' ): this {\n this.getPositionStrategy().width(width).height(height);\n this.overlayRef.updatePosition();\n return this;\n }\n\n public isAnimating(): boolean {\n return this.container.isAnimating;\n }\n\n public afterOpen(): Observable<any> {\n return this._afterOpen$.asObservable();\n }\n\n public beforeClose(): Observable<any> {\n return this._beforeClose$.asObservable();\n }\n\n public afterClosed(): Observable<any> {\n return this._afterClosed$.asObservable();\n }\n\n /** Fetches the position strategy object from the overlay ref. */\n private getPositionStrategy(): GlobalPositionStrategy {\n return this.overlayRef.getConfig().positionStrategy as GlobalPositionStrategy;\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * dialog-container.component\n */\n\nimport {\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Inject,\n OnInit,\n Optional,\n ViewChild\n} from '@angular/core';\nimport {\n animate,\n animateChild,\n AnimationEvent,\n keyframes,\n style,\n transition,\n trigger\n} from '@angular/animations';\nimport { DOCUMENT } from '@angular/common';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport {\n BasePortalOutlet,\n CdkPortalOutlet,\n ComponentPortal,\n TemplatePortal\n} from '@angular/cdk/portal';\nimport { OwlDialogConfig } from './dialog-config.class';\n\nconst zoomFadeIn = {\n opacity: 0,\n transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})'\n};\nconst zoomFadeInFrom = {\n opacity: 0,\n transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})',\n transformOrigin: '{{ ox }} {{ oy }}'\n};\n\n@Component({\n selector: 'owl-dialog-container',\n templateUrl: './dialog-container.component.html',\n animations: [\n trigger('slideModal', [\n transition(\n 'void => enter',\n [\n style(zoomFadeInFrom),\n animate('300ms cubic-bezier(0.35, 0, 0.25, 1)', style('*')),\n animate(\n '150ms',\n keyframes([\n style({ transform: 'scale(1)', offset: 0 }),\n style({ transform: 'scale(1.05)', offset: 0.3 }),\n style({ transform: 'scale(.95)', offset: 0.8 }),\n style({ transform: 'scale(1)', offset: 1.0 })\n ])\n ),\n animateChild()\n ],\n {\n params: {\n x: '0px',\n y: '0px',\n ox: '50%',\n oy: '50%',\n scale: 1\n }\n }\n ),\n transition(\n 'enter => exit',\n [animateChild(), animate(200, style(zoomFadeIn))],\n { params: { x: '0px', y: '0px', ox: '50%', oy: '50%' } }\n )\n ])\n ],\n host: {\n '(@slideModal.start)': 'onAnimationStart($event)',\n '(@slideModal.done)': 'onAnimationDone($event)',\n '[class.owl-dialog-container]': 'owlDialogContainerClass',\n '[attr.tabindex]': 'owlDialogContainerTabIndex',\n '[attr.id]': 'owlDialogContainerId',\n '[attr.role]': 'owlDialogContainerRole',\n '[attr.aria-labelledby]': 'owlDialogContainerAriaLabelledby',\n '[attr.aria-describedby]': 'owlDialogContainerAriaDescribedby',\n '[@slideModal]': 'owlDialogContainerAnimation'\n }\n})\nexport class OwlDialogContainerComponent extends BasePortalOutlet\n implements OnInit {\n @ViewChild(CdkPortalOutlet, { static: true })\n portalOutlet: CdkPortalOutlet;\n\n /** The class that traps and manages focus within the dialog. */\n private focusTrap: FocusTrap;\n\n /** ID of the element that should be considered as the dialog's label. */\n public ariaLabelledBy: string | null = null;\n\n /** Emits when an animation state changes. */\n public animationStateChanged = new EventEmitter<AnimationEvent>();\n\n public isAnimating = false;\n\n private _config: OwlDialogConfig;\n get config(): OwlDialogConfig {\n return this._config;\n }\n\n private state: 'void' | 'enter' | 'exit' = 'enter';\n\n // for animation purpose\n private params: any = {\n x: '0px',\n y: '0px',\n ox: '50%',\n oy: '50%',\n scale: 0\n };\n\n // A variable to hold the focused element before the dialog was open.\n // This would help us to refocus back to element when the dialog was closed.\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n get owlDialogContainerClass(): boolean {\n return true;\n }\n\n get owlDialogContainerTabIndex(): number {\n return -1;\n }\n\n get owlDialogContainerId(): string {\n return this._config.id;\n }\n\n get owlDialogContainerRole(): string {\n return this._config.role || null;\n }\n\n get owlDialogContainerAriaLabelledby(): string {\n return this.ariaLabelledBy;\n }\n\n get owlDialogContainerAriaDescribedby(): string {\n return this._config.ariaDescribedBy || null;\n }\n\n get owlDialogContainerAnimation(): any {\n return { value: this.state, params: this.params };\n }\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private elementRef: ElementRef,\n private focusTrapFactory: FocusTrapFactory,\n @Optional()\n @Inject(DOCUMENT)\n private document: any\n ) {\n super();\n }\n\n public ngOnInit() {}\n\n /**\n * Attach a ComponentPortal as content to this dialog container.\n */\n public attachComponentPortal<T>(\n portal: ComponentPortal<T>\n ): ComponentRef<T> {\n if (this.portalOutlet.hasAttached()) {\n throw Error(\n 'Attempting to attach dialog content after content is already attached'\n );\n }\n\n this.savePreviouslyFocusedElement();\n return this.portalOutlet.attachComponentPortal(portal);\n }\n\n public attachTemplatePortal<C>(\n portal: TemplatePortal<C>\n ): EmbeddedViewRef<C> {\n throw new Error('Method not implemented.');\n }\n\n public setConfig(config: OwlDialogConfig): void {\n this._config = config;\n\n if (config.event) {\n this.calculateZoomOrigin(event);\n }\n }\n\n public onAnimationStart( event: AnimationEvent ): void {\n this.isAnimating = true;\n this.animationStateChanged.emit(event);\n }\n\n public onAnimationDone( event: AnimationEvent ): void {\n if (event.toState === 'enter') {\n this.trapFocus();\n } else if (event.toState === 'exit') {\n this.restoreFocus();\n }\n\n this.animationStateChanged.emit(event);\n this.isAnimating = false;\n }\n\n public startExitAnimation() {\n this.state = 'exit';\n this.changeDetector.markForCheck();\n }\n\n /**\n * Calculate origin used in the `zoomFadeInFrom()`\n * for animation purpose\n */\n private calculateZoomOrigin(event: any): void {\n if (!event) {\n return;\n }\n\n const clientX = event.clientX;\n const clientY = event.clientY;\n\n const wh = window.innerWidth / 2;\n const hh = window.innerHeight / 2;\n const x = clientX - wh;\n const y = clientY - hh;\n const ox = clientX / window.innerWidth;\n const oy = clientY / window.innerHeight;\n\n this.params.x = `${x}px`;\n this.params.y = `${y}px`;\n this.params.ox = `${ox * 100}%`;\n this.params.oy = `${oy * 100}%`;\n this.params.scale = 0;\n\n return;\n }\n\n /**\n * Save the focused element before dialog was open\n */\n private savePreviouslyFocusedElement(): void {\n if (this.document) {\n this.elementFocusedBeforeDialogWasOpened = this.document\n .activeElement as HTMLElement;\n\n Promise.resolve().then(() => this.elementRef.nativeElement.focus());\n }\n }\n\n private trapFocus(): void {\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(\n this.elementRef.nativeElement\n );\n }\n\n if (this._config.autoFocus) {\n this.focusTrap.focusInitialElementWhenReady();\n }\n }\n\n private restoreFocus(): void {\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n }\n}\n","/**\n * object.utils\n */\n\n\n/**\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\n * similar to Object.assign.\n *\n * @param dest The object which will have properties copied to it.\n * @param sources The source objects from which properties will be copied.\n */\nexport function extendObject(dest: any, ...sources: any[]): any {\n if (dest == null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n\n for (const source of sources) {\n if (source != null) {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n }\n }\n\n return dest;\n}\n","/**\n * index\n */\n\nexport * from './object.utils';\n","/**\n * dialog.service\n */\n\nimport {\n ComponentRef,\n Inject,\n Injectable,\n InjectionToken,\n Injector,\n Optional,\n SkipSelf,\n TemplateRef\n} from '@angular/core';\nimport { Location } from '@angular/common';\nimport { OwlDialogConfig } from './dialog-config.class';\nimport { OwlDialogRef } from './dialog-ref.class';\nimport { OwlDialogContainerComponent } from './dialog-container.component';\nimport { extendObject } from '../utils';\nimport { defer, Observable, Subject } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport {\n Overlay,\n OverlayConfig,\n OverlayContainer,\n OverlayRef,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport {\n ComponentPortal,\n ComponentType,\n PortalInjector\n} from '@angular/cdk/portal';\n\nexport const OWL_DIALOG_DATA = new InjectionToken<any>('OwlDialogData');\n\n/**\n * Injection token that determines the scroll handling while the dialog is open.\n * */\nexport const OWL_DIALOG_SCROLL_STRATEGY = new InjectionToken<\n () => ScrollStrategy\n>('owl-dialog-scroll-strategy');\n\nexport function OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(\n overlay: Overlay\n): () => ScrollStrategy {\n const fn = () => overlay.scrollStrategies.block();\n return fn;\n}\n\n/** @docs-private */\nexport const OWL_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: OWL_DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n\n/** I\n * njection token that can be used to specify default dialog options.\n * */\nexport const OWL_DIALOG_DEFAULT_OPTIONS = new InjectionToken<OwlDialogConfig>(\n 'owl-dialog-default-options'\n);\n\n@Injectable()\nexport class OwlDialogService {\n private ariaHiddenElements = new Map<Element, string | null>();\n\n private _openDialogsAtThisLevel: OwlDialogRef<any>[] = [];\n private _afterOpenAtThisLevel = new Subject<OwlDialogRef<any>>();\n private _afterAllClosedAtThisLevel = new Subject<void>();\n\n /** Keeps track of the currently-open dialogs. */\n get openDialogs(): OwlDialogRef<any>[] {\n return this.parentDialog\n ? this.parentDialog.openDialogs\n : this._openDialogsAtThisLevel;\n }\n\n /** Stream that emits when a dialog has been opened. */\n get afterOpen(): Subject<OwlDialogRef<any>> {\n return this.parentDialog\n ? this.parentDialog.afterOpen\n : this._afterOpenAtThisLevel;\n }\n\n get _afterAllClosed(): any {\n const parent = this.parentDialog;\n return parent\n ? parent._afterAllClosed\n : this._afterAllClosedAtThisLevel;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n\n afterAllClosed: Observable<{}> = defer(\n () =>\n this._openDialogsAtThisLevel.length\n ? this._afterAllClosed\n : this._afterAllClosed.pipe(startWith(undefined))\n );\n\n private scrollStrategy: () => ScrollStrategy;\n\n constructor(\n private overlay: Overlay,\n private injector: Injector,\n @Optional() private location: Location,\n @Inject(OWL_DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional()\n @Inject(OWL_DIALOG_DEFAULT_OPTIONS)\n private defaultOptions: OwlDialogConfig,\n @Optional()\n @SkipSelf()\n private parentDialog: OwlDialogService,\n private overlayContainer: OverlayContainer\n ) {\n this.scrollStrategy = scrollStrategy;\n if (!parentDialog && location) {\n location.subscribe(() => this.closeAll());\n }\n }\n\n public open<T>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: OwlDialogConfig\n ): OwlDialogRef<any> {\n config = applyConfigDefaults(config, this.defaultOptions);\n\n if (config.id && this.getDialogById(config.id)) {\n throw Error(\n `Dialog with id \"${\n config.id\n }\" exists already. The dialog id must be unique.`\n );\n }\n\n const overlayRef = this.createOverlay(config);\n const dialogContainer = this.attachDialogContainer(overlayRef, config);\n const dialogRef = this.attachDialogContent<T>(\n componentOrTemplateRef,\n dialogContainer,\n overlayRef,\n config\n );\n\n if (!this.openDialogs.length) {\n this.hideNonDialogContentFromAssistiveTechnology();\n }\n\n this.openDialogs.push(dialogRef);\n dialogRef\n .afterClosed()\n .subscribe(() => this.removeOpenDialog(dialogRef));\n this.afterOpen.next(dialogRef);\n return dialogRef;\n }\n\n /**\n * Closes all of the currently-open dialogs.\n */\n public closeAll(): void {\n let i = this.openDialogs.length;\n\n while (i--) {\n this.openDialogs[i].close();\n }\n }\n\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n public getDialogById(id: string): OwlDialogRef<any> | undefined {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n\n private attachDialogContent<T>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n dialogContainer: OwlDialogContainerComponent,\n overlayRef: OverlayRef,\n config: OwlDialogConfig\n ) {\n const dialogRef = new OwlDialogRef<T>(\n overlayRef,\n dialogContainer,\n config.id,\n this.location\n );\n\n if (config.hasBackdrop) {\n overlayRef.backdropClick().subscribe(() => {\n if (!dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n }\n\n if (componentOrTemplateRef instanceof TemplateRef) {\n } else {\n const injector = this.createInjector<T>(\n config,\n dialogRef,\n dialogContainer\n );\n const contentRef = dialogContainer.attachComponentPortal(\n new ComponentPortal(componentOrTemplateRef, undefined, injector)\n );\n dialogRef.componentInstance = contentRef.instance;\n }\n\n dialogRef\n .updateSize(config.width, config.height)\n .updatePosition(config.position);\n\n return dialogRef;\n }\n\n private createInjector<T>(\n config: OwlDialogConfig,\n dialogRef: OwlDialogRef<T>,\n dialogContainer: OwlDialogContainerComponent\n ) {\n const userInjector =\n config &&\n config.viewContainerRef &&\n config.viewContainerRef.injector;\n const injectionTokens = new WeakMap();\n\n injectionTokens.set(OwlDialogRef, dialogRef);\n injectionTokens.set(OwlDialogContainerComponent, dialogContainer);\n injectionTokens.set(OWL_DIALOG_DATA, config.data);\n\n return new PortalInjector(\n userInjector || this.injector,\n injectionTokens\n );\n }\n\n private createOverlay(config: OwlDialogConfig): OverlayRef {\n const overlayConfig = this.getOverlayConfig(config);\n return this.overlay.create(overlayConfig);\n }\n\n private attachDialogContainer(\n overlayRef: OverlayRef,\n config: OwlDialogConfig\n ): OwlDialogContainerComponent {\n const containerPortal = new ComponentPortal(\n OwlDialogContainerComponent,\n config.viewContainerRef\n );\n const containerRef: ComponentRef<\n OwlDialogContainerComponent\n > = overlayRef.attach(containerPortal);\n containerRef.instance.setConfig(config);\n\n return containerRef.instance;\n }\n\n private getOverlayConfig(dialogConfig: OwlDialogConfig): OverlayConfig {\n const state = new OverlayConfig({\n positionStrategy: this.overlay.position().global(),\n scrollStrategy:\n dialogConfig.scrollStrategy || this.scrollStrategy(),\n panelClass: dialogConfig.paneClass,\n hasBackdrop: dialogConfig.hasBackdrop,\n minWidth: dialogConfig.minWidth,\n minHeight: dialogConfig.minHeight,\n maxWidth: dialogConfig.maxWidth,\n maxHeight: dialogConfig.maxHeight\n });\n\n if (dialogConfig.backdropClass) {\n state.backdropClass = dialogConfig.backdropClass;\n }\n\n return state;\n }\n\n private removeOpenDialog(dialogRef: OwlDialogRef<any>): void {\n const index = this._openDialogsAtThisLevel.indexOf(dialogRef);\n\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this.ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n\n this.ariaHiddenElements.clear();\n this._afterAllClosed.next();\n }\n }\n }\n\n /**\n * Hides all of the content that isn't an overlay from assistive technology.\n */\n private hideNonDialogContentFromAssistiveTechnology() {\n const overlayContainer = this.overlayContainer.getContainerElement();\n\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n\n for (let i = siblings.length - 1; i > -1; i--) {\n const sibling = siblings[i];\n\n if (\n sibling !== overlayContainer &&\n sibling.nodeName !== 'SCRIPT' &&\n sibling.nodeName !== 'STYLE' &&\n !sibling.hasAttribute('aria-live')\n ) {\n this.ariaHiddenElements.set(\n sibling,\n sibling.getAttribute('aria-hidden')\n );\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n }\n}\n\n/**\n * Applies default options to the dialog config.\n * @param config Config to be modified.\n * @param defaultOptions Default config setting\n * @returns The new configuration object.\n */\nfunction applyConfigDefaults(\n config?: OwlDialogConfig,\n defaultOptions?: OwlDialogConfig\n): OwlDialogConfig {\n return extendObject(new OwlDialogConfig(), config, defaultOptions);\n}\n","/**\n * date-time-picker.component\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n BlockScrollStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\nimport { OwlDateTimeInputDirective } from './date-time-picker-input.directive';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport {\n OWL_DATE_TIME_FORMATS,\n OwlDateTimeFormats\n} from './adapter/date-time-format.class';\nimport {\n OwlDateTime,\n PickerMode,\n PickerType,\n SelectMode\n} from './date-time.class';\nimport { OwlDialogRef } from '../dialog/dialog-ref.class';\nimport { OwlDialogService } from '../dialog/dialog.service';\nimport { merge, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\n\n/** Injection token that determines the scroll handling while the dtPicker is open. */\nexport const OWL_DTPICKER_SCROLL_STRATEGY = new InjectionToken<\n () => ScrollStrategy\n>('owl-dtpicker-scroll-strategy');\n\n/** @docs-private */\nexport function OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY(\n overlay: Overlay\n): () => BlockScrollStrategy {\n const fn = () => overlay.scrollStrategies.block();\n return fn;\n}\n\n/** @docs-private */\nexport const OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER = {\n provide: OWL_DTPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n\n@Component({\n selector: 'owl-date-time',\n exportAs: 'owlDateTime',\n templateUrl: './date-time-picker.component.html',\n styleUrls: ['./date-time-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n})\nexport class OwlDateTimeComponent<T> extends OwlDateTime<T>\n implements OnInit, OnDestroy {\n /** Custom class for the picker backdrop. */\n @Input()\n public backdropClass: string | string[] = [];\n\n /** Custom class for the picker overlay pane. */\n @Input()\n public panelClass: string | string[] = [];\n\n /** The date to open the calendar to initially. */\n private _startAt: T | null;\n @Input()\n get startAt(): T | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n if (this._startAt) {\n return this._startAt;\n }\n\n if (this._dtInput) {\n if (this._dtInput.selectMode === 'single') {\n return this._dtInput.value || null;\n } else if (\n this._dtInput.selectMode === 'range' ||\n this._dtInput.selectMode === 'rangeFrom'\n ) {\n return this._dtInput.values[0] || null;\n } else if (this._dtInput.selectMode === 'rangeTo') {\n return this._dtInput.values[1] || null;\n }\n } else {\n return null;\n }\n }\n\n set startAt(date: T | null) {\n this._startAt = this.getValidDate(\n this.dateTimeAdapter.deserialize(date)\n );\n }\n\n /**\n * Set the type of the dateTime picker\n * 'both' -- show both calendar and timer\n * 'calendar' -- show only calendar\n * 'timer' -- show only timer\n */\n private _pickerType: PickerType = 'both';\n @Input()\n get pickerType(): PickerType {\n return this._pickerType;\n }\n\n set pickerType(val: PickerType) {\n if (val !== this._pickerType) {\n this._pickerType = val;\n if (this._dtInput) {\n this._dtInput.formatNativeInputValue();\n }\n }\n }\n\n /**\n * Whether the picker open as a dialog\n */\n _pickerMode: PickerMode = 'popup';\n @Input()\n get pickerMode() {\n return this._pickerMode;\n }\n\n set pickerMode(mode: PickerMode) {\n if (mode === 'popup') {\n this._pickerMode = mode;\n } else {\n this._pickerMode = 'dialog';\n }\n }\n\n /** Whether the date time picker should be disabled. */\n private _disabled: boolean;\n @Input()\n get disabled(): boolean {\n return this._disabled === undefined && this._dtInput\n ? this._dtInput.disabled\n : !!this._disabled;\n }\n\n set disabled(value: boolean) {\n value = coerceBooleanProperty(value);\n if (value !== this._disabled) {\n this._disabled = value;\n this.disabledChange.next(value);\n }\n }\n\n /** Whether the calendar is open. */\n private _opened = false;\n @Input()\n get opened(): boolean {\n return this._opened;\n }\n\n set opened(val: boolean) {\n val ? this.open() : this.close();\n }\n\n /**\n * The scroll strategy when the picker is open\n * Learn more this from https://material.angular.io/cdk/overlay/overview#scroll-strategies\n * */\n @Input()\n public scrollStrategy: ScrollStrategy;\n\n /**\n * Callback when the picker is closed\n * */\n @Output()\n afterPickerClosed = new EventEmitter<any>();\n\n /**\n * Callback when the picker is open\n * */\n @Output()\n afterPickerOpen = new EventEmitter<any>();\n\n /**\n * Emits selected year in multi-year view\n * This doesn't imply a change on the selected date.\n * */\n @Output()\n yearSelected = new EventEmitter<T>();\n\n /**\n * Emits selected month in year view\n * This doesn't imply a change on the selected date.\n * */\n @Output()\n monthSelected = new EventEmitter<T>();\n\n /**\n * Emit when the selected value has been confirmed\n * */\n public confirmSelectedChange = new EventEmitter<T[] | T>();\n\n /**\n * Emits when the date time picker is disabled.\n * */\n public disabledChange = new EventEmitter<boolean>();\n\n private pickerContainerPortal: ComponentPortal<\n OwlDateTimeContainerComponent<T>\n >;\n private pickerContainer: OwlDateTimeContainerComponent<T>;\n private popupRef: OverlayRef;\n private dialogRef: OwlDialogRef<OwlDateTimeContainerComponent<T>>;\n private dtInputSub = Subscription.EMPTY;\n private hidePickerStreamSub = Subscription.EMPTY;\n private confirmSelectedStreamSub = Subscription.EMPTY;\n private pickerOpenedStreamSub = Subscription.EMPTY;\n\n /** The element that was focused before the date time picker was opened. */\n private focusedElementBeforeOpen: HTMLElement | null = null;\n\n private _dtInput: OwlDateTimeInputDirective<T>;\n get dtInput() {\n return this._dtInput;\n }\n\n private _selected: T | null;\n get selected() {\n return this._selected;\n }\n\n set selected(value: T | null) {\n this._selected = value;\n this.changeDetector.markForCheck();\n }\n\n private _selecteds: T[] = [];\n get selecteds() {\n return this._selecteds;\n }\n\n set selecteds(values: T[]) {\n this._selecteds = values;\n this.changeDetector.markForCheck();\n }\n\n /** The minimum selectable date. */\n get minDateTime(): T | null {\n return this._dtInput && this._dtInput.min;\n }\n\n /** The maximum selectable date. */\n get maxDateTime(): T | null {\n return this._dtInput && this._dtInput.max;\n }\n\n get dateTimeFilter(): (date: T | null) => boolean {\n return this._dtInput && this._dtInput.dateTimeFilter;\n }\n\n get selectMode(): SelectMode {\n return this._dtInput.selectMode;\n }\n\n get isInSingleMode(): boolean {\n return this._dtInput.isInSingleMode;\n }\n\n get isInRangeMode(): boolean {\n return this._dtInput.isInRangeMode;\n }\n\n private defaultScrollStrategy: () => ScrollStrategy;\n\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private dialogService: OwlDialogService,\n private ngZone: NgZone,\n protected changeDetector: ChangeDetectorRef,\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\n @Inject(OWL_DTPICKER_SCROLL_STRATEGY) defaultScrollStrategy: any,\n @Optional()\n @Inject(OWL_DATE_TIME_FORMATS)\n protected dateTimeFormats: OwlDateTimeFormats,\n @Optional()\n @Inject(DOCUMENT)\n private document: any\n ) {\n super(dateTimeAdapter, dateTimeFormats);\n this.defaultScrollStrategy = defaultScrollStrategy;\n }\n\n public ngOnInit() { }\n\n public ngOnDestroy(): void {\n this.close();\n this.dtInputSub.unsubscribe();\n this.disabledChange.complete();\n\n if (this.popupRef) {\n this.popupRef.dispose();\n }\n }\n\n public registerInput(input: OwlDateTimeInputDirective<T>): void {\n if (this._dtInput) {\n throw Error(\n 'A Owl DateTimePicker can only be associated with a single input.'\n );\n }\n\n this._dtInput = input;\n this.dtInputSub = this._dtInput.valueChange.subscribe(\n (value: T[] | T | null) => {\n if (Array.isArray(value)) {\n this.selecteds = value;\n } else {\n this.selected = value;\n }\n }\n );\n }\n\n public open(): void {\n if (this._opened || this.disabled) {\n return;\n }\n\n if (!this._dtInput) {\n throw Error(\n 'Attempted to open an DateTimePicker with no associated input.'\n );\n }\n\n if (this.document) {\n this.focusedElementBeforeOpen = this.document.activeElement;\n }\n\n // reset the picker selected value\n if (this.isInSingleMode) {\n this.selected = this._dtInput.value;\n } else if (this.isInRangeMode) {\n this.selecteds = this._dtInput.values;\n }\n\n // when the picker is open , we make sure the picker's current selected time value\n // is the same as the _startAt time value.\n if (this.selected && this.pickerType !== 'calendar' && this._startAt) {\n this.selected = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.selected),\n this.dateTimeAdapter.getMonth(this.selected),\n this.dateTimeAdapter.getDate(this.selected),\n this.dateTimeAdapter.getHours(this._startAt),\n this.dateTimeAdapter.getMinutes(this._startAt),\n this.dateTimeAdapter.getSeconds(this._startAt)\n );\n }\n\n this.pickerMode === 'dialog' ? this.openAsDialog() : this.openAsPopup();\n\n this.pickerContainer.picker = this;\n\n // Listen to picker container's hidePickerStream\n this.hidePickerStreamSub = this.pickerContainer.hidePickerStream.subscribe(\n () => {\n this.close();\n }\n );\n\n // Listen to picker container's confirmSelectedStream\n this.confirmSelectedStreamSub = this.pickerContainer.confirmSelectedStream.subscribe(\n (event: any) => {\n this.confirmSelect(event);\n }\n );\n }\n\n /**\n * Selects the given date\n */\n public select(date: T[] | T): void {\n if (Array.isArray(date)) {\n this.selecteds = [...date];\n } else {\n this.selected = date;\n }\n\n /**\n * Cases in which automatically confirm the select when date or dates are selected:\n * 1) picker mode is NOT 'dialog'\n * 2) picker type is 'calendar' and selectMode is 'single'.\n * 3) picker type is 'calendar' and selectMode is 'range' and\n * the 'selecteds' has 'from'(selecteds[0]) and 'to'(selecteds[1]) values.\n * 4) selectMode is 'rangeFrom' and selecteds[0] has value.\n * 5) selectMode is 'rangeTo' and selecteds[1] has value.\n * */\n if (\n this.pickerMode !== 'dialog' &&\n this.pickerType === 'calendar' &&\n ((this.selectMode === 'single' && this.selected) ||\n (this.selectMode === 'rangeFrom' && this.selecteds[0]) ||\n (this.selectMode === 'rangeTo' && this.selecteds[1]) ||\n (this.selectMode === 'range' &&\n this.selecteds[0] &&\n this.selecteds[1]))\n ) {\n this.confirmSelect();\n }\n }\n\n /**\n * Emits the selected year in multi-year view\n * */\n public selectYear(normalizedYear: T): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n /**\n * Emits selected month in year view\n * */\n public selectMonth(normalizedMonth: T): void {\n this.monthSelected.emit(normalizedMonth);\n }\n\n /**\n * Hide the picker\n */\n public close(): void {\n if (!this._opened) {\n return;\n }\n\n if (this.popupRef && this.popupRef.hasAttached()) {\n this.popupRef.detach();\n }\n\n if (\n this.pickerContainerPortal &&\n this.pickerContainerPortal.isAttached\n ) {\n this.pickerContainerPortal.detach();\n }\n\n if (this.hidePickerStreamSub) {\n this.hidePickerStreamSub.unsubscribe();\n this.hidePickerStreamSub = null;\n }\n\n if (this.confirmSelectedStreamSub) {\n this.confirmSelectedStreamSub.unsubscribe();\n this.confirmSelectedStreamSub = null;\n }\n\n if (this.pickerOpenedStreamSub) {\n this.pickerOpenedStreamSub.unsubscribe();\n this.pickerOpenedStreamSub = null;\n }\n\n if (this.dialogRef) {\n this.dialogRef.close();\n this.dialogRef = null;\n }\n\n const completeClose = () => {\n if (this._opened) {\n this._opened = false;\n this.afterPickerClosed.emit(null);\n this.focusedElementBeforeOpen = null;\n }\n };\n\n if (\n this.focusedElementBeforeOpen &&\n typeof this.focusedElementBeforeOpen.focus === 'function'\n ) {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n // able to close the calendar at all. We work around it by making the logic, that marks\n // the datepicker as closed, async as well.\n this.focusedElementBeforeOpen.focus();\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n\n /**\n * Confirm the selected value\n */\n public confirmSelect(event?: any): void {\n if (this.isInSingleMode) {\n const selected =\n this.selected || this.startAt || this.dateTimeAdapter.now();\n this.confirmSelectedChange.emit(selected);\n } else if (this.isInRangeMode) {\n this.confirmSelectedChange.emit(this.selecteds);\n }\n\n this.close();\n return;\n }\n\n /**\n * Open the picker as a dialog\n */\n private openAsDialog(): void {\n this.dialogRef = this.dialogService.open(\n OwlDateTimeContainerComponent,\n {\n autoFocus: false,\n backdropClass: [\n 'cdk-overlay-dark-backdrop',\n ...coerceArray(this.backdropClass)\n ],\n paneClass: ['owl-dt-dialog', ...coerceArray(this.panelClass)],\n viewContainerRef: this.viewContainerRef,\n scrollStrategy:\n this.scrollStrategy || this.defaultScrollStrategy(),\n closeOnNavigation: true, width: '', height: ''\n }\n );\n this.pickerContainer = this.dialogRef.componentInstance;\n\n this.dialogRef.afterOpen().subscribe(() => {\n this.afterPickerOpen.emit(null);\n this._opened = true;\n });\n this.dialogRef.afterClosed().subscribe(() => this.close());\n }\n\n /**\n * Open the picker as popup\n */\n private openAsPopup(): void {\n if (!this.pickerContainerPortal) {\n this.pickerContainerPortal = new ComponentPortal<\n OwlDateTimeContainerComponent<T>\n >(OwlDateTimeContainerComponent, this.viewContainerRef);\n }\n\n if (!this.popupRef) {\n this.createPopup();\n }\n\n if (!this.popupRef.hasAttached()) {\n const componentRef: ComponentRef<\n OwlDateTimeContainerComponent<T>\n > = this.popupRef.attach(this.pickerContainerPortal);\n this.pickerContainer = componentRef.instance;\n\n // Update the position once the calendar has rendered.\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.popupRef.updatePosition();\n });\n\n // emit open stream\n this.pickerOpenedStreamSub = this.pickerContainer.pickerOpenedStream\n .pipe(take(1))\n .subscribe(() => {\n this.afterPickerOpen.emit(null);\n this._opened = true;\n });\n }\n }\n\n private createPopup(): void {\n const overlayConfig = new OverlayConfig({\n positionStrategy: this.createPopupPositionStrategy(),\n hasBackdrop: true,\n backdropClass: [\n 'cdk-overlay-transparent-backdrop',\n ...coerceArray(this.backdropClass)\n ],\n scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy(),\n panelClass: ['owl-dt-popup', ...coerceArray(this.panelClass)]\n });\n\n this.popupRef = this.overlay.create(overlayConfig);\n\n merge(\n this.popupRef.backdropClick(),\n this.popupRef.detachments(),\n this.popupRef\n .keydownEvents()\n .pipe(\n filter(\n event =>\n event.keyCode === ESCAPE ||\n (this._dtInput &&\n event.altKey &&\n event.keyCode === UP_ARROW)\n )\n )\n ).subscribe(() => this.close());\n }\n\n /**\n * Create the popup PositionStrategy.\n * */\n private createPopupPositionStrategy(): PositionStrategy {\n return this.overlay\n .position()\n .flexibleConnectedTo(this._dtInput.elementRef)\n .withTransformOriginOn('.owl-dt-container')\n .withFlexibleDimensions(false)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: -176\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: -352\n }\n ]);\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * date-time-picker-trigger.directive\n */\n\n\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport { OwlDateTimeComponent } from './date-time-picker.component';\nimport { merge, of as observableOf, Subscription } from 'rxjs';\n\n@Directive({\n selector: '[owlDateTimeTrigger]',\n host: {\n '(click)': 'handleClickOnHost($event)',\n '[class.owl-dt-trigger-disabled]': 'owlDTTriggerDisabledClass'\n }\n})\nexport class OwlDateTimeTriggerDirective<T> implements OnInit, OnChanges, AfterContentInit, OnDestroy {\n\n @Input('owlDateTimeTrigger') dtPicker: OwlDateTimeComponent<T>;\n\n private _disabled: boolean;\n @Input()\n get disabled(): boolean {\n return this._disabled === undefined ? this.dtPicker.disabled : !!this._disabled;\n }\n\n set disabled( value: boolean ) {\n this._disabled = value;\n }\n\n get owlDTTriggerDisabledClass(): boolean {\n return this.disabled;\n }\n\n private stateChanges = Subscription.EMPTY;\n\n constructor( protected changeDetector: ChangeDetectorRef ) {\n }\n\n public ngOnInit(): void {\n }\n\n public ngOnChanges( changes: SimpleChanges ) {\n if (changes.datepicker) {\n this.watchStateChanges();\n }\n }\n\n public ngAfterContentInit() {\n this.watchStateChanges();\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.unsubscribe();\n }\n\n public handleClickOnHost( event: Event ): void {\n if (this.dtPicker) {\n this.dtPicker.open();\n event.stopPropagation();\n }\n }\n\n private watchStateChanges(): void {\n this.stateChanges.unsubscribe();\n\n const inputDisabled = this.dtPicker && this.dtPicker.dtInput ?\n this.dtPicker.dtInput.disabledChange : observableOf();\n\n const pickerDisabled = this.dtPicker ?\n this.dtPicker.disabledChange : observableOf();\n\n this.stateChanges = merge(pickerDisabled, inputDisabled)\n .subscribe(() => {\n this.changeDetector.markForCheck();\n });\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * date-time-picker-input.directive\n */\n\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Renderer2,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { OwlDateTimeComponent } from './date-time-picker.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport {\n OWL_DATE_TIME_FORMATS,\n OwlDateTimeFormats\n} from './adapter/date-time-format.class';\nimport { Subscription } from 'rxjs';\nimport { SelectMode } from './date-time.class';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nexport const OWL_DATETIME_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => OwlDateTimeInputDirective),\n multi: true\n};\n\nexport const OWL_DATETIME_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => OwlDateTimeInputDirective),\n multi: true\n};\n\n@Directive({\n selector: 'input[owlDateTime]',\n exportAs: 'owlDateTimeInput',\n host: {\n '(keydown)': 'handleKeydownOnHost($event)',\n '(blur)': 'handleBlurOnHost($event)',\n '(input)': 'handleInputOnHost($event)',\n '(change)': 'handleChangeOnHost($event)',\n '[attr.aria-haspopup]': 'owlDateTimeInputAriaHaspopup',\n '[attr.aria-owns]': 'owlDateTimeInputAriaOwns',\n '[attr.min]': 'minIso8601',\n '[attr.max]': 'maxIso8601',\n '[disabled]': 'owlDateTimeInputDisabled'\n },\n providers: [\n OWL_DATETIME_VALUE_ACCESSOR,\n OWL_DATETIME_VALIDATORS,\n ],\n})\nexport class OwlDateTimeInputDirective<T>\n implements\n OnInit,\n AfterContentInit,\n OnDestroy,\n ControlValueAccessor,\n Validator {\n /**\n * The date time picker that this input is associated with.\n * */\n @Input()\n set owlDateTime(value: OwlDateTimeComponent<T>) {\n this.registerDateTimePicker(value);\n }\n\n /**\n * A function to filter date time\n */\n @Input()\n set owlDateTimeFilter(filter: (date: T | null) => boolean) {\n this._dateTimeFilter = filter;\n this.validatorOnChange();\n }\n get dateTimeFilter() {\n return this._dateTimeFilter;\n }\n get disabled() {\n return !!this._disabled;\n }\n\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n const element = this.elmRef.nativeElement;\n\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this.disabledChange.emit(newValue);\n }\n\n // We need to null check the `blur` method, because it's undefined during SSR.\n if (newValue && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n }\n @Input()\n get min(): T | null {\n return this._min;\n }\n\n set min(value: T | null) {\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.validatorOnChange();\n }\n @Input()\n get max(): T | null {\n return this._max;\n }\n\n set max(value: T | null) {\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.validatorOnChange();\n }\n @Input()\n get selectMode() {\n return this._selectMode;\n }\n\n set selectMode(mode: SelectMode) {\n if (\n mode !== 'single' &&\n mode !== 'range' &&\n mode !== 'rangeFrom' &&\n mode !== 'rangeTo'\n ) {\n throw Error('OwlDateTime Error: invalid selectMode value!');\n }\n\n this._selectMode = mode;\n }\n @Input()\n get value() {\n return this._value;\n }\n\n set value(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this.lastValueValid = !value || this.dateTimeAdapter.isValid(value);\n value = this.getValidDate(value);\n const oldDate = this._value;\n this._value = value;\n\n\n // set the input property 'value'\n if (this.value, this.dtPicker) {\n this.formatNativeInputValue();\n }\n\n // check if the input value changed\n if (!this.dateTimeAdapter.isEqual(oldDate, value)) {\n this.valueChange.emit(value);\n }\n }\n @Input()\n get values() {\n return this._values;\n }\n\n set values(values: T[]) {\n if (values && values.length > 0) {\n this._values = values.map(v => {\n v = this.dateTimeAdapter.deserialize(v);\n return this.getValidDate(v);\n });\n this.lastValueValid =\n (!this._values[0] ||\n this.dateTimeAdapter.isValid(this._values[0])) &&\n (!this._values[1] ||\n this.dateTimeAdapter.isValid(this._values[1]));\n } else {\n this._values = [];\n this.lastValueValid = true;\n }\n\n // set the input property 'value'\n this.formatNativeInputValue();\n\n this.valueChange.emit(this._values);\n }\n\n get elementRef(): ElementRef {\n return this.elmRef;\n }\n\n get isInSingleMode(): boolean {\n return this._selectMode === 'single';\n }\n\n get isInRangeMode(): boolean {\n return (\n this._selectMode === 'range' ||\n this._selectMode === 'rangeFrom' ||\n this._selectMode === 'rangeTo'\n );\n }\n\n get owlDateTimeInputAriaHaspopup(): boolean {\n return true;\n }\n\n get owlDateTimeInputAriaOwns(): string {\n return (this.dtPicker.opened && this.dtPicker.id) || null;\n }\n\n get minIso8601(): string {\n return this.min ? this.dateTimeAdapter.toIso8601(this.min) : null;\n }\n\n get maxIso8601(): string {\n return this.max ? this.dateTimeAdapter.toIso8601(this.max) : null;\n }\n\n get owlDateTimeInputDisabled(): boolean {\n return this.disabled;\n }\n\n private _dateTimeFilter: (date: T | null) => boolean;\n\n /** Whether the date time picker's input is disabled. */\n @Input()\n private _disabled: boolean;\n\n /** The minimum valid date. */\n private _min: T | null;\n\n /** The maximum valid date. */\n private _max: T | null;\n\n /**\n * The picker's select mode\n */\n private _selectMode: SelectMode = 'single';\n\n /**\n * The character to separate the 'from' and 'to' in input value\n */\n @Input()\n rangeSeparator = '~';\n\n private _value: T | null;\n\n private _values: T[] = [];\n\n /**\n * Callback to invoke when `change` event is fired on this `<input>`\n * */\n @Output()\n dateTimeChange = new EventEmitter<any>();\n\n /**\n * Callback to invoke when an `input` event is fired on this `<input>`.\n * */\n @Output()\n dateTimeInput = new EventEmitter<any>();\n\n /** The date-time-picker that this input is associated with. */\n public dtPicker: OwlDateTimeComponent<T>;\n\n private dtPickerSub: Subscription = Subscription.EMPTY;\n private localeSub: Subscription = Subscription.EMPTY;\n\n private lastValueValid = true;\n\n /** The form control validator for whether the input parses. */\n private parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this.lastValueValid\n ? null\n : { owlDateTimeParse: { text: this.elmRef.nativeElement.value } };\n }\n\n /** The form control validator for the min date. */\n private minValidator: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n if (this.isInSingleMode) {\n const controlValue = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value)\n );\n return !this.min ||\n !controlValue ||\n this.dateTimeAdapter.compare(this.min, controlValue) <= 0\n ? null\n : { owlDateTimeMin: { min: this.min, actual: controlValue } };\n } else if (this.isInRangeMode && control.value) {\n const controlValueFrom = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value[0])\n );\n const controlValueTo = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value[1])\n );\n return !this.min ||\n !controlValueFrom ||\n !controlValueTo ||\n this.dateTimeAdapter.compare(this.min, controlValueFrom) <= 0\n ? null\n : {\n owlDateTimeMin: {\n min: this.min,\n actual: [controlValueFrom, controlValueTo]\n }\n };\n }\n }\n\n /** The form control validator for the max date. */\n private maxValidator: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n if (this.isInSingleMode) {\n const controlValue = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value)\n );\n return !this.max ||\n !controlValue ||\n this.dateTimeAdapter.compare(this.max, controlValue) >= 0\n ? null\n : { owlDateTimeMax: { max: this.max, actual: controlValue } };\n } else if (this.isInRangeMode && control.value) {\n const controlValueFrom = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value[0])\n );\n const controlValueTo = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value[1])\n );\n return !this.max ||\n !controlValueFrom ||\n !controlValueTo ||\n this.dateTimeAdapter.compare(this.max, controlValueTo) >= 0\n ? null\n : {\n owlDateTimeMax: {\n max: this.max,\n actual: [controlValueFrom, controlValueTo]\n }\n };\n }\n }\n\n /** The form control validator for the date filter. */\n private filterValidator: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n const controlValue = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value)\n );\n return !this._dateTimeFilter ||\n !controlValue ||\n this._dateTimeFilter(controlValue)\n ? null\n : { owlDateTimeFilter: true };\n }\n\n /**\n * The form control validator for the range.\n * Check whether the 'before' value is before the 'to' value\n * */\n private rangeValidator: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n if (this.isInSingleMode || !control.value) {\n return null;\n }\n\n const controlValueFrom = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value[0])\n );\n const controlValueTo = this.getValidDate(\n this.dateTimeAdapter.deserialize(control.value[1])\n );\n\n return !controlValueFrom ||\n !controlValueTo ||\n this.dateTimeAdapter.compare(controlValueFrom, controlValueTo) <= 0\n ? null\n : { owlDateTimeRange: true };\n }\n\n /** The combined form control validator for this input. */\n private validator: ValidatorFn | null = Validators.compose([\n this.parseValidator,\n this.minValidator,\n this.maxValidator,\n this.filterValidator,\n this.rangeValidator\n ]);\n\n /** Emits when the value changes (either due to user input or programmatic change). */\n public valueChange = new EventEmitter<T[] | T | null>();\n\n /** Emits when the disabled state has changed */\n public disabledChange = new EventEmitter<boolean>();\n\n private onModelChange: Function = () => { };\n private onModelTouched: Function = () => { };\n private validatorOnChange: Function = () => { };\n\n\n constructor(private elmRef: ElementRef,\n private renderer: Renderer2,\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\n @Optional() @Inject(OWL_DATE_TIME_FORMATS) private dateTimeFormats: OwlDateTimeFormats) {\n if (!this.dateTimeAdapter) {\n throw Error(\n `OwlDateTimePicker: No provider found for DateTimePicker. You must import one of the following ` +\n `modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +\n `custom implementation.`\n );\n }\n\n if (!this.dateTimeFormats) {\n throw Error(\n `OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following ` +\n `modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +\n `custom implementation.`\n );\n }\n\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {\n this.value = this.value;\n });\n }\n public ngOnInit(): void {\n if (!this.dtPicker) {\n throw Error(\n `OwlDateTimePicker: the picker input doesn't have any associated owl-date-time component`\n );\n }\n this.formatNativeInputValue();\n }\n\n public ngAfterContentInit(): void {\n this.dtPickerSub = this.dtPicker.confirmSelectedChange.subscribe(\n (selecteds: T[] | T) => {\n if (Array.isArray(selecteds)) {\n this.values = selecteds;\n } else {\n this.value = selecteds;\n }\n\n this.onModelChange(selecteds);\n this.onModelTouched();\n this.dateTimeChange.emit({\n source: this,\n value: selecteds,\n input: this.elmRef.nativeElement\n });\n this.dateTimeInput.emit({\n source: this,\n value: selecteds,\n input: this.elmRef.nativeElement\n });\n }\n );\n }\n\n public ngOnDestroy(): void {\n this.dtPickerSub.unsubscribe();\n this.localeSub.unsubscribe();\n this.valueChange.complete();\n this.disabledChange.complete();\n }\n\n public writeValue(value: any): void {\n if (this.isInSingleMode) {\n this.value = value;\n } else {\n this.values = value;\n }\n }\n\n public registerOnChange(fn: any): void {\n this.onModelChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onModelTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public validate(c: AbstractControl): { [key: string]: any } {\n return this.validator ? this.validator(c) : null;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /**\n * Open the picker when user hold alt + DOWN_ARROW\n * */\n public handleKeydownOnHost(event: KeyboardEvent): void {\n if (event.altKey && event.keyCode === DOWN_ARROW) {\n this.dtPicker.open();\n event.preventDefault();\n }\n }\n\n public handleBlurOnHost(event: Event): void {\n this.onModelTouched();\n }\n\n public handleInputOnHost(event: any): void {\n const value = event.target.value;\n if (this._selectMode === 'single') {\n this.changeInputInSingleMode(value);\n } else if (this._selectMode === 'range') {\n this.changeInputInRangeMode(value);\n } else {\n this.changeInputInRangeFromToMode(value);\n }\n }\n\n public handleChangeOnHost(event: any): void {\n\n let v;\n if (this.isInSingleMode) {\n v = this.value;\n } else if (this.isInRangeMode) {\n v = this.values;\n }\n\n this.dateTimeChange.emit({\n source: this,\n value: v,\n input: this.elmRef.nativeElement\n });\n }\n\n /**\n * Set the native input property 'value'\n */\n public formatNativeInputValue(): void {\n if (this.isInSingleMode) {\n this.renderer.setProperty(\n this.elmRef.nativeElement,\n 'value',\n this._value\n ? this.dateTimeAdapter.format(\n this._value,\n this.dtPicker.formatString\n )\n : ''\n );\n } else if (this.isInRangeMode) {\n if (this._values && this.values.length > 0) {\n const from = this._values[0];\n const to = this._values[1];\n\n const fromFormatted = from\n ? this.dateTimeAdapter.format(\n from,\n this.dtPicker.formatString\n )\n : '';\n const toFormatted = to\n ? this.dateTimeAdapter.format(\n to,\n this.dtPicker.formatString\n )\n : '';\n\n if (!fromFormatted && !toFormatted) {\n this.renderer.setProperty(\n this.elmRef.nativeElement,\n 'value',\n null\n );\n } else {\n if (this._selectMode === 'range') {\n this.renderer.setProperty(\n this.elmRef.nativeElement,\n 'value',\n fromFormatted +\n ' ' +\n this.rangeSeparator +\n ' ' +\n toFormatted\n );\n } else if (this._selectMode === 'rangeFrom') {\n this.renderer.setProperty(\n this.elmRef.nativeElement,\n 'value',\n fromFormatted\n );\n } else if (this._selectMode === 'rangeTo') {\n this.renderer.setProperty(\n this.elmRef.nativeElement,\n 'value',\n toFormatted\n );\n }\n }\n } else {\n this.renderer.setProperty(\n this.elmRef.nativeElement,\n 'value',\n ''\n );\n }\n }\n\n return;\n }\n\n /**\n * Register the relationship between this input and its picker component\n */\n private registerDateTimePicker(picker: OwlDateTimeComponent<T>) {\n if (picker) {\n this.dtPicker = picker;\n this.dtPicker.registerInput(this);\n }\n }\n\n /**\n * Convert a given obj to a valid date object\n */\n private getValidDate(obj: any): T | null {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : null;\n }\n\n /**\n * Convert a time string to a date-time string\n * When pickerType is 'timer', the value in the picker's input is a time string.\n * The dateTimeAdapter parse fn could not parse a time string to a Date Object.\n * Therefore we need this fn to convert a time string to a date-time string.\n */\n private convertTimeStringToDateTimeString(\n timeString: string,\n dateTime: T\n ): string | null {\n if (timeString) {\n const v = dateTime || this.dateTimeAdapter.now();\n const dateString = this.dateTimeAdapter.format(\n v,\n this.dateTimeFormats.datePickerInput\n );\n return dateString + ' ' + timeString;\n } else {\n return null;\n }\n }\n\n /**\n * Handle input change in single mode\n */\n private changeInputInSingleMode(inputValue: string): void {\n let value = inputValue;\n if (this.dtPicker.pickerType === 'timer') {\n value = this.convertTimeStringToDateTimeString(value, this.value);\n }\n\n let result = this.dateTimeAdapter.parse(\n value,\n this.dateTimeFormats.parseInput\n );\n this.lastValueValid = !result || this.dateTimeAdapter.isValid(result);\n result = this.getValidDate(result);\n\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\n // result equals to null means there is input event, but the input value is invalid\n if (!this.isSameValue(result, this._value) || result === null) {\n this._value = result;\n this.valueChange.emit(result);\n this.onModelChange(result);\n this.dateTimeInput.emit({\n source: this,\n value: result,\n input: this.elmRef.nativeElement\n });\n }\n }\n\n /**\n * Handle input change in rangeFrom or rangeTo mode\n */\n private changeInputInRangeFromToMode(inputValue: string): void {\n const originalValue =\n this._selectMode === 'rangeFrom'\n ? this._values[0]\n : this._values[1];\n\n if (this.dtPicker.pickerType === 'timer') {\n inputValue = this.convertTimeStringToDateTimeString(\n inputValue,\n originalValue\n );\n }\n\n let result = this.dateTimeAdapter.parse(\n inputValue,\n this.dateTimeFormats.parseInput\n );\n this.lastValueValid = !result || this.dateTimeAdapter.isValid(result);\n result = this.getValidDate(result);\n\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\n if (\n (this._selectMode === 'rangeFrom' &&\n this.isSameValue(result, this._values[0]) &&\n result) ||\n (this._selectMode === 'rangeTo' &&\n this.isSameValue(result, this._values[1]) &&\n result)\n ) {\n return;\n }\n\n this._values =\n this._selectMode === 'rangeFrom'\n ? [result, this._values[1]]\n : [this._values[0], result];\n this.valueChange.emit(this._values);\n this.onModelChange(this._values);\n this.dateTimeInput.emit({\n source: this,\n value: this._values,\n input: this.elmRef.nativeElement\n });\n }\n\n /**\n * Handle input change in range mode\n */\n private changeInputInRangeMode(inputValue: string): void {\n const selecteds = inputValue.split(this.rangeSeparator);\n let fromString = selecteds[0];\n let toString = selecteds[1];\n\n if (this.dtPicker.pickerType === 'timer') {\n fromString = this.convertTimeStringToDateTimeString(\n fromString,\n this.values[0]\n );\n toString = this.convertTimeStringToDateTimeString(\n toString,\n this.values[1]\n );\n }\n\n let from = this.dateTimeAdapter.parse(\n fromString,\n this.dateTimeFormats.parseInput\n );\n let to = this.dateTimeAdapter.parse(\n toString,\n this.dateTimeFormats.parseInput\n );\n this.lastValueValid =\n (!from || this.dateTimeAdapter.isValid(from)) &&\n (!to || this.dateTimeAdapter.isValid(to));\n from = this.getValidDate(from);\n to = this.getValidDate(to);\n\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\n if (\n !this.isSameValue(from, this._values[0]) ||\n !this.isSameValue(to, this._values[1]) ||\n (from === null && to === null)\n ) {\n this._values = [from, to];\n this.valueChange.emit(this._values);\n this.onModelChange(this._values);\n this.dateTimeInput.emit({\n source: this,\n value: this._values,\n input: this.elmRef.nativeElement\n });\n }\n }\n\n /**\n * Check if the two value is the same\n */\n private isSameValue(first: T | null, second: T | null): boolean {\n if (first && second) {\n return this.dateTimeAdapter.compare(first, second) === 0;\n }\n\n return first === second;\n }\n}\n","/* tslint:disable:component-class-suffix no-host-metadata-property */\n/**\n * calendar-body.component\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectMode } from './date-time.class';\nimport { take } from 'rxjs/operators';\n\nexport class CalendarCell {\n constructor(\n public value: number,\n public displayValue: string,\n public ariaLabel: string,\n public enabled: boolean,\n public out = false,\n public cellClass: string = ''\n ) {}\n}\n\n@Component({\n selector: '[owl-date-time-calendar-body]',\n exportAs: 'owlDateTimeCalendarBody',\n templateUrl: './calendar-body.component.html',\n styleUrls: ['./calendar-body.component.scss'],\n host: {\n '[class.owl-dt-calendar-body]': 'owlDTCalendarBodyClass'\n },\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OwlCalendarBodyComponent implements OnInit {\n /**\n * The cell number of the active cell in the table.\n */\n @Input()\n activeCell = 0;\n\n /**\n * The cells to display in the table.\n * */\n @Input()\n rows: CalendarCell[][];\n\n /**\n * The number of columns in the table.\n * */\n @Input()\n numCols = 7;\n\n /**\n * The ratio (width / height) to use for the cells in the table.\n */\n @Input()\n cellRatio = 1;\n\n /**\n * The value in the table that corresponds to today.\n * */\n @Input()\n todayValue: number;\n\n /**\n * The value in the table that is currently selected.\n * */\n @Input()\n selectedValues: number[];\n\n /**\n * Current picker select mode\n */\n @Input()\n selectMode: SelectMode;\n\n /**\n * Emit when a calendar cell is selected\n * */\n @Output()\n public readonly select = new EventEmitter<CalendarCell>();\n\n get owlDTCalendarBodyClass(): boolean {\n return true;\n }\n\n get isInSingleMode(): boolean {\n return this.selectMode === 'single';\n }\n\n get isInRangeMode(): boolean {\n return (\n this.selectMode === 'range' ||\n this.selectMode === 'rangeFrom' ||\n this.selectMode === 'rangeTo'\n );\n }\n\n constructor(private elmRef: ElementRef, private ngZone: NgZone) {}\n\n public ngOnInit() {}\n\n public selectCell(cell: CalendarCell): void {\n this.select.emit(cell);\n }\n\n public isActiveCell(rowIndex: number, colIndex: number): boolean {\n const cellNumber = rowIndex * this.numCols + colIndex;\n return cellNumber === this.activeCell;\n }\n\n /**\n * Check if the cell is selected\n */\n public isSelected(value: number): boolean {\n if (!this.selectedValues || this.selectedValues.length === 0) {\n return false;\n }\n\n if (this.isInSingleMode) {\n return value === this.selectedValues[0];\n }\n\n if (this.isInRangeMode) {\n const fromValue = this.selectedValues[0];\n const toValue = this.selectedValues[1];\n\n return value === fromValue || value === toValue;\n }\n }\n\n /**\n * Check if the cell in the range\n * */\n public isInRange(value: number): boolean {\n if (this.isInRangeMode) {\n const fromValue = this.selectedValues[0];\n const toValue = this.selectedValues[1];\n\n if (fromValue !== null && toValue !== null) {\n return value >= fromValue && value <= toValue;\n } else {\n return value === fromValue || value === toValue;\n }\n }\n }\n\n /**\n * Check if the cell is the range from\n * */\n public isRangeFrom(value: number): boolean {\n if (this.isInRangeMode) {\n const fromValue = this.selectedValues[0];\n return fromValue !== null && value === fromValue;\n }\n }\n\n /**\n * Check if the cell is the range to\n * */\n public isRangeTo(value: number): boolean {\n if (this.isInRangeMode) {\n const toValue = this.selectedValues[1];\n return toValue !== null && value === toValue;\n }\n }\n\n /**\n * Focus to a active cell\n * */\n public focusActiveCell(): void {\n this.ngZone.runOutsideAngular(() => {\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.elmRef.nativeElement\n .querySelector('.owl-dt-calendar-cell-active')\n .focus();\n });\n });\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * calendar-month-view.component\n */\n\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n CalendarCell,\n OwlCalendarBodyComponent\n} from './calendar-body.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport {\n OWL_DATE_TIME_FORMATS,\n OwlDateTimeFormats\n} from './adapter/date-time-format.class';\nimport { Subscription } from 'rxjs';\nimport { SelectMode } from './date-time.class';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\n\nconst DAYS_PER_WEEK = 7;\nconst WEEKS_PER_VIEW = 6;\n\n@Component({\n selector: 'owl-date-time-month-view',\n exportAs: 'owlYearView',\n templateUrl: './calendar-month-view.component.html',\n styleUrls: ['./calendar-month-view.component.scss'],\n host: {\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView'\n },\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OwlMonthViewComponent<T>\n implements OnInit, AfterContentInit, OnDestroy {\n /**\n * Whether to hide dates in other months at the start or end of the current month.\n * */\n @Input()\n hideOtherMonths = false;\n\n /**\n * Define the first day of a week\n * Sunday: 0 ~ Saturday: 6\n * */\n private _firstDayOfWeek = 0;\n @Input()\n get firstDayOfWeek(): number {\n return this._firstDayOfWeek;\n }\n\n set firstDayOfWeek(val: number) {\n val = coerceNumberProperty(val);\n if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {\n this._firstDayOfWeek = val;\n\n if (this.initiated) {\n this.generateWeekDays();\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n }\n }\n\n /**\n * The select mode of the picker;\n * */\n private _selectMode: SelectMode = 'single';\n @Input()\n get selectMode(): SelectMode {\n return this._selectMode;\n }\n\n set selectMode(val: SelectMode) {\n this._selectMode = val;\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n }\n\n /** The currently selected date. */\n private _selected: T | null;\n @Input()\n get selected(): T | null {\n return this._selected;\n }\n\n set selected(value: T | null) {\n const oldSelected = this._selected;\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\n this.setSelectedDates();\n }\n }\n\n private _selecteds: T[] = [];\n @Input()\n get selecteds(): T[] {\n return this._selecteds;\n }\n\n set selecteds(values: T[]) {\n this._selecteds = values.map(v => {\n v = this.dateTimeAdapter.deserialize(v);\n return this.getValidDate(v);\n });\n this.setSelectedDates();\n }\n\n private _pickerMoment: T;\n @Input()\n get pickerMoment() {\n return this._pickerMoment;\n }\n\n set pickerMoment(value: T) {\n const oldMoment = this._pickerMoment;\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment =\n this.getValidDate(value) || this.dateTimeAdapter.now();\n\n this.firstDateOfMonth = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this._pickerMoment),\n this.dateTimeAdapter.getMonth(this._pickerMoment),\n 1\n );\n\n if (\n !this.isSameMonth(oldMoment, this._pickerMoment) &&\n this.initiated\n ) {\n this.generateCalendar();\n }\n }\n\n /**\n * A function used to filter which dates are selectable\n * */\n private _dateFilter: (date: T) => boolean;\n @Input()\n get dateFilter() {\n return this._dateFilter;\n }\n\n set dateFilter(filter: (date: T) => boolean) {\n this._dateFilter = filter;\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n }\n\n /** The minimum selectable date. */\n private _minDate: T | null;\n @Input()\n get minDate(): T | null {\n return this._minDate;\n }\n\n set minDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n }\n\n /** The maximum selectable date. */\n private _maxDate: T | null;\n @Input()\n get maxDate(): T | null {\n return this._maxDate;\n }\n\n set maxDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDate = this.getValidDate(value);\n\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n }\n\n private _weekdays: Array<{ long: string; short: string; narrow: string }>;\n get weekdays() {\n return this._weekdays;\n }\n\n private _days: CalendarCell[][];\n get days() {\n return this._days;\n }\n\n get activeCell(): number {\n if (this.pickerMoment) {\n return (\n this.dateTimeAdapter.getDate(this.pickerMoment) +\n this.firstRowOffset -\n 1\n );\n }\n }\n\n get isInSingleMode(): boolean {\n return this.selectMode === 'single';\n }\n\n get isInRangeMode(): boolean {\n return (\n this.selectMode === 'range' ||\n this.selectMode === 'rangeFrom' ||\n this.selectMode === 'rangeTo'\n );\n }\n\n private firstDateOfMonth: T;\n\n private localeSub: Subscription = Subscription.EMPTY;\n\n private initiated = false;\n\n private dateNames: string[];\n\n /**\n * The date of the month that today falls on.\n * */\n public todayDate: number | null;\n\n /**\n * An array to hold all selectedDates' value\n * the value is the day number in current month\n * */\n public selectedDates: number[] = [];\n\n // the index of cell that contains the first date of the month\n public firstRowOffset: number;\n\n /**\n * Callback to invoke when a new date is selected\n * */\n @Output()\n readonly selectedChange = new EventEmitter<T | null>();\n\n /**\n * Callback to invoke when any date is selected.\n * */\n @Output()\n readonly userSelection = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output()\n readonly pickerMomentChange: EventEmitter<T> = new EventEmitter<T>();\n\n /** The body of calendar table */\n @ViewChild(OwlCalendarBodyComponent, { static: true })\n calendarBodyElm: OwlCalendarBodyComponent;\n\n get owlDTCalendarView(): boolean {\n return true;\n }\n\n constructor(\n private cdRef: ChangeDetectorRef,\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\n @Optional()\n @Inject(OWL_DATE_TIME_FORMATS)\n private dateTimeFormats: OwlDateTimeFormats\n ) {}\n\n public ngOnInit() {\n this.generateWeekDays();\n\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {\n this.generateWeekDays();\n this.generateCalendar();\n this.cdRef.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n this.generateCalendar();\n this.initiated = true;\n }\n\n public ngOnDestroy(): void {\n this.localeSub.unsubscribe();\n }\n\n /**\n * Handle a calendarCell selected\n */\n public selectCalendarCell(cell: CalendarCell): void {\n // Cases in which the date would not be selected\n // 1, the calendar cell is NOT enabled (is NOT valid)\n // 2, the selected date is NOT in current picker's month and the hideOtherMonths is enabled\n if (!cell.enabled || (this.hideOtherMonths && cell.out)) {\n return;\n }\n\n this.selectDate(cell.value);\n }\n\n /**\n * Handle a new date selected\n */\n private selectDate(date: number): void {\n const daysDiff = date - 1;\n const selected = this.dateTimeAdapter.addCalendarDays(\n this.firstDateOfMonth,\n daysDiff\n );\n\n this.selectedChange.emit(selected);\n this.userSelection.emit();\n }\n\n /**\n * Handle keydown event on calendar body\n */\n public handleCalendarKeydown(event: KeyboardEvent): void {\n let moment;\n switch (event.keyCode) {\n // minus 1 day\n case LEFT_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment,\n -1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 1 day\n case RIGHT_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment,\n 1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // minus 1 week\n case UP_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment,\n -7\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 1 week\n case DOWN_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment,\n 7\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // move to first day of current month\n case HOME:\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment,\n 1 - this.dateTimeAdapter.getDate(this.pickerMoment)\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // move to last day of current month\n case END:\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment,\n this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment) -\n this.dateTimeAdapter.getDate(this.pickerMoment)\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // minus 1 month (or 1 year)\n case PAGE_UP:\n moment = event.altKey\n ? this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment,\n -1\n )\n : this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n -1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 1 month (or 1 year)\n case PAGE_DOWN:\n moment = event.altKey\n ? this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment,\n 1\n )\n : this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n 1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // select the pickerMoment\n case ENTER:\n if (!this.dateFilter || this.dateFilter(this.pickerMoment)) {\n this.selectDate(\n this.dateTimeAdapter.getDate(this.pickerMoment)\n );\n }\n break;\n default:\n return;\n }\n\n this.focusActiveCell();\n event.preventDefault();\n }\n\n /**\n * Generate the calendar weekdays array\n * */\n private generateWeekDays(): void {\n const longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long');\n const shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short');\n const narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow');\n const firstDayOfWeek = this.firstDayOfWeek;\n\n const weekdays = longWeekdays.map((long, i) => {\n return { long, short: shortWeekdays[i], narrow: narrowWeekdays[i] };\n });\n\n this._weekdays = weekdays\n .slice(firstDayOfWeek)\n .concat(weekdays.slice(0, firstDayOfWeek));\n\n this.dateNames = this.dateTimeAdapter.getDateNames();\n\n return;\n }\n\n /**\n * Generate the calendar days array\n * */\n private generateCalendar(): void {\n if (!this.pickerMoment) {\n return;\n }\n\n this.todayDate = null;\n\n // the first weekday of the month\n const startWeekdayOfMonth = this.dateTimeAdapter.getDay(\n this.firstDateOfMonth\n );\n const firstDayOfWeek = this.firstDayOfWeek;\n\n // the amount of days from the first date of the month\n // if it is < 0, it means the date is in previous month\n let daysDiff =\n 0 -\n ((startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) %\n DAYS_PER_WEEK);\n\n // the index of cell that contains the first date of the month\n this.firstRowOffset = Math.abs(daysDiff);\n\n this._days = [];\n for (let i = 0; i < WEEKS_PER_VIEW; i++) {\n const week = [];\n for (let j = 0; j < DAYS_PER_WEEK; j++) {\n const date = this.dateTimeAdapter.addCalendarDays(\n this.firstDateOfMonth,\n daysDiff\n );\n const dateCell = this.createDateCell(date, daysDiff);\n\n // check if the date is today\n if (\n this.dateTimeAdapter.isSameDay(\n this.dateTimeAdapter.now(),\n date\n )\n ) {\n this.todayDate = daysDiff + 1;\n }\n\n week.push(dateCell);\n daysDiff += 1;\n }\n this._days.push(week);\n }\n\n this.setSelectedDates();\n }\n\n /**\n * Creates CalendarCell for days.\n */\n private createDateCell(date: T, daysDiff: number): CalendarCell {\n // total days of the month\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\n this.pickerMoment\n );\n const dateNum = this.dateTimeAdapter.getDate(date);\n // const dateName = this.dateNames[dateNum - 1];\n const dateName = dateNum.toString();\n const ariaLabel = this.dateTimeAdapter.format(\n date,\n this.dateTimeFormats.dateA11yLabel\n );\n\n // check if the date if selectable\n const enabled = this.isDateEnabled(date);\n\n // check if date is not in current month\n const dayValue = daysDiff + 1;\n const out = dayValue < 1 || dayValue > daysInMonth;\n const cellClass = 'owl-dt-day-' + this.dateTimeAdapter.getDay(date);\n\n return new CalendarCell(\n dayValue,\n dateName,\n ariaLabel,\n enabled,\n out,\n cellClass\n );\n }\n\n /**\n * Check if the date is valid\n */\n private isDateEnabled(date: T): boolean {\n return (\n !!date &&\n (!this.dateFilter || this.dateFilter(date)) &&\n (!this.minDate ||\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\n (!this.maxDate ||\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\n );\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | null {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : null;\n }\n\n /**\n * Check if the give dates are none-null and in the same month\n */\n public isSameMonth(dateLeft: T, dateRight: T): boolean {\n return !!(\n dateLeft &&\n dateRight &&\n this.dateTimeAdapter.isValid(dateLeft) &&\n this.dateTimeAdapter.isValid(dateRight) &&\n this.dateTimeAdapter.getYear(dateLeft) ===\n this.dateTimeAdapter.getYear(dateRight) &&\n this.dateTimeAdapter.getMonth(dateLeft) ===\n this.dateTimeAdapter.getMonth(dateRight)\n );\n }\n\n /**\n * Set the selectedDates value.\n * In single mode, it has only one value which represent the selected date\n * In range mode, it would has two values, one for the fromValue and the other for the toValue\n * */\n private setSelectedDates(): void {\n this.selectedDates = [];\n\n if (!this.firstDateOfMonth) {\n return;\n }\n\n if (this.isInSingleMode && this.selected) {\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\n this.selected,\n this.firstDateOfMonth\n );\n this.selectedDates[0] = dayDiff + 1;\n return;\n }\n\n if (this.isInRangeMode && this.selecteds) {\n this.selectedDates = this.selecteds.map(selected => {\n if (this.dateTimeAdapter.isValid(selected)) {\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\n selected,\n this.firstDateOfMonth\n );\n return dayDiff + 1;\n } else {\n return null;\n }\n });\n }\n }\n\n private focusActiveCell() {\n this.calendarBodyElm.focusActiveCell();\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * calendar-year-view.component\n */\n\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n CalendarCell,\n OwlCalendarBodyComponent\n} from './calendar-body.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport {\n OWL_DATE_TIME_FORMATS,\n OwlDateTimeFormats\n} from './adapter/date-time-format.class';\nimport { Subscription } from 'rxjs';\nimport { SelectMode } from './date-time.class';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW\n} from '@angular/cdk/keycodes';\n\nconst MONTHS_PER_YEAR = 12;\nconst MONTHS_PER_ROW = 3;\n\n@Component({\n selector: 'owl-date-time-year-view',\n exportAs: 'owlMonthView',\n templateUrl: './calendar-year-view.component.html',\n styleUrls: ['./calendar-year-view.component.scss'],\n host: {\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView'\n },\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OwlYearViewComponent<T>\n implements OnInit, AfterContentInit, OnDestroy {\n /**\n * The select mode of the picker;\n * */\n private _selectMode: SelectMode = 'single';\n @Input()\n get selectMode(): SelectMode {\n return this._selectMode;\n }\n\n set selectMode(val: SelectMode) {\n this._selectMode = val;\n if (this.initiated) {\n this.generateMonthList();\n this.cdRef.markForCheck();\n }\n }\n\n /** The currently selected date. */\n private _selected: T | null;\n @Input()\n get selected(): T | null {\n return this._selected;\n }\n\n set selected(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n this.setSelectedMonths();\n }\n\n private _selecteds: T[] = [];\n @Input()\n get selecteds(): T[] {\n return this._selecteds;\n }\n\n set selecteds(values: T[]) {\n this._selecteds = [];\n for (let i = 0; i < values.length; i++) {\n const value = this.dateTimeAdapter.deserialize(values[i]);\n this._selecteds.push(this.getValidDate(value));\n }\n\n this.setSelectedMonths();\n }\n\n private _pickerMoment: T | null;\n @Input()\n get pickerMoment() {\n return this._pickerMoment;\n }\n\n set pickerMoment(value: T) {\n const oldMoment = this._pickerMoment;\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment =\n this.getValidDate(value) || this.dateTimeAdapter.now();\n\n if (\n !this.hasSameYear(oldMoment, this._pickerMoment) &&\n this.initiated\n ) {\n this.generateMonthList();\n }\n }\n\n /**\n * A function used to filter which dates are selectable\n * */\n private _dateFilter: (date: T) => boolean;\n @Input()\n get dateFilter() {\n return this._dateFilter;\n }\n\n set dateFilter(filter: (date: T) => boolean) {\n this._dateFilter = filter;\n if (this.initiated) {\n this.generateMonthList();\n }\n }\n\n /** The minimum selectable date. */\n private _minDate: T | null;\n @Input()\n get minDate(): T | null {\n return this._minDate;\n }\n\n set minDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateMonthList();\n }\n }\n\n /** The maximum selectable date. */\n private _maxDate: T | null;\n @Input()\n get maxDate(): T | null {\n return this._maxDate;\n }\n\n set maxDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateMonthList();\n }\n }\n\n private readonly monthNames: string[];\n\n private _months: CalendarCell[][];\n get months() {\n return this._months;\n }\n\n get activeCell(): number {\n if (this._pickerMoment) {\n return this.dateTimeAdapter.getMonth(this._pickerMoment);\n }\n }\n\n get isInSingleMode(): boolean {\n return this.selectMode === 'single';\n }\n\n get isInRangeMode(): boolean {\n return (\n this.selectMode === 'range' ||\n this.selectMode === 'rangeFrom' ||\n this.selectMode === 'rangeTo'\n );\n }\n\n private localeSub: Subscription = Subscription.EMPTY;\n\n private initiated = false;\n\n public todayMonth: number | null;\n\n /**\n * An array to hold all selectedDates' month value\n * the value is the month number in current year\n * */\n public selectedMonths: number[] = [];\n\n /**\n * Callback to invoke when a new month is selected\n * */\n @Output()\n readonly change = new EventEmitter<T>();\n\n /**\n * Emits the selected year. This doesn't imply a change on the selected date\n * */\n @Output()\n readonly monthSelected = new EventEmitter<T>();\n\n /** Emits when any date is activated. */\n @Output()\n readonly pickerMomentChange: EventEmitter<T> = new EventEmitter<T>();\n\n /** Emits when use keyboard enter to select a calendar cell */\n @Output()\n readonly keyboardEnter: EventEmitter<any> = new EventEmitter<any>();\n\n /** The body of calendar table */\n @ViewChild(OwlCalendarBodyComponent, { static: true })\n calendarBodyElm: OwlCalendarBodyComponent;\n\n get owlDTCalendarView(): boolean {\n return true;\n }\n\n constructor(\n private cdRef: ChangeDetectorRef,\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\n @Optional()\n @Inject(OWL_DATE_TIME_FORMATS)\n private dateTimeFormats: OwlDateTimeFormats\n ) {\n this.monthNames = this.dateTimeAdapter.getMonthNames('short');\n }\n\n public ngOnInit() {\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {\n this.generateMonthList();\n this.cdRef.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n this.generateMonthList();\n this.initiated = true;\n }\n\n public ngOnDestroy(): void {\n this.localeSub.unsubscribe();\n }\n\n /**\n * Handle a calendarCell selected\n */\n public selectCalendarCell(cell: CalendarCell): void {\n this.selectMonth(cell.value);\n }\n\n /**\n * Handle a new month selected\n */\n private selectMonth(month: number): void {\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment),\n month,\n 1\n );\n\n this.monthSelected.emit(firstDateOfMonth);\n\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\n firstDateOfMonth\n );\n const result = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment),\n month,\n Math.min(\n daysInMonth,\n this.dateTimeAdapter.getDate(this.pickerMoment)\n ),\n this.dateTimeAdapter.getHours(this.pickerMoment),\n this.dateTimeAdapter.getMinutes(this.pickerMoment),\n this.dateTimeAdapter.getSeconds(this.pickerMoment)\n );\n\n this.change.emit(result);\n }\n\n /**\n * Handle keydown event on calendar body\n */\n public handleCalendarKeydown(event: KeyboardEvent): void {\n let moment;\n switch (event.keyCode) {\n // minus 1 month\n case LEFT_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n -1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 1 month\n case RIGHT_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n 1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // minus 3 months\n case UP_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n -3\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 3 months\n case DOWN_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n 3\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // move to first month of current year\n case HOME:\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n -this.dateTimeAdapter.getMonth(this.pickerMoment)\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // move to last month of current year\n case END:\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment,\n 11 - this.dateTimeAdapter.getMonth(this.pickerMoment)\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // minus 1 year (or 10 year)\n case PAGE_UP:\n moment = this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment,\n event.altKey ? -10 : -1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 1 year (or 10 year)\n case PAGE_DOWN:\n moment = this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment,\n event.altKey ? 10 : 1\n );\n this.pickerMomentChange.emit(moment);\n break;\n\n // Select current month\n case ENTER:\n this.selectMonth(\n this.dateTimeAdapter.getMonth(this.pickerMoment)\n );\n this.keyboardEnter.emit();\n break;\n default:\n return;\n }\n\n this.focusActiveCell();\n event.preventDefault();\n }\n\n /**\n * Generate the calendar month list\n * */\n private generateMonthList(): void {\n if (!this.pickerMoment) {\n return;\n }\n\n this.setSelectedMonths();\n this.todayMonth = this.getMonthInCurrentYear(\n this.dateTimeAdapter.now()\n );\n\n this._months = [];\n for (let i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {\n const row = [];\n\n for (let j = 0; j < MONTHS_PER_ROW; j++) {\n const month = j + i * MONTHS_PER_ROW;\n const monthCell = this.createMonthCell(month);\n row.push(monthCell);\n }\n\n this._months.push(row);\n }\n\n return;\n }\n\n /**\n * Creates an CalendarCell for the given month.\n */\n private createMonthCell(month: number): CalendarCell {\n const startDateOfMonth = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment),\n month,\n 1\n );\n const ariaLabel = this.dateTimeAdapter.format(\n startDateOfMonth,\n this.dateTimeFormats.monthYearA11yLabel\n );\n const cellClass = 'owl-dt-month-' + month;\n return new CalendarCell(\n month,\n this.monthNames[month],\n ariaLabel,\n this.isMonthEnabled(month),\n false,\n cellClass\n );\n }\n\n /**\n * Check if the given month is enable\n */\n private isMonthEnabled(month: number): boolean {\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment),\n month,\n 1\n );\n\n // If any date in the month is selectable,\n // we count the month as enable\n for (\n let date = firstDateOfMonth;\n this.dateTimeAdapter.getMonth(date) === month;\n date = this.dateTimeAdapter.addCalendarDays(date, 1)\n ) {\n if (\n !!date &&\n (!this.dateFilter || this.dateFilter(date)) &&\n (!this.minDate ||\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\n (!this.maxDate ||\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n private getMonthInCurrentYear(date: T | null): number {\n if (this.getValidDate(date) && this.getValidDate(this._pickerMoment)) {\n const result = this.dateTimeAdapter.compareYear(\n date,\n this._pickerMoment\n );\n\n // < 0 : the given date's year is before pickerMoment's year, we return -1 as selected month value.\n // > 0 : the given date's year is after pickerMoment's year, we return 12 as selected month value.\n // 0 : the give date's year is same as the pickerMoment's year, we return the actual month value.\n if (result < 0) {\n return -1;\n } else if (result > 0) {\n return 12;\n } else {\n return this.dateTimeAdapter.getMonth(date);\n }\n } else {\n return null;\n }\n }\n\n /**\n * Set the selectedMonths value\n * In single mode, it has only one value which represent the month the selected date in\n * In range mode, it would has two values, one for the month the fromValue in and the other for the month the toValue in\n * */\n private setSelectedMonths(): void {\n this.selectedMonths = [];\n if (this.isInSingleMode && this.selected) {\n this.selectedMonths[0] = this.getMonthInCurrentYear(this.selected);\n }\n\n if (this.isInRangeMode && this.selecteds) {\n this.selectedMonths[0] = this.getMonthInCurrentYear(\n this.selecteds[0]\n );\n this.selectedMonths[1] = this.getMonthInCurrentYear(\n this.selecteds[1]\n );\n }\n }\n\n /**\n * Check the given dates are in the same year\n */\n private hasSameYear(dateLeft: T, dateRight: T) {\n return !!(\n dateLeft &&\n dateRight &&\n this.dateTimeAdapter.getYear(dateLeft) ===\n this.dateTimeAdapter.getYear(dateRight)\n );\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | null {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : null;\n }\n\n private focusActiveCell() {\n this.calendarBodyElm.focusActiveCell();\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * calendar-multi-year-view.component\n */\n\nimport {\n AfterContentInit,\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n ViewChild\n} from '@angular/core';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\nimport { SelectMode } from './date-time.class';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\n\nexport const YEARS_PER_ROW = 3;\nexport const YEAR_ROWS = 7;\n\n@Component({\n selector: 'owl-date-time-multi-year-view',\n templateUrl: './calendar-multi-year-view.component.html',\n styleUrls: ['./calendar-multi-year-view.component.scss'],\n host: {\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView',\n '[class.owl-dt-calendar-multi-year-view]': 'owlDTCalendarMultiYearView'\n },\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class OwlMultiYearViewComponent<T> implements OnInit, AfterContentInit {\n\n /**\n * The select mode of the picker;\n * */\n private _selectMode: SelectMode = 'single';\n @Input()\n get selectMode(): SelectMode {\n return this._selectMode;\n }\n\n set selectMode(val: SelectMode) {\n this._selectMode = val;\n if (this.initiated) {\n this.setSelectedYears();\n this.cdRef.markForCheck();\n }\n }\n\n /** The currently selected date. */\n private _selected: T | null;\n @Input()\n get selected(): T | null {\n return this._selected;\n }\n\n set selected(value: T | null) {\n const oldSelected = this._selected;\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\n this.setSelectedYears();\n }\n }\n\n private _selecteds: T[] = [];\n @Input()\n get selecteds(): T[] {\n return this._selecteds;\n }\n\n set selecteds(values: T[]) {\n this._selecteds = values.map((v) => {\n v = this.dateTimeAdapter.deserialize(v);\n return this.getValidDate(v);\n });\n this.setSelectedYears();\n }\n\n private _pickerMoment: T | null;\n @Input()\n get pickerMoment() {\n return this._pickerMoment;\n }\n\n set pickerMoment(value: T) {\n const oldMoment = this._pickerMoment;\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();\n\n if (oldMoment && this._pickerMoment &&\n !this.isSameYearList(oldMoment, this._pickerMoment)) {\n this.generateYearList();\n }\n }\n\n /**\n * A function used to filter which dates are selectable\n * */\n private _dateFilter: (date: T) => boolean;\n @Input()\n get dateFilter() {\n return this._dateFilter;\n }\n\n set dateFilter(filter: (date: T) => boolean) {\n this._dateFilter = filter;\n if (this.initiated) {\n this.generateYearList();\n }\n }\n\n /** The minimum selectable date. */\n private _minDate: T | null;\n @Input()\n get minDate(): T | null {\n return this._minDate;\n }\n\n set minDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateYearList();\n }\n }\n\n /** The maximum selectable date. */\n private _maxDate: T | null;\n @Input()\n get maxDate(): T | null {\n return this._maxDate;\n }\n\n set maxDate(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateYearList();\n }\n }\n\n private _todayYear: number;\n get todayYear(): number {\n return this._todayYear;\n }\n\n private _years: CalendarCell[][];\n get years() {\n return this._years;\n }\n\n private _selectedYears: number[];\n get selectedYears(): number[] {\n return this._selectedYears;\n }\n\n private initiated = false;\n\n get isInSingleMode(): boolean {\n return this.selectMode === 'single';\n }\n\n get isInRangeMode(): boolean {\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\n || this.selectMode === 'rangeTo';\n }\n\n get activeCell(): number {\n if (this._pickerMoment) {\n return this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS);\n }\n }\n\n get tableHeader(): string {\n if (this._years && this._years.length > 0) {\n return `${this._years[0][0].displayValue} ~ ${this._years[YEAR_ROWS - 1][YEARS_PER_ROW - 1].displayValue}`;\n }\n }\n\n get prevButtonLabel(): string {\n return this.pickerIntl.prevMultiYearLabel;\n }\n\n get nextButtonLabel(): string {\n return this.pickerIntl.nextMultiYearLabel;\n }\n\n /**\n * Callback to invoke when a new month is selected\n * */\n @Output() readonly change = new EventEmitter<T>();\n\n /**\n * Emits the selected year. This doesn't imply a change on the selected date\n * */\n @Output() readonly yearSelected = new EventEmitter<T>();\n\n /** Emits when any date is activated. */\n @Output() readonly pickerMomentChange: EventEmitter<T> = new EventEmitter<T>();\n\n /** Emits when use keyboard enter to select a calendar cell */\n @Output() readonly keyboardEnter: EventEmitter<any> = new EventEmitter<any>();\n\n /** The body of calendar table */\n @ViewChild(OwlCalendarBodyComponent, { static: true }) calendarBodyElm: OwlCalendarBodyComponent;\n\n get owlDTCalendarView(): boolean {\n return true;\n }\n\n get owlDTCalendarMultiYearView(): boolean {\n return true;\n }\n\n constructor(private cdRef: ChangeDetectorRef,\n private pickerIntl: OwlDateTimeIntl,\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>) {\n }\n\n public ngOnInit() {\n }\n\n public ngAfterContentInit(): void {\n this._todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now());\n this.generateYearList();\n this.initiated = true;\n }\n\n /**\n * Handle a calendarCell selected\n */\n public selectCalendarCell(cell: CalendarCell): void {\n this.selectYear(cell.value);\n }\n\n private selectYear(year: number): void {\n this.yearSelected.emit(this.dateTimeAdapter.createDate(year, 0, 1));\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\n year,\n this.dateTimeAdapter.getMonth(this.pickerMoment),\n 1\n );\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);\n const selected = this.dateTimeAdapter.createDate(\n year,\n this.dateTimeAdapter.getMonth(this.pickerMoment),\n Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)),\n this.dateTimeAdapter.getHours(this.pickerMoment),\n this.dateTimeAdapter.getMinutes(this.pickerMoment),\n this.dateTimeAdapter.getSeconds(this.pickerMoment),\n );\n\n this.change.emit(selected);\n }\n\n /**\n * Generate the previous year list\n * */\n public prevYearList(event: any): void {\n this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1 * YEAR_ROWS * YEARS_PER_ROW);\n this.generateYearList();\n event.preventDefault();\n }\n\n /**\n * Generate the next year list\n * */\n public nextYearList(event: any): void {\n this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, YEAR_ROWS * YEARS_PER_ROW);\n this.generateYearList();\n event.preventDefault();\n }\n\n public generateYearList(): void {\n this._years = [];\n\n const pickerMomentYear = this.dateTimeAdapter.getYear(this._pickerMoment);\n const offset = pickerMomentYear % (YEARS_PER_ROW * YEAR_ROWS);\n\n for (let i = 0; i < YEAR_ROWS; i++) {\n const row = [];\n\n for (let j = 0; j < YEARS_PER_ROW; j++) {\n const year = pickerMomentYear - offset + (j + i * YEARS_PER_ROW);\n const yearCell = this.createYearCell(year);\n row.push(yearCell);\n }\n\n this._years.push(row);\n }\n\n return;\n\n }\n\n /** Whether the previous period button is enabled. */\n public previousEnabled(): boolean {\n if (!this.minDate) {\n return true;\n }\n return !this.minDate || !this.isSameYearList(this._pickerMoment, this.minDate);\n }\n\n /** Whether the next period button is enabled. */\n public nextEnabled(): boolean {\n return !this.maxDate || !this.isSameYearList(this._pickerMoment, this.maxDate);\n }\n\n public handleCalendarKeydown(event: KeyboardEvent): void {\n let moment;\n switch (event.keyCode) {\n // minus 1 year\n case LEFT_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1);\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 1 year\n case RIGHT_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, 1);\n this.pickerMomentChange.emit(moment);\n break;\n\n // minus 3 years\n case UP_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1 * YEARS_PER_ROW);\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 3 years\n case DOWN_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, YEARS_PER_ROW);\n this.pickerMomentChange.emit(moment);\n break;\n\n // go to the first year of the year page\n case HOME:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment,\n -this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS));\n this.pickerMomentChange.emit(moment);\n break;\n\n // go to the last year of the year page\n case END:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment,\n (YEARS_PER_ROW * YEAR_ROWS) - this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS) - 1);\n this.pickerMomentChange.emit(moment);\n break;\n\n // minus 1 year page (or 10 year pages)\n case PAGE_UP:\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment,\n event.altKey ? -10 * (YEARS_PER_ROW * YEAR_ROWS) : -1 * (YEARS_PER_ROW * YEAR_ROWS));\n this.pickerMomentChange.emit(moment);\n break;\n\n // add 1 year page (or 10 year pages)\n case PAGE_DOWN:\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment,\n event.altKey ? 10 * (YEARS_PER_ROW * YEAR_ROWS) : (YEARS_PER_ROW * YEAR_ROWS));\n this.pickerMomentChange.emit(moment);\n break;\n\n case ENTER:\n this.selectYear(this.dateTimeAdapter.getYear(this._pickerMoment));\n this.keyboardEnter.emit();\n break;\n\n default:\n return;\n }\n\n this.focusActiveCell();\n event.preventDefault();\n }\n\n /**\n * Creates an CalendarCell for the given year.\n */\n private createYearCell(year: number): CalendarCell {\n const startDateOfYear = this.dateTimeAdapter.createDate(year, 0, 1);\n const ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear);\n const cellClass = 'owl-dt-year-' + year;\n return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass);\n }\n\n private setSelectedYears(): void {\n\n this._selectedYears = [];\n\n if (this.isInSingleMode && this.selected) {\n this._selectedYears[0] = this.dateTimeAdapter.getYear(this.selected);\n }\n\n if (this.isInRangeMode && this.selecteds) {\n this._selectedYears = this.selecteds.map((selected) => {\n if (this.dateTimeAdapter.isValid(selected)) {\n return this.dateTimeAdapter.getYear(selected);\n } else {\n return null;\n }\n });\n }\n }\n\n /** Whether the given year is enabled. */\n private isYearEnabled(year: number) {\n // disable if the year is greater than maxDate lower than minDate\n if (year === undefined || year === null ||\n (this.maxDate && year > this.dateTimeAdapter.getYear(this.maxDate)) ||\n (this.minDate && year < this.dateTimeAdapter.getYear(this.minDate))) {\n return false;\n }\n\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfYear = this.dateTimeAdapter.createDate(year, 0, 1);\n\n // If any date in the year is enabled count the year as enabled.\n for (let date = firstOfYear; this.dateTimeAdapter.getYear(date) === year;\n date = this.dateTimeAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n private isSameYearList(date1: T, date2: T): boolean {\n return Math.floor(this.dateTimeAdapter.getYear(date1) / (YEARS_PER_ROW * YEAR_ROWS)) ===\n Math.floor(this.dateTimeAdapter.getYear(date2) / (YEARS_PER_ROW * YEAR_ROWS));\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | null {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n }\n\n private focusActiveCell() {\n this.calendarBodyElm.focusActiveCell();\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * timer-box.component\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\n@Component({\n exportAs: 'owlDateTimeTimerBox',\n selector: 'owl-date-time-timer-box',\n templateUrl: './timer-box.component.html',\n styleUrls: ['./timer-box.component.scss'],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.owl-dt-timer-box]': 'owlDTTimerBoxClass'\n }\n})\n\nexport class OwlTimerBoxComponent implements OnInit, OnDestroy {\n\n @Input() showDivider = false;\n\n @Input() upBtnAriaLabel: string;\n\n @Input() upBtnDisabled: boolean;\n\n @Input() downBtnAriaLabel: string;\n\n @Input() downBtnDisabled: boolean;\n\n /**\n * Value would be displayed in the box\n * If it is null, the box would display [value]\n * */\n @Input() boxValue: number;\n\n @Input() value: number;\n\n @Input() min: number;\n\n @Input() max: number;\n\n @Input() step = 1;\n\n @Input() inputLabel: string;\n\n @Output() valueChange = new EventEmitter<number>();\n\n @Output() inputChange = new EventEmitter<number>();\n\n private inputStream = new Subject<string>();\n\n private inputStreamSub = Subscription.EMPTY;\n\n get displayValue(): number {\n return this.boxValue || this.value;\n }\n\n get owlDTTimerBoxClass(): boolean {\n return true;\n }\n\n constructor() {\n }\n\n public ngOnInit() {\n this.inputStreamSub = this.inputStream.pipe(\n debounceTime(500),\n distinctUntilChanged()\n ).subscribe(( val: string ) => {\n if (val) {\n const inputValue = coerceNumberProperty(val, 0);\n this.updateValueViaInput(inputValue);\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.inputStreamSub.unsubscribe();\n }\n\n public upBtnClicked(): void {\n this.updateValue(this.value + this.step);\n }\n\n public downBtnClicked(): void {\n this.updateValue(this.value - this.step);\n }\n\n public handleInputChange( val: string ): void {\n this.inputStream.next(val);\n }\n\n private updateValue( value: number ): void {\n this.valueChange.emit(value);\n }\n\n private updateValueViaInput( value: number ): void {\n if (value > this.max || value < this.min) {\n return;\n }\n this.inputChange.emit(value);\n }\n}\n","/**\n * numberFixedLen.pipe\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberFixedLen'\n})\nexport class NumberFixedLenPipe implements PipeTransform {\n transform( num: number, len: number ): any {\n const number = Math.floor(num);\n const length = Math.floor(len);\n\n if (num === null || isNaN(number) || isNaN(length)) {\n return num;\n }\n\n let numString = number.toString();\n\n while (numString.length < length) {\n numString = '0' + numString;\n }\n\n return numString;\n }\n}\n","/* tslint:disable:no-host-metadata-property */\n/**\n * date-time-inline.component\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnInit,\n Optional,\n Output,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n OwlDateTime,\n PickerMode,\n PickerType,\n SelectMode\n} from './date-time.class';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport {\n OWL_DATE_TIME_FORMATS,\n OwlDateTimeFormats\n} from './adapter/date-time-format.class';\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\n\nexport const OWL_DATETIME_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => OwlDateTimeInlineComponent),\n multi: true\n};\n\n@Component({\n selector: 'owl-date-time-inline',\n templateUrl: './date-time-inline.component.html',\n styleUrls: ['./date-time-inline.component.scss'],\n host: {\n '[class.owl-dt-inline]': 'owlDTInlineClass'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n providers: [OWL_DATETIME_VALUE_ACCESSOR]\n})\nexport class OwlDateTimeInlineComponent<T> extends OwlDateTime<T>\n implements OnInit, ControlValueAccessor {\n @ViewChild(OwlDateTimeContainerComponent, { static: true })\n container: OwlDateTimeContainerComponent<T>;\n\n /**\n * Set the type of the dateTime picker\n * 'both' -- show both calendar and timer\n * 'calendar' -- show only calendar\n * 'timer' -- show only timer\n */\n private _pickerType: PickerType = 'both';\n @Input()\n get pickerType(): PickerType {\n return this._pickerType;\n }\n\n set pickerType(val: PickerType) {\n if (val !== this._pickerType) {\n this._pickerType = val;\n }\n }\n\n private _disabled = false;\n @Input()\n get disabled(): boolean {\n return !!this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _selectMode: SelectMode = 'single';\n @Input()\n get selectMode() {\n return this._selectMode;\n }\n\n set selectMode(mode: SelectMode) {\n if (\n mode !== 'single' &&\n mode !== 'range' &&\n mode !== 'rangeFrom' &&\n mode !== 'rangeTo'\n ) {\n throw Error('OwlDateTime Error: invalid selectMode value!');\n }\n\n this._selectMode = mode;\n }\n\n /** The date to open the calendar to initially. */\n private _startAt: T | null;\n @Input()\n get startAt(): T | null {\n if (this._startAt) {\n return this._startAt;\n }\n\n if (this.selectMode === 'single') {\n return this.value || null;\n } else if (\n this.selectMode === 'range' ||\n this.selectMode === 'rangeFrom'\n ) {\n return this.values[0] || null;\n } else if (this.selectMode === 'rangeTo') {\n return this.values[1] || null;\n } else {\n return null;\n }\n }\n\n set startAt(date: T | null) {\n this._startAt = this.getValidDate(\n this.dateTimeAdapter.deserialize(date)\n );\n }\n\n private _dateTimeFilter: (date: T | null) => boolean;\n @Input('owlDateTimeFilter')\n get dateTimeFilter() {\n return this._dateTimeFilter;\n }\n\n set dateTimeFilter(filter: (date: T | null) => boolean) {\n this._dateTimeFilter = filter;\n }\n\n /** The minimum valid date. */\n private _min: T | null;\n\n get minDateTime(): T | null {\n return this._min || null;\n }\n\n @Input('min')\n set minDateTime(value: T | null) {\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.changeDetector.markForCheck();\n }\n\n /** The maximum valid date. */\n private _max: T | null;\n\n get maxDateTime(): T | null {\n return this._max || null;\n }\n\n @Input('max')\n set maxDateTime(value: T | null) {\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.changeDetector.markForCheck();\n }\n\n private _value: T | null;\n @Input()\n get value() {\n return this._value;\n }\n\n set value(value: T | null) {\n value = this.dateTimeAdapter.deserialize(value);\n value = this.getValidDate(value);\n this._value = value;\n this.selected = value;\n }\n\n private _values: T[] = [];\n @Input()\n get values() {\n return this._values;\n }\n\n set values(values: T[]) {\n if (values && values.length > 0) {\n values = values.map(v => {\n v = this.dateTimeAdapter.deserialize(v);\n v = this.getValidDate(v);\n return v ? this.dateTimeAdapter.clone(v) : null;\n });\n this._values = [...values];\n this.selecteds = [...values];\n } else {\n this._values = [];\n this.selecteds = [];\n }\n }\n\n /**\n * Emits selected year in multi-year view\n * This doesn't imply a change on the selected date.\n * */\n @Output()\n yearSelected = new EventEmitter<T>();\n\n /**\n * Emits selected month in year view\n * This doesn't imply a change on the selected date.\n * */\n @Output()\n monthSelected = new EventEmitter<T>();\n\n private _selected: T | null;\n get selected() {\n return this._selected;\n }\n\n set selected(value: T | null) {\n this._selected = value;\n this.changeDetector.markForCheck();\n }\n\n private _selecteds: T[] = [];\n get selecteds() {\n return this._selecteds;\n }\n\n set selecteds(values: T[]) {\n this._selecteds = values;\n this.changeDetector.markForCheck();\n }\n\n get opened(): boolean {\n return true;\n }\n\n get pickerMode(): PickerMode {\n return 'inline';\n }\n\n get isInSingleMode(): boolean {\n return this._selectMode === 'single';\n }\n\n get isInRangeMode(): boolean {\n return (\n this._selectMode === 'range' ||\n this._selectMode === 'rangeFrom' ||\n this._selectMode === 'rangeTo'\n );\n }\n\n get owlDTInlineClass(): boolean {\n return true;\n }\n\n private onModelChange: Function = () => {};\n private onModelTouched: Function = () => {};\n\n constructor(\n protected changeDetector: ChangeDetectorRef,\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\n @Optional()\n @Inject(OWL_DATE_TIME_FORMATS)\n protected dateTimeFormats: OwlDateTimeFormats\n ) {\n super(dateTimeAdapter, dateTimeFormats);\n }\n\n public ngOnInit() {\n this.container.picker = this;\n }\n\n public writeValue(value: any): void {\n if (this.isInSingleMode) {\n this.value = value;\n this.container.pickerMoment = value;\n } else {\n this.values = value;\n this.container.pickerMoment = this._values[\n this.container.activeSelectedIndex\n ];\n }\n }\n\n public registerOnChange(fn: any): void {\n this.onModelChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onModelTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public select(date: T[] | T): void {\n if (this.disabled) {\n return;\n }\n\n if (Array.isArray(date)) {\n this.values = [...date];\n } else {\n this.value = date;\n }\n this.onModelChange(date);\n this.onModelTouched();\n }\n\n /**\n * Emits the selected year in multi-year view\n * */\n public selectYear(normalizedYear: T): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n /**\n * Emits selected month in year view\n * */\n public selectMonth(normalizedMonth: T): void {\n this.monthSelected.emit(normalizedMonth);\n }\n}\n","/**\n * dialog.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { OWL_DIALOG_SCROLL_STRATEGY_PROVIDER, OwlDialogService } from './dialog.service';\nimport { OwlDialogContainerComponent } from './dialog-container.component';\n\n@NgModule({\n imports: [CommonModule, A11yModule, OverlayModule, PortalModule],\n exports: [],\n declarations: [\n OwlDialogContainerComponent,\n ],\n providers: [\n OWL_DIALOG_SCROLL_STRATEGY_PROVIDER,\n OwlDialogService,\n ],\n entryComponents: [\n OwlDialogContainerComponent,\n ]\n})\nexport class OwlDialogModule {\n}\n","/**\n * date-time.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { OwlDateTimeTriggerDirective } from './date-time-picker-trigger.directive';\nimport { OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, OwlDateTimeComponent } from './date-time-picker.component';\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\nimport { OwlDateTimeInputDirective } from './date-time-picker-input.directive';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { OwlMonthViewComponent } from './calendar-month-view.component';\nimport { OwlCalendarBodyComponent } from './calendar-body.component';\nimport { OwlYearViewComponent } from './calendar-year-view.component';\nimport { OwlMultiYearViewComponent } from './calendar-multi-year-view.component';\nimport { OwlTimerBoxComponent } from './timer-box.component';\nimport { OwlTimerComponent } from './timer.component';\nimport { NumberFixedLenPipe } from './numberedFixLen.pipe';\nimport { OwlCalendarComponent } from './calendar.component';\nimport { OwlDateTimeInlineComponent } from './date-time-inline.component';\nimport { OwlDialogModule } from '../dialog/dialog.module';\n\n@NgModule({\n imports: [CommonModule, OverlayModule, OwlDialogModule, A11yModule],\n exports: [\n OwlCalendarComponent,\n OwlTimerComponent,\n OwlDateTimeTriggerDirective,\n OwlDateTimeInputDirective,\n OwlDateTimeComponent,\n OwlDateTimeInlineComponent,\n OwlMultiYearViewComponent,\n OwlYearViewComponent,\n OwlMonthViewComponent,\n ],\n declarations: [\n OwlDateTimeTriggerDirective,\n OwlDateTimeInputDirective,\n OwlDateTimeComponent,\n OwlDateTimeContainerComponent,\n OwlMultiYearViewComponent,\n OwlYearViewComponent,\n OwlMonthViewComponent,\n OwlTimerComponent,\n OwlTimerBoxComponent,\n OwlCalendarComponent,\n OwlCalendarBodyComponent,\n NumberFixedLenPipe,\n OwlDateTimeInlineComponent,\n ],\n providers: [\n OwlDateTimeIntl,\n OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER,\n ],\n entryComponents: [\n OwlDateTimeContainerComponent,\n ]\n})\nexport class OwlDateTimeModule {\n}\n","/**\n * native-date-time-adapter.class\n */\n\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { Platform } from '@angular/cdk/platform';\nimport {\n DateTimeAdapter,\n OWL_DATE_TIME_LOCALE\n} from './date-time-adapter.class';\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n short: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n/** Whether the browser supports the Intl API. */\nconst SUPPORTS_INTL_API = typeof Intl !== 'undefined';\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX = /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n const valuesArray = Array(length);\n for (let i = 0; i < length; i++) {\n valuesArray[i] = valueFunction(i);\n }\n return valuesArray;\n}\n\n@Injectable()\nexport class NativeDateTimeAdapter extends DateTimeAdapter<Date> {\n /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n private readonly _clampDate: boolean;\n\n /**\n * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n * will produce `'8/13/1800'`.\n */\n useUtcForDisplay: boolean;\n\n constructor(\n @Optional()\n @Inject(OWL_DATE_TIME_LOCALE)\n private owlDateTimeLocale: string,\n platform: Platform\n ) {\n super();\n super.setLocale(owlDateTimeLocale);\n\n // IE does its own time zone correction, so we disable this on IE.\n this.useUtcForDisplay = !platform.TRIDENT;\n this._clampDate = platform.TRIDENT || platform.EDGE;\n }\n\n public getYear(date: Date): number {\n return date.getFullYear();\n }\n\n public getMonth(date: Date): number {\n return date.getMonth();\n }\n\n public getDay(date: Date): number {\n return date.getDay();\n }\n\n public getDate(date: Date): number {\n return date.getDate();\n }\n\n public getHours(date: Date): number {\n return date.getHours();\n }\n\n public getMinutes(date: Date): number {\n return date.getMinutes();\n }\n\n public getSeconds(date: Date): number {\n return date.getSeconds();\n }\n\n public getTime(date: Date): number {\n return date.getTime();\n }\n\n public getNumDaysInMonth(date: Date): number {\n const lastDateOfMonth = this.createDateWithOverflow(\n this.getYear(date),\n this.getMonth(date) + 1,\n 0\n );\n\n return this.getDate(lastDateOfMonth);\n }\n\n public differenceInCalendarDays(dateLeft: Date, dateRight: Date): number {\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\n const dateLeftStartOfDay = this.createDate(\n this.getYear(dateLeft),\n this.getMonth(dateLeft),\n this.getDate(dateLeft)\n );\n const dateRightStartOfDay = this.createDate(\n this.getYear(dateRight),\n this.getMonth(dateRight),\n this.getDate(dateRight)\n );\n\n const timeStampLeft =\n this.getTime(dateLeftStartOfDay) -\n dateLeftStartOfDay.getTimezoneOffset() *\n this.milliseondsInMinute;\n const timeStampRight =\n this.getTime(dateRightStartOfDay) -\n dateRightStartOfDay.getTimezoneOffset() *\n this.milliseondsInMinute;\n return Math.round(\n (timeStampLeft - timeStampRight) / this.millisecondsInDay\n );\n } else {\n return null;\n }\n }\n\n public getYearName(date: Date): string {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, {\n year: 'numeric',\n timeZone: 'utc'\n });\n return this.stripDirectionalityCharacters(this._format(dtf, date));\n }\n return String(this.getYear(date));\n }\n\n public getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, {\n month: style,\n timeZone: 'utc'\n });\n return range(12, i =>\n this.stripDirectionalityCharacters(\n this._format(dtf, new Date(2017, i, 1))\n )\n );\n }\n return DEFAULT_MONTH_NAMES[style];\n }\n\n public getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, {\n weekday: style,\n timeZone: 'utc'\n });\n return range(7, i =>\n this.stripDirectionalityCharacters(\n this._format(dtf, new Date(2017, 0, i + 1))\n )\n );\n }\n\n return DEFAULT_DAY_OF_WEEK_NAMES[style];\n }\n\n public getDateNames(): string[] {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, {\n day: 'numeric',\n timeZone: 'utc'\n });\n return range(31, i =>\n this.stripDirectionalityCharacters(\n this._format(dtf, new Date(2017, 0, i + 1))\n )\n );\n }\n return DEFAULT_DATE_NAMES;\n }\n\n public toIso8601(date: Date): string {\n return date.toISOString();\n }\n\n public isEqual(dateLeft: Date, dateRight: Date): boolean {\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\n return dateLeft.getTime() === dateRight.getTime();\n } else {\n return false;\n }\n }\n\n public isSameDay(dateLeft: Date, dateRight: Date): boolean {\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\n const dateLeftStartOfDay = this.clone(dateLeft);\n const dateRightStartOfDay = this.clone(dateRight);\n dateLeftStartOfDay.setHours(0, 0, 0, 0);\n dateRightStartOfDay.setHours(0, 0, 0, 0);\n return (\n dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()\n );\n } else {\n return false;\n }\n }\n\n public isValid(date: Date): boolean {\n return date && !isNaN(date.getTime());\n }\n\n public invalid(): Date {\n return new Date(NaN);\n }\n\n public isDateInstance(obj: any): boolean {\n return obj instanceof Date;\n }\n\n public addCalendarYears(date: Date, amount: number): Date {\n return this.addCalendarMonths(date, amount * 12);\n }\n\n public addCalendarMonths(date: Date, amount: number): Date {\n const result = this.clone(date);\n amount = Number(amount);\n\n const desiredMonth = result.getMonth() + amount;\n const dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(result.getFullYear(), desiredMonth, 1);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n\n const daysInMonth = this.getNumDaysInMonth(dateWithDesiredMonth);\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n result.setMonth(desiredMonth, Math.min(daysInMonth, result.getDate()));\n return result;\n }\n\n public addCalendarDays(date: Date, amount: number): Date {\n const result = this.clone(date);\n amount = Number(amount);\n result.setDate(result.getDate() + amount);\n return result;\n }\n\n public setHours(date: Date, amount: number): Date {\n const result = this.clone(date);\n result.setHours(amount);\n return result;\n }\n\n public setMinutes(date: Date, amount: number): Date {\n const result = this.clone(date);\n result.setMinutes(amount);\n return result;\n }\n\n public setSeconds(date: Date, amount: number): Date {\n const result = this.clone(date);\n result.setSeconds(amount);\n return result;\n }\n\n public createDate(\n year: number,\n month: number,\n date: number,\n hours: number = 0,\n minutes: number = 0,\n seconds: number = 0\n ): Date {\n if (month < 0 || month > 11) {\n throw Error(\n `Invalid month index \"${month}\". Month index has to be between 0 and 11.`\n );\n }\n\n if (date < 1) {\n throw Error(\n `Invalid date \"${date}\". Date has to be greater than 0.`\n );\n }\n\n if (hours < 0 || hours > 23) {\n throw Error(\n `Invalid hours \"${hours}\". Hours has to be between 0 and 23.`\n );\n }\n\n if (minutes < 0 || minutes > 59) {\n throw Error(\n `Invalid minutes \"${minutes}\". Minutes has to between 0 and 59.`\n );\n }\n\n if (seconds < 0 || seconds > 59) {\n throw Error(\n `Invalid seconds \"${seconds}\". Seconds has to be between 0 and 59.`\n );\n }\n\n const result = this.createDateWithOverflow(\n year,\n month,\n date,\n hours,\n minutes,\n seconds\n );\n\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n // For example, createDate(2017, 1, 31) would try to create a date 2017/02/31 which is invalid\n if (result.getMonth() !== month) {\n throw Error(\n `Invalid date \"${date}\" for month with index \"${month}\".`\n );\n }\n\n return result;\n }\n\n public clone(date: Date): Date {\n return this.createDate(\n this.getYear(date),\n this.getMonth(date),\n this.getDate(date),\n this.getHours(date),\n this.getMinutes(date),\n this.getSeconds(date)\n );\n }\n\n public now(): Date {\n return new Date();\n }\n\n public format(date: Date, displayFormat: any): string {\n if (!this.isValid(date)) {\n throw Error('JSNativeDate: Cannot format invalid date.');\n }\n\n if (SUPPORTS_INTL_API) {\n if (\n this._clampDate &&\n (date.getFullYear() < 1 || date.getFullYear() > 9999)\n ) {\n date = this.clone(date);\n date.setFullYear(\n Math.max(1, Math.min(9999, date.getFullYear()))\n );\n }\n\n displayFormat = { ...displayFormat, timeZone: 'utc' };\n const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n return this.stripDirectionalityCharacters(this._format(dtf, date));\n }\n\n return this.stripDirectionalityCharacters(date.toDateString());\n }\n\n public parse(value: any, parseFormat: any): Date | null {\n // There is no way using the native JS Date to set the parse format or locale\n if (typeof value === 'number') {\n return new Date(value);\n }\n return value ? new Date(Date.parse(value)) : null;\n }\n\n /**\n * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n * invalid date for all other values.\n */\n public deserialize(value: any): Date | null {\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n // string is the right format first.\n if (ISO_8601_REGEX.test(value)) {\n const date = new Date(value);\n if (this.isValid(date)) {\n return date;\n }\n }\n }\n return super.deserialize(value);\n }\n\n /**\n * Creates a date but allows the month and date to overflow.\n */\n private createDateWithOverflow(\n year: number,\n month: number,\n date: number,\n hours: number = 0,\n minutes: number = 0,\n seconds: number = 0\n ): Date {\n const result = new Date(year, month, date, hours, minutes, seconds);\n\n if (year >= 0 && year < 100) {\n result.setFullYear(this.getYear(result) - 1900);\n }\n return result;\n }\n\n /**\n * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n * other browsers do not. We remove them to make output consistent and because they interfere with\n * date parsing.\n */\n private stripDirectionalityCharacters(str: string) {\n return str.replace(/[\\u200e\\u200f]/g, '');\n }\n\n /**\n * When converting Date object to string, javascript built-in functions may return wrong\n * results because it applies its internal DST rules. The DST rules around the world change\n * very frequently, and the current valid rule is not always valid in previous years though.\n * We work around this problem building a new Date object which has its internal UTC\n * representation with the local date and time.\n */\n private _format(dtf: Intl.DateTimeFormat, date: Date) {\n const d = new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n )\n );\n return dtf.format(d);\n }\n}\n","/**\n * native-date-time-format.class\n */\nimport { OwlDateTimeFormats } from './date-time-format.class';\n\nexport const OWL_NATIVE_DATE_TIME_FORMATS: OwlDateTimeFormats = {\n parseInput: null,\n fullPickerInput: {year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric'},\n datePickerInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n timePickerInput: {hour: 'numeric', minute: 'numeric'},\n monthYearLabel: {year: 'numeric', month: 'short'},\n dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n monthYearA11yLabel: {year: 'numeric', month: 'long'},\n};\n","/**\n * native-date-time.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { DateTimeAdapter } from './date-time-adapter.class';\nimport { NativeDateTimeAdapter } from './native-date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './date-time-format.class';\nimport { OWL_NATIVE_DATE_TIME_FORMATS } from './native-date-time-format.class';\n\n@NgModule({\n imports: [PlatformModule],\n providers: [\n {provide: DateTimeAdapter, useClass: NativeDateTimeAdapter},\n ],\n})\nexport class NativeDateTimeModule {\n}\n\n@NgModule({\n imports: [NativeDateTimeModule],\n providers: [{provide: OWL_DATE_TIME_FORMATS, useValue: OWL_NATIVE_DATE_TIME_FORMATS}],\n})\nexport class OwlNativeDateTimeModule {\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgxDatetimeComponent } from './ngx-datetime-picker.component';\nimport { OwlDateTimeModule } from '../ngx-pick-datetime/lib/date-time/date-time.module';\nimport { OwlNativeDateTimeModule } from '../ngx-pick-datetime/lib/date-time/adapter/native-date-time.module';\n\n\n@NgModule({\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [\n CommonModule,\n FormsModule,\n OwlDateTimeModule,\n OwlNativeDateTimeModule\n ],\n declarations: [NgxDatetimeComponent],\n exports: [\n NgxDatetimeComponent\n ],\n providers: []\n})\nexport class NgxDateTimePickerModule {}\n","import { SelectOption } from './interfaces/select-option';\nexport class Option {\n label: string;\n value: any;\n constructor(options: SelectOption) {\n this.label = options.label;\n this.value = options.value;\n }\n}\n","import { Component, Input, forwardRef, OnInit, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { Option } from '../form-entry/question-models/select-option';\n\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\n@Component({\n selector: 'afe-ng-select',\n template: `<ng-select\n (searchInputText)=\"getChangingText($event)\"\n (ngModelChange)=\"onValueChange($event)\"\n [options]=\"question_options\"\n [multiple]=\"multiple\"\n >\n </ng-select> `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfeNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class AfeNgSelectComponent\n implements ControlValueAccessor, OnInit, OnChanges {\n subject: BehaviorSubject<Option[]>;\n subjectOption: BehaviorSubject<Option>;\n @Input() dataSource: DataSource;\n @Input() multiple: boolean;\n @Input() extras: any;\n question_options: any = [];\n selected_question_option: any;\n errors: any = [];\n propagateChange = (_: any) => {};\n\n getChangingText(event) {\n // console.log(event);\n this.getData(event).subscribe((options) => {\n this.question_options = options;\n });\n }\n\n writeValue(obj: any): void {}\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {}\n\n ngOnChanges(changes: any) {}\n\n ngOnInit() {\n if (this.extras) {\n if (this.extras.originalValue) {\n this.resolveSelectedOption(this.extras.originalValue).subscribe(\n (option) => {\n this.selected_question_option = option;\n }\n );\n }\n }\n }\n\n getData(searchText: string): Observable<Option[]> {\n this.subject = new BehaviorSubject<Option[]>([]);\n\n const OptionsObservable = this.dataSource.searchOptions(searchText);\n\n OptionsObservable.subscribe(\n (options) => {\n // console.log('options', options);\n const mappedOptions: Option[] = new Array<Option>();\n\n for (let i = 0; i < options.length; i++) {\n mappedOptions.push(new Option(options[i]));\n }\n this.subject.next(mappedOptions);\n },\n (error) => {\n this.subject.error(error);\n }\n );\n\n return this.subject.asObservable();\n }\n\n onValueChange(event) {}\n resolveSelectedOption(value: any): Observable<Option> {\n this.subjectOption = new BehaviorSubject<Option>(null);\n const OptionObservable = this.dataSource.resolveSelectedValue(value);\n\n OptionObservable.subscribe(\n (option) => {\n // console.log('option', option);\n this.subjectOption.next(option);\n },\n (error) => {\n this.subjectOption.error(error);\n }\n );\n\n return this.subjectOption.asObservable();\n }\n\n resetOptions() {\n this.subject.next(new Array<Option>());\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Injectable()\nexport class FormSchemaCompiler {\n constructor() {}\n\n public compileFormSchema(\n formSchema: Object,\n referencedComponents: Array<any>\n ): Object {\n // get all referenced forms\n const refForms: Object = this.getReferencedForms(\n formSchema,\n referencedComponents\n );\n if (_.isEmpty(refForms)) {\n return formSchema;\n }\n\n // get all place-holders from the form schema\n const placeHolders = this.getAllPlaceholderObjects(formSchema);\n if (_.isEmpty(placeHolders)) {\n return formSchema;\n }\n\n // replace all placeHolders\n this.replaceAllPlaceholdersWithActualObjects(refForms, placeHolders);\n return formSchema;\n }\n\n private findSchemaByName(\n schemaArray: Array<any>,\n nameOfSchema: string\n ): Object {\n if (_.isEmpty(schemaArray) || _.isEmpty(nameOfSchema)) {\n return;\n }\n let foundSchema: any = {};\n _.each(schemaArray, (schema: any) => {\n if (schema.name === nameOfSchema) {\n foundSchema = schema;\n }\n });\n return foundSchema;\n }\n\n private getPageInSchemaByLabel(schema: any, pageLabel: string): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel)) {\n return;\n }\n let foundPage: Object = {};\n _.each(schema.pages, (page) => {\n if (page.label === pageLabel) {\n foundPage = page;\n }\n });\n return foundPage;\n }\n\n private getSectionInSchemaByPageLabelBySectionLabel(\n schema: Object,\n pageLabel: string,\n sectionLabel: string\n ): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel) || _.isEmpty(sectionLabel)) {\n return;\n }\n const foundPage: any = this.getPageInSchemaByLabel(schema, pageLabel);\n if (_.isEmpty(foundPage)) {\n return;\n }\n let foundSection: Object = {};\n _.each(foundPage.sections, (section) => {\n if (section.label === sectionLabel) {\n foundSection = section;\n }\n });\n return foundSection;\n }\n\n private getQuestionByIdInSchema(schema: any, questionId: string): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n if (Array.isArray(schema)) {\n let question: Array<any>;\n for (let i = 0; i < schema.length; i++) {\n if (!_.isEmpty(schema[i])) {\n question = this.getQuestionByIdInSchema(schema[i], questionId);\n }\n if (!_.isEmpty(question)) {\n break;\n }\n }\n return question;\n } else if (typeof schema === 'object') {\n if (this.isQuestionObjectWithId(schema, questionId)) {\n return schema;\n } else if (this.isSchemaSubObjectExpandable(schema)) {\n const toExpand = schema.pages || schema.sections || schema.questions;\n return this.getQuestionByIdInSchema(toExpand, questionId);\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n private getQuestionsArrayByQuestionIdInSchema(\n schema: any,\n questionId: string\n ): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n return this.getQuestionsArrayByQuestionId(schema, schema, questionId);\n }\n\n private getQuestionsArrayByQuestionId(\n parent: any,\n object: any,\n questionId: string\n ): Array<any> {\n if (Array.isArray(object)) {\n let returnedValue: Array<any>;\n for (let i = 0; i < object.length; i++) {\n if (!_.isEmpty(object[i])) {\n returnedValue = this.getQuestionsArrayByQuestionId(\n object,\n object[i],\n questionId\n );\n }\n if (!_.isEmpty(returnedValue)) {\n break;\n }\n }\n\n return returnedValue;\n } else if (typeof object === 'object') {\n if (this.isQuestionObjectWithId(object, questionId)) {\n return parent;\n } else if (this.isSchemaSubObjectExpandable(object)) {\n const toExpand = object.pages || object.sections || object.questions;\n return this.getQuestionsArrayByQuestionId(\n toExpand,\n toExpand,\n questionId\n );\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n // object is page or section or question\n private isSchemaSubObjectExpandable(object: Object): Boolean {\n if (typeof object === 'object') {\n const objectKeys = Object.keys(object);\n if (\n _.includes(objectKeys, 'pages') ||\n _.includes(objectKeys, 'sections') ||\n _.includes(objectKeys, 'questions')\n ) {\n return true;\n }\n }\n return false;\n }\n\n private isQuestionObjectWithId(object: Object, id: any): Boolean {\n return object['id'] === id;\n }\n\n private getAllPlaceholderObjects(schema: Object): Array<any> {\n const referencedObjects: Array<any> = [];\n this.extractPlaceholderObjects(schema, referencedObjects);\n return referencedObjects;\n }\n\n private extractPlaceholderObjects(\n subSchema: any,\n objectsArray: Array<Object>\n ): void {\n if (_.isEmpty(subSchema)) {\n return;\n }\n if (Array.isArray(subSchema)) {\n for (let i = 0; i < subSchema.length; i++) {\n if (!_.isEmpty(subSchema[i])) {\n this.extractPlaceholderObjects(subSchema[i], objectsArray);\n }\n }\n } else if (typeof subSchema === 'object') {\n if (!_.isEmpty(subSchema.reference)) {\n objectsArray.push(subSchema);\n } else if (this.isSchemaSubObjectExpandable(subSchema)) {\n const toExpand =\n subSchema.pages || subSchema.sections || subSchema.questions;\n this.extractPlaceholderObjects(toExpand, objectsArray);\n }\n }\n }\n\n private fillPlaceholderObject(\n placeHolderObject: Object,\n referenceObject: Object\n ): Object {\n for (const member in referenceObject) {\n if (_.isEmpty(placeHolderObject[member])) {\n placeHolderObject[member] = referenceObject[member];\n }\n }\n return placeHolderObject;\n }\n\n private replaceAllPlaceholdersWithActualObjects(\n keyValReferencedForms: Object,\n placeHoldersArray: Array<any>\n ): Array<any> {\n _.each(placeHoldersArray, (placeHolder) => {\n const referencedObject: Object = this.getReferencedObject(\n placeHolder.reference,\n keyValReferencedForms\n );\n\n if (_.isEmpty(referencedObject)) {\n console.error(\n 'Form compile: Error finding referenced object',\n placeHolder.reference\n );\n } else {\n placeHolder = this.fillPlaceholderObject(placeHolder, referencedObject);\n placeHolder = this.removeExcludedQuestionsFromPlaceholder(placeHolder);\n delete placeHolder['reference'];\n }\n });\n return placeHoldersArray;\n }\n\n private removeObjectFromArray(array: Array<any>, object: Object): void {\n const indexOfObject = array.indexOf(object);\n if (indexOfObject === -1) {\n return;\n }\n\n array.splice(indexOfObject, 1);\n }\n\n private removeExcludedQuestionsFromPlaceholder(placeHolder: any): Object {\n if (Array.isArray(placeHolder.reference.excludeQuestions)) {\n _.each(placeHolder.reference.excludeQuestions, (excludedQuestionId) => {\n const questionsArray: Array<any> = this.getQuestionsArrayByQuestionIdInSchema(\n placeHolder,\n excludedQuestionId\n );\n\n if (!Array.isArray(questionsArray)) {\n return;\n }\n const question = this.getQuestionByIdInSchema(\n questionsArray,\n excludedQuestionId\n );\n\n this.removeObjectFromArray(questionsArray, question);\n });\n }\n return placeHolder;\n }\n\n private getReferencedObject(\n referenceData: any,\n keyValReferencedForms: Object\n ): Object {\n if (_.isEmpty(referenceData.form)) {\n console.error(\n 'Form compile: reference missing form attribute',\n referenceData\n );\n return;\n }\n if (_.isEmpty(keyValReferencedForms[referenceData.form])) {\n console.error(\n 'Form compile: referenced form alias not found',\n referenceData\n );\n return;\n }\n if (!_.isEmpty(referenceData.questionId)) {\n return this.getQuestionByIdInSchema(\n keyValReferencedForms[referenceData.form],\n referenceData.questionId\n );\n }\n\n if (!_.isEmpty(referenceData.page) && !_.isEmpty(referenceData.section)) {\n return this.getSectionInSchemaByPageLabelBySectionLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page,\n referenceData.section\n );\n }\n if (!_.isEmpty(referenceData.page)) {\n return this.getPageInSchemaByLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page\n );\n }\n console.error(\n 'Form compile: Unsupported reference type',\n referenceData.reference\n );\n }\n\n private getReferencedForms(\n formSchema: any,\n formSchemasLookupArray: Array<any>\n ): Object {\n const referencedForms: Array<any> = formSchema.referencedForms;\n\n if (_.isEmpty(referencedForms)) {\n return;\n }\n\n const keyValReferencedForms: Object = {};\n\n _.each(referencedForms, (reference: any) => {\n keyValReferencedForms[reference.alias] = this.findSchemaByName(\n formSchemasLookupArray,\n reference.formName\n );\n });\n return keyValReferencedForms;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TextQuestionOptions } from './interfaces/text-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextInputQuestion extends QuestionBase {\n placeholder: string;\n constructor(options: TextQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { TextInputQuestion } from './text-input-question';\nimport { TextAreaQuestionOptions } from './interfaces/text-area-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextAreaInputQuestion extends TextInputQuestion {\n isExpanded: boolean;\n rows: number;\n\n constructor(options: TextAreaQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.isExpanded = options.isExpanded || false;\n this.rows = options.rows || 18;\n this.renderingType = 'textarea';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { SelectQuestionOptions } from './interfaces/select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class SelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n dataSource?: any;\n\n constructor(options: SelectQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n this.dataSource = options.dataSource || '';\n }\n}\n","import { QuestionBase } from './question-base';\nimport { UiSelectQuestionOptions } from './interfaces/ui-select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class UiSelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n searchFunction: Function;\n resolveFunction: Function;\n constructor(options: UiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'ui-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { DateQuestionOptions } from './interfaces/date-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class DateQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n constructor(options: DateQuestionOptions) {\n super(options);\n this.renderingType = 'date';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { SelectQuestion } from './select-question';\nimport { MultiSelectQuestionOptions } from './interfaces/multi-select-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class MultiSelectQuestion extends SelectQuestion {\n options: { key: string; value: string }[];\n\n constructor(options: MultiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'multi-select' || 'single-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from '../question-base';\nimport { BaseOptions } from './base-options';\n\nexport abstract class NestedQuestion extends QuestionBase {\n abstract questions: QuestionBase[];\n constructor(options: BaseOptions) {\n super(options);\n }\n}\n","import { QuestionBase } from './question-base';\nimport { GroupQuestionOptions } from './interfaces/group-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class QuestionGroup extends NestedQuestion {\n questions: QuestionBase[];\n isExpanded = true;\n\n constructor(options: GroupQuestionOptions) {\n super(options);\n this.renderingType = 'group';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormGroup;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { RepeatingQuestionOptions } from './interfaces/repeating-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class RepeatingQuestion extends NestedQuestion {\n questions: QuestionBase[];\n\n constructor(options: RepeatingQuestionOptions) {\n super(options);\n this.renderingType = 'repeating';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormArray;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { CheckboxOptions } from './interfaces/checkbox-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class CheckBoxQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n\n constructor(options: CheckboxOptions) {\n super(options);\n this.renderingType = 'checkbox' || 'radio';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { FileUploadQuestionOptions } from './interfaces/file-upload-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class FileUploadQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n dataSource?: any;\n constructor(options: FileUploadQuestionOptions) {\n super(options);\n this.renderingType = 'file';\n this.dataSource = options.dataSource;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TestOrderQuestionOptions } from './interfaces/test-order-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TestOrderQuestion extends QuestionBase {\n orderType: string;\n selectableOrders: { concept: string; label: string }[];\n orderSettingUuid: string;\n rendering: string;\n options: any[];\n constructor(options: TestOrderQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.orderType = options.orderType;\n this.selectableOrders = options.selectableOrders;\n this.options = options.options;\n this.orderSettingUuid = options.orderSettingUuid;\n this.rendering = options.orderSettingUuid;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class DateValidationModel extends ValidationModel {\n allowFutureDates = false;\n\n constructor(validations: any) {\n super(validations);\n\n this.allowFutureDates =\n validations.allowFutureDates === 'true' ? true : false;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MaxValidationModel extends ValidationModel {\n max: number;\n\n constructor(validations: any) {\n super(validations);\n const max: any = validations.max;\n this.max = +max;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MinValidationModel extends ValidationModel {\n min: number;\n\n constructor(validations: any) {\n super(validations);\n const min: any = validations.min;\n this.min = +min;\n }\n}\n","import { Option } from '../question-models/select-option';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\n\nexport class DummyDataSource implements DataSource {\n options: Observable<Option[]>;\n option: Observable<Option>;\n returnErrorOnNext = false;\n\n constructor() {}\n\n resolveSelectedValue(value): Observable<Option> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter((option) => option.value === value);\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions[0]);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n fileUpload(url) {\n return of({ image: '' });\n }\n fetchFile(url) {\n return of({ image: '' });\n }\n searchOptions(searchText): Observable<Option[]> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter(\n (option) => option.label.indexOf(searchText) !== -1\n );\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n\n sampleData(): any {\n return [\n {\n concept: 'a899e0ac-1350-11df-a1f1-0026b9348838',\n label: 'None'\n },\n {\n concept: 'a8ad1276-1350-11df-a1f1-0026b9348838',\n label: 'Breathlessness'\n },\n {\n concept: 'a892e4b4-1350-11df-a1f1-0026b9348838',\n label: 'Chest pain'\n },\n {\n concept: 'a8afc8b8-1350-11df-a1f1-0026b9348838',\n label: 'Cough = 2 weeks'\n },\n {\n concept: 'd7adae14-c386-49cc-8f7c-765d8ceec566',\n label: 'Fever for = 2 weeks'\n },\n {\n concept: '3f57aafc-7162-41da-a51b-6a804cb6f5e8',\n label: 'New exposure to household contact with TB'\n },\n {\n concept: 'a89807f0-1350-11df-a1f1-0026b9348838',\n label: 'Noticeable Weight loss'\n },\n {\n concept: 'e1862fef-68ed-4df4-90dd-a00152f719aa',\n label: 'Night sweats = 2 weeks'\n },\n {\n concept: 'a8ad462e-1350-11df-a1f1-0026b9348838',\n label: 'Abdomen'\n },\n {\n concept: 'f218c60e-4b54-475a-a4fa-facab9216da8',\n label: 'Groin'\n },\n {\n concept: 'a8a774b0-1350-11df-a1f1-0026b9348838',\n label: 'Joints'\n },\n {\n concept: '4639388c-ee31-4dcf-abb4-ad71253493bb',\n label: 'Neck Kw'\n }\n ];\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class HistoricalEncounterDataService {\n dataSources: any = {};\n constructor() {}\n\n registerEncounters(name: string, encounters: any) {\n const encStore: any = {\n data: [],\n getValue: (key: string, index = 0): any => {\n const pathArray = key.split('.');\n if (pathArray.length > 0) {\n return this.getFirstValue(pathArray, encStore.data[index]);\n }\n return encStore.data[index][key];\n },\n getAllObjects: () => {\n return encStore.data;\n },\n getSingleObject: (index = 0) => {\n return encStore.data[index];\n }\n };\n\n if (_.isArray(encounters)) {\n const group: Array<any> = [];\n _.each(encounters, (encounter) => {\n group.push(this._transformEncounter(encounter));\n });\n\n // Sort them in reverse chronological order\n encStore.data = _.sortBy(group, 'encounterDatetime').reverse();\n } else {\n // Assume a single openmrs rest encounter object.\n encStore.data.push(this._transformEncounter(encounters));\n }\n\n this.putObject(name, encStore);\n }\n\n putObject(name, object): void {\n this.dataSources[name] = object;\n }\n\n getObject(name: string): any {\n return this.dataSources[name] || null;\n }\n\n getFirstValue(path: Array<string>, object: any): any {\n const answers = [];\n\n this.getAllValues(path, object, answers);\n\n if (answers.length > 0) {\n return {\n value: answers[0],\n valueDate: moment(object.encounterDatetime).format('ll')\n };\n }\n }\n\n getAllValues(path, object, answers) {\n if (_.isNil(object)) {\n return;\n }\n\n if (path.length <= 1) {\n if (!_.isNil(object[path[0]])) {\n answers.push(object[path[0]]);\n }\n return;\n }\n\n const newpath = path.splice(1);\n const key = path[0];\n\n if (_.isArray(object[key]) && object[key].length > 0) {\n _.each(object[key], (childObject) => {\n this.getAllValues(newpath.slice(0), childObject, answers);\n });\n } else {\n this.getAllValues(newpath.slice(0), object[key], answers);\n }\n }\n\n private _transformEncounter(encounter: any) {\n if (_.isNil(encounter)) {\n return;\n }\n // Transform encounter Level details to key value pairs.\n const prevEncounter: any = {\n encounterDatetime: encounter.encounterDatetime\n };\n\n if (encounter.location && encounter.location.uuid) {\n prevEncounter.location = encounter.location.uuid;\n }\n\n if (encounter.patient && encounter.patient.uuid) {\n prevEncounter.patient = encounter.patient.uuid;\n }\n\n if (encounter.form && encounter.form.uuid) {\n prevEncounter.form = encounter.form.uuid;\n }\n\n if (encounter.encounterType && encounter.encounterType.uuid) {\n prevEncounter.encounterType = encounter.encounterType.uuid;\n }\n\n if (encounter.provider) {\n const provider = encounter.provider;\n prevEncounter.provider = provider.uuid;\n }\n\n // Deal with obs.\n if (encounter.obs) {\n const processedObs: any = this._transformObs(encounter.obs);\n\n // add in individual processed obs to prevEncounter\n _.extend(prevEncounter, processedObs);\n }\n\n return prevEncounter;\n }\n\n private _transformObs(obs: any): any {\n if (!obs) {\n return null;\n }\n\n const obsRep: any = {};\n if (_.isArray(obs)) {\n _.each(obs, (singleObs) => {\n this._augumentObs(obsRep, this._transformObs(singleObs));\n });\n return obsRep;\n } else if (obs.groupMembers) {\n const group: any = {};\n _.each(obs.groupMembers, (member) => {\n this._augumentObs(group, this._transformObs(member));\n });\n\n // Handle already existing data\n if (obsRep[obs.concept.uuid] && _.isArray(obsRep[obs.concept.uuid])) {\n obsRep[obs.concept.uuid].push(group);\n } else {\n obsRep[obs.concept.uuid] = [group];\n }\n return obsRep;\n } else {\n if (obs.value instanceof Object) {\n obsRep[obs.concept.uuid] = obs.value.uuid;\n } else {\n obsRep[obs.concept.uuid] = obs.value;\n }\n return obsRep;\n }\n }\n\n private _augumentObs(existing: any, toAdd: any): any {\n for (const key in toAdd) {\n if (_.has(existing, key)) {\n // check if not an array yet\n if (!_.isArray(existing[key])) {\n const temp = existing[key];\n existing[key] = [temp];\n }\n\n // Check whether the incoming is array (for group members)\n if (_.isArray(toAdd[key])) {\n Array.prototype.push.apply(existing[key], toAdd[key]);\n } else {\n existing[key].push(toAdd[key]);\n }\n } else {\n existing[key] = toAdd[key];\n }\n }\n return existing;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { HistoricalEncounterDataService } from '../services/historical-encounter-data.service';\nimport { JsExpressionHelper } from './js-expression-helper';\nimport {\n Runnable,\n ExpressionRunner\n} from '../expression-runner/expression-runner';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\n@Injectable()\nexport class HistoricalHelperService {\n constructor() {}\n\n public evaluate(\n expr: string,\n dataSources: any,\n additionalScopevalues: any\n ): any {\n const HD = new HistoricalEncounterDataService();\n HD.registerEncounters('prevEnc', dataSources['rawPrevEnc']);\n const deps: any = {\n HD: HD\n };\n\n if (additionalScopevalues) {\n for (const o in additionalScopevalues) {\n if (additionalScopevalues[o]) {\n deps[o] = additionalScopevalues[o];\n }\n }\n }\n\n const helper = new JsExpressionHelper();\n const control: AfeFormControl = new AfeFormControl();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n expr,\n control,\n helper.helperFunctions,\n deps\n );\n\n return runnable.run();\n }\n\n public evaluatePrecondition(\n expr: string,\n dataSources: any,\n historicalValue: any\n ): any {\n const additionalScope = {\n histValue: historicalValue\n };\n\n return this.evaluate(expr, dataSources, additionalScope);\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport { TextInputQuestion } from '../question-models/text-input-question';\nimport { TextAreaInputQuestion } from '../question-models/text-area-input-question';\nimport { SelectQuestion } from '../question-models/select-question';\nimport { UiSelectQuestion } from '../question-models/ui-select-question';\nimport { DateQuestion } from '../question-models/date-question';\nimport { MultiSelectQuestion } from '../question-models/multi-select-question';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { RepeatingQuestion } from '../question-models/repeating-question';\nimport { QuestionBase } from '../question-models/question-base';\nimport { FileUploadQuestion } from '../question-models/file-upload-question';\nimport { TestOrderQuestion } from '../question-models/test-order-question';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { DummyDataSource } from '../data-sources/dummy-data-source';\nimport { HistoricalHelperService } from '../helpers/historical-expression-helper-service';\nimport { Form } from './form';\nimport { CheckBoxQuestion } from '../question-models/models';\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class QuestionFactory {\n dataSources: any = {};\n historicalHelperService: HistoricalHelperService = new HistoricalHelperService();\n constructor() {}\n\n createQuestionModel(formSchema: any, form?: Form): QuestionBase {\n if (form) {\n const dataSources = form.dataSourcesContainer.dataSources;\n this.dataSources = dataSources;\n }\n return this.toFormQuestionModel(formSchema);\n }\n\n toSelectQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n\n const options: any = question.options;\n options.splice(0, 0, {\n label: '',\n value: ''\n });\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumericQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumberQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDateQuestion(schemaQuestion: any): DateQuestion {\n if (schemaQuestion.type === 'encounterDatetime') {\n return this.toEncounterDatetimeQuestion(schemaQuestion);\n }\n const question = new DateQuestion({ type: '', key: '' });\n question.renderingType = 'date';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showTime = schemaQuestion.questionOptions.showTime as boolean;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterDatetimeQuestion(schemaQuestion: any): DateQuestion {\n const question = new DateQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.renderingType = 'date';\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n question.showTime = true;\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toCheckBoxQuestion(schemaQuestion: any): CheckBoxQuestion {\n const question = new CheckBoxQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.answers.map((obj) => {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.options.splice(0, 0);\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n const mappings: any = {\n label: 'label',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toMultiCheckboxQuestion(schemaQuestion: any): MultiSelectQuestion {\n const question = new MultiSelectQuestion({\n renderType: '',\n options: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.validators = this.addValidators(schemaQuestion);\n question.dataSource = new DummyDataSource();\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextAreaQuestion(schemaQuestion: any): TextAreaInputQuestion {\n const question = new TextAreaInputQuestion({\n isExpanded: false,\n rows: 18,\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.isExpanded = schemaQuestion.isExpanded;\n question.rows = schemaQuestion.questionOptions.rows;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFileUploadQuestion(schemaQuestion: any): FileUploadQuestion {\n const question = new FileUploadQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'file';\n question.dataSource = 'file';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDrugQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'drug';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toProblemQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'problem';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toConceptAnswerSelect(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource =\n schemaQuestion.questionOptions.dataSource || 'conceptAnswers';\n question.dataSourceOptions = {\n concept: schemaQuestion.questionOptions.concept\n };\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toRepeatingQuestion(schemaQuestion: any): RepeatingQuestion {\n const question = new RepeatingQuestion({\n questions: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n if (schemaQuestion.type === 'testOrder') {\n const testOrder = this.toTestOrderQuestion(schemaQuestion);\n const orders = [];\n orders.push(testOrder);\n question.questions = orders;\n }\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toGroupQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toPageQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'page';\n question.controlType = AfeControlType.None;\n question.questions = [];\n schemaQuestion.sections.forEach((element) => {\n question.questions.push(this.toSectionQuestion(element));\n });\n return question;\n }\n\n toFormQuestionModel(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'form';\n question.controlType = AfeControlType.AfeFormGroup;\n question.extras = schemaQuestion;\n question.questions = [];\n schemaQuestion.pages.forEach((element) => {\n question.questions.push(this.toPageQuestion(element));\n });\n\n return question;\n }\n\n toSectionQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'section';\n question.controlType = AfeControlType.None;\n question.isExpanded = schemaQuestion.isExpanded === 'true' ? true : false;\n question.questions = this.getSchemaQuestions(schemaQuestion.questions);\n return question;\n }\n\n toPersonAttributeQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAttribute';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterProviderQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'provider';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFieldSetQuestion(schemaQuestion: any): QuestionGroup {\n const toReturn = this.toGroupQuestion(schemaQuestion);\n toReturn.renderingType = 'field-set';\n return toReturn;\n }\n\n toEncounterLocationQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'location';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTestOrderQuestion(schemaQuestion: any): TestOrderQuestion {\n const question = new TestOrderQuestion({\n type: '',\n key: '',\n orderType: '',\n selectableOrders: [],\n orderSettingUuid: '',\n label: '',\n rendering: ''\n });\n\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.selectableOrders.map(\n function (obj) {\n return {\n label: obj.label,\n value: obj.concept\n };\n }\n );\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n this.copyProperties(mappings, schemaQuestion, question);\n return question;\n }\n\n getSchemaQuestions(schema: any): any {\n const listQuestions = new Array();\n this.getQuestions(schema, listQuestions);\n return listQuestions;\n }\n\n getQuestions(schema: any, foundArray: any): any {\n if (!Array.isArray(foundArray)) {\n foundArray = [];\n }\n if (Array.isArray(schema)) {\n for (const property in schema) {\n if (schema.hasOwnProperty(property)) {\n this.getQuestions(schema[property], foundArray);\n }\n }\n }\n\n if (schema && !Array.isArray(schema) && typeof schema === 'object') {\n if (schema.questionOptions) {\n if (\n schema.questionOptions.rendering === 'group' ||\n schema.questionOptions.rendering === 'repeating'\n ) {\n // schema.questions = this.getGroupMembers(schema.questions);\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n } else if (schema.questionOptions.rendering === 'field-set') {\n } else {\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n }\n } else {\n for (const o in schema) {\n if (schema.hasOwnProperty(o)) {\n this.getQuestions(schema[o], foundArray);\n }\n }\n }\n }\n }\n\n getChildrenQuestionModels(schema: any): any {\n const children = [];\n this.getQuestions(schema, children);\n return children;\n }\n\n toModel(schema: any, renderType: string): any {\n if (renderType === 'ui-select-extended') {\n renderType = schema.type;\n }\n if (!schema.id) {\n schema['id'] = this.generateId(10);\n }\n\n if (\n schema.questionOptions &&\n (schema.questionOptions.showDate === true ||\n schema.questionOptions.showDate === 'true')\n ) {\n schema = this.convertOldVersionComplexObsQuestionToNewVersion(schema);\n renderType = 'field-set';\n }\n\n switch (renderType) {\n case 'select':\n return this.toSelectQuestion(schema);\n case 'single-select':\n return this.toSelectQuestion(schema);\n case 'multi-select':\n return this.toSelectQuestion(schema);\n case 'numeric':\n return this.toNumericQuestion(schema);\n case 'number':\n return this.toNumberQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'date':\n return this.toDateQuestion(schema);\n case 'multiCheckbox':\n return this.toMultiCheckboxQuestion(schema);\n case 'drug':\n return this.toDrugQuestion(schema);\n case 'problem':\n return this.toProblemQuestion(schema);\n case 'group':\n return this.toGroupQuestion(schema);\n case 'field-set':\n return this.toFieldSetQuestion(schema);\n case 'repeating':\n return this.toRepeatingQuestion(schema);\n case 'personAttribute':\n return this.toPersonAttributeQuestion(schema);\n case 'text':\n return this.toTextQuestion(schema);\n case 'textarea':\n return this.toTextAreaQuestion(schema);\n case 'textarea':\n return this.toTextAreaQuestion(schema);\n case 'select-concept-answers':\n return this.toConceptAnswerSelect(schema);\n case 'encounterLocation':\n return this.toEncounterLocationQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'radio':\n return this.toCheckBoxQuestion(schema);\n case 'checkbox':\n return this.toCheckBoxQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'file':\n return this.toFileUploadQuestion(schema);\n default:\n console.warn('New Schema Question Type found.........' + renderType);\n return this.toTextQuestion(schema);\n }\n }\n\n convertOldVersionComplexObsQuestionToNewVersion(schemaQuestion: any) {\n const converted: any = {};\n converted.type = 'complex-obs';\n converted.label = schemaQuestion.label;\n converted.id = 'complex_' + schemaQuestion.id;\n converted.questionOptions = {};\n converted.questionOptions.concept = schemaQuestion.questionOptions.concept;\n converted.questionOptions.rendering = 'field-set';\n converted.questions = [];\n converted.validators = [];\n\n const mainField: any = JSON.parse(JSON.stringify(schemaQuestion));\n mainField.type = 'complex-obs-child';\n delete mainField.questionOptions.showDate;\n delete mainField.questionOptions.shownDateOptions;\n mainField.questionOptions.obsField = 'value';\n\n const dateField: any = {};\n dateField.type = 'complex-obs-child';\n dateField.label = 'Date of ' + mainField.label;\n dateField.id = 'date_' + mainField.id;\n dateField.questionOptions = {};\n dateField.questionOptions.concept = schemaQuestion.questionOptions.concept;\n dateField.questionOptions.rendering = 'date';\n dateField.questionOptions.obsField = 'obsDatetime';\n const dateOptions: any = (Object as any).assign(\n {},\n schemaQuestion.questionOptions.shownDateOptions\n );\n dateField.validators = dateOptions.validators;\n dateField.hide = dateOptions.hide;\n\n converted.questions.push(mainField);\n converted.questions.push(dateField);\n\n return converted;\n }\n\n copyProperties(mappings: any, source: any, destination: QuestionBase) {\n for (const property in source) {\n if (\n mappings.hasOwnProperty(property) &&\n destination.hasOwnProperty(mappings[property])\n ) {\n destination[mappings[property]] = source[property];\n }\n }\n }\n\n addValidators(schemaQuestion: any): Array<ValidationModel> {\n const validators: Array<ValidationModel> = [];\n\n if (schemaQuestion.validators) {\n // TODO - add more validator types\n _.forEach(schemaQuestion.validators, (validator: any) => {\n switch (validator.type) {\n case 'date':\n validators.push(new DateValidationModel(validator));\n break;\n case 'js_expression':\n validators.push(new JsExpressionValidationModel(validator));\n break;\n case 'conditionalAnswered':\n validators.push(new ConditionalValidationModel(validator));\n break;\n default:\n validators.push(new ValidationModel(validator));\n break;\n }\n });\n }\n\n const questionOptions = schemaQuestion.questionOptions;\n const renderingType = questionOptions ? questionOptions.rendering : '';\n switch (renderingType) {\n case 'number':\n if (questionOptions.max && questionOptions.min) {\n validators.push(\n new MaxValidationModel({\n type: 'max',\n max: questionOptions.max\n })\n );\n validators.push(\n new MinValidationModel({\n type: 'min',\n min: questionOptions.min\n })\n );\n }\n\n break;\n default:\n break;\n }\n\n // add conditional required validators\n if (typeof schemaQuestion.required === 'object') {\n const required: any = schemaQuestion.required;\n\n if (required.type === 'conditionalRequired') {\n validators.push(\n new ConditionalValidationModel({\n referenceQuestionId: required.referenceQuestionId,\n referenceQuestionAnswers: required.referenceQuestionAnswers,\n type: required.type,\n message: required.message\n })\n );\n }\n }\n\n return validators;\n }\n\n addHistoricalExpressions(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.historicalExpression &&\n schemaQuestion.historicalExpression.length > 0\n ) {\n question.setHistoricalValue(true);\n if (schemaQuestion.showHistoricalEncounterDate !== undefined) {\n question.showHistoricalEncounterDate(\n schemaQuestion.showHistoricalEncounterDate === 'true'\n );\n } else {\n question.showHistoricalEncounterDate();\n }\n const origValue = this.historicalHelperService.evaluate(\n schemaQuestion.historicalExpression,\n this.dataSources,\n undefined\n );\n question.historicalDataValue = origValue;\n // console.info('historical value', origValue);\n // console.info('historical data question :::', question);\n // console.info('schema data question :::', schemaQuestion);\n\n if (schemaQuestion.historicalPrepopulateCondition && origValue) {\n const toPopulate = this.historicalHelperService.evaluatePrecondition(\n schemaQuestion.historicalPrepopulateCondition,\n this.dataSources,\n origValue\n );\n\n if (toPopulate) {\n question.defaultValue = origValue.value;\n }\n return; // don't try to evaluate the other option\n }\n\n if (schemaQuestion.historicalPrepopulate && origValue) {\n // sample schema options for this branch\n // \"historicalPrepopulate\":true,\n // \"allowedHistoricalValueAgeInDays\": 40000,\n const valDate = moment(origValue.valueDate);\n const differenceInDays = moment().diff(valDate, 'days');\n if (Number.isInteger(schemaQuestion.allowedHistoricalValueAgeInDays)) {\n if (\n differenceInDays <= schemaQuestion.allowedHistoricalValueAgeInDays\n ) {\n question.defaultValue = origValue.value;\n }\n } else {\n question.defaultValue = origValue.value;\n }\n }\n }\n }\n\n addCalculatorProperty(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.questionOptions &&\n typeof schemaQuestion.questionOptions.calculate === 'object'\n ) {\n question.calculateExpression =\n schemaQuestion.questionOptions.calculate.calculateExpression;\n }\n }\n\n addAlertProperty(schemaQuestion: any, question: QuestionBase): any {\n if (schemaQuestion.alert) {\n question.alert = schemaQuestion.alert;\n }\n // if (typeof schemaQuestion.message === 'object') {\n // if (schemaQuestion.message.alertWhenExpression) {\n // question.message = schemaQuestion.message.alertWhenExpression;\n // }\n // }\n }\n\n addDisableOrHideProperty(schemaQuestion: any, question: QuestionBase): any {\n if (!!schemaQuestion.disable) {\n question.disable = schemaQuestion.disable;\n }\n\n if (typeof schemaQuestion.disable === 'object') {\n question.disable = schemaQuestion.disable.disableWhenExpression;\n }\n\n if (!!schemaQuestion.hide) {\n question.hide = schemaQuestion.hide;\n }\n if (typeof schemaQuestion.hide === 'object') {\n if (schemaQuestion.hide.hideWhenExpression) {\n question.hide = schemaQuestion.hide.hideWhenExpression;\n }\n }\n }\n private generateId(x) {\n let s = '_';\n while (s.length < x && x > 0) {\n const r = Math.random();\n s +=\n r < 0.1\n ? Math.floor(r * 100)\n : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65));\n }\n return '_' + s;\n }\n}\n","import { Injectable } from '@angular/core';\n// import { AbstractControl } from '@angular/forms';\n\nimport { LeafNode, GroupNode, ArrayNode, NodeBase } from './form-node';\nimport {\n QuestionBase,\n NestedQuestion,\n RepeatingQuestion,\n QuestionGroup\n} from '../question-models/models';\nimport { FormControlService } from './form-control.service';\nimport { QuestionFactory } from './question.factory';\nimport {\n AfeFormGroup,\n AfeControlType,\n AfeFormArray\n} from '../../abstract-controls-extension';\nimport { ControlRelationsFactory } from './control-relations.factory';\nimport { Validations } from '../validators/validations';\n\nimport { Form } from './form';\n\n@Injectable()\nexport class FormFactory {\n public hd: any = {\n getValue: () => {\n return 20;\n }\n };\n\n constructor(\n public controlService: FormControlService,\n public questionFactroy: QuestionFactory,\n public controlRelationsFactory: ControlRelationsFactory\n ) {}\n\n createForm(schema: any, dataSource?: any): Form {\n const form: Form = new Form(schema, this, this.questionFactroy);\n if (dataSource) {\n for (const key in dataSource) {\n if (dataSource.hasOwnProperty(key)) {\n form.dataSourcesContainer.registerDataSource(\n key,\n dataSource[key],\n false\n );\n }\n }\n }\n const question = this.questionFactroy.createQuestionModel(schema, form);\n form.rootNode = this.createNode(question, null, null, form) as GroupNode;\n\n this.buildRelations(form.rootNode);\n form.updateHiddenDisabledStateForAllControls();\n form.updateAlertsForAllControls();\n return form;\n }\n\n buildRelations(rootNode: GroupNode) {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildRelations(rootNode);\n\n // enable js expression validations\n Validations.JSExpressionValidatorsEnabled = true;\n }\n\n createNode(\n question: QuestionBase | NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): NodeBase {\n let node: NodeBase = null;\n if (question instanceof NestedQuestion) {\n if (question instanceof RepeatingQuestion) {\n node = this.createArrayNode(question, parentNode, parentControl, form);\n } else {\n node = this.createGroupNode(question, parentNode, parentControl, form);\n }\n } else {\n node = this.createLeafNode(question, parentNode, parentControl, form);\n }\n return node;\n }\n\n createLeafNode(\n question: QuestionBase,\n parentNode: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): LeafNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n );\n return new LeafNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n }\n\n createGroupNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): GroupNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const groupNode = new GroupNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n this.createNodeChildren(\n question,\n groupNode,\n controlModel || parentControl,\n form\n );\n return groupNode;\n }\n\n createArrayNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): ArrayNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const arrayNode = new ArrayNode(\n question,\n controlModel,\n parentControl,\n this,\n form,\n parentNode ? parentNode.path : undefined\n );\n arrayNode.createChildFunc = this.createArrayNodeChild;\n arrayNode.removeChildFunc = this.removeArrayNodeChild;\n\n arrayNode.addChildNodeCreatedListener((node: GroupNode) => {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildArrayNodeRelations(node);\n Validations.JSExpressionValidatorsEnabled = true;\n });\n return arrayNode;\n }\n\n createNodeChildren(\n question: NestedQuestion,\n node: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): any {\n question.questions.forEach((element) => {\n const child = this.createNode(element, node, parentControl, form);\n node.setChild(element.key, child);\n });\n return node.children;\n }\n\n createArrayNodeChild(\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n ): GroupNode {\n if (factory === null || factory === undefined) {\n factory = this;\n }\n const groupQuestion: QuestionGroup = new QuestionGroup({\n key: node.path + '.' + node.children.length + '',\n type: 'group',\n extras: question.extras,\n label: '',\n questions: question.questions\n });\n\n if (question.controlType === AfeControlType.None) {\n groupQuestion.controlType = question.controlType;\n }\n\n const group = factory.createGroupNode(groupQuestion, null, null, node.form);\n node.children.push(group);\n\n if (node.control instanceof AfeFormArray) {\n const nodeControl = node.control as AfeFormArray;\n nodeControl.setControl(nodeControl.controls.length, group.control);\n }\n\n return group;\n }\n\n removeArrayNodeChild(index: number, node: ArrayNode) {\n const nodeToRemove = node.children[index];\n\n node.children.splice(index, 1);\n if (node.control !== null || node.control !== undefined) {\n if (node.control instanceof AfeFormArray) {\n const control = node.control as AfeFormArray;\n const controlIndexToRemove = control.controls.indexOf(\n nodeToRemove.control\n );\n if (controlIndexToRemove >= 0) {\n control.removeAt(controlIndexToRemove);\n }\n }\n }\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport {\n NodeBase,\n ArrayNode,\n GroupNode,\n LeafNode\n} from '../form-factory/form-node';\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class ObsAdapterHelper {\n constructor() {}\n\n findObsAnswerToQuestion(node: NodeBase, obsArray: Array<any>): Array<any> {\n const found = [];\n\n if (!this.isObsNode(node)) {\n return found;\n }\n\n if (\n node instanceof LeafNode ||\n (node instanceof GroupNode && node.question.extras.type === 'complex-obs')\n ) {\n _.each(obsArray, (item) => {\n if (\n item.concept &&\n item.concept.uuid === node.question.extras.questionOptions.concept\n ) {\n found.push(item);\n }\n });\n\n return found;\n }\n\n // At this point the node is either a group or a repeating node\n\n const childQuestionsUuids = this.getChildQuestionsConceptUuids(node);\n if (childQuestionsUuids.length > 0) {\n _.each(obsArray, (obs) => {\n if (\n obs.concept &&\n obs.concept.uuid === node.question.extras.questionOptions.concept &&\n Array.isArray(obs.groupMembers) &&\n this.isSubsetOf(\n childQuestionsUuids,\n this.getGroupMembersConceptUuids(obs)\n )\n ) {\n found.push(obs);\n }\n });\n }\n\n return found;\n }\n\n getChildQuestionsConceptUuids(node: NodeBase): Array<string> {\n const found = [];\n\n if (node.question.extras && node.question.extras.questions) {\n _.each(node.question.extras.questions, (question) => {\n if (question.questionOptions && question.questionOptions.concept) {\n found.push(question.questionOptions.concept);\n }\n });\n }\n\n return found;\n }\n\n getGroupMembersConceptUuids(obsWithGroupMembers): Array<string> {\n const found = [];\n\n if (Array.isArray(obsWithGroupMembers.groupMembers)) {\n _.each(obsWithGroupMembers.groupMembers, (member) => {\n found.push(member.concept.uuid);\n });\n }\n\n return found;\n }\n\n isObsNode(node: NodeBase): boolean {\n return (\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs' ||\n node.question.extras.type === 'complex-obs-child')\n );\n }\n\n isSubsetOf(supersetArray: Array<any>, subsetArray: Array<any>): boolean {\n if (subsetArray.length === 0 && supersetArray.length === 0) {\n return true;\n }\n return subsetArray.every((element): boolean => {\n return supersetArray.indexOf(element) >= 0;\n });\n }\n\n setSimpleObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const obsToUse = obs[0];\n\n // set initial value\n node.initialValue = obsToUse;\n\n if (!this.isEmpty(obsToUse.value) && obsToUse.value.uuid) {\n // answer to the obs is a concept, use uuid value\n this.setNodeFormControlValue(node, obsToUse.value.uuid);\n } else if (!this.isEmpty(obsToUse.value)) {\n this.setNodeFormControlValue(node, obsToUse.value);\n }\n }\n }\n\n setMultiselectObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n node.initialValue = obs;\n\n const obsUuids = [];\n for (const m of obs) {\n obsUuids.push(m.value.uuid);\n }\n\n this.setNodeFormControlValue(node, obsUuids);\n }\n }\n\n setComplexObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n // set the obs value here\n this.setNodeValue(valueField, obs);\n node.initialValue = valueField.initialValue;\n\n // set the date value here\n dateField.initialValue = valueField.initialValue;\n this.setNodeFormControlValue(\n dateField,\n valueField.initialValue.obsDatetime\n );\n }\n }\n\n setGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const groupNode = node as GroupNode;\n groupNode.initialValue = obs[0];\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs[0].groupMembers);\n }\n }\n }\n\n setRepeatingGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const arrayNode = node as ArrayNode;\n arrayNode.initialValue = obs;\n\n for (let i = 0; i < obs.length; i++) {\n const createdNode = arrayNode.createChildNode();\n this.setGroupObsNodeValue(createdNode, [obs[i]]);\n }\n }\n }\n\n setNodeValue(node: NodeBase, obs: Array<any>) {\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs);\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n this.setNodeValue(arrayNode.children[i], obs);\n }\n break;\n }\n break;\n case 'simple':\n // search asnwering obs at this point\n const answeringObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setSimpleObsNodeValue(node, answeringObs);\n break;\n\n case 'multiselect':\n // search asnwering obs at this point\n const multiselectObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setMultiselectObsNodeValue(node, multiselectObs);\n break;\n\n case 'complex':\n // search asnwering obs at this point\n const complexObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setComplexObsNodeValue(node, complexObs);\n break;\n\n case 'group':\n const groupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (groupObs.length > 0) {\n this.setGroupObsNodeValue(node, groupObs);\n }\n\n break;\n case 'repeatingGroup':\n const repeatingGroupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (repeatingGroupObs.length > 0) {\n this.setRepeatingGroupObsNodeValue(node, repeatingGroupObs);\n }\n\n break;\n default:\n console.error('Unknown obs node', node);\n break;\n }\n }\n\n setNodeFormControlValue(node: NodeBase, value) {\n node.control.setValue(value);\n // TODO: Determine if we need this call\n // node.control.updateValueAndValidity();\n\n // TODO: Remove this hack and put it in appropriate place\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n }\n\n getObsNodeType(node: NodeBase): string {\n if (this.isObsNode(node)) {\n if (\n node instanceof LeafNode &&\n (node.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n node.question.extras.questionOptions.rendering === 'checkbox' ||\n node.question.extras.questionOptions.rendering === 'multi-select')\n ) {\n return 'multiselect';\n }\n\n if (node instanceof LeafNode) {\n return 'simple';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n return 'complex';\n }\n\n if (\n node instanceof ArrayNode &&\n node.question.extras.type === 'obsGroup' &&\n node.question.extras.questionOptions.rendering === 'repeating'\n ) {\n return 'repeatingGroup';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'obsGroup'\n ) {\n return 'group';\n }\n\n return 'unknownObs';\n }\n return 'unknown';\n }\n\n // PAYLOAD GENERATION FUNCTIONS\n getSimpleObsPayload(node: NodeBase): any {\n // check for empty values first\n if (this.isEmpty(node.control.value)) {\n if (node.initialValue) {\n // Handle case for existing voided obs\n return {\n uuid: node.initialValue.uuid,\n voided: true\n };\n }\n return null;\n }\n\n // check for exisiting, unchanged values\n if (node.initialValue && !this.simpleNodeValueChanged(node)) {\n return null;\n }\n\n // all numbers, text, concepts answers are handled in the same way\n // no need for further formatting in this case\n const obs: any = {\n concept: node.question.extras.questionOptions.concept,\n value: node.control.value\n };\n\n // handle date fields\n if (node.question.extras.questionOptions.rendering === 'date') {\n obs.value = this.toOpenMrsDateTimeString(node.control.value);\n }\n\n if (node.initialValue) {\n // for existing cases, delete concept property, and add uuid\n delete obs.concept;\n obs.uuid = node.initialValue.uuid;\n }\n\n return obs;\n }\n\n getComplexObsPayload(node: NodeBase) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n const valuePayload = this.getObsNodePayload(valueField);\n // set obs datetime for the generated payload\n if (valuePayload.length > 0) {\n valuePayload[0].obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return valuePayload[0];\n } else if (valuePayload.length === 0 && node.initialValue) {\n // determine if date changed\n if (\n !this.areDatesEqual(\n node.initialValue.obsDatetime,\n dateField.control.value\n )\n ) {\n const payload: any = {\n uuid: node.initialValue.uuid\n };\n payload.obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return payload;\n }\n }\n return null;\n }\n\n getMultiselectObsPayload(node: NodeBase): Array<any> {\n const payload: Array<any> = [];\n\n const existingUuids = [];\n\n // add voided obs i.e. deleted options\n if (Array.isArray(node.initialValue)) {\n _.each(node.initialValue, (item) => {\n existingUuids.push(item.value.uuid);\n if (Array.isArray(node.control.value)) {\n if (node.control.value.indexOf(item.value.uuid) < 0) {\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n } else {\n // every value was deleted\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n });\n }\n\n // add new obs i.e they didn't exisit originally\n if (Array.isArray(node.control.value)) {\n _.each(node.control.value, (item) => {\n if (existingUuids.indexOf(item) < 0) {\n payload.push({\n concept: node.question.extras.questionOptions.concept,\n value: item\n });\n }\n });\n }\n\n return payload;\n }\n\n getGroupPayload(node: NodeBase) {\n const nodeAsGroup: GroupNode = node as GroupNode;\n\n let childrenPayload = [];\n _.each(nodeAsGroup.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n });\n\n if (childrenPayload.length === 0) {\n return null;\n }\n\n const groupPayload: any = {\n groupMembers: childrenPayload\n };\n\n if (nodeAsGroup.initialValue) {\n groupPayload.uuid = nodeAsGroup.initialValue.uuid;\n } else {\n groupPayload.concept =\n nodeAsGroup.question.extras.questionOptions.concept;\n }\n\n return groupPayload;\n }\n\n getRepeatingGroupPayload(node: NodeBase) {\n const nodeAsArray: ArrayNode = node as ArrayNode;\n\n let childrenPayload = [];\n\n const groupsUuidsAfterEditting = [];\n _.each(nodeAsArray.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n if (child.initialValue && child.initialValue.uuid) {\n groupsUuidsAfterEditting.push(child.initialValue.uuid);\n }\n });\n\n // void deleted groups\n // console.log('groupsUuidsAfterEditting', groupsUuidsAfterEditting);\n if (nodeAsArray.initialValue && Array.isArray(nodeAsArray.initialValue)) {\n _.each(nodeAsArray.initialValue, (obs) => {\n if (groupsUuidsAfterEditting.indexOf(obs.uuid) < 0) {\n const voidedGroup = {\n uuid: obs.uuid,\n voided: true\n };\n childrenPayload.push(voidedGroup);\n }\n });\n }\n\n if (childrenPayload.length <= 0) {\n return null;\n }\n return childrenPayload;\n }\n\n getObsNodePayload(node: NodeBase): Array<any> {\n let payload = [];\n\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n const groupNodePayoad = this.getObsNodePayload(\n groupNode.children[o]\n );\n if (Array.isArray(groupNodePayoad) && groupNodePayoad.length > 0) {\n payload = payload.concat(groupNodePayoad);\n }\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n const arrayNodePayload = this.getObsNodePayload(\n arrayNode.children[i]\n );\n if (\n Array.isArray(arrayNodePayload) &&\n arrayNodePayload.length > 0\n ) {\n payload = payload.concat(arrayNodePayload);\n }\n }\n break;\n }\n break;\n case 'simple':\n const simpleObs = this.getSimpleObsPayload(node);\n if (simpleObs !== null) {\n payload.push(simpleObs);\n }\n break;\n\n case 'multiselect':\n const multiselectObs = this.getMultiselectObsPayload(node);\n\n if (Array.isArray(multiselectObs) && multiselectObs.length > 0) {\n payload = payload.concat(multiselectObs);\n }\n break;\n\n case 'complex':\n const complexObs = this.getComplexObsPayload(node);\n if (complexObs !== null) {\n payload.push(complexObs);\n }\n break;\n\n case 'group':\n const groupedObs = this.getGroupPayload(node);\n if (groupedObs && groupedObs !== null) {\n payload.push(groupedObs);\n }\n break;\n case 'repeatingGroup':\n const repeatingGroupedObs = this.getRepeatingGroupPayload(node);\n if (\n Array.isArray(repeatingGroupedObs) &&\n repeatingGroupedObs.length > 0\n ) {\n payload = payload.concat(repeatingGroupedObs);\n }\n break;\n default:\n break;\n }\n\n return payload;\n }\n\n simpleNodeValueChanged(node: NodeBase): boolean {\n if (node.initialValue) {\n if (node.initialValue.value && node.initialValue.value.uuid) {\n // question whose answer is a concept\n return node.control.value !== node.initialValue.value.uuid;\n }\n\n if (node.question.extras.questionOptions.rendering === 'date') {\n return !this.areDatesEqual(node.control.value, node.initialValue.value);\n }\n return node.control.value !== node.initialValue.value;\n }\n return false;\n }\n\n areDatesEqual(date1, date2) {\n return moment(date1).isSame(date2);\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n toOpenMrsDateTimeString(datetime: string): string {\n if (this.isEmpty(datetime)) {\n return undefined;\n } else {\n // transform value to moment value to avoid error\n const formattedVal = moment(datetime).format();\n const val = formattedVal.substring(0, 19).replace('T', ' ');\n return this.isEmpty(val) ? undefined : val;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'rxjs';\n\nimport * as _ from 'lodash';\n\nimport { LeafNode, GroupNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport { ObsAdapterHelper } from './obs-adapter-helper';\n\n@Injectable()\nexport class ObsValueAdapter implements ValueAdapter {\n constructor(private helper: ObsAdapterHelper) {}\n\n generateFormPayload(form: Form) {\n return this.helper.getObsNodePayload(form.rootNode);\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Get obs Payload\n // return this.getObsPayload(questionNodes);\n }\n\n populateForm(form: Form, payload) {\n this.helper.setNodeValue(form.rootNode, payload);\n\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Extract set obs\n // this.setValues(questionNodes, payload);\n }\n\n // TODO: Get rid of all the functions below as they will not be needed\n // once the helper is stable\n\n setValues(nodes, payload?, forcegroup?) {\n if (nodes) {\n for (const node of nodes) {\n if (node instanceof LeafNode) {\n this.setObsValue(node, payload);\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n } else if (\n (node.question &&\n node.question.extras &&\n node.question.renderingType === 'group') ||\n forcegroup\n ) {\n const groupObs = _.find(payload, (o: any) => {\n return (\n o.concept.uuid === node.question.extras.questionOptions.concept &&\n o.groupMembers\n );\n });\n if (groupObs) {\n if (node.node) {\n node.node['initialValue'] = groupObs;\n }\n\n this.setValues(node.groupMembers, groupObs.groupMembers);\n }\n if (forcegroup && node.payload) {\n this.setValues(node.groupMembers, node.payload.groupMembers);\n }\n } else if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n this.setComplexObsValue(node, payload);\n } else if (\n node.question &&\n node.question.extras &&\n node.question.renderingType === 'repeating' &&\n !forcegroup\n ) {\n this.setRepeatingGroupValues(node, payload);\n node.node.control.updateValueAndValidity();\n } else {\n throw new Error('not implemented');\n }\n }\n }\n }\n\n setObsValue(node, payload) {\n if (\n (node.question &&\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n (node.question.extras.type === 'complex-obs-child' &&\n node.question.extras.questionOptions.obsField === 'value')) &&\n node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||\n node.question.extras.questionOptions.rendering !== 'checkbox' ||\n node.question.extras.questionOptions.rendering !== 'multi-select'\n ) {\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (obs) {\n if (obs.value instanceof Object) {\n node.control.setValue(obs.value.uuid);\n node.control.updateValueAndValidity();\n } else {\n node.control.setValue(obs.value);\n node.control.updateValueAndValidity();\n }\n node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };\n }\n } else {\n const multiObs = _.filter(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (multiObs && multiObs.length > 0) {\n node.control.setValue(this.getMultiselectValues(multiObs));\n node.control.updateValueAndValidity();\n node['initialValue'] = multiObs;\n }\n }\n }\n\n setComplexObsValue(node, payload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n // set the usual obs value\n this.setObsValue(valueField, payload);\n\n // set the obs date\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n\n if (obs) {\n dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };\n (dateField as LeafNode).control.setValue(obs.obsDatetime);\n (dateField as LeafNode).control.updateValueAndValidity();\n }\n }\n\n getMultiselectValues(multiObs) {\n const values = [];\n for (const m of multiObs) {\n values.push(m.value.uuid);\n }\n return values;\n }\n\n setRepeatingGroupValues(node, payload) {\n const groupRepeatingObs = _.filter(payload, (o: any) => {\n const found =\n o.concept.uuid === node.question.extras.questionOptions.concept;\n let intersect = false;\n if (found && o.groupMembers) {\n const obs = o.groupMembers.map((a) => {\n return a.concept.uuid;\n });\n\n const schemaQuestions = node.question.questions.map((a) => {\n return a.extras.questionOptions.concept;\n });\n\n intersect = _.intersection(obs, schemaQuestions).length > 0;\n }\n return found && intersect;\n });\n if (groupRepeatingObs.length > 0) {\n node.node['initialValue'] = groupRepeatingObs;\n for (let i = 0; i < groupRepeatingObs.length; i++) {\n node.node.createChildNode();\n }\n }\n const groups = [];\n let index = 0;\n for (const child of node.node.children) {\n const children = Object.keys(child.children).map(function (key) {\n return child.children[key];\n });\n const groupPayload = groupRepeatingObs[index];\n groups.push({\n question: node.question,\n groupMembers: children,\n payload: groupPayload\n });\n index++;\n }\n this.setValues(groups, groupRepeatingObs, true);\n }\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n for (const section of page.page) {\n arrays.push(section.section);\n }\n }\n return merged.concat.apply([], arrays);\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n\n processGroup(obs, obsPayload) {\n if (\n obs.question &&\n obs.question.extras &&\n obs.question.extras.questionOptions.rendering === 'group'\n ) {\n const members = _.filter(\n this.getObsPayload(obs.groupMembers),\n (o: any) => {\n return o.value !== '';\n }\n );\n\n const mappedMembers = members.map((a) => {\n return a.voided;\n });\n if (members.length > 0 && mappedMembers.every(Boolean)) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n voided: true\n });\n } else if (members.length > 0) {\n if (obs.node.initialValue) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n groupMembers: members\n });\n } else {\n obsPayload.push({\n concept: obs.question.extras.questionOptions.concept,\n groupMembers: members\n });\n }\n }\n }\n }\n\n mapInitialGroup(group) {\n let current = {};\n for (const member of group.groupMembers) {\n let value: any = '';\n if (member.value instanceof Object) {\n value = member.value.uuid;\n } else if (member.value) {\n value = member.value;\n } else if (member.groupMembers && member.groupMembers.length > 0) {\n current = this.mapInitialGroup(group);\n }\n current[member.concept.uuid + ':' + value] = value;\n }\n return current;\n }\n\n mapModelGroup(node, value) {\n const current = {};\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n const groupQuestion: any = _.find(node.question.questions, {\n key: key\n });\n const modelValue = value[key];\n if (modelValue instanceof Object) {\n } else if (modelValue !== '') {\n current[\n groupQuestion.extras.questionOptions.concept + ':' + modelValue\n ] = modelValue;\n }\n }\n }\n return current;\n }\n\n processRepeatingGroups(node, obsPayload) {\n const initialValues = [];\n if (node.node.initialValue) {\n for (const group of node.node.initialValue) {\n initialValues.push({\n uuid: group.uuid,\n value: this.mapInitialGroup(group)\n });\n }\n }\n const repeatingModel = [];\n for (const value of node.node.control.value) {\n repeatingModel.push({ value: this.mapModelGroup(node, value) });\n }\n const deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);\n const newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);\n const groupConcept = node.question.extras.questionOptions.concept;\n let newObsPayload = [];\n if (deleted.length > 0) {\n const deletedObs = this.createGroupDeletedObs(deleted);\n for (const d of deletedObs) {\n obsPayload.push(d);\n }\n if (newObs.length > 0) {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n } else {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n\n if (newObsPayload.length > 0) {\n for (const p of newObsPayload) {\n obsPayload.push(p);\n }\n }\n }\n\n leftOuterJoinArrays(first, second) {\n const unique = first.filter(function (obj) {\n return !second.some(function (obj2) {\n return _.isEqual(obj.value, obj2.value);\n });\n });\n return unique;\n }\n\n createGroupNewObs(payload, groupConcept) {\n const newPayload = [];\n for (const obs of payload) {\n const groupPayload = [];\n /* tslint:disable */\n for (let key in obs.value) {\n let concept = key.split(':')[0];\n let value = key.split(':')[1];\n groupPayload.push({ concept: concept, value: value });\n }\n newPayload.push({ concept: groupConcept, groupMembers: groupPayload });\n /* tslint:enable */\n }\n return newPayload;\n }\n\n createGroupDeletedObs(payload) {\n const deletedObs = [];\n for (const d of payload) {\n deletedObs.push({ uuid: d.uuid, voided: true });\n }\n return deletedObs;\n }\n\n getExactTime(datetime: string) {\n return datetime.substring(0, 19).replace('T', ' ');\n }\n\n processObs(obs, obsPayload) {\n if (obs.control && obs.question.extras) {\n const obsValue = {\n concept: obs.question.extras.questionOptions.concept,\n value:\n obs.question.extras.questionOptions.rendering === 'date' &&\n !this.isEmpty(obs.control.value)\n ? this.getExactTime(obs.control.value)\n : obs.control.value\n };\n\n if (\n obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n obs.question.extras.questionOptions.rendering === 'checkbox' ||\n obs.question.extras.questionOptions.rendering === 'multi-select'\n ) {\n const multis = this.processMultiSelect(\n obs.question.extras.questionOptions.concept,\n obs.control.value\n );\n if (obs.initialValue) {\n const mappedInitial = obs.initialValue.map((a) => {\n return {\n uuid: a.uuid,\n value: { concept: a.concept.uuid, value: a.value.uuid }\n };\n });\n const mappedCurrent = multis.map((a) => {\n return { value: a };\n });\n const deletedObs = this.leftOuterJoinArrays(\n mappedInitial,\n mappedCurrent\n );\n const newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);\n this.processDeletedMultiSelectObs(deletedObs, obsPayload);\n this.processNewMultiSelectObs(newObs, obsPayload);\n } else {\n this.processNewMultiSelectObs(multis, obsPayload);\n }\n } else {\n if (obs.initialValue && obs.initialValue.value && obsValue) {\n this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);\n } else if (obsValue.value !== '' && obsValue.value !== null) {\n obsPayload.push(obsValue);\n }\n }\n }\n }\n\n processComplexObs(node, obsPayload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n\n if (valueField) {\n // process obs as usual\n this.processObs(valueField, obsPayload);\n\n // obtain the last inserted obs and set the obsDatetime\n const createdPayload =\n obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;\n if (\n createdPayload &&\n ((createdPayload.concept &&\n createdPayload.concept ===\n node.question.extras.questionOptions.concept) ||\n (valueField.initialValue &&\n createdPayload.uuid === valueField.initialValue.obsUuid))\n ) {\n if (\n dateField.initialValue &&\n dateField.control.value !== dateField.initialValue.value\n ) {\n createdPayload.obsDatetime = dateField.control.value;\n }\n }\n }\n }\n\n processDeletedMultiSelectObs(values, obsPayload) {\n for (const value of values) {\n obsPayload.push({ uuid: value.uuid, voided: true });\n }\n }\n\n processNewMultiSelectObs(values, obsPayload) {\n for (const multi of values) {\n if (multi.value instanceof Object) {\n obsPayload.push(multi.value);\n } else {\n obsPayload.push(multi);\n }\n }\n }\n\n updateOrVoidObs(obsValue, initialValue, obsPayload) {\n if (this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, voided: true });\n } else if (!this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });\n }\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({\n page: page,\n label: o.children[key].question.label\n });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({\n section: section,\n node: o.children[key],\n label: o.children[key].question.label\n });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n }\n }\n return questions;\n }\n\n processMultiSelect(concept, values) {\n const multiSelectObs = [];\n if (values && values !== null) {\n for (const value of values) {\n const obs = {\n concept: concept,\n value: value\n };\n multiSelectObs.push(obs);\n }\n }\n return multiSelectObs;\n }\n\n isObs(node) {\n return (\n node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs'\n );\n }\n\n getObsPayload(nodes) {\n const obsPayload = [];\n for (const node of nodes) {\n if (this.isObs(node)) {\n if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'group')\n ) {\n this.processGroup(node, obsPayload);\n } else if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'repeating')\n ) {\n this.processRepeatingGroups(node, obsPayload);\n } else if (\n node instanceof GroupNode &&\n (node as GroupNode).question.extras.type === 'complex-obs'\n ) {\n this.processComplexObs(node, obsPayload);\n } else {\n this.processObs(node, obsPayload);\n }\n }\n }\n return obsPayload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport * as _ from 'lodash';\n@Injectable()\nexport class OrderValueAdapter implements ValueAdapter {\n formOrderNodes = [];\n private provider = '';\n\n generateFormPayload(form: Form) {\n this.formOrderNodes = [];\n this._setOrderProvider(form);\n this._findTestOrderQuestionNodes(form.rootNode);\n return this._createOrdersPayload(this.formOrderNodes, form);\n }\n\n populateForm(form: Form, payload) {\n form.existingOrders = payload;\n this.formOrderNodes = [];\n this._findTestOrderQuestionNodes(form.rootNode);\n const existingOrders = this._getExistingOrders(form);\n this._setOrderValues(this.formOrderNodes, existingOrders);\n }\n\n private _setOrderProvider(form: Form) {\n if (form.valueProcessingInfo.providerUuid) {\n this.provider = form.valueProcessingInfo.providerUuid;\n }\n }\n\n private _createOrdersPayload(orderNodes, form: Form) {\n const payload = [];\n const selectedOrders = [];\n let deletedOrders = [];\n const existingOrders = this._getExistingOrders(form);\n for (const orderNode of orderNodes) {\n const orderNodeValues = orderNode.control.value;\n const orders = [];\n if (existingOrders) {\n existingOrders.map(function (obj) {\n orders[obj.concept] = obj.concept;\n });\n }\n\n for (const order in orderNodeValues) {\n if (orderNodeValues.hasOwnProperty(order)) {\n const orderValue = orderNodeValues[order][orderNode.question.key];\n\n const payloadOrder = this._createPayloadOrder(\n orderValue,\n orderNode.question.extras\n );\n\n if (\n orders[orderValue] !== orderValue &&\n payloadOrder.concept !== ''\n ) {\n payload.push(payloadOrder);\n }\n selectedOrders[orderValue] = orderValue;\n if (payloadOrder.orderNumber === '') {\n delete payloadOrder.orderNumber;\n }\n if (payloadOrder.uuid === '') {\n delete payloadOrder.uuid;\n }\n }\n }\n }\n\n deletedOrders = this._getDeletedOrders(selectedOrders, existingOrders);\n return this._addDeletedOrdersToPayload(deletedOrders, payload);\n }\n\n private _getExistingOrders(form: Form) {\n if (form.existingOrders && form.existingOrders.orders) {\n let existingOrders = form.existingOrders.orders.map((o) => {\n return {\n concept: o.concept.uuid,\n orderNumber: o.orderNumber,\n orderUuid: o.uuid,\n voided: o.voided,\n dateVoided: o.auditInfo.dateVoided\n };\n });\n\n return (existingOrders = _.filter(existingOrders, (order: any) => {\n if (order.voided === true || order.dateVoided) {\n return false;\n } else {\n return true;\n }\n }));\n } else {\n return;\n }\n }\n\n private _setOrderValues(node, existingOrders) {\n this._findTestOrderQuestionNodes(node);\n\n const orderNodes = this.formOrderNodes;\n for (const orderNode of orderNodes) {\n this._setOrderNodeValues(orderNode, existingOrders);\n }\n }\n\n private _addDeletedOrdersToPayload(deletedOrders, payload): any {\n for (const order in deletedOrders) {\n if (deletedOrders.hasOwnProperty(order)) {\n payload.push({ uuid: deletedOrders[order], voided: true });\n }\n }\n return payload;\n }\n\n private _createPayloadOrder(orderConcept, quesitonExtras): any {\n const order = {\n concept: '',\n type: '',\n orderer: '',\n careSetting: ''\n };\n order.concept = orderConcept;\n order.type = quesitonExtras.questionOptions.orderType;\n order.orderer = this.provider;\n order.careSetting = quesitonExtras.questionOptions.orderSettingUuid;\n\n // delete orderer if provider not provided\n if (order.orderer === '') {\n delete order.orderer;\n }\n\n return order;\n }\n\n private _getDeletedOrders(selectedOrders, existingOrders): any {\n const deleteOrders = [];\n if (selectedOrders) {\n for (const order in existingOrders) {\n if (existingOrders.hasOwnProperty(order)) {\n const existingOrderConcept = existingOrders[order].concept;\n const selectedOrder = selectedOrders[existingOrderConcept];\n if (selectedOrder !== existingOrderConcept) {\n deleteOrders.push(existingOrders[order].orderUuid);\n }\n }\n }\n }\n // console.log('Deleted Orders ', deleteOrders);\n return deleteOrders;\n }\n\n private _setOrderNodeValues(node, orders) {\n let index = 0;\n node['initialValue'] = orders;\n for (const order of orders) {\n node.createChildNode();\n const value = {};\n value[node.question.key] = order.concept;\n const childNode = node.children[index];\n childNode.control.setValue(value);\n childNode['initialValue'] = value;\n childNode['orderNumber'] = order.orderNumber;\n // console.log('Set Value', node.children[index].control.value, node, childNode);\n index++;\n }\n }\n\n private _findTestOrderQuestionNodes(formNode) {\n if (formNode.children) {\n if (formNode.children instanceof Object) {\n for (const key in formNode.children) {\n if (formNode.children.hasOwnProperty(key)) {\n switch (formNode.children[key].question.renderingType) {\n case 'page':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'section':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'group':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n\n break;\n case 'repeating':\n if (formNode.children) {\n // tslint:disable-next-line:forin\n for (const node in formNode.children) {\n const question = formNode.children[node].question;\n if (\n question.extras &&\n question.extras.type === 'testOrder'\n ) {\n this.formOrderNodes.push(formNode.children[node]);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\n\nimport { ValueAdapter } from './value.adapter';\nimport { ObsValueAdapter } from './obs.adapter';\nimport { OrderValueAdapter } from './order.adapter';\n\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class EncounterAdapter implements ValueAdapter {\n constructor(\n public ordersAdapter: OrderValueAdapter,\n public obsAdapter: ObsValueAdapter\n ) {}\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n\n if (Array.isArray(payload.orders)) {\n this.ordersAdapter.populateForm(form, payload);\n }\n if (Array.isArray(payload.obs)) {\n this.obsAdapter.populateForm(form, payload.obs);\n }\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (payload === undefined || payload === null) {\n throw new Error('Expected payload');\n }\n\n const nodes = this.getEncounterNodes(rootNode);\n\n nodes.forEach((node) => {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n if (payload['encounterDatetime']) {\n // console.log('date', payload['encounterDatetime']);\n node.control.setValue(\n moment(payload['encounterDatetime']).toDate()\n );\n node.initialValue = moment(payload['encounterDatetime']).toDate();\n }\n break;\n case 'encounterProvider':\n if (\n Array.isArray(payload['encounterProviders']) &&\n payload['encounterProviders'].length > 0\n ) {\n const firstProvider: any =\n payload['encounterProviders'][0].provider;\n if (firstProvider && firstProvider.uuid) {\n // Very weird work around for an issue with setting the value\n node.control.setValue(firstProvider.uuid);\n setTimeout(() => {\n node.control.setValue(firstProvider.uuid);\n });\n node.initialValue = firstProvider.uuid;\n }\n }\n break;\n case 'encounterLocation':\n if (payload['location'] && payload['location'].uuid) {\n node.control.setValue(payload['location'].uuid);\n node.initialValue = payload['location'].uuid;\n }\n break;\n default:\n break;\n }\n });\n }\n\n generateFormPayload(form: Form) {\n const payload = this.generateNodePayload(form.rootNode);\n\n this.setNonFilledPayloadMembers(form, payload);\n\n payload['obs'] = this.obsAdapter.generateFormPayload(form) || [];\n\n payload['orders'] = this.ordersAdapter.generateFormPayload(form) || [];\n\n return payload;\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getEncounterNodes(rootNode);\n const payload = {};\n\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== ''\n ) {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n const dateValue = moment(node.control.value).utcOffset(\n rootNode.form.valueProcessingInfo.utcOffset || '+0300'\n );\n payload['encounterDatetime'] = dateValue.format();\n break;\n case 'encounterProvider':\n if (node.control.value && node.control.value !== '') {\n const providers = [];\n providers.push({\n provider: node.control.value,\n encounterRole: 'a0b03050-c99b-11e0-9572-0800200c9a66' // unknown provider role in the encounter as default\n });\n payload['encounterProviders'] = providers;\n }\n break;\n case 'encounterLocation':\n payload['location'] = node.control.value;\n break;\n default:\n break;\n }\n }\n });\n\n return payload;\n }\n\n getEncounterNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getEncounterNodes(rootNode, results);\n return results;\n }\n\n setNonFilledPayloadMembers(form: Form, payload) {\n if (form.valueProcessingInfo.patientUuid) {\n this.setPayloadPatientUuid(payload, form.valueProcessingInfo.patientUuid);\n }\n\n if (form.valueProcessingInfo.visitUuid) {\n this.setPayloadVisitUuid(payload, form.valueProcessingInfo.visitUuid);\n }\n\n if (form.valueProcessingInfo.encounterTypeUuid) {\n this.setPayloadEncounterTypeUuid(\n payload,\n form.valueProcessingInfo.encounterTypeUuid\n );\n }\n\n if (form.valueProcessingInfo.formUuid) {\n this.setPayloadFormUuid(payload, form.valueProcessingInfo.formUuid);\n }\n\n if (form.valueProcessingInfo.encounterUuid) {\n this.setPayloadEncounterUuid(\n payload,\n form.valueProcessingInfo.encounterUuid\n );\n }\n }\n\n setPayloadPatientUuid(payload, patientUuid: string) {\n payload['patient'] = patientUuid;\n }\n\n setPayloadVisitUuid(payload, visitUuid: string) {\n payload['visit'] = visitUuid;\n }\n\n setPayloadEncounterTypeUuid(payload, encounterTypeUuid: string) {\n payload['encounterType'] = encounterTypeUuid;\n }\n\n setPayloadFormUuid(payload, formUuid: string) {\n payload['form'] = formUuid;\n }\n\n setPayloadEncounterUuid(payload, encounterUuid: string) {\n payload['uuid'] = encounterUuid;\n }\n\n private _getEncounterNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (this._isEncounterNode(rootNode)) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getEncounterNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getEncounterNodes(child, array);\n });\n }\n }\n\n private _isEncounterNode(node: NodeBase): boolean {\n if (\n node.question.extras &&\n (node.question.extras.type === 'encounterDatetime' ||\n node.question.extras.type === 'encounterProvider' ||\n node.question.extras.type === 'encounterLocation')\n ) {\n return true;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAttribuAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAttributeNodes(rootNode);\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n if (node.question.extras.questionOptions.isSimpleValue === true) {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n value: node.control.value\n });\n } else {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n hydratedObject: node.control.value\n });\n }\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (!Array.isArray(payload)) {\n throw new Error('Expected an array of attributes');\n }\n\n const nodes = this.getPersonAttributeNodes(rootNode);\n\n nodes.forEach((node) => {\n payload.forEach((element) => {\n if (\n element.attributeType.uuid ===\n node.question.extras.questionOptions.attributeType\n ) {\n if (element.value.uuid) {\n node.control.setValue(element.value.uuid);\n node.initialValue = element.value.uuid;\n } else {\n node.control.setValue(element.value);\n node.initialValue = element.value;\n }\n }\n });\n });\n }\n\n getPersonAttributeNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAttributesNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAttributesNodes(\n rootNode: NodeBase,\n array: Array<NodeBase>\n ) {\n if (\n rootNode.question.extras &&\n rootNode.question.extras.type === 'personAttribute'\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAttributesNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAttributesNodes(child, array);\n });\n }\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n ViewChild,\n Output,\n EventEmitter,\n Renderer2\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { concat, Observable, of, Subject } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';\nimport { SelectOption } from '../../form-entry/question-models/interfaces/select-option';\n\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n@Component({\n selector: 'ngx-remote-select',\n templateUrl: 'remote-select.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteSelectComponent),\n multi: true\n }\n ]\n})\nexport class RemoteSelectComponent implements OnInit, ControlValueAccessor {\n // @Input() dataSource: DataSource;\n remoteOptions$: Observable<SelectOption[]>;\n remoteOptionsLoading = false;\n remoteOptionInput$ = new Subject<string>();\n selectedRemoteOptions: SelectOption;\n @Input() placeholder = 'Search...';\n @Input() componentID: string;\n @Input() disabled = false;\n items = [];\n value = [];\n loading = false;\n searchText = '';\n notFoundMsg = 'match no found';\n @Output() done: EventEmitter<any> = new EventEmitter<any>();\n\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n if (this._dataSource && this._dataSource.dataFromSourceChanged) {\n this.subscribeToDataSourceDataChanges();\n }\n }\n\n constructor(private renderer: Renderer2) { }\n\n ngOnInit() {\n this.loadOptions();\n }\n\n subscribeToDataSourceDataChanges() {\n this._dataSource.dataFromSourceChanged.subscribe((results) => {\n if (results.length > 0) {\n this.items = results;\n this.notFoundMsg = '';\n } else {\n this.notFoundMsg = 'Not found';\n this.items = [];\n }\n });\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value && value !== '') {\n if (this.dataSource) {\n this.loading = true;\n this.dataSource.resolveSelectedValue(value).subscribe(\n (result: any) => {\n this.items = [result];\n this.selectedRemoteOptions = result;\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() { }\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n selected(event) {\n this.propagateChange(event);\n }\n\n compareItems = (item, selected) => {\n if (item.value && selected.value) {\n return item.value === selected.value;\n }\n return false;\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (change: any) => { };\n\n trackByFn(item: SelectOption) {\n return item.value;\n }\n\n private loadOptions() {\n this.remoteOptions$ = concat(\n of([]), // default items\n this.remoteOptionInput$.pipe(\n distinctUntilChanged(),\n tap(() => {\n this.loading = true;\n }),\n switchMap(term => this.dataSource.searchOptions(term).pipe(\n catchError(() => of([])), // empty list on error\n tap(() => this.loading = false)\n ))\n )\n );\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { RemoteSelectComponent } from './ngx-remote-select.component';\n\n@NgModule({\n imports: [CommonModule,\n NgSelectModule,\n FormsModule],\n exports: [RemoteSelectComponent],\n declarations: [RemoteSelectComponent],\n providers: []\n})\nexport class NgxRemoteSelectModule { }\n","import { Component, OnInit, OnChanges, Input } from '@angular/core';\n\nimport { LeafNode } from '../../form-entry/form-factory/form-node';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Component({\n selector: 'appointments-overview',\n templateUrl: './appointments-overview.component.html',\n styleUrls: ['./appointments-overview.component.css']\n})\nexport class AppointmentsOverviewComponent implements OnInit, OnChanges {\n @Input() node: LeafNode;\n showAppointments = false;\n loadingAppointments = false;\n errorLoadingAppointments = false;\n appointmentsLoaded = false;\n appointments: Array<any> = [];\n today = '';\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.node.control.valueChanges.subscribe((v) => {\n this.resetProperties();\n const node = this.node;\n if (\n node.question.extras.questionOptions.concept &&\n (node.question.extras.questionOptions.concept ===\n 'a8a666ba-1350-11df-a1f1-0026b9348838' ||\n node.question.extras.questionOptions.concept ===\n 'a89d2398-1350-11df-a1f1-0026b9348838')\n ) {\n // console.log('what change is here', this.showAppointments);\n if (!this.showAppointments) {\n this.loadingAppointments = true;\n this.showAppointments = true;\n let dataSource;\n if (node.form && node.form.dataSourcesContainer.dataSources) {\n dataSource =\n node.form.dataSourcesContainer.dataSources\n .monthlyScheduleResourceService;\n }\n const locationUuid =\n node.form.dataSourcesContainer.dataSources.userLocation.uuid;\n if (dataSource && locationUuid) {\n const startDate = moment(v)\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD');\n const endDate = moment(v)\n .endOf('week')\n .subtract(1, 'day')\n .format('YYYY-MM-DD');\n this.today = moment(v).format('DD-MM-YYYY');\n // create 5 week days\n const _data = [];\n const programTypes = [\n '781d85b0-1359-11df-a1f1-0026b9348838',\n '781d897a-1359-11df-a1f1-0026b9348838',\n '96047aaf-7ab3-45e9-be6a-b61810fe617d',\n 'c19aec66-1a40-4588-9b03-b6be55a8dd1d',\n 'f7793d42-11ac-4cfd-9b35-e0a21a7a7c31',\n '334c9e98-173f-4454-a8ce-f80b20b7fdf0',\n '96ba279b-b23b-4e78-aba9-dcbd46a96b7b',\n '781d8880-1359-11df-a1f1-0026b9348838'\n ];\n const programTypeParams = programTypes.join();\n for (let i = 1; i <= 5; i++) {\n _data.push({\n date: moment(v)\n .startOf('week')\n .add(i, 'day')\n .format('DD-MM-YYYY'),\n count: 0\n });\n }\n dataSource\n .getMonthlySchedule({\n startDate: startDate,\n endDate: endDate,\n limit: 5,\n locationUuids: locationUuid,\n programType: programTypeParams\n })\n .subscribe(\n (data) => {\n this.appointmentsLoaded = true;\n this.loadingAppointments = false;\n _data.map((appointment, index) => {\n appointment.count =\n data[index] !== undefined\n ? data[index].count.scheduled\n : 0;\n });\n this.appointments = _data;\n },\n (error) => {\n this.loadingAppointments = false;\n this.errorLoadingAppointments = true;\n this.showAppointments = false;\n console.error(error);\n }\n );\n } else {\n this.showAppointments = false;\n this.errorLoadingAppointments = true;\n }\n }\n }\n });\n }\n\n resetProperties() {\n this.loadingAppointments = false;\n this.appointmentsLoaded = false;\n this.errorLoadingAppointments = false;\n this.showAppointments = false;\n this.appointments = [];\n this.today = '';\n }\n}\n","import {\n Component,\n Input,\n forwardRef,\n OnInit,\n AfterViewInit\n} from '@angular/core';\n\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'checkbox',\n templateUrl: './checkbox.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlComponent),\n multi: true\n }\n ]\n})\nexport class CheckboxControlComponent implements OnInit, AfterViewInit {\n @Input() public options: Array<any>;\n @Input() public selected: Array<any>;\n public _value: Array<any> = [];\n\n public ngOnInit() {\n this.options = this.options.map((option) => {\n if (this.selected.indexOf(option.value) !== -1) {\n Object.assign(option, { checked: true });\n }\n return option;\n });\n }\n\n public ngAfterViewInit() {}\n\n public writeValue(value: any) {\n this.value = value;\n }\n\n public registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this._value || this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n }\n\n public selectOpt(option, event) {\n if (event.target.checked) {\n this._value.push(option.value);\n } else {\n this.options.forEach((o) => {\n if (o.value === option.value) {\n this._value.splice(o, 1);\n }\n });\n }\n\n this.onChange(this.value);\n }\n\n private onChange = (change: any) => {};\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxControlComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [CheckboxControlComponent],\n exports: [CheckboxControlComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class CheckboxModule {}\n","/* tslint:disable:component-class-suffix */\nimport {\n Pipe,\n PipeTransform,\n OnDestroy,\n WrappedValue,\n ChangeDetectorRef\n} from '@angular/core';\nimport { Subscription , Observable , BehaviorSubject } from 'rxjs';\n\nimport { DomSanitizer } from '@angular/platform-browser';\n\n// Using similarity from AsyncPipe to avoid having to pipe |secure|async in HTML.\n// tslint:disable-next-line:use-pipe-transform-interface\n@Pipe({\n name: 'secure',\n pure: false\n})\nexport class SecurePipe implements PipeTransform, OnDestroy {\n private _latestValue: any = null;\n private _latestReturnedValue: any = null;\n private _subscription: Subscription = null;\n private _obj: Observable<any> = null;\n private getfile;\n private previousUrl: string;\n private _result: BehaviorSubject<any> = new BehaviorSubject(null);\n private result: Observable<any> = this._result.asObservable();\n private _internalSubscription: Subscription = null;\n\n constructor(\n private _ref: ChangeDetectorRef,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnDestroy(): void {\n if (this._subscription) {\n this._dispose();\n }\n }\n\n transform(url: string, getfile): any {\n this.getfile = getfile;\n const obj = this.internalTransform(url);\n return this.asyncTrasnform(obj);\n }\n\n private internalTransform(url: string): Observable<any> {\n if (!url) {\n return this.result;\n }\n\n if (this.previousUrl !== url) {\n this.previousUrl = url;\n this._internalSubscription = this.getfile(url).subscribe((m) => {\n const sanitized = this.sanitizer.bypassSecurityTrustUrl(m);\n this._result.next(sanitized);\n });\n }\n\n return this.result;\n }\n\n private asyncTrasnform(obj: Observable<any>): any {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.asyncTrasnform(obj);\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return WrappedValue.wrap(this._latestValue);\n }\n\n private _subscribe(obj: Observable<any>) {\n const _this = this;\n this._obj = obj;\n\n this._subscription = obj.subscribe({\n next: function (value) {\n return _this._updateLatestValue(obj, value);\n },\n error: (e: any) => {\n throw e;\n }\n });\n }\n\n private _dispose() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n if (this._internalSubscription) {\n this._internalSubscription.unsubscribe();\n }\n\n this._internalSubscription = null;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n }\n\n private _updateLatestValue(async: any, value: Object) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurePipe } from './components/file-upload/secure.pipe';\nimport { DataSources } from './form-entry/data-sources/data-sources';\n@NgModule({\n declarations: [SecurePipe],\n imports: [CommonModule],\n exports: [SecurePipe],\n providers: [DataSources]\n})\nexport class SharedModule {}\n","import { Component, Input, ContentChild, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'ngx-tab',\n template: `\n\n <div *ngIf=\"active\"\n class=\"pane\"\n [ngClass]=\"customPaneClass\">\n <h4>{{tabTitle}}</h4>\n <div *ngIf=\"bypassDOM\">\n <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\n </div>\n <div *ngIf=\"!bypassDOM\">\n <ng-content></ng-content>\n </div>\n </div>\n `\n})\nexport class TabComponent {\n @Input() public tabTitle: string;\n @Input() public tabSubTitle: string;\n @Input() public active = false;\n @Input() public disabled = false;\n @Input() public bypassDOM = false;\n @Input() public customPaneClass = '';\n @ContentChild(TemplateRef) template: TemplateRef<any>;\n}\n","import {\n Component, ContentChildren, QueryList, AfterContentInit, Input, Output, EventEmitter, OnChanges, SimpleChanges\n} from '@angular/core';\n\nimport { TabComponent } from './tab';\n\n@Component({\n selector: 'ngx-tabset',\n styleUrls: ['ngx-tabset.css'],\n templateUrl: 'tabset.html'\n})\nexport class TabsetComponent implements AfterContentInit, OnChanges {\n\n @ContentChildren(TabComponent) public tabs: QueryList<TabComponent>;\n\n @Input() public disableStyle = false;\n @Input() public customNavClass: String = '';\n @Input() public customTabsClass: String = '';\n @Input() public selectedIndex: Number = 0;\n\n @Output() public onSelect = new EventEmitter();\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.selectedIndex && !changes.selectedIndex.firstChange) {\n this.selectTab(this.tabs.toArray()[changes.selectedIndex.currentValue]);\n }\n }\n\n // contentChildren are set\n public ngAfterContentInit() {\n // get all active tabs\n const activeTabs = this.tabs.filter((tab: TabComponent) => tab.active);\n\n // if there is no active tab set, activate the first\n setTimeout(() => {\n if (activeTabs.length === 0) {\n this.selectTab(this.tabs.first);\n }\n });\n }\n\n public onHover($event) {\n console.log($event);\n }\n public selectTab(tabToSelect: TabComponent): void {\n if (tabToSelect.disabled === true || tabToSelect.active === true) {\n return;\n }\n\n // deactivate all tabs\n this.tabs.toArray().forEach((tab: TabComponent) => tab.active = false);\n\n // activate the tab the user has clicked on.\n tabToSelect.active = true;\n this.onSelect.emit(this.tabs.toArray().indexOf(tabToSelect));\n }\n public getStatusClasses(active, disabled) {\n if (active) {\n return 'active';\n }\n if (!disabled && !active) {\n return 'enabled';\n }\n if (disabled) {\n return 'disabled';\n }\n }\n}\n","import { Directive, HostListener, ElementRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[hover-class]'\n})\nexport class HoverClassDirective {\n\n constructor(public elementRef: ElementRef) { }\n @Input('hover-class') hoverClass: any;\n\n @HostListener('mouseenter') onMouseEnter() {\n this.elementRef.nativeElement.classList.add(this.hoverClass);\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.elementRef.nativeElement.classList.remove(this.hoverClass);\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { TabsetComponent } from '../components/tab-set';\nimport { TabComponent } from '../components/tab';\nimport { HoverClassDirective } from '../directives/hover-class.directive';\n\n@NgModule({\n declarations: [\n TabComponent,\n TabsetComponent,\n HoverClassDirective\n ],\n exports: [\n TabComponent,\n TabsetComponent,\n ],\n imports: [CommonModule]\n})\nexport class NgxTabSetModule {\n\n /**\n * Use in AppModule: new instance of NgxTabset.\n */\n public static forRoot(): ModuleWithProviders<NgxTabSetModule> {\n return {\n ngModule: NgxTabSetModule,\n providers: []\n };\n }\n\n /**\n * Use in features modules with lazy loading: new instance of NgxTabset.\n */\n public static forChild(): ModuleWithProviders<NgxTabSetModule> {\n return {\n ngModule: NgxTabSetModule,\n providers: []\n };\n }\n\n}\n","/* tslint:disable:component-class-suffix */\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n Output,\n HostListener,\n EventEmitter,\n TemplateRef,\n ViewChild\n} from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n/**\n * `ibm-select` provides a styled `select` component.\n *\n * [See demo](../../?path=/story/select--basic)\n *\n * Example:\n *\n * ```\n * <ibm-select [(ngModel)]=\"model\">\n * <option value=\"default\" disabled selected hidden>Choose an option</option>\n * <option value=\"option1\">Option 1</option>\n * <option value=\"option2\">Option 2</option>\n * <option value=\"option3\">Option 3</option>\n * </ibm-select>\n * ```\n *\n * <example-url>../../iframe.html?id=select--basic</example-url>\n */\n@Component({\n selector: \"ibm-select\",\n template: `\n <div class=\"bx--form-item\">\n <ng-template [ngIf]=\"skeleton\">\n <div *ngIf=\"label\" class=\"bx--label bx--skeleton\"></div>\n <div class=\"bx--select bx--skeleton\"></div>\n </ng-template>\n <div\n *ngIf=\"!skeleton\"\n class=\"bx--select\"\n [ngClass]=\"{\n 'bx--select--inline': display === 'inline',\n 'bx--select--light': theme === 'light',\n 'bx--select--invalid': invalid,\n 'bx--select--warning': warn,\n 'bx--select--disabled': disabled\n }\">\n <label *ngIf=\"label\" [for]=\"id\" class=\"bx--label\">\n <ng-container *ngIf=\"!isTemplate(label)\">{{label}}</ng-container>\n <ng-template *ngIf=\"isTemplate(label)\" [ngTemplateOutlet]=\"label\"></ng-template>\n </label>\n <div *ngIf=\"helperText\" class=\"bx--form__helper-text\">\n <ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n </div>\n <div *ngIf=\"display === 'inline'; else noInline\" class=\"bx--select-input--inline__wrapper\">\n <ng-container *ngTemplateOutlet=\"noInline\"></ng-container>\n </div>\n </div>\n </div>\n\n <!-- select element: dynamically projected based on 'display' variant -->\n <ng-template #noInline>\n <div class=\"bx--select-input__wrapper\" [attr.data-invalid]=\"(invalid ? true : null)\">\n <select\n #select\n [attr.id]=\"id\"\n [attr.aria-label]=\"ariaLabel\"\n [disabled]=\"disabled\"\n (change)=\"onChange($event)\"\n [attr.aria-invalid]=\"invalid ? 'true' : null\"\n class=\"bx--select-input\"\n [ngClass]=\"{\n 'bx--select-input--xl': size === 'xl',\n 'bx--select-input--sm': size === 'sm'\n }\">\n <ng-content></ng-content>\n </select>\n <svg\n focusable=\"false\"\n preserveAspectRatio=\"xMidYMid meet\"\n style=\"will-change: transform;\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bx--select__arrow\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\">\n <path d=\"M8 11L3 6 3.7 5.3 8 9.6 12.3 5.3 13 6z\"></path>\n </svg>\n <svg *ngIf=\"invalid\"focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" style=\"will-change: transform;\" xmlns=\"http://www.w3.org/2000/svg\" class=\"bx--text-input__invalid-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M8,1C4.2,1,1,4.2,1,8s3.2,7,7,7s7-3.1,7-7S11.9,1,8,1z M7.5,4h1v5h-1C7.5,9,7.5,4,7.5,4z M8,12.2 c-0.4,0-0.8-0.4-0.8-0.8s0.3-0.8,0.8-0.8c0.4,0,0.8,0.4,0.8,0.8S8.4,12.2,8,12.2z\"></path><path d=\"M7.5,4h1v5h-1C7.5,9,7.5,4,7.5,4z M8,12.2c-0.4,0-0.8-0.4-0.8-0.8s0.3-0.8,0.8-0.8 c0.4,0,0.8,0.4,0.8,0.8S8.4,12.2,8,12.2z\" data-icon-path=\"inner-path\" opacity=\"0\"></path></svg>\n </div>\n <div *ngIf=\"invalid && invalidText && !warn\" role=\"alert\" class=\"bx--form-requirement\" aria-live=\"polite\">\n <ng-container *ngIf=\"!isTemplate(invalidText)\">{{invalidText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n </div>\n <div *ngIf=\"!invalid && warn\" class=\"bx--form-requirement\">\n <ng-container *ngIf=\"!isTemplate(warnText)\">{{warnText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(warnText)\" [ngTemplateOutlet]=\"warnText\"></ng-template>\n </div>\n </ng-template>\n `,\n styles: [`\n .bx--select--inline .bx--form__helper-text {\n order: 4;\n }\n\n .bx--select--inline:not(.bx--select--invalid) .bx--form__helper-text {\n margin-top: 0;\n }\n `],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: Select,\n multi: true\n }\n ]\n})\nexport class Select implements ControlValueAccessor, AfterViewInit {\n /**\n * Tracks the total number of selects instantiated. Used to generate unique IDs\n */\n static selectCount = 0;\n\n /**\n * `inline` or `default` select displays\n */\n @Input() display: \"inline\" | \"default\" = \"default\";\n /**\n * Label for the select. Appears above the input.\n */\n @Input() label: string | TemplateRef<any>;\n /**\n * Optional helper text that appears under the label.\n */\n @Input() helperText: string | TemplateRef<any>;\n /**\n * Sets the invalid text.\n */\n @Input() invalidText: string | TemplateRef<any>;\n /**\n * Set to `true` to show a warning (contents set by warningText)\n */\n @Input() warn = false;\n /**\n * Sets the warning text\n */\n @Input() warnText: string | TemplateRef<any>;\n /**\n * Sets the unique ID. Defaults to `select-${total count of selects instantiated}`\n */\n @Input() id = `select-${Select.selectCount++}`;\n /**\n * Number input field render size\n */\n @Input() size: \"sm\" | \"md\" | \"xl\" = \"md\";\n /**\n * Set to true to disable component.\n */\n @Input() disabled = false;\n /**\n * Set to true for a loading select.\n */\n @Input() skeleton = false;\n /**\n * Set to `true` for an invalid select component.\n */\n @Input() invalid = false;\n\n /**\n * `light` or `dark` select theme\n */\n @Input() theme: \"light\" | \"dark\" = \"dark\";\n @Input() ariaLabel: string;\n\n @Output() valueChange = new EventEmitter();\n\n // @ts-ignore\n @ViewChild(\"select\", { static: false }) select: ElementRef;\n\n @Input() set value(v) {\n this._value = v;\n if (this.select) {\n this.select.nativeElement.value = this._value;\n }\n }\n\n get value() {\n return this._value;\n }\n\n protected _value;\n\n ngAfterViewInit() {\n if (\n this.value !== undefined &&\n this.value !== null &&\n this.select &&\n this.select.nativeElement.value !== this.value\n ) {\n this.select.nativeElement.value = this.value;\n }\n }\n\n /**\n * Receives a value from the model.\n */\n writeValue(obj: any) {\n this.value = obj;\n }\n\n /**\n * Registers a listener that notifies the model when the control updates\n */\n registerOnChange(fn: any) {\n this.onChangeHandler = fn;\n }\n\n /**\n * Registers a listener that notifies the model when the control is blurred\n */\n registerOnTouched(fn: any) {\n this.onTouchedHandler = fn;\n }\n\n /**\n * Sets the disabled state through the model\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /**\n * Handles the change event from the `select`.\n * Sends events to the change handler and emits a `selected` event.\n */\n onChange(event) {\n this.value = event.target.value;\n this.onChangeHandler(event.target.value);\n this.valueChange.emit(event.target.value);\n }\n\n /**\n * Listens for the host blurring, and notifies the model\n */\n @HostListener(\"focusout\")\n focusOut() {\n this.onTouchedHandler();\n }\n\n public isTemplate(value) {\n return value instanceof TemplateRef;\n }\n\n /**\n * placeholder declarations. Replaced by the functions provided to `registerOnChange` and `registerOnTouched`\n */\n protected onChangeHandler = (_: any) => { };\n protected onTouchedHandler = () => { };\n}\n","/* tslint:disable:component-class-suffix directive-class-suffix*/\nimport { Directive, HostBinding } from \"@angular/core\";\n\n@Directive({\n // tslint:disable-next-line\n selector: \"option\"\n})\nexport class Option {\n @HostBinding(\"class\") inputClass = \"bx--select-option\";\n}\n","/* tslint:disable:component-class-suffix directive-class-suffix*/\nimport { Directive, HostBinding } from \"@angular/core\";\n\n@Directive({\n // tslint:disable-next-line\n\tselector: \"optgroup\"\n})\nexport class OptGroup {\n @HostBinding(\"class\") inputClass = \"bx--select-optgroup\";\n}\n","// modules\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { CommonModule } from \"@angular/common\";\n\n// imports\nimport { Select } from \"./select.component\";\nimport { Option } from \"./option.directive\";\nimport { OptGroup } from \"./optgroup.directive\";\n\n@NgModule({\n declarations: [\n Select,\n Option,\n OptGroup\n ],\n exports: [\n Select,\n Option,\n OptGroup\n ],\n imports: [\n CommonModule,\n FormsModule\n ]\n})\nexport class SelectModule { }\n","/* tslint:disable:component-class-suffix directive-class-suffix */\nimport { Directive, HostBinding, Input } from \"@angular/core\";\n\n/**\n * A directive for applying styling to a textarea element.\n *\n * Example:\n *\n * ```html\n * <textarea ibmTextArea></textarea>\n * ```\n *\n * See the [vanilla carbon docs](http://www.carbondesignsystem.com/components/text-input/code) for more detail.\n */\n@Directive({\n selector: \"[ibmTextArea]\"\n})\nexport class TextArea {\n /**\n * `light` or `dark` input theme\n */\n @Input() theme: \"light\" | \"dark\" = \"dark\";\n\n @HostBinding(\"class.bx--text-area\") baseClass = true;\n @HostBinding(\"class.bx--text-area--invalid\") @Input() invalid = false;\n @HostBinding(\"class.bx--skeleton\") @Input() skeleton = false;\n @HostBinding(\"class.bx--text-area--light\") get isLightTheme() {\n return this.theme === \"light\";\n }\n}\n","/* tslint:disable:component-class-suffix */\nimport {\n Component,\n Input,\n AfterViewInit,\n ElementRef,\n HostBinding,\n TemplateRef,\n ViewChild,\n ContentChild,\n AfterContentInit\n} from \"@angular/core\";\n\nimport { TextArea } from \"./text-area.directive\";\n\n/**\n * [See demo](../../?path=/story/input--label)\n *\n * ```html\n * <ibm-label labelState=\"success\">\n * <label label>Field with success</label>\n * <input type=\"text\" class=\"input-field\">\n * </ibm-label>\n *\n * <ibm-label labelState=\"warning\">\n * <label label>Field with warning</label>\n * <input type=\"text\" class=\"input-field\">\n * </ibm-label>\n *\n * <ibm-label labelState=\"error\">\n * <label label>Field with error</label>\n * <input type=\"text\" class=\"input-field\">\n * </ibm-label>\n * ```\n *\n * <example-url>../../iframe.html?id=input--label</example-url>\n */\n@Component({\n selector: \"ibm-label\",\n template: `\n <label\n [for]=\"labelInputID\"\n [attr.aria-label]=\"ariaLabel\"\n class=\"bx--label\"\n [ngClass]=\"{\n 'bx--skeleton': skeleton\n }\">\n <ng-content></ng-content>\n </label>\n <div\n [class]=\"wrapperClass\"\n [ngClass]=\"{\n 'bx--text-input__field-wrapper--warning': warn\n }\"\n [attr.data-invalid]=\"(invalid ? true : null)\"\n #wrapper>\n <svg *ngIf=\"invalid\"focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" style=\"will-change: transform;\" xmlns=\"http://www.w3.org/2000/svg\" class=\"bx--text-input__invalid-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M8,1C4.2,1,1,4.2,1,8s3.2,7,7,7s7-3.1,7-7S11.9,1,8,1z M7.5,4h1v5h-1C7.5,9,7.5,4,7.5,4z M8,12.2 c-0.4,0-0.8-0.4-0.8-0.8s0.3-0.8,0.8-0.8c0.4,0,0.8,0.4,0.8,0.8S8.4,12.2,8,12.2z\"></path><path d=\"M7.5,4h1v5h-1C7.5,9,7.5,4,7.5,4z M8,12.2c-0.4,0-0.8-0.4-0.8-0.8s0.3-0.8,0.8-0.8 c0.4,0,0.8,0.4,0.8,0.8S8.4,12.2,8,12.2z\" data-icon-path=\"inner-path\" opacity=\"0\"></path></svg>\n <ng-content select=\"input,textarea,div\"></ng-content>\n </div>\n <div *ngIf=\"!skeleton && helperText && !invalid && !warn\" class=\"bx--form__helper-text\">\n <ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n </div>\n <div *ngIf=\"!warn && invalid\" class=\"bx--form-requirement\">\n <ng-container *ngIf=\"!isTemplate(invalidText)\">{{invalidText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n </div>\n <div *ngIf=\"!invalid && warn\" class=\"bx--form-requirement\">\n <ng-container *ngIf=\"!isTemplate(warnText)\">{{warnText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(warnText)\" [ngTemplateOutlet]=\"warnText\"></ng-template>\n </div>\n `\n})\nexport class Label implements AfterContentInit, AfterViewInit {\n /**\n * Used to build the id of the input item associated with the `Label`.\n */\n static labelCounter = 0;\n /**\n * The class of the wrapper\n */\n wrapperClass = \"bx--text-input__field-wrapper\";\n /**\n * The id of the input item associated with the `Label`. This value is also used to associate the `Label` with\n * its input counterpart through the 'for' attribute.\n */\n @Input() labelInputID = \"ibm-label-\" + Label.labelCounter;\n\n /**\n * State of the `Label` will determine the styles applied.\n */\n @Input() labelState: \"success\" | \"warning\" | \"error\" | \"\" = \"\";\n /**\n * Set to `true` for a loading label.\n */\n @Input() skeleton = false;\n /**\n * Optional helper text that appears under the label.\n */\n @Input() helperText: string | TemplateRef<any>;\n /**\n * Sets the invalid text.\n */\n @Input() invalidText: string | TemplateRef<any>;\n /**\n * Set to `true` for an invalid label component.\n */\n @Input() invalid = false;\n /**\n * Set to `true` to show a warning (contents set by warningText)\n */\n @Input() warn = false;\n /**\n * Sets the warning text\n */\n @Input() warnText: string | TemplateRef<any>;\n /**\n * Set the arialabel for label\n */\n @Input() ariaLabel: string;\n\n // @ts-ignore\n @ViewChild(\"wrapper\", { static: false }) wrapper: ElementRef<HTMLDivElement>;\n\n // @ts-ignore\n @ContentChild(TextArea, { static: false }) textArea: TextArea;\n\n @HostBinding(\"class.bx--form-item\") labelClass = true;\n\n /**\n * Creates an instance of Label.\n */\n constructor() {\n Label.labelCounter++;\n }\n\n /**\n * Update wrapper class if a textarea is hosted.\n */\n ngAfterContentInit() {\n if (this.textArea) {\n this.wrapperClass = \"bx--text-area__wrapper\";\n }\n }\n\n /**\n * Sets the id on the input item associated with the `Label`.\n */\n ngAfterViewInit() {\n if (this.wrapper) {\n const inputElement = this.wrapper.nativeElement.querySelector(\"input,textarea,div\");\n if (inputElement) {\n inputElement.setAttribute(\"id\", this.labelInputID);\n }\n }\n }\n\n public isTemplate(value) {\n return value instanceof TemplateRef;\n }\n}\n","/* tslint:disable:component-class-suffix directive-class-suffix */\nimport { Directive, HostBinding, Input } from \"@angular/core\";\n\n/**\n * A directive for applying styling to an input element.\n *\n * Example:\n *\n * ```html\n * <input ibmText/>\n * ```\n *\n * See the [vanilla carbon docs](http://www.carbondesignsystem.com/components/text-input/code) for more detail.\n */\n@Directive({\n selector: \"[ibmText]\"\n})\nexport class TextInput {\n /**\n * `light` or `dark` input theme\n */\n @Input() theme: \"light\" | \"dark\" = \"dark\";\n\n /**\n * Input field render size\n */\n @Input() size: \"sm\" | \"md\" | \"xl\" = \"md\";\n\n @HostBinding(\"class.bx--text-input\") inputClass = true;\n @HostBinding(\"class.bx--text-input--xl\") get isSizeXl() {\n return this.size === \"xl\";\n }\n @HostBinding(\"class.bx--text-input--sm\") get isSizeSm() {\n return this.size === \"sm\";\n }\n @HostBinding(\"class.bx--text-input--invalid\") @Input() invalid = false;\n @HostBinding(\"class.bx--text-input__field-wrapper--warning\") @Input() warn = false;\n @HostBinding(\"class.bx--skeleton\") @Input() skeleton = false;\n @HostBinding(\"class.bx--text-input--light\") get isLightTheme() {\n return this.theme === \"light\";\n }\n}\n","// modules\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { CommonModule } from \"@angular/common\";\n\n// imports\nimport { Label } from \"./label.component\";\nimport { TextInput } from \"./input.directive\";\nimport { TextArea } from \"./text-area.directive\";\n\n@NgModule({\n declarations: [\n Label,\n TextInput,\n TextArea\n ],\n exports: [\n Label,\n TextInput,\n TextArea\n ],\n imports: [\n CommonModule,\n FormsModule\n ]\n})\nexport class InputModule { }\n","import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\n// import { NoopAnimationsModule} from '@angular/platform-browser/animations';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormBuilder } from '@angular/forms';\nimport { DebugModeService } from '../form-entry/services/debug-mode.service';\nimport { TimeAgoPipe } from './pipes/time-ago.pipe';\n\nimport { FormErrorsService } from './services/form-errors.service';\nimport { FormControlService } from './form-factory/form-control.service';\nimport { ValidationFactory } from './form-factory/validation.factory';\nimport { FormRendererComponent } from './form-renderer/form-renderer.component';\nimport { ErrorRendererComponent } from './error-renderer/error-renderer.component';\nimport { HistoricalValueDirective } from './directives/historical-value-directive';\nimport { CollapseDirective } from './directives/collapse.directive';\nimport { HistoricalFieldHelperService } from './helpers/historical-field-helper-service';\nimport { NumberInputModule } from '../components/number-input/number-input.module';\nimport { NgSelectModule } from '@ng-select/ng-select';\n// import { RemoteFileUploadModule } from '../components/file-upload/file-upload.module';\nimport { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';\nimport { NgxDateTimePickerModule } from '../components/ngx-datetime-picker/ngx-datetime-picker.module';\nimport { AfeNgSelectComponent } from '../components/afe-ng-select.component';\nimport { HidersDisablersFactory } from './form-factory/hiders-disablers.factory';\nimport { AlertsFactory } from './form-factory/show-messages.factory';\nimport { ExpressionRunner } from './expression-runner/expression-runner';\nimport { JsExpressionHelper } from './helpers/js-expression-helper';\nimport { FormSchemaCompiler } from './services/form-schema-compiler.service';\nimport { FormFactory } from './form-factory/form.factory';\nimport { QuestionFactory } from './form-factory/question.factory';\nimport { ControlRelationsFactory } from './form-factory/control-relations.factory';\nimport { EncounterAdapter } from './value-adapters/encounter.adapter';\nimport { PersonAttribuAdapter } from './value-adapters/person-attribute.adapter';\nimport { OrderValueAdapter } from './value-adapters/order.adapter';\nimport { ObsAdapterHelper } from './value-adapters/obs-adapter-helper';\nimport { ObsValueAdapter } from './value-adapters/obs.adapter';\nimport { NgxRemoteSelectModule } from '../components/ngx-remote-select/ngx-remote-select.module';\nimport { AppointmentsOverviewComponent } from '../components/appointments-overview/appointments-overview.component';\nimport { CheckboxModule } from '../components/check-box/checkbox.module';\nimport { SharedModule } from '../shared.module';\nimport { NgxTabSetModule } from '../components/ngx-tabset/modules/ngx-tabset.module';\nimport { SelectModule as SelectModuleCarbon } from '../components/select/select.module';\nimport { InputModule } from '../components/input/input.module';\n\n\n@NgModule({\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n SelectModuleCarbon,\n NgSelectModule,\n NumberInputModule,\n InputModule,\n DateTimePickerModule,\n NgxRemoteSelectModule,\n // NoopAnimationsModule,\n // RemoteFileUploadModule,\n CheckboxModule,\n NgxDateTimePickerModule,\n SharedModule,\n NgxTabSetModule.forRoot()\n ],\n declarations: [\n FormRendererComponent,\n AfeNgSelectComponent,\n AppointmentsOverviewComponent,\n HistoricalValueDirective,\n ErrorRendererComponent,\n TimeAgoPipe,\n CollapseDirective\n ],\n providers: [\n FormBuilder,\n FormControlService,\n FormErrorsService,\n ValidationFactory,\n HidersDisablersFactory,\n AlertsFactory,\n ExpressionRunner,\n JsExpressionHelper,\n HistoricalFieldHelperService,\n FormSchemaCompiler,\n FormFactory,\n QuestionFactory,\n ValidationFactory,\n ControlRelationsFactory,\n ObsAdapterHelper,\n ObsValueAdapter,\n EncounterAdapter,\n PersonAttribuAdapter,\n OrderValueAdapter,\n DebugModeService\n ],\n exports: [\n FormRendererComponent,\n AfeNgSelectComponent,\n ErrorRendererComponent,\n DateTimePickerModule,\n NgxDateTimePickerModule\n ]\n})\nexport class FormEntryModule { }\n","export class Pair {\n key: string;\n\n value: any;\n\n constructor(key: string, value: any) {\n this.key = key;\n this.value = value;\n }\n}\n","export enum RenderingType {\n Form,\n Page,\n Section,\n Select,\n DropDown\n}\n","/*\n * Public API Surface of ngx-formentry\n */\nexport { FormEntryModule } from '../form-entry/form-entry.module';\nexport { AfeFormControl } from '../abstract-controls-extension/afe-form-control';\nexport { AfeFormGroup } from '../abstract-controls-extension/afe-form-group';\nexport { AfeFormArray } from '../abstract-controls-extension/afe-form-array';\nexport { AfeControlType } from '../abstract-controls-extension/afe-control-type';\nexport { ControlRelationsFactory } from '../form-entry/form-factory/control-relations.factory';\nexport { FormControlService } from '../form-entry/form-factory/form-control.service';\nexport { FormFactory } from '../form-entry/form-factory/form.factory';\nexport { Form } from '../form-entry/form-factory/form';\nexport { QuestionFactory } from '../form-entry/form-factory/question.factory';\nexport { ValidationFactory } from '../form-entry/form-factory/validation.factory';\nexport { FormSchemaCompiler } from '../form-entry/services/form-schema-compiler.service';\nexport { HistoricalEncounterDataService } from '../form-entry/services/historical-encounter-data.service';\nexport { FormErrorsService } from '../form-entry/services/form-errors.service';\nexport { EncounterAdapter } from '../form-entry/value-adapters/encounter.adapter';\nexport { PersonAttribuAdapter } from '../form-entry/value-adapters/person-attribute.adapter';\nexport { OrderValueAdapter } from '../form-entry/value-adapters/order.adapter';\nexport { ObsValueAdapter } from '../form-entry/value-adapters/obs.adapter';\nexport { ObsAdapterHelper } from '../form-entry/value-adapters/obs-adapter-helper';\nexport { ValueAdapter } from '../form-entry/value-adapters/value.adapter';\nexport { DataSources } from '../form-entry/data-sources/data-sources';\nexport { CheckBoxQuestion } from '../form-entry/question-models/checkbox.model';\nexport { ConditionalValidationModel } from '../form-entry/question-models/conditional-validation.model';\nexport { DateQuestion } from '../form-entry/question-models/date-question';\nexport { DateValidationModel } from '../form-entry/question-models/date-validation.model';\nexport { FileUploadQuestion } from '../form-entry/question-models/file-upload-question';\nexport { QuestionGroup } from '../form-entry/question-models/group-question';\nexport { JsExpressionValidationModel } from '../form-entry/question-models/js-expression-validation.model';\nexport { MaxValidationModel } from '../form-entry/question-models/max-validation.model';\nexport { MinValidationModel } from '../form-entry/question-models/min-validation.model';\nexport { MultiSelectQuestion } from '../form-entry/question-models/multi-select-question';\nexport { Pair } from '../form-entry/question-models/pair.model';\nexport { QuestionBase } from '../form-entry/question-models/question-base';\nexport { RenderingType } from '../form-entry/question-models/rendering-type';\nexport { RepeatingQuestion } from '../form-entry/question-models/repeating-question';\nexport { Option } from '../form-entry/question-models/select-option';\nexport { SelectQuestion } from '../form-entry/question-models/select-question';\nexport { TestOrderQuestion } from '../form-entry/question-models/test-order-question';\nexport { TextAreaInputQuestion } from '../form-entry/question-models/text-area-input-question';\nexport { TextInputQuestion } from '../form-entry/question-models/text-input-question';\nexport { UiSelectQuestion } from '../form-entry/question-models/ui-select-question';\nexport { ValidationModel } from '../form-entry/question-models/validation.model';\nexport { BaseOptions } from '../form-entry/question-models/interfaces/base-options';\nexport { RepeatingQuestionOptions } from '../form-entry/question-models/interfaces/repeating-question-options';\nexport { GroupQuestionOptions } from '../form-entry/question-models/interfaces/group-question-options';\nexport { NestedQuestion } from '../form-entry/question-models/interfaces/nested-questions';\nexport { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';\nexport { NgxDateTimePickerModule } from '../components/ngx-datetime-picker/ngx-datetime-picker.module';\nexport { JsExpressionHelper } from '../form-entry/helpers/js-expression-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {AfeNgSelectComponent as ɵcq} from './components/afe-ng-select.component';\nexport {AppointmentsOverviewComponent as ɵcr} from './components/appointments-overview/appointments-overview.component';\nexport {CheckboxControlComponent as ɵs} from './components/check-box/checkbox.component';\nexport {CheckboxModule as ɵr} from './components/check-box/checkbox.module';\nexport {DatePickerComponent as ɵk} from './components/date-time-picker/date-picker/date-picker.component';\nexport {DateTimePickerComponent as ɵo} from './components/date-time-picker/date-time-picker.component';\nexport {ModalComponent as ɵm} from './components/date-time-picker/picker-modal/modal.component';\nexport {MomentPipe as ɵn} from './components/date-time-picker/pipes/moment.pipe';\nexport {TimePickerComponent as ɵl} from './components/date-time-picker/time-picker/time-picker.component';\nexport {SecurePipe as ɵcj} from './components/file-upload/secure.pipe';\nexport {TextInput as ɵj} from './components/input/input.directive';\nexport {InputModule as ɵg} from './components/input/input.module';\nexport {Label as ɵh} from './components/input/label.component';\nexport {TextArea as ɵi} from './components/input/text-area.directive';\nexport {NgxDatetimeComponent as ɵch} from './components/ngx-datetime-picker/ngx-datetime-picker.component';\nexport {DateTimeAdapter as ɵbi,OWL_DATE_TIME_LOCALE as ɵbg,OWL_DATE_TIME_LOCALE_FACTORY as ɵbh} from './components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class';\nexport {OWL_DATE_TIME_FORMATS as ɵbe,OwlDateTimeFormats as ɵbd} from './components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class';\nexport {NativeDateTimeAdapter as ɵcf} from './components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class';\nexport {OWL_NATIVE_DATE_TIME_FORMATS as ɵcg} from './components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class';\nexport {NativeDateTimeModule as ɵcd,OwlNativeDateTimeModule as ɵce} from './components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module';\nexport {OwlCalendarBodyComponent as ɵby} from './components/ngx-pick-datetime/lib/date-time/calendar-body.component';\nexport {OwlMonthViewComponent as ɵca} from './components/ngx-pick-datetime/lib/date-time/calendar-month-view.component';\nexport {OwlMultiYearViewComponent as ɵbx} from './components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component';\nexport {OwlYearViewComponent as ɵbz} from './components/ngx-pick-datetime/lib/date-time/calendar-year-view.component';\nexport {OwlCalendarComponent as ɵbc} from './components/ngx-pick-datetime/lib/date-time/calendar.component';\nexport {OWL_DATETIME_VALUE_ACCESSOR as ɵbt,OwlDateTimeInlineComponent as ɵbu} from './components/ngx-pick-datetime/lib/date-time/date-time-inline.component';\nexport {OwlDateTimeContainerComponent as ɵbv} from './components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component';\nexport {OWL_DATETIME_VALIDATORS as ɵbm,OWL_DATETIME_VALUE_ACCESSOR as ɵbl,OwlDateTimeInputDirective as ɵbn} from './components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive';\nexport {OwlDateTimeIntl as ɵbf} from './components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service';\nexport {OwlDateTimeTriggerDirective as ɵbk} from './components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive';\nexport {owlDateTimePickerAnimations as ɵbw} from './components/ngx-pick-datetime/lib/date-time/date-time-picker.animations';\nexport {OWL_DTPICKER_SCROLL_STRATEGY as ɵbo,OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER as ɵbq,OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵbp,OwlDateTimeComponent as ɵbr} from './components/ngx-pick-datetime/lib/date-time/date-time-picker.component';\nexport {OwlDateTime as ɵbs} from './components/ngx-pick-datetime/lib/date-time/date-time.class';\nexport {OwlDateTimeModule as ɵt} from './components/ngx-pick-datetime/lib/date-time/date-time.module';\nexport {NumberFixedLenPipe as ɵcc} from './components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe';\nexport {OwlTimerBoxComponent as ɵcb} from './components/ngx-pick-datetime/lib/date-time/timer-box.component';\nexport {OwlTimerComponent as ɵbj} from './components/ngx-pick-datetime/lib/date-time/timer.component';\nexport {OwlDialogConfig as ɵbb} from './components/ngx-pick-datetime/lib/dialog/dialog-config.class';\nexport {OwlDialogContainerComponent as ɵv} from './components/ngx-pick-datetime/lib/dialog/dialog-container.component';\nexport {OwlDialogModule as ɵu} from './components/ngx-pick-datetime/lib/dialog/dialog.module';\nexport {OWL_DIALOG_DEFAULT_OPTIONS as ɵz,OWL_DIALOG_SCROLL_STRATEGY as ɵw,OWL_DIALOG_SCROLL_STRATEGY_PROVIDER as ɵy,OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵx,OwlDialogService as ɵba} from './components/ngx-pick-datetime/lib/dialog/dialog.service';\nexport {RemoteSelectComponent as ɵq} from './components/ngx-remote-select/ngx-remote-select.component';\nexport {NgxRemoteSelectModule as ɵp} from './components/ngx-remote-select/ngx-remote-select.module';\nexport {TabComponent as ɵcl} from './components/ngx-tabset/components/tab';\nexport {TabsetComponent as ɵcm} from './components/ngx-tabset/components/tab-set';\nexport {HoverClassDirective as ɵcn} from './components/ngx-tabset/directives/hover-class.directive';\nexport {NgxTabSetModule as ɵck} from './components/ngx-tabset/modules/ngx-tabset.module';\nexport {NumberInputComponent as ɵf} from './components/number-input/number-input.component';\nexport {NumberInputModule as ɵe} from './components/number-input/number-input.module';\nexport {OptGroup as ɵd} from './components/select/optgroup.directive';\nexport {Option as ɵc} from './components/select/option.directive';\nexport {Select as ɵb} from './components/select/select.component';\nexport {SelectModule as ɵa} from './components/select/select.module';\nexport {CollapseDirective as ɵcw} from './form-entry/directives/collapse.directive';\nexport {HistoricalValueDirective as ɵcs} from './form-entry/directives/historical-value-directive';\nexport {ErrorRendererComponent as ɵcu} from './form-entry/error-renderer/error-renderer.component';\nexport {ExpressionRunner as ɵcy} from './form-entry/expression-runner/expression-runner';\nexport {HidersDisablersFactory as ɵcx} from './form-entry/form-factory/hiders-disablers.factory';\nexport {AlertsFactory as ɵda} from './form-entry/form-factory/show-messages.factory';\nexport {FormRendererComponent as ɵco} from './form-entry/form-renderer/form-renderer.component';\nexport {DEFAULT_STYLES as ɵcp} from './form-entry/form-renderer/form-renderer.component.css';\nexport {HistoricalFieldHelperService as ɵct} from './form-entry/helpers/historical-field-helper-service';\nexport {TimeAgoPipe as ɵcv} from './form-entry/pipes/time-ago.pipe';\nexport {CheckboxOptions as ɵdb} from './form-entry/question-models/interfaces/checkbox-options';\nexport {DateQuestionOptions as ɵdc} from './form-entry/question-models/interfaces/date-question-options';\nexport {FileUploadQuestionOptions as ɵdd} from './form-entry/question-models/interfaces/file-upload-question-options';\nexport {MultiSelectQuestionOptions as ɵdf} from './form-entry/question-models/interfaces/multi-select-options';\nexport {SelectOption as ɵdg} from './form-entry/question-models/interfaces/select-option';\nexport {SelectQuestionOptions as ɵde} from './form-entry/question-models/interfaces/select-question-options';\nexport {TestOrderQuestionOptions as ɵdh} from './form-entry/question-models/interfaces/test-order-question-options';\nexport {TextAreaQuestionOptions as ɵdj} from './form-entry/question-models/interfaces/text-area-question-options';\nexport {TextQuestionOptions as ɵdi} from './form-entry/question-models/interfaces/text-question-options';\nexport {UiSelectQuestionOptions as ɵdk} from './form-entry/question-models/interfaces/ui-select-question-options';\nexport {DebugModeService as ɵcz} from './form-entry/services/debug-mode.service';\nexport {SharedModule as ɵci} from './shared.module';"],"names":["_.first","_.forEach","_.last","_.findIndex","_.filter","_.isArray","_.each","_.isUndefined","moment","_.chunk","filter","observableOf","OWL_DATETIME_VALUE_ACCESSOR","_.isEmpty","_.includes","_.sortBy","_.isNil","_.extend","_.has","_.find","_.intersection","_.isEqual","Option","SelectModuleCarbon"],"mappings":"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"}
1
+ {"version":3,"file":"ampath-kenya-ngx-openmrs-formentry.js.map","sources":["ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/debug-mode.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-errors.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relation.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/hider-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-alerts/alert-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/disabler-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-node.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/js-expression-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/conditional-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/control-relations.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/expression-runner/expression-runner.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-control.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-group.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-array.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-control-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/question-base.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-answered.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/future-date-restriction.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/js-expression-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/validations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/js-expression.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/utils/messages.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/validation.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/hiders-disablers.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/show-messages.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-control.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.css.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/data-sources.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/error-renderer/error-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-field-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/directives/historical-value-directive.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/diacritics.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option-list.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/secure.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/shared.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-picker/date-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/time-picker/time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/picker-modal/modal.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/pipes/moment.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/afe-ng-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-schema-compiler.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-area-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/ui-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/multi-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/interfaces/nested-questions.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/group-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/repeating-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/checkbox.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/time-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/file-upload-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/test-order-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/max-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/min-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/decimal-point-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/dummy-data-source.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/historical-encounter-data.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-expression-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/question.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs-adapter-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/order.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/encounter.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-attribute.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/appointments-overview/appointments-overview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-view/encounter-viewer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-pdf-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-container/encounter-container.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/question-control.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/file-preview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/remote-answer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-entry.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/pair.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/rendering-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/public_api.ts","ng://@ampath-kenya/ngx-openmrs-formentry/ampath-kenya-ngx-openmrs-formentry.ts"],"sourcesContent":["/*\nThis service checks if the debug mode on ng2-amrs\nhas been enabled by checking cookies.\nIf the debug mode has been enabled then\nit returns true and all fields are displayed\nfor use by testers\n*/\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DebugModeService {\n public cookieKey = 'formDebug';\n\n constructor() {}\n public debugEnabled(): boolean {\n // check if the hidefield\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { AfeFormControl } from '../../public_api';\nimport { AfeFormArray, AfeFormGroup } from '../../abstract-controls-extension';\n\n@Injectable()\nexport class FormErrorsService {\n // Observable string sources\n public static control: AfeFormControl | AfeFormArray | AfeFormGroup = null;\n public static tab: number = null;\n public announceErrorFieldSource = new Subject<string>();\n public announceErrorField$: Observable<\n any\n > = this.announceErrorFieldSource.asObservable();\n public announceErrorField(error: string) {\n this.announceErrorFieldSource.next(error);\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\n// import { CanHide } from '../form-entry/control-hiders-disablers/can-hide';\n// import { CanDisable } from '../form-entry/control-hiders-disablers/can-disable';\n\nexport class ControlRelation {\n private _control: AbstractControl;\n private _relatedTo: AbstractControl;\n private _lastUpdateValue: any;\n\n constructor(control: AbstractControl, relatedTo: AbstractControl) {\n this._control = control;\n this._relatedTo = relatedTo;\n this._registerForChangesFromRelatedControl();\n }\n\n get control(): AbstractControl {\n return this._control;\n }\n\n get relatedTo(): AbstractControl {\n return this._relatedTo;\n }\n\n get lastUpdateValue(): any {\n return this._lastUpdateValue;\n }\n\n updateControlBasedOnRelation(newValue: any): boolean {\n if (newValue !== this._lastUpdateValue) {\n this._lastUpdateValue = newValue;\n\n if ((this._control as any).updateCalculatedValue) {\n (this._control as any).updateCalculatedValue();\n }\n\n this._control.updateValueAndValidity();\n if ((this._control as any).updateHiddenState) {\n (this._control as any).updateHiddenState();\n }\n\n if ((this._control as any).updateDisabledState) {\n (this._control as any).updateDisabledState();\n }\n\n if ((this._control as any).updateAlert) {\n (this._control as any).updateAlert();\n }\n return true;\n }\n return false;\n }\n\n private _registerForChangesFromRelatedControl() {\n this._relatedTo.valueChanges.subscribe((value) => {\n this.updateControlBasedOnRelation(value);\n });\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { ControlRelation } from './control-relation';\n\nexport class ControlRelations {\n private _relationFor: AbstractControl;\n private _relations: ControlRelation[];\n private _otherRelations: any = [];\n\n constructor(\n relationFor: AbstractControl,\n relatedTo?: AbstractControl | AbstractControl[]\n ) {\n this._relationFor = relationFor;\n this._relations = [];\n\n if (relatedTo) {\n this.addRelatedControls(relatedTo);\n }\n }\n\n get relationsFor(): AbstractControl {\n return this._relationFor;\n }\n\n get relations(): ControlRelation[] {\n return this._relations;\n }\n\n get otherRelations() {\n return this._otherRelations;\n }\n\n addRelatedControls(relatedTo: AbstractControl | AbstractControl[]) {\n if (relatedTo instanceof AbstractControl) {\n this.relations.push(new ControlRelation(this._relationFor, relatedTo));\n }\n\n if (relatedTo instanceof Array) {\n for (let i = 0; i < relatedTo.length; i++) {\n this.relations.push(\n new ControlRelation(this._relationFor, relatedTo[i])\n );\n }\n }\n }\n}\n","import { CanHide, Hider } from './can-hide';\nexport class HiderHelper {\n public hideControl(control: CanHide) {\n control.hidden = true;\n if (control.disable) {\n control.disable();\n }\n }\n\n public showControl(control: CanHide) {\n control.hidden = false;\n }\n\n public setHiderForControl(control: CanHide, hider: Hider) {\n control.hiders.push(hider);\n }\n\n public clearHidersForControl(control: CanHide) {\n control.hiders.splice(0);\n control.hidden = false;\n }\n\n public evaluateControlHiders(control: CanHide) {\n let hiddenValue = false;\n control.hiders.forEach((hider) => {\n hider.reEvaluateHidingExpression();\n if (hider.toHide === true) {\n hiddenValue = true;\n }\n });\n\n control.hidden = hiddenValue;\n if (control.hidden && control.disable) {\n control.disable();\n // control.setValue(null);\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanHide) {\n if (control.updateHiddenState) {\n control.valueChanges.subscribe((val) => {\n control.updateHiddenState();\n });\n }\n }\n}\n","import { CanGenerateAlert, Alert } from './can-generate-alert';\nexport class AlertHelper {\n public hideAlert(control: Alert) {\n control.shown = false;\n }\n\n public showAlert(control: Alert) {\n control.shown = true;\n }\n\n public setAlertsForControl(control: CanGenerateAlert, alert: Alert) {\n control.alerts.push(alert);\n }\n\n public clearAlertsForControl(control: CanGenerateAlert) {\n control.alerts.splice(0);\n control.alert = '';\n }\n\n public evaluateControlAlerts(control: CanGenerateAlert) {\n let messageValue = '';\n control.alerts.forEach((message) => {\n message.reEvaluateAlertExpression();\n if (message.shown === true) {\n messageValue = message.alertMessage;\n } else {\n messageValue = '';\n }\n });\n\n control.alert = messageValue;\n // if (control.message && control.disable) {\n // control.disable();\n // // control.setValue(null);\n // }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanGenerateAlert) {\n if (control.updateAlert) {\n control.valueChanges.subscribe((val) => {\n control.updateAlert();\n });\n }\n }\n}\n","import { CanDisable, Disabler } from './can-disable';\nexport class DisablerHelper {\n public setDisablerForControl(control: CanDisable, disabler: Disabler) {\n control.disablers.push(disabler);\n }\n\n public clearDisablersForControl(control: CanDisable) {\n control.disablers.splice(0);\n control.disable();\n }\n\n public evaluateControlDisablers(control: CanDisable) {\n let toDisable = false;\n control.disablers.forEach((hider) => {\n hider.reEvaluateDisablingExpression();\n if (hider.toDisable === true) {\n toDisable = true;\n }\n });\n\n // console.log('Control', control);\n\n if (toDisable) {\n control.disable();\n } else {\n control.enable();\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanDisable) {\n if (control.updateDisabledState) {\n control.valueChanges.subscribe((val) => {\n control.updateDisabledState();\n });\n }\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { FormFactory } from './form.factory';\nimport { Form } from './form';\n\n// import { AfeControlType, AfeFormArray, AfeFormGroup, AfeFormControl } from '../../abstract-controls-extension';\nimport { QuestionBase, RepeatingQuestion } from '../question-models/models';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nexport interface ChildNodeCreatedListener {\n addChildNodeCreatedListener(func: any);\n\n fireChildNodeCreatedListener(node: GroupNode);\n}\n\nexport type CreateArrayChildNodeFunction = (\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n) => GroupNode;\n\nexport interface RemoveArrayChildNodeFunction {\n (index: number, node: ArrayNode);\n}\n\nexport class NodeBase {\n public children?: any;\n private _control: AfeFormControl | AfeFormArray | AfeFormGroup;\n private _questionModel: QuestionBase;\n private _form: Form;\n private _path: string;\n\n public initialValue: any;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n this._control = control;\n this._questionModel = question;\n this._form = form;\n this._path = parentPath ? parentPath + '.' + question.key : question.key;\n }\n\n public get question(): QuestionBase {\n return this._questionModel;\n }\n\n public get control(): AfeFormControl | AfeFormArray | AfeFormGroup {\n return this._control;\n }\n\n public get form(): Form {\n return this._form;\n }\n\n public get path(): string {\n return this._path;\n }\n removeAt(index: number) {}\n\n createChildNode() {}\n removeChildNode() {}\n}\n\nexport class LeafNode extends NodeBase {\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n }\n}\n\nexport class GroupNode extends NodeBase {\n private _children: any;\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = {};\n }\n\n public get children(): any {\n return this._children;\n }\n\n public setChild(key: string, node: NodeBase) {\n this.children[key] = node;\n }\n}\n\nexport class ArrayNode extends NodeBase implements ChildNodeCreatedListener {\n private childNodeCreatedEvents: any[] = [];\n private _children: GroupNode[];\n public createChildFunc: CreateArrayChildNodeFunction;\n public removeChildFunc: RemoveArrayChildNodeFunction;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n private formFactory?: FormFactory,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = [];\n this.childNodeCreatedEvents = [];\n }\n\n public get children(): GroupNode[] {\n return this._children;\n }\n\n public createChildNode(): GroupNode {\n if (this.createChildFunc) {\n const g: GroupNode = this.createChildFunc(\n this.question as RepeatingQuestion,\n this,\n this.formFactory\n );\n this.fireChildNodeCreatedListener(g);\n return g;\n }\n return null;\n }\n\n public removeAt(index: number) {\n const removePrompt = confirm('Are you sure you want to remove?');\n if (removePrompt) {\n if (this.removeChildFunc) {\n this.removeChildFunc(index, this);\n }\n }\n }\n\n addChildNodeCreatedListener(func: any) {\n this.childNodeCreatedEvents.push(func);\n }\n\n fireChildNodeCreatedListener(node: GroupNode) {\n for (let i = 0; i < this.childNodeCreatedEvents.length; i++) {\n const func: any = this.childNodeCreatedEvents[i];\n func(node);\n }\n }\n}\n","export class ValidationModel {\n type: string;\n\n message: string;\n\n constructor(validations: any) {\n this.type = validations.type;\n this.message = validations.message || null;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class JsExpressionValidationModel extends ValidationModel {\n failsWhenExpression: string;\n\n constructor(validations: any) {\n super(validations);\n this.failsWhenExpression = validations.failsWhenExpression;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class ConditionalValidationModel extends ValidationModel {\n referenceQuestionId: string;\n referenceQuestionAnswers: any;\n\n constructor(validations: any) {\n super(validations);\n this.referenceQuestionId = validations.referenceQuestionId;\n this.referenceQuestionAnswers = validations.referenceQuestionAnswers;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// import { ControlRelation } from '../../change-tracking/control-relation';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\nimport { Form } from './form';\n\n@Injectable()\nexport class ControlRelationsFactory {\n constructor() {}\n\n buildRelations(rootNode: GroupNode) {\n const controlsStore: any = this.mapControlIds(rootNode, {});\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key)) {\n const nodeBase: NodeBase = controlsStore[key];\n\n this.setRelations(controlsStore, nodeBase);\n }\n }\n }\n\n buildArrayNodeRelations(node: GroupNode) {\n const form: Form = node.form;\n\n if (!form) {\n return;\n }\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for controls in the same array\n this.buildRelations(node);\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const child: NodeBase = rootControlsStore[key];\n\n if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n this.setRelations(arrayControlStore, child);\n }\n }\n }\n }\n\n // define relations for controls outside the group to controls in this group\n this.createRelationsToArrayControls(node);\n\n // fire relations\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const child: NodeBase = arrayControlStore[id];\n const control: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n control.updateHiddenState();\n control.updateAlert();\n }\n }\n }\n\n createRelationsToArrayControls(node: GroupNode) {\n const form: Form = node.form;\n\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n // loop through form controls\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const rChild: NodeBase = rootControlsStore[key];\n\n const parentNodePath = node.path.substring(\n 0,\n node.path.lastIndexOf('.')\n );\n\n if (rChild.path.indexOf(parentNodePath + '.') === -1) {\n // loop through controls in the array group\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const aChild: NodeBase = arrayControlStore[id];\n const aChildId = aChild.question.key;\n if (this.hasRelation(aChildId, rChild.question)) {\n const nodes: Array<NodeBase> = node.form.searchNodeByPath(\n rootNode,\n parentNodePath,\n []\n );\n if (nodes.length > 0) {\n const an = nodes[0] as ArrayNode;\n const rootControl = rChild.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (\n rootControl.controlRelations.otherRelations.indexOf(an) ===\n -1\n ) {\n rootControl.controlRelations.otherRelations.push(an);\n }\n\n (aChild.control as\n | AfeFormControl\n | AfeFormArray).addValueChangeListener((value) => {\n if ((rootControl as any).updateCalculatedValue) {\n (rootControl as any).updateCalculatedValue();\n }\n\n rootControl.updateValueAndValidity();\n if ((rootControl as any).updateHiddenState) {\n (rootControl as any).updateHiddenState();\n }\n\n if ((rootControl as any).updateAlert) {\n (rootControl as any).updateAlert();\n }\n\n if ((rootControl as any).updateDisabledState) {\n (rootControl as any).updateDisabledState();\n }\n });\n }\n }\n }\n }\n }\n }\n }\n }\n\n getRelationsForControl(\n id,\n node: GroupNode\n ): Array<AfeFormControl | AfeFormArray> {\n const relations: Array<AfeFormControl | AfeFormArray> = new Array<\n AfeFormControl | AfeFormArray\n >();\n\n const nodeBaseArray: Array<NodeBase> = node.form.searchNodeByQuestionId(id);\n\n if (nodeBaseArray.length > 0) {\n const nodeBase: NodeBase = nodeBaseArray[0];\n\n const controlList: any = this.mapControlIds(node, {});\n\n for (const key in controlList) {\n if (controlList.hasOwnProperty(key)) {\n if (\n this.hasRelation(controlList[key].question.key, nodeBase.question)\n ) {\n relations.push(controlList[key].control);\n }\n }\n }\n }\n return relations;\n }\n\n mapControlIds(node: GroupNode, controlsStore: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.mapControlIds(child, controlsStore);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n } else if (child instanceof ArrayNode) {\n const questionBase: QuestionBase = (child as ArrayNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n }\n }\n }\n\n return controlsStore;\n }\n\n setRelations(controlsStore: any, nodeBase: NodeBase) {\n const questionBase: QuestionBase = nodeBase.question;\n\n const id = questionBase.key;\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key) && key !== id) {\n const node: NodeBase = controlsStore[key];\n const question: QuestionBase = node.question;\n\n if (this.hasRelation(id, question, nodeBase)) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n\n // add conditional required and conditional answered relations\n if (typeof question.required === 'object') {\n const required: any = question.required;\n\n if (required.type === 'conditionalRequired') {\n if (required.referenceQuestionId === id) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n }\n }\n }\n }\n }\n\n hasRelation(id: string, questionBase: QuestionBase, nodeBase?: NodeBase) {\n let hasRelation = false;\n\n if (questionBase.validators && questionBase.validators.length > 0) {\n questionBase.validators.forEach((element) => {\n if (element instanceof JsExpressionValidationModel) {\n const model: JsExpressionValidationModel = element as JsExpressionValidationModel;\n\n const failsWhenExpression: string = model.failsWhenExpression;\n if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (\n element instanceof ConditionalValidationModel &&\n element.type === 'conditionalAnswered' &&\n element.referenceQuestionId === id\n ) {\n hasRelation = true;\n }\n });\n }\n\n // add hiders and disablers relations\n if (!hasRelation) {\n if (typeof questionBase.hide === 'string') {\n const hide: string = questionBase.hide as string;\n\n if (hide.length > 0 && hide.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (typeof questionBase.hide === 'object') {\n const hideObj: any = questionBase.hide;\n\n if (hideObj.field === id) {\n hasRelation = true;\n }\n }\n\n if (questionBase.alert && typeof questionBase.alert === 'object') {\n hasRelation = true;\n }\n\n if (typeof questionBase.disable === 'string') {\n const disable: string = questionBase.disable as string;\n\n if (disable.length > 0 && disable.indexOf(id) !== -1) {\n hasRelation = true;\n }\n }\n }\n\n // add calculate expressions relations\n if (\n !hasRelation &&\n questionBase.calculateExpression &&\n questionBase.calculateExpression.length > 0 &&\n questionBase.calculateExpression.indexOf(id) !== -1\n ) {\n hasRelation = true;\n }\n\n return hasRelation;\n }\n\n addRelationToControl(\n control: AfeFormControl | AfeFormArray,\n related: AfeFormControl | AfeFormArray\n ) {\n // let relations = control.controlRelations.relations;\n //\n // let hasRelation = false;\n //\n // relations.forEach(element => {\n //\n // let controlRelation: ControlRelation = element as ControlRelation;\n //\n // let relation: AfeFormControl | AfeFormArray = controlRelation.control as AfeFormControl | AfeFormArray;\n //\n // if ( control.uuid !== undefined && control.uuid === relation.uuid ) {\n // hasRelation = true;\n // }\n // });\n\n // if ( !hasRelation ) {\n control.controlRelations.addRelatedControls(related);\n // }\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension/control-extensions';\nimport { ArrayNode } from '../form-factory/form-node';\nimport { ControlRelationsFactory } from '../form-factory/control-relations.factory';\nimport { Form } from '../form-factory/form';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nexport class ExpressionRunner {\n getRunnable(\n expression: string,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n helper: any,\n dataDependencies: any,\n form?: Form\n ): Runnable {\n const runner = this;\n const runnable: Runnable = {\n run: () => {\n /* tslint:disable */\n let scope: any = {};\n if (control.uuid) {\n scope[control.uuid] = control.value;\n }\n window['moment'] = moment;\n // scope.moment = moment;\n scope['myValue'] = control.value;\n runner.getControlRelationValueString(control, scope);\n runner.getHelperMethods(helper, scope);\n runner.getDataDependencies(dataDependencies, scope);\n\n if (form) {\n // console.error('Form defined', form);\n runner.getDataDependencies(\n form.dataSourcesContainer.dataSources,\n scope\n );\n }\n\n let paramList = '';\n let argList = '';\n for (let o in scope) {\n paramList = paramList === '' ? paramList + o : paramList + ',' + o;\n argList =\n argList === ''\n ? argList + \"scope['\" + o + \"']\"\n : argList + \",scope['\" + o + \"']\";\n }\n\n // prevent more than one return statements\n if (expression.indexOf('return') === -1) {\n expression = '\"return ' + expression + '\"';\n }\n\n let funcDeclarationCode =\n 'var afeDynamicFunc = new Function(\"' +\n paramList +\n '\", ' +\n expression +\n ');';\n let funcCallCode =\n 'afeDynamicFunc.call(this ' +\n (argList === '' ? '' : ',' + argList) +\n ');';\n\n try {\n if (Object.keys(scope).indexOf('undefined') >= 0) {\n console.warn('Missing reference found', expression, scope);\n return false;\n }\n //console.info('results: ', expression, eval(funcDeclarationCode + funcCallCode));\n return eval(funcDeclarationCode + funcCallCode);\n } catch (e) {\n // if (window['error_count']) {\n // window['error_count'] = window['error_count'] + 1;\n // } else {\n // window['error_count'] = 1;\n // }\n // console.error(window['error_count'] + ' Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n // console.error('Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n\n // Uncomment the line above during debugging\n // console.error('Error running expression:' + expression, scope);\n\n return false;\n }\n /* tslint:enable */\n }\n };\n return runnable;\n }\n\n private getControlRelationValueString(\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n scope: any\n ) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n if (relation.relatedTo) {\n const related = relation.relatedTo as any;\n const relatedAsControl = relation.relatedTo as AbstractControl;\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n scope[related.uuid] = relation.relatedTo.value;\n } else {\n scope[related.uuid] =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.otherRelations &&\n control.controlRelations.otherRelations.length > 0\n ) {\n control.controlRelations.otherRelations.forEach((node) => {\n if (node instanceof ArrayNode) {\n const arrayNode: ArrayNode = node as ArrayNode;\n const uuid = control.uuid;\n\n const controlRelationsFactory: ControlRelationsFactory = new ControlRelationsFactory();\n let relationsForControl: Array<AfeFormControl | AfeFormArray> = [];\n // get all related controls\n arrayNode.children.forEach((child) => {\n relationsForControl = relationsForControl.concat(\n controlRelationsFactory.getRelationsForControl(uuid, child)\n );\n });\n\n this.setControlArrayValues(\n control as AfeFormControl | AfeFormArray,\n relationsForControl,\n scope\n );\n }\n });\n }\n }\n\n private setControlArrayValues(\n control: AfeFormControl | AfeFormArray,\n relationsForControl: Array<AfeFormControl | AfeFormArray>,\n scope: any\n ) {\n const keys: Array<string> = this._getFormControlKeys(relationsForControl);\n\n keys.forEach((key) => {\n const values: any = this._getValuesForKey(key, relationsForControl);\n scope[key] = values;\n });\n }\n\n private _getFormControlKeys(\n array: Array<AfeFormControl | AfeFormArray>\n ): Array<string> {\n const keys: Array<string> = [];\n array.forEach((control) => {\n if (keys.indexOf(control.uuid) === -1) {\n keys.push(control.uuid);\n }\n });\n\n return keys;\n }\n\n private _getValuesForKey(\n key: string,\n array: Array<AfeFormControl | AfeFormArray>\n ): any {\n const values: any = [];\n\n array.forEach((control) => {\n if (control.uuid === key) {\n values.push(control.value);\n }\n });\n\n return values;\n }\n\n private getHelperMethods(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n\n private getDataDependencies(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n}\n\nexport interface Runnable {\n run();\n}\n","import {\n FormControl,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControlOptions\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { CanCalculate } from '../form-entry/control-calculators/can-calculate';\nimport { ExpressionRunner } from '../form-entry/expression-runner/expression-runner';\n\nclass AfeFormControl\n extends FormControl\n implements\n CanHide,\n CanDisable,\n CanCalculate,\n CanGenerateAlert,\n ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n public uuid: string;\n public pathFromRoot: string;\n\n hidden = false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n calculator: Function;\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n constructor(\n formState?: any,\n validator?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(formState, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue('');\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n setCalculatorFn(newCalculator: Function) {\n this.calculator = newCalculator;\n }\n\n updateCalculatedValue() {\n if (this.calculator) {\n const _val = this.calculator.call(ExpressionRunner, {});\n this.setValue(_val);\n }\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\nexport { AfeFormControl };\n","import {\n FormGroup,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\n\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\n\nexport class AfeFormGroup\n extends FormGroup\n implements CanHide, CanDisable, CanGenerateAlert {\n private _controlRelations: ControlRelations;\n\n public uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue({});\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","import {\n FormArray,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\n\nexport class AfeFormArray\n extends FormArray\n implements CanHide, CanDisable, CanGenerateAlert, ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n private _uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n\n constructor(\n controls: AbstractControl[],\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.alerts = [];\n this.disablers = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get uuid(): string {\n return this._uuid;\n }\n set uuid(val: string) {\n this._uuid = val;\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue([]);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (this.alerts.length > 0) {\n this.updateAlert();\n }\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","export enum AfeControlType {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n None\n}\n","import { BaseOptions } from './interfaces/base-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\nimport { ValidationModel } from './validation.model';\n\nexport class QuestionBase implements BaseOptions {\n type: string;\n order?: number;\n questionOptions?: any;\n questions?: any;\n placeholder?: any;\n hidden?: any;\n showTime?: any;\n showWeek?: any;\n showDate?: boolean;\n historicalDisplay?: any;\n rows?: any;\n showWeeksAdder?: any;\n showHolidays?: boolean;\n key: string;\n alert?: any;\n\n label?: string;\n renderingType: string;\n\n defaultValue?: any;\n originalValue?: any;\n enableHistoricalValue?: boolean;\n showHistoricalValueDate?: boolean;\n historicalDataValue?: any;\n extras?: any;\n dataSource?: string;\n dataSourceOptions?: any;\n\n controlType?: AfeControlType;\n validators?: Array<ValidationModel>;\n required?: boolean;\n hide?: string | boolean;\n disable?: string | boolean;\n calculateExpression?: string;\n options?: any;\n maxTime?: string;\n minTime?: string;\n\n constructor(options: BaseOptions) {\n this.defaultValue = options.defaultValue;\n this.originalValue = options.originalValue;\n this.extras = options.extras;\n this.renderingType = options.type;\n this.key = options.key || '';\n this.label = options.label || '';\n this.validators = options.validators || [];\n this.required = options.required;\n this.hide = options.hide;\n this.disable = options.disable;\n this.alert = options.alert;\n this.historicalDataValue = options.historicalDataValue;\n this.calculateExpression = options.calculateExpression;\n }\n\n setHistoricalValue(v: boolean) {\n this.enableHistoricalValue = v;\n }\n showHistoricalEncounterDate(v?: boolean) {\n this.showHistoricalValueDate = v === undefined ? true : v;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalRequiredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let isRequired: boolean;\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n relationValue = relation.relatedTo.value;\n } else {\n relationValue =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) !== -1\n ) {\n isRequired = true;\n }\n\n if (isRequired && !value) {\n return { conditional_required: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalAnsweredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let successCondition: any = true;\n\n if (value) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (Array.isArray(relatedAsControl.value)) {\n relationValue = relatedAsControl.value;\n } else {\n relationValue =\n relatedAsControl.value &&\n typeof relatedAsControl.value === 'object' &&\n relatedAsControl.value.value\n ? relatedAsControl.value.value\n : relatedAsControl.value;\n }\n }\n\n if (!relationValue) {\n successCondition = false;\n } else if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) === -1\n ) {\n successCondition = false;\n }\n });\n }\n }\n\n if (!successCondition) {\n return { conditional_answered: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class RequiredValidator {\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value: any = control.value;\n const isEmpty: boolean =\n value == null || (typeof value === 'string' && value.length === 0);\n\n return isEmpty ? { required: true } : null;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class DateValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n\n if (value && value.length !== 0) {\n // YYYY-MM-DD or DD-MM-YYYY\n const test: boolean = !/Invalid|NaN/.test(new Date(value).toString());\n\n return test ? null : { date: true };\n } else {\n return null;\n }\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MinValidator {\n validate(min: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v >= min\n ? null\n : { min: { requiredValue: min, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MaxValidator {\n validate(max: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v <= max\n ? null\n : { max: { requiredValue: max, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MinDateValidator {\n validate(min: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() < min.getTime()\n ? { mindate: { requiredDate: min, actualDate: newDate } }\n : null;\n } else {\n return { mindate: { requiredDate: min } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MaxDateValidator {\n validate(max: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() > max.getTime()\n ? { maxdate: { requiredDate: max, actualDate: newDate } }\n : null;\n } else {\n return { maxdate: { requiredDate: max } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class FutureDateRestrictionValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n const now: Date = new Date();\n\n if (value && value.length !== 0) {\n if (!new DateValidator().validate(value)) {\n const d: Date = new Date(value);\n\n return d.getTime() > now.getTime()\n ? { futureDateRestriction: true }\n : null;\n }\n }\n\n return null;\n }\n}\n","import * as _ from 'lodash';\nexport class JsExpressionHelper {\n calcBMI(height, weight) {\n let r;\n if (height && weight) {\n r = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n return height && weight ? parseFloat(r) : null;\n }\n\n calcBSA(height: number, weight: number) {\n let result;\n if (height && weight) {\n result = Math.sqrt((height * weight) / 3600).toFixed(2);\n }\n return height && weight ? parseFloat(result) : null;\n }\n\n calcBMIForAgeZscore(bmiForAgeRef, height, weight) {\n let bmi;\n const maxAgeInDays = 1856;\n if (height && weight) {\n bmi = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n const refSectionObject = _.first(bmiForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (bmi < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= bmi) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return bmi && refSectionObject ? formattedSDValue : null;\n }\n calcWeightForHeightZscore(weightForHeightRef, height, weight) {\n let refSection;\n let formattedSDValue;\n if (height && weight) {\n height = parseFloat(height).toFixed(1);\n }\n const standardHeightMin = 45;\n const standardMaxHeight = 110;\n if (height < standardHeightMin || height > standardMaxHeight) {\n formattedSDValue = -4;\n } else {\n refSection = _.filter(weightForHeightRef, (refObject) => {\n return parseFloat(refObject['Length']).toFixed(1) === height;\n });\n }\n\n const refSectionObject = _.first(refSection);\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (weight < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= weight) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight ? formattedSDValue : null;\n }\n\n calcHeightForAgeZscore(heightForAgeRef, height, weight) {\n const refSectionObject = _.first(heightForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (height < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= height) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight && refSectionObject ? formattedSDValue : null;\n }\n\n isEmpty(val) {\n if (\n val === undefined ||\n val === null ||\n val === '' ||\n val === 'null' ||\n val === 'undefined'\n ) {\n return true;\n }\n\n if (Array.isArray(val) && val.length === 0) {\n return true;\n }\n return false;\n }\n\n arrayContains(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n\n let contains = true;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) === -1) {\n contains = false;\n }\n }\n\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n extractRepeatingGroupValues(key, array) {\n const values = array.map(function (item) {\n return item[key];\n });\n return values;\n }\n formatDate(value, format, offset) {\n format = format || 'yyyy-MM-dd';\n offset = offset || '+0300';\n\n if (!(value instanceof Date)) {\n value = new Date(value);\n if (value === null || value === undefined) {\n throw new Error(\n 'DateFormatException: value passed ' + 'is not a valid date'\n );\n }\n }\n\n return value; // TODO implement this\n // return $filter('date')(value, format, offset);\n }\n\n arrayContainsAny(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n let contains = false;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) !== -1) {\n contains = true;\n }\n }\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n\n get helperFunctions() {\n const helper = this;\n return {\n arrayContainsAny: helper.arrayContainsAny,\n calcBMI: helper.calcBMI,\n calcBMIForAgeZscore: helper.calcBMIForAgeZscore,\n calcWeightForHeightZscore: helper.calcWeightForHeightZscore,\n calcHeightForAgeZscore: helper.calcHeightForAgeZscore,\n isEmpty: helper.isEmpty,\n arrayContains: helper.arrayContains,\n extractRepeatingGroupValues: helper.extractRepeatingGroupValues\n };\n }\n}\n","export class Validations {\n public static JSExpressionValidatorsEnabled = false;\n\n constructor() {}\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ExpressionRunner } from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { Validations } from './validations';\n\nexport class JsExpressionValidator {\n constructor() {}\n\n validate(model: JsExpressionValidationModel, form?: any) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n if (!Validations.JSExpressionValidatorsEnabled) {\n return null;\n }\n\n const expression = model.failsWhenExpression;\n const helper = new JsExpressionHelper();\n const dataDependencies = {};\n\n const helperFunctions = helper.helperFunctions;\n const runnable = new ExpressionRunner().getRunnable(\n expression,\n control,\n helperFunctions,\n dataDependencies,\n form\n );\n\n if (runnable.run()) {\n return {\n js_expression: { expression: expression, message: model.message }\n };\n }\n\n return null;\n };\n }\n}\n","export class Messages {\n public static readonly REQUIRED_FIELD_MSG = 'This field is required!';\n\n public static readonly INVALID_DATE_MSG = 'Provided date is invalid!';\n\n public static readonly FUTURE_DATE_RESTRICTION_MSG =\n 'Future date is not allowed!';\n\n public static readonly MIN_LENGTH_MSG = 'Min Length should be {minLength}';\n\n public static readonly MAX_LENGTH_MSG = 'Max Length should be {maxLength}';\n\n public static readonly MAX_DATE_MSG = 'Max Date should be {maxDate}';\n\n public static readonly MIN_DATE_MSG = 'Min Date should be {minDate}';\n\n public static readonly MAX_MSG = 'Max value should be {max}';\n\n public static readonly MIN_MSG = 'Min value should be {min}';\n}\n","import { Injectable } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport * as _ from 'lodash';\n\nimport { ConditionalRequiredValidator } from '../validators/conditional-required.validator';\nimport { ConditionalAnsweredValidator } from '../validators/conditional-answered.validator';\nimport { RequiredValidator } from '../validators/required.validator';\nimport { DateValidator } from '../validators/date.validator';\nimport { MinValidator } from '../validators/min.validator';\nimport { MaxValidator } from '../validators/max.validator';\nimport { MinDateValidator } from '../validators/min-date.validator';\nimport { MaxDateValidator } from '../validators/max-date.validator';\nimport { FutureDateRestrictionValidator } from '../validators/future-date-restriction.validator';\nimport { JsExpressionValidator } from '../validators/js-expression.validator';\nimport { QuestionBase } from '../question-models/question-base';\nimport { Messages } from '../utils/messages';\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\n@Injectable()\nexport class ValidationFactory {\n constructor() {}\n\n getValidators(question: QuestionBase, form?: any) {\n const list: Array<any> = [];\n\n if (question.validators) {\n _.forEach(question.validators, (validator: ValidationModel) => {\n switch (validator.type) {\n case 'date':\n list.push(this.dateValidator);\n const allowFutureDates: boolean = (<DateValidationModel>validator)\n .allowFutureDates;\n\n if (!allowFutureDates) {\n list.push(this.futureDateRestrictionValidator);\n }\n break;\n case 'js_expression':\n list.push(\n this.jsExpressionValidator.validate(\n <JsExpressionValidationModel>validator,\n form\n )\n );\n break;\n case 'max':\n list.push(\n this.getMaxValueValidator((<MaxValidationModel>validator).max)\n );\n break;\n case 'min':\n list.push(\n this.getMinValueValidator((<MinValidationModel>validator).min)\n );\n break;\n case 'conditionalRequired':\n list.push(\n this.conditionalRequiredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n case 'conditionalAnswered':\n list.push(\n this.conditionalAnsweredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n }\n });\n }\n\n if (\n question.required &&\n typeof question.required === 'string' &&\n question.required === 'true'\n ) {\n list.push(this.requiredValidator);\n } else {\n // TODO - handle custom required validator\n }\n\n return list;\n }\n\n get conditionalRequiredValidator(): ConditionalRequiredValidator {\n return new ConditionalRequiredValidator();\n }\n\n get conditionalAnsweredValidator(): ConditionalAnsweredValidator {\n return new ConditionalAnsweredValidator();\n }\n\n get requiredValidator(): any {\n return new RequiredValidator().validate;\n }\n\n get dateValidator(): any {\n return new DateValidator().validate;\n }\n\n get futureDateRestrictionValidator(): any {\n return new FutureDateRestrictionValidator().validate;\n }\n\n get maxDateValidator(): any {\n return new MaxDateValidator().validate;\n }\n\n get minDateValidator(): any {\n return new MinDateValidator().validate;\n }\n\n get minLengthValidator(): any {\n return Validators.minLength;\n }\n\n get maxLengthValidator() {\n return Validators.maxLength;\n }\n\n public getMinValueValidator(min: number): any {\n return new MinValidator().validate(min);\n }\n\n public getMaxValueValidator(max: number): any {\n return new MaxValidator().validate(max);\n }\n\n get jsExpressionValidator() {\n return new JsExpressionValidator();\n }\n\n public errors(errors: any, question: QuestionBase): Array<string> {\n const messages: Array<string> = [];\n\n for (const property in errors) {\n if (errors.hasOwnProperty(property)) {\n switch (property) {\n case 'required':\n messages.push(Messages.REQUIRED_FIELD_MSG);\n break;\n case 'date':\n messages.push(Messages.INVALID_DATE_MSG);\n break;\n case 'futureDateRestriction':\n messages.push(Messages.FUTURE_DATE_RESTRICTION_MSG);\n break;\n case 'minlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{minLength}',\n errors.minlength.requiredLength\n )\n );\n break;\n case 'maxlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{maxLength}',\n errors.maxlength.requiredLength\n )\n );\n break;\n case 'maxdate':\n messages.push(\n Messages.MAX_DATE_MSG.replace(\n '{maxDate}',\n errors.maxdate.requiredDate\n )\n );\n break;\n case 'mindate':\n messages.push(\n Messages.MIN_DATE_MSG.replace(\n '{minDate}',\n errors.mindate.requiredDate\n )\n );\n break;\n case 'max':\n messages.push(\n Messages.MAX_MSG.replace('{max}', errors.max.requiredValue)\n );\n break;\n case 'min':\n messages.push(\n Messages.MIN_MSG.replace('{min}', errors.min.requiredValue)\n );\n break;\n case 'js_expression':\n messages.push(errors['js_expression'].message);\n break;\n case 'conditional_required':\n messages.push(errors['conditional_required'].message);\n break;\n case 'conditional_answered':\n messages.push(errors['conditional_answered'].message);\n break;\n }\n }\n }\n\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Disabler } from '../control-hiders-disablers/can-disable';\nimport { Hider } from '../control-hiders-disablers/can-hide';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n// Add ability to display all fields for debugging\nimport { DebugModeService } from './../services/debug-mode.service';\n\n@Injectable()\nexport class HidersDisablersFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper,\n private _debugModeService: DebugModeService\n ) {}\n\n getJsExpressionDisabler(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Disabler {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.disable as string,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const disabler: Disabler = {\n toDisable: false,\n disableWhenExpression: question.disable as string,\n reEvaluateDisablingExpression: () => {\n const result = runnable.run();\n disabler.toDisable = result;\n }\n };\n return disabler;\n }\n\n getJsExpressionHider(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Hider {\n const hide: any = question.hide;\n const value: string =\n typeof hide === 'object'\n ? this.convertHideObjectToString(hide)\n : (question.hide as string);\n\n // check if debugging has been enabled\n\n const debugEnabled = this._debugModeService.debugEnabled();\n\n const runnable: Runnable = this.expressionRunner.getRunnable(\n value,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n\n const hider: Hider = {\n toHide: false,\n hideWhenExpression: value,\n reEvaluateHidingExpression: () => {\n /* if debug is enabled then hiders to be false\n else run the normal eveluator i.e runnable.run()\n */\n if (debugEnabled === true) {\n hider.toHide = false;\n } else {\n hider.toHide = runnable.run();\n }\n }\n };\n return hider;\n }\n\n convertHideObjectToString(hide: any) {\n if (hide.value instanceof Array) {\n const arrayStr: string = \"'\" + hide.value.join(\"','\") + \"'\";\n const exp = '!arrayContains([' + arrayStr + '],' + hide.field + ')';\n return exp;\n }\n\n return '';\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Alert } from '../control-alerts/can-generate-alert';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n\n@Injectable()\nexport class AlertsFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper\n ) {}\n getJsExpressionshowAlert(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Alert {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.alert.alertWhenExpression,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const showAlert: Alert = {\n shown: false,\n alertWhenExpression: question.alert.alertWhenExpression,\n alertMessage: question.alert.message,\n reEvaluateAlertExpression: () => {\n const result = runnable.run();\n showAlert.shown = result;\n }\n };\n return showAlert;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n AfeControlType\n} from '../../abstract-controls-extension';\n\nimport { NestedQuestion } from '../question-models/interfaces/nested-questions';\n\nimport { QuestionBase } from '../question-models/question-base';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { HidersDisablersFactory } from './hiders-disablers.factory';\nimport { AlertsFactory } from './show-messages.factory';\nimport { Form } from './form';\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\n\n@Injectable()\nexport class FormControlService {\n controls = [];\n validationFactory: ValidationFactory;\n hidersDisablersFactory: HidersDisablersFactory;\n\n constructor(\n validationFactory: ValidationFactory,\n hidersDisablersFactory: HidersDisablersFactory,\n private alertsFactory: AlertsFactory\n ) {\n this.validationFactory = validationFactory;\n this.hidersDisablersFactory = hidersDisablersFactory;\n }\n\n generateControlModel(\n questionModel: QuestionBase | NestedQuestion,\n parentControl: AfeFormGroup,\n generateChildren: boolean,\n form?: Form\n ): AfeFormControl | AfeFormArray | AfeFormGroup {\n if (questionModel instanceof QuestionBase) {\n if (questionModel.controlType === AfeControlType.AfeFormArray) {\n return this.generateFormArray(questionModel, parentControl, form);\n }\n if (questionModel.controlType === AfeControlType.AfeFormGroup) {\n return this.generateFormGroupModel(\n questionModel,\n generateChildren,\n parentControl,\n form\n );\n }\n\n if (questionModel.controlType === AfeControlType.AfeFormControl) {\n return this.generateFormControl(questionModel, parentControl, form);\n }\n }\n return null;\n }\n\n generateFormGroupModel(\n question: QuestionBase,\n generateChildren: boolean,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormGroup {\n const formGroup = new AfeFormGroup({});\n this.wireHidersDisablers(question, formGroup, form);\n this.wireAlerts(question, formGroup, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formGroup);\n }\n\n const asGroup = question as QuestionGroup;\n\n if (generateChildren && asGroup && asGroup.questions.length > 0) {\n this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);\n }\n\n return formGroup;\n }\n\n _generateFormGroupChildrenModel(\n questions: QuestionBase[],\n parentControl: AfeFormGroup,\n form?: Form\n ) {\n if (questions.length > 0) {\n questions.forEach((element) => {\n const generated = this.generateControlModel(\n element,\n parentControl,\n true,\n form\n );\n if (generated !== null) {\n parentControl.addControl(element.key, generated);\n }\n });\n }\n }\n\n generateFormArray(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormArray {\n const validators = this.validationFactory.getValidators(question, form);\n let formArray: AfeFormArray;\n if (validators && validators.length > 0) {\n formArray = new AfeFormArray([], validators[0]);\n } else {\n formArray = new AfeFormArray([]);\n }\n formArray.uuid = question.key;\n this.wireHidersDisablers(question, formArray, form);\n this.wireAlerts(question, formArray, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formArray);\n }\n\n return formArray;\n }\n\n generateFormControl(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormControl {\n const value = question.defaultValue || '';\n const validators = this.validationFactory.getValidators(question, form);\n\n const control = new AfeFormControl(value, validators);\n control.uuid = question.key;\n this.wireHidersDisablers(question, control, form);\n this.wireAlerts(question, control, form);\n this.wireCalculator(\n question,\n control,\n form ? form.dataSourcesContainer.dataSources : null\n );\n\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, control);\n }\n\n return control;\n }\n\n private wireAlerts(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.alert && question.alert !== '') {\n const alert = this.alertsFactory.getJsExpressionshowAlert(\n question,\n control,\n form\n );\n control.setAlertFn(alert);\n }\n }\n private wireHidersDisablers(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.hide && question.hide !== '') {\n const hider = this.hidersDisablersFactory.getJsExpressionHider(\n question,\n control,\n form\n );\n control.setHidingFn(hider);\n }\n\n if (question.disable && question.disable !== '') {\n const disable = this.hidersDisablersFactory.getJsExpressionDisabler(\n question,\n control,\n form\n );\n control.setDisablingFn(disable);\n }\n }\n\n private wireCalculator(\n question: QuestionBase,\n control: AfeFormControl,\n dataSource?: any\n ) {\n if (question.calculateExpression && question.calculateExpression !== '') {\n const helper: JsExpressionHelper = new JsExpressionHelper();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n question.calculateExpression,\n control,\n helper.helperFunctions,\n dataSource\n );\n // this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class\n control.setCalculatorFn(runnable.run);\n }\n }\n}\n","export const DEFAULT_STYLES = `a {\n color: white;\n text-decoration: none;\n font-size: 12px;\n text-transform: uppercase;\n }\n\n ul {\n list-style-type: none;\n margin: 2px auto;\n position: relative;\n }\n\n li {\n display: block;\n padding: 10px 20px;\n white-space: nowrap;\n transition: all 0.3s ease-in;\n border-bottom: 4px solid transparent;\n }\n\n li:hover {\n border-bottom: 4px solid white;\n opacity: 0.7;\n cursor: pointer;\n }\n\n .owl-theme .owl-controls .owl-nav {\n position: absolute;\n width: 100%;\n top: 0;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"] {\n position: absolute;\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"]:hover {\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav .owl-next {\n right: 0;\n transform: translate(120%);\n }\n\n .owl-theme .owl-controls .owl-nav .owl-prev {\n left: 0;\n transform: translate(-120%);\n }\n\n .slick-initialized .swipe-tab-content {\n position: relative;\n min-height: 365px;\n }\n @media screen and (min-width: 767px) {\n .slick-initialized .swipe-tab-content {\n min-height: 500px;\n }\n .time-control{\n width:50%;\n }\n }\n .slick-initialized .swipe-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n background: none;\n border: 0;\n color: #757575;\n cursor: pointer;\n text-align: center;\n border-bottom: 2px solid rgba(51, 122, 183, 0);\n transition: all 0.5s;\n }\n .slick-initialized .swipe-tab:hover {\n color: #337AB7;\n }\n .slick-initialized .swipe-tab.active-tab {\n border-bottom-color: #337AB7;\n color: #337AB7;\n font-weight: bold;\n }\n\n .disabled {\n opacity: .5;\n pointer-events: none;\n }\n\n .select2-container {\n margin-top: -5px;\n }\n\n .btn {\n padding: 0px 12px !important;\n }\n\n .form-tooltip{\n color:rgb(51, 122, 183);\n display: inline-block;\n }\n .question-info{\n opacity:0;\n height:0px;\n display: none;\n transition-duration: opacity 1s ease-out;\n transtion-delay: 0.5s;\n padding-top: 2px;\n padding-bottom: 2px;\n color: #696969;\n border-style: ridge;\n border-width: 1px;\n border-color: #337ab7;\n margin-top: 2px;\n }\n .hide-info{\n display:none;\n height:0px;\n }\n .form-tooltip:hover ~ .question-info {\n display:block;\n opacity:1;\n height:auto;\n }\n .form-tooltip .tooltipcontent::after {\n content: \" \";\n position: absolute;\n bottom: 100%; /* At the top of the tooltip */\n right: 0%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: #337ab7;\n border-left-color: transparent;\n }\n\n ng-select.form-control {\n padding-top: 0;\n height: auto;\n padding-bottom: 0;\n }\n\n .forms-dropdown-menu {\n max-height: 450px;\n overflow-y: scroll;\n }\n .no-border {\n border: 0;\n box-shadow: none;\n}\n.time-control{\n width:100%;\n}\n\n `;\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DataSources {\n private _dataSources: any = {};\n constructor() {}\n\n get dataSources(): any {\n return this._dataSources;\n }\n\n registerDataSource(key: string, dataSource: any, unWrap = false) {\n if (unWrap) {\n // tslint:disable-next-line:forin\n for (const o in dataSource) {\n console.log('registering', o, dataSource[o]);\n this.registerDataSource(o, dataSource[o], false);\n }\n }\n if (this.dataSources[key]) {\n console.warn('Overriding registered data source', key);\n }\n this._dataSources[key] = dataSource;\n }\n\n clearDataSource(key: string) {\n delete this._dataSources[key];\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Inject,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport 'hammerjs';\nimport { DEFAULT_STYLES } from './form-renderer.component.css';\nimport { DOCUMENT } from '@angular/common';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, LeafNode, GroupNode } from '../form-factory/form-node';\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { FormErrorsService } from '../services/form-errors.service';\nimport { QuestionGroup } from '../question-models/group-question';\n// import { concat, of, Observable, Subject, BehaviorSubject } from 'rxjs';\n// import * as _ from 'lodash';\n\n// import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, map } from 'rxjs/operators';\n// import { QuestionBase } from '../question-models';\n\n@Component({\n selector: 'form-renderer',\n template: `<!--CONTAINERS-->\n<div *ngIf=\"node.question.renderingType === 'form'\">\n <div class=\"dropdown dropdown-tabs forms-dropdown\">\n <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">\n <i class=\"fa fa-angle-double-down\"></i>\n </a>\n <ul\n class=\"dropdown-menu dropdown-menu-right forms-dropdown-menu\"\n role=\"menu\"\n aria-labelledby=\"dropdownMenu\"\n >\n <li\n *ngFor=\"let question of node.question.questions; let i = index\"\n (click)=\"clickTab(i)\"\n >\n {{ question.label }}\n </li>\n </ul>\n </div>\n <mat-tab-group\n (selectedIndexChange)=\"tabSelected($event)\"\n [selectedIndex]=\"activeTab\"\n >\n <mat-tab\n [label]=\"question.label\"\n *ngFor=\"let question of node.question.questions; let i = index\"\n >\n <div (swipeLeft)=\"loadNextTab()\" (swipeRight)=\"loadPreviousTab()\">\n <form-renderer\n [node]=\"node.children[question.key]\"\n [parentComponent]=\"this\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div style=\"text-align: center\">\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadPreviousTab()\"\n [ngClass]=\"{ disabled: isCurrentTabFirst() }\"\n >\n &lt;&lt;\n </button>\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadNextTab()\"\n [ngClass]=\"{ disabled: isCurrentTabLast() }\"\n >\n &gt;&gt;\n </button>\n </div>\n</div>\n<div *ngIf=\"node.question.renderingType === 'page'\">\n <!--<h2>{{node.question.label}}</h2>-->\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n</div>\n<div *ngIf=\"node.question.renderingType === 'section' && checkSection(node)\">\n <div class=\"panel panel-primary\">\n <div class=\"panel-heading\">\n <button\n type=\"button\"\n class=\"btn btn-primary pull-right\"\n (click)=\"isCollapsed = !isCollapsed\"\n >\n {{ isCollapsed ? 'Show' : 'Hide' }}\n </button>\n {{ node.question.label }}\n </div>\n <div class=\"panel-body\" [collapse]=\"isCollapsed\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n </div>\n </div>\n</div>\n\n<!-- MESSAGES -->\n<div\n *ngIf=\"node.control && node.control.alert && node.control.alert !== ''\"\n class=\"alert alert-warning\"\n>\n <a class=\"close\" data-dismiss=\"alert\">&times;</a> {{ node.control.alert }}\n</div>\n\n<!--CONTROLS-->\n\n<div\n *ngIf=\"node.question.controlType === 0\"\n class=\"form-group\"\n [formGroup]=\"parentGroup\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--LEAF CONTROL-->\n <div class=\"question-area\">\n <a\n class=\"form-tooltip pull-right\"\n (click)=\"toggleInformation(node.question.extras.id)\"\n data-placement=\"right\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n <i class=\"glyphicon glyphicon-question-sign\" aria-hidden=\"true\"></i>\n </a>\n\n <label\n *ngIf=\"node.question.label\"\n [style.color]=\"hasErrors() ? 'red' : ''\"\n class=\"control-label\"\n [attr.for]=\"node.question.key\"\n >\n {{ node.question.required ? '*' : '' }} {{ node.question.label }}\n </label>\n <div [ngSwitch]=\"node.question.renderingType\">\n <select\n class=\"form-control\"\n *ngSwitchCase=\"'select'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n <option *ngFor=\"let o of node.question.options\" [ngValue]=\"o.value\">\n {{ o.label }}\n </option>\n </select>\n\n <app-file-upload\n *ngSwitchCase=\"'file'\"\n [dataSource]=\"dataSource\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n (fileChanged)=\"upload($event)\"\n >\n </app-file-upload>\n <textarea\n [placeholder]=\"node.question.placeholder\"\n [rows]=\"node.question.rows\"\n class=\"form-control\"\n *ngSwitchCase=\"'textarea'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n </textarea>\n <!--\n <ng-select *ngSwitchCase=\"'remote-select'\" [items]=\"items$ | async\" bindLabel=\"label\" bindValue=\"value\" placeholder=\"{{node.question.placeholder}}\"\n [hideSelected]=\"true\" [loading]=\"itemsLoading\" [typeahead]=\"itemsInput$\" [formControlName]=\"node.question.key\" [id]=\"node.question.key + 'id'\">\n </ng-select>\n -->\n <remote-select\n *ngSwitchCase=\"'remote-select'\"\n [placeholder]=\"node.question.placeholder\"\n tabindex=\"0\"\n [dataSource]=\"dataSource\"\n [componentID]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n ></remote-select>\n <!-- \n <date-time-picker *ngSwitchCase=\"'date'\" [showTime]=\"node.question.showTime\" tabindex=\"0\" [weeks]='node.question.extras.questionOptions.weeksList'\n (onDateChange)=\"onDateChanged(node)\" [showWeeks]=\"node.question.showWeeksAdder\" [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"></date-time-picker>\n -->\n\n <ngx-date-time-picker\n *ngSwitchCase=\"'date'\"\n [showTime]=\"node.question.showTime\"\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [weeks]=\"node.question.extras.questionOptions.weeksList\"\n (onDateChange)=\"onDateChanged(node)\"\n [showWeeks]=\"node.question.showWeeksAdder\"\n [showHolidays]=\"node.question.showHolidays\"\n [dataSource]=\"dataSource\"\n ></ngx-date-time-picker>\n <ngx-time-picker \n *ngSwitchCase=\"'time'\" \n id=\"node.question.key + 'id'\" \n [formControlName]=\"node.question.key\"\n ></ngx-time-picker>\n <ng-select\n *ngSwitchCase=\"'multi-select'\"\n [style.height]=\"'auto'\"\n [style.overflow-x]=\"'hidden'\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"true\"\n >\n </ng-select>\n <ng-select\n *ngSwitchCase=\"'single-select'\"\n [style.height]=\"auto\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"false\"\n >\n </ng-select>\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'number'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'number'\"\n [id]=\"node.question.key + 'id'\"\n [step]=\"'any'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'decimal'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'text'\"\n [id]=\"node.question.key + 'id'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchDefault\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"node.question.renderingType\"\n [id]=\"node.question.key + 'id'\"\n />\n\n <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let o of node.question.options\">\n <label class=\"form-control no-border\">\n <input\n type=\"radio\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [value]=\"o.value\"\n />\n {{ o.label }}\n </label>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'checkbox'\">\n <checkbox\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [options]=\"node.question.options\"\n [selected]=\"node.control.value\"\n ></checkbox>\n </div>\n\n <div\n *ngIf=\"\n node.question.enableHistoricalValue && node.question.historicalDisplay\n \"\n style=\"margin-top: 2px\"\n >\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-xs-9\">\n <span class=\"text-warning\">Previous Value: </span>\n <strong>{{ node.question.historicalDisplay?.text }}</strong>\n <span *ngIf=\"node.question.showHistoricalValueDate\">\n <span> | </span>\n <strong class=\"text-primary\"\n >{{ node.question.historicalDisplay?._date }}\n </strong>\n <span\n class=\"text-primary\"\n *ngIf=\"\n node.question.historicalDisplay &&\n node.question.historicalDisplay._date\n \"\n >\n ({{ node.question.historicalDisplay._date | timeAgo }})</span\n >\n </span>\n </div>\n <button\n type=\"button\"\n [node]=\"node\"\n [name]=\"'historyValue'\"\n class=\"btn btn-primary btn-small col-xs-3\"\n >\n Use Value\n </button>\n </div>\n </div>\n </div>\n <appointments-overview [node]=\"node\"></appointments-overview>\n <div *ngIf=\"hasErrors()\">\n <p *ngFor=\"let e of errors()\">\n <span class=\"text-danger\">{{ e }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"question-info col-md-12 col-lg-12 col-sm-12\"\n id=\"{{ node.question.extras.id }}\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n {{ node.question.extras.questionInfo }}\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 1\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--ARRAY CONTROL-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div class=\"well\" style=\"padding: 2px\" *ngSwitchCase=\"'repeating'\">\n <h4 style=\"margin: 2px; font-weight: bold\">{{ node.question.label }}</h4>\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 2px;\n \"\n />\n <div [ngSwitch]=\"node.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <div>{{ child.orderNumber }}</div>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\" style=\"margin-bottom: 20px\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n </div>\n <button\n type=\"button \"\n class=\"btn btn-primary\"\n (click)=\"node.createChildNode()\"\n >\n Add\n </button>\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 2\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--GROUP-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n <div\n *ngSwitchCase=\"'field-set'\"\n style=\"border: 1px solid #eeeeee; padding: 2px; margin: 2px\"\n >\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </div>\n</div>\n`,\n styles: ['../../style/app.css', DEFAULT_STYLES]\n})\nexport class FormRendererComponent implements OnInit {\n @Input() public parentComponent: FormRendererComponent;\n @Input() public node: NodeBase;\n @Input() public parentGroup: AfeFormGroup;\n public childComponents: FormRendererComponent[] = [];\n public showTime: boolean;\n public showWeeks: boolean;\n public showHolidays: boolean;\n public activeTab: number;\n public dataSource: DataSource;\n public isCollapsed = false;\n public auto: any;\n\n // items$: Observable<any[]>;\n // itemsLoading = false;\n // itemsInput$ = new Subject<string>();\n\n constructor(\n private validationFactory: ValidationFactory,\n private dataSources: DataSources,\n private formErrorsService: FormErrorsService,\n @Inject(DOCUMENT) private document: any\n ) {\n this.activeTab = 0;\n }\n\n public ngOnInit() {\n this.setUpRemoteSelect();\n this.setUpFileUpload();\n this.setUpDatepickerHolidays();\n\n if (this.node && this.node.form) {\n const tab = this.node.form.valueProcessingInfo.lastFormTab;\n if (tab && tab !== this.activeTab) {\n this.activeTab = tab;\n }\n }\n if (this.node && this.node.question.renderingType === 'form') {\n this.formErrorsService.announceErrorField$.subscribe((error) => {\n this.scrollToControl(error);\n });\n }\n\n if (this.node && this.node.question.renderingType === 'section') {\n this.isCollapsed = !(this.node.question as QuestionGroup).isExpanded;\n }\n\n if (this.parentComponent) {\n this.parentComponent.addChildComponent(this);\n }\n }\n\n public addChildComponent(child: FormRendererComponent) {\n this.childComponents.push(child);\n }\n\n public setUpRemoteSelect() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'remote-select'\n ) {\n // let selectQuestion = this.node.form.searchNodeByQuestionId(this.node.question.key)[0];\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n /*\n let defaltValues = of([]);\n if (this.dataSource.resolveSelectedValue(selectQuestion.control.value)) {\n defaltValues = this.dataSource.resolveSelectedValue(selectQuestion.control.value).pipe(\n catchError(() => of([])), // empty list on error\n );\n }\n this.items$ = concat(\n defaltValues,\n this.itemsInput$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n tap(() => this.itemsLoading = true),\n switchMap(term => this.dataSource.searchOptions(term).pipe(\n catchError(() => of([])), // empty list on error\n tap(() => {\n this.itemsLoading = false\n })\n ))\n )\n );\n */\n if (this.dataSource && this.node.question.dataSourceOptions) {\n this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;\n }\n }\n }\n\n public setUpFileUpload() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'file'\n ) {\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n // console.log('Key', this.node.question);\n // console.log('Data source', this.dataSource);\n }\n }\n\n public setUpDatepickerHolidays() {\n if (this.node && this.node.question && this.node.question.showHolidays) {\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n }\n }\n\n checkSection(node: NodeBase) {\n if (node.question.renderingType === 'section') {\n let groupChildrenHidden = false;\n const allSectionControlsHidden = Object.keys(node.children).every((k) => {\n const innerNode = node.children[k];\n if (innerNode instanceof GroupNode) {\n groupChildrenHidden = Object.keys(innerNode.children).every(\n (i) => innerNode.children[i].control.hidden\n );\n }\n return node.children[k].control.hidden || groupChildrenHidden;\n });\n return !allSectionControlsHidden;\n }\n return true;\n }\n\n public clickTab(tabNumber) {\n this.activeTab = tabNumber;\n }\n\n public loadPreviousTab() {\n if (!this.isCurrentTabFirst()) {\n this.clickTab(this.activeTab - 1);\n document.body.scrollTop = 0;\n }\n }\n\n public isCurrentTabFirst() {\n return this.activeTab === 0;\n }\n\n public isCurrentTabLast() {\n return this.activeTab === this.node.question['questions'].length - 1;\n }\n\n public loadNextTab() {\n if (!this.isCurrentTabLast()) {\n this.clickTab(this.activeTab + 1);\n document.body.scrollTop = 0;\n }\n }\n public tabSelected($event) {\n this.activeTab = $event;\n this.setPreviousTab();\n }\n public setPreviousTab() {\n if (this.node && this.node.form) {\n this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;\n }\n }\n public hasErrors() {\n return this.node.control.touched && !this.node.control.valid;\n }\n\n public errors() {\n return this.getErrors(this.node);\n }\n\n public scrollToControl(error: string) {\n const tab: number = +error.split(',')[0];\n const elSelector = error.split(',')[1] + 'id';\n\n // the tab components\n const tabComponent: FormRendererComponent = this.childComponents[tab];\n\n this.clickTab(tab);\n\n setTimeout(() => {\n // expand all sections\n tabComponent.childComponents.forEach((section) => {\n section.isCollapsed = false;\n\n setTimeout(() => {\n const element: any = this.document.getElementById(elSelector);\n if (element !== null && element.focus) {\n element.focus();\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n });\n }, 200);\n }\n\n public onDateChanged(node: LeafNode) {\n // console.log('Node', node);\n this.node = node;\n }\n\n public upload(event) {\n // console.log('Event', event);\n // console.log('Data', this.dataSource);\n }\n\n public toggleInformation(infoId) {\n const e = document.getElementById(infoId);\n\n if (e.style.display === 'block') {\n e.style.display = 'none';\n } else {\n e.style.display = 'block';\n }\n\n console.log('InfoId', infoId);\n }\n\n private getErrors(node: NodeBase) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n}\n","import * as _ from 'lodash';\n\nimport { FormFactory } from './form.factory';\nimport { QuestionFactory } from './question.factory';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { QuestionBase } from '../question-models/question-base';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\n\nexport class Form {\n public rootNode: GroupNode;\n public valueProcessingInfo: any = {};\n public existingOrders: any = {};\n private _dataSourcesContainer: DataSources;\n private _showErrors = false;\n constructor(\n public schema: any,\n public formFactory: FormFactory,\n public questionFactory: QuestionFactory\n ) {\n this._dataSourcesContainer = new DataSources();\n }\n\n get dataSourcesContainer(): DataSources {\n return this._dataSourcesContainer;\n }\n\n searchNodeByPath(node: GroupNode, path, found: Array<NodeBase>) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n this.searchNodeByPath(child, path, found);\n } else if (child instanceof LeafNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n } else if (child instanceof ArrayNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n const aChild: ArrayNode = child as ArrayNode;\n\n aChild.children.forEach((aChildNode) => {\n this.searchNodeByPath(aChildNode, path, found);\n });\n }\n }\n }\n\n return found;\n }\n\n searchNodeByQuestionId(\n questionId: string,\n questionType?: string\n ): Array<NodeBase> {\n const found = [];\n if (questionType) {\n this.searchNodeByQuestionType(this.rootNode, questionType, found);\n } else {\n this.findNodesByQuestionId(this.rootNode, questionId, found);\n }\n return found;\n }\n\n searchNodeByQuestionType(\n rootNode: any,\n questionType: string,\n found: Array<NodeBase>\n ) {\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.searchNodeByQuestionType(\n nodeAsGroup.children[o],\n questionType,\n found\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.searchNodeByQuestionType(node, questionType, found);\n });\n }\n\n if (rootNode instanceof LeafNode) {\n const questionBase: QuestionBase = rootNode.question;\n\n if (\n questionBase.extras &&\n questionBase.extras.type &&\n questionBase.extras.type === questionType\n ) {\n found.push(rootNode);\n }\n }\n }\n\n private findNodesByQuestionId(\n rootNode: NodeBase,\n questionId: string,\n results: Array<NodeBase>\n ) {\n if (rootNode.question.key === questionId) {\n results.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.findNodesByQuestionId(\n nodeAsGroup.children[o],\n questionId,\n results\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.findNodesByQuestionId(node, questionId, results);\n });\n }\n }\n\n get valid() {\n return this.rootNode.control.valid;\n }\n\n set showErrors(show: boolean) {\n this._showErrors = show;\n }\n\n get showErrors() {\n return this._showErrors;\n }\n\n markInvalidControls(node: GroupNode, invalidControlNodes?: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.markInvalidControls(child, invalidControlNodes);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n const c: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (!c.valid && !c.disabled) {\n if (invalidControlNodes) {\n invalidControlNodes.push(child);\n }\n\n c.markAsTouched();\n }\n }\n } else if (child instanceof ArrayNode) {\n const arrayNode: ArrayNode = child as ArrayNode;\n\n if (\n arrayNode &&\n arrayNode.children &&\n arrayNode.children.length > 0\n ) {\n _.forEach(arrayNode.children, (groupNode: any) => {\n this.markInvalidControls(groupNode, invalidControlNodes);\n });\n }\n }\n }\n }\n\n return invalidControlNodes;\n }\n\n updateHiddenDisabledStateForAllControls() {\n this._updateHiddenDisabledStateForAllControls(this.rootNode);\n }\n\n updateAlertsForAllControls() {\n this._updateAlertsForAllControls(this.rootNode);\n }\n\n private _updateAlertsForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateAlert) {\n (rootNode.control as any).updateAlert();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateAlertsForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateAlertsForAllControls(node);\n });\n }\n }\n private _updateHiddenDisabledStateForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateDisabledState) {\n (rootNode.control as any).updateDisabledState();\n }\n\n if ((rootNode.control as any).updateHiddenState) {\n (rootNode.control as any).updateHiddenState();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateHiddenDisabledStateForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateHiddenDisabledStateForAllControls(node);\n });\n }\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as _ from 'lodash';\n\nimport { Form } from '../form-factory/form';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { NodeBase, LeafNode } from '../form-factory/form-node';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { FormErrorsService } from '../services/form-errors.service';\n\n@Component({\n selector: 'error-renderer',\n template: `<div *ngIf=\"showErrors()\" class=\"container\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-warning\"\n *ngFor=\"let errorNode of errorNodes\"\n (click)=\"announceErrorField(errorNode)\"\n >\n <div class=\"error\" *ngIf=\"errorNode.control.valid == false\">\n <h4>{{ errorNode.question.label }}</h4>\n <span class=\"text-danger\"> {{ getControlError(errorNode) }}</span>\n </div>\n </li>\n </ul>\n</div>\n`,\n styles: [`ul{list-style:none}.list-group-item{padding:2px 15px;cursor:pointer}ul li:hover{background-color:#fff}h4{margin-top:7px;margin-bottom:7px}`]\n})\nexport class ErrorRendererComponent implements OnInit {\n @Input() form: Form;\n\n constructor(\n private validationFactory: ValidationFactory,\n private formErrorsService: FormErrorsService\n ) {}\n\n ngOnInit() {}\n\n showErrors() {\n return !this.form.valid && this.form.showErrors;\n }\n\n get errorNodes() {\n const invalidControls = this.form.markInvalidControls(\n this.form.rootNode,\n []\n );\n return invalidControls;\n }\n\n getControlError(node: LeafNode) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n\n announceErrorField(errorNode: LeafNode) {\n const nodes: Array<NodeBase> = this.form.searchNodeByQuestionId(\n errorNode.path.substring(0, errorNode.path.indexOf('.'))\n );\n\n _.forEach(nodes, (node: NodeBase) => {\n if (node.question.renderingType === 'page') {\n const pageIndex: number = this.getPageIndex(node);\n this.formErrorsService.announceErrorField(\n pageIndex + ',' + errorNode.question.key\n );\n }\n });\n }\n\n getPageIndex(node: NodeBase) {\n const questionGroup: QuestionGroup = this.form.rootNode\n .question as QuestionGroup;\n return questionGroup.questions.indexOf(node.question);\n }\n}\n","import * as _ from 'lodash';\nimport { QuestionBase } from '../question-models/question-base';\n\nexport class HistoricalFieldHelperService {\n public getDisplayTextFromOptions(\n question: QuestionBase,\n valueProperty: string,\n displayProperty: string\n ): string {\n let displayText = '';\n const historicalValue = question.historicalDataValue;\n if (_.isArray(historicalValue.value)) {\n let valueConverted = 0;\n _.each(historicalValue.value, (val) => {\n _.each(question.options, (option) => {\n if (option[valueProperty] === val) {\n if (valueConverted === 0) {\n displayText = displayText + option[displayProperty];\n } else {\n displayText = displayText + ', ' + option[displayProperty];\n }\n valueConverted++;\n }\n });\n });\n } else {\n _.each(question.options, (option) => {\n if (option[valueProperty] === historicalValue.value) {\n displayText = option[displayProperty];\n }\n });\n }\n return displayText;\n }\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\n\nimport { HistoricalFieldHelperService } from '../helpers/historical-field-helper-service';\nimport * as _ from 'lodash';\nimport { NodeBase } from '../form-factory/form-node';\n\n@Directive({\n selector: `[node]`\n})\nexport class HistoricalValueDirective {\n @Input() _node: NodeBase;\n @Output() _nodeChange = new EventEmitter<Object>();\n\n historicalDisplay: string;\n\n constructor(private historicalFieldHelper: HistoricalFieldHelperService) {}\n\n @HostListener('click', ['$event'])\n setValue(e) {\n if (e.target.name === 'historyValue') {\n if (\n this._node &&\n (!this.compareString(this._node.question.renderingType, 'page') ||\n !this.compareString(this._node.question.renderingType, 'section'))\n ) {\n this._node.control.setValue(\n this._node.question.historicalDataValue.value\n );\n\n this._node.question[\n 'historicalValue'\n ] = this._node.question.historicalDataValue;\n e.stopPropagation();\n this._nodeChange.emit(this._node);\n }\n }\n }\n private compareString(a, b) {\n if (a === b) {\n return true;\n } else {\n return false;\n }\n }\n @Input()\n set node(node: NodeBase) {\n if (node) {\n this._node = node;\n if (\n this._node.question.enableHistoricalValue &&\n !_.isUndefined(this._node.question.historicalDataValue)\n ) {\n const display: any = { text: '', _date: '' };\n if (\n this._node.question.renderingType === 'select' ||\n this._node.question.renderingType === 'multi-select' ||\n this._node.question.renderingType === 'single-select'\n ) {\n display.text = this.historicalFieldHelper.getDisplayTextFromOptions(\n this._node.question,\n 'value',\n 'label'\n );\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n } else if (!_.isUndefined(this._node.question.historicalDataValue)) {\n display.text = this._node.question.historicalDataValue.value;\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n }\n }\n }\n }\n}\n","export const STYLE = `\nng-select {\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle;\n width: 100%;\n}\nng-select * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nng-select > div {\n border: 1px solid #ddd;\n box-sizing: border-box;\n cursor: pointer;\n user-select: none;\n width: 100%;\n}\nng-select > div.disabled {\n background-color: #eee;\n color: #aaa;\n cursor: default;\n pointer-events: none;\n}\nng-select > div > div.single {\n display: flex;\n height: 30px;\n width: 100%;\n}\nng-select > div > div.single > div.value,\nng-select > div > div.single > div.placeholder {\n flex: 1;\n line-height: 30px;\n overflow: hidden;\n padding: 0 10px;\n white-space: nowrap;\n}\nng-select > div > div.single > div.placeholder {\n color: #a9a9a9;\n}\nng-select > div > div.single > div.clear,\nng-select > div > div.single > div.toggle {\n color: #aaa;\n line-height: 30px;\n text-align: center;\n width: 30px;\n}\nng-select > div > div.single > div.clear:hover,\nng-select > div > div.single > div.toggle:hover {\n background-color: #ececec;\n}\nng-select > div > div.single > div.clear {\n font-size: 18px;\n}\nng-select > div > div.single > div.toggle {\n font-size: 14px;\n}\nng-select > div > div.multiple {\n display: flex;\n flex-flow: row wrap;\n height: 100%;\n min-height: 30px;\n padding: 0 10px;\n width: 100%;\n}\nng-select > div > div.multiple > div.option {\n background-color: #eee;\n border: 1px solid #aaa;\n border-radius: 4px;\n color: #333;\n cursor: default;\n display: inline-block;\n flex-shrink: 0;\n font-size: 14px;\n line-height: 22px;\n margin: 3px 5px 3px 0;\n padding: 0 4px;\n}\nng-select > div > div.multiple > div.option span.deselect-option {\n color: #aaa;\n cursor: pointer;\n font-size: 14px;\n height: 20px;\n line-height: 20px;\n}\nng-select > div > div.multiple > div.option span.deselect-option:hover {\n color: #555;\n}\nng-select > div > div.multiple input {\n background-color: transparent;\n border: none;\n height: 30px;\n line-height: 30px;\n padding: 0;\n}\nng-select > div > div.multiple input:focus {\n outline: none;\n}\n`;\n","export const STYLE = `select-dropdown {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown > div {\n background-color: #fff;\n border: 1px solid #ccc;\n border-top: none;\n box-sizing: border-box;\n position: absolute;\n z-index: 1;\n}\nselect-dropdown > div .filter {\n padding: 3px;\n width: 100%;\n}\nselect-dropdown > div .filter input {\n border: 1px solid #eee;\n box-sizing: border-box;\n padding: 4px;\n width: 100%;\n}\nselect-dropdown > div .options {\n max-height: 200px;\n overflow-y: auto;\n}\nselect-dropdown > div .options ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\nselect-dropdown > div .options ul li {\n padding: 4px 8px;\n cursor: pointer;\n user-select: none;\n}\nselect-dropdown .selected {\n background-color: #e0e0e0;\n}\nselect-dropdown .selected.highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .disabled {\n background-color: #fff;\n color: #9e9e9e;\n cursor: default;\n pointer-events: none;\n}`;\n","export class Option {\n value: string;\n label: string;\n\n disabled: boolean;\n highlighted: boolean;\n selected: boolean;\n shown: boolean;\n\n constructor(value: string, label: string) {\n this.value = value;\n this.label = label;\n\n this.disabled = false;\n this.highlighted = false;\n this.selected = false;\n this.shown = true;\n }\n\n show() {\n this.shown = true;\n }\n\n hide() {\n this.shown = false;\n }\n\n disable() {\n this.disabled = true;\n }\n\n enable() {\n this.disabled = false;\n }\n\n undecoratedCopy() {\n return {\n label: this.label,\n value: this.value\n };\n }\n}\n","export class Diacritics {\n static DIACRITICS = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n\n static strip(text: string): string {\n const match = (a: string): string => {\n return this.DIACRITICS[a] || a;\n };\n if (text) {\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n } else {\n return '';\n }\n }\n}\n","import { Option } from './option';\nimport { Diacritics } from './diacritics';\n\nexport class OptionList {\n private _options: Array<Option>;\n\n /* Consider using these for performance improvement. */\n // private _selection: Array<Option>;\n // private _filtered: Array<Option>;\n // private _value: Array<string>;\n\n private _highlightedOption: Option = null;\n // v0 and v1 are assumed not to be undefined or null.\n static equalValues(v0: Array<string>, v1: Array<string>): boolean {\n if (v0.length !== v1.length) {\n return false;\n }\n\n const a: Array<string> = v0.slice().sort();\n const b: Array<string> = v1.slice().sort();\n\n return a.every((v, i) => {\n return v === b[i];\n });\n }\n\n constructor(options: Array<any>) {\n if (typeof options === 'undefined' || options === null) {\n options = [];\n }\n\n this._options = options.map((option) => {\n const o: Option = new Option(option.value, option.label);\n if (option.disabled) {\n o.disable();\n }\n return o;\n });\n\n this.highlight();\n }\n\n /** Options. **/\n\n get options(): Array<Option> {\n return this._options;\n }\n\n getOptionsByValue(value: string): Array<Option> {\n return this.options.filter((option) => {\n return option.value === value;\n });\n }\n\n /** Value. **/\n\n get value(): Array<string> {\n return this.selection.map((selectedOption) => {\n return selectedOption.value;\n });\n }\n\n set value(v: Array<string>) {\n v = typeof v === 'undefined' || v === null ? [] : v;\n\n this.options.forEach((option) => {\n option.selected = v.indexOf(option.value) > -1;\n });\n }\n\n /** Selection. **/\n\n get selection(): Array<Option> {\n return this.options.filter((option) => {\n return option.selected;\n });\n }\n\n select(option: Option, multiple: boolean) {\n if (!multiple) {\n this.clearSelection();\n }\n option.selected = true;\n }\n\n deselect(option: Option) {\n option.selected = false;\n }\n\n clearSelection() {\n this.options.forEach((option) => {\n option.selected = false;\n });\n }\n\n /** Filter. **/\n\n get filtered(): Array<Option> {\n return this.options.filter((option) => {\n return option.shown;\n });\n }\n\n filter(term: string) {\n if (term.trim() === '') {\n this.resetFilter();\n } else {\n this.options.forEach((option) => {\n const l: string = Diacritics.strip(option.label).toUpperCase();\n const t: string = Diacritics.strip(term).toUpperCase();\n option.shown = l.indexOf(t) > -1;\n });\n }\n\n this.highlight();\n }\n\n resetFilter() {\n this.options.forEach((option) => {\n option.shown = true;\n });\n }\n\n /** Highlight. **/\n\n get highlightedOption(): Option {\n return this._highlightedOption;\n }\n\n highlight() {\n const option: Option = this.hasShownSelected()\n ? this.getFirstShownSelected()\n : this.getFirstShown();\n this.highlightOption(option);\n }\n\n highlightOption(option: Option) {\n this.clearHighlightedOption();\n\n if (option !== null) {\n option.highlighted = true;\n this._highlightedOption = option;\n }\n }\n\n highlightNextOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > -1 && index < shownOptions.length - 1) {\n this.highlightOption(shownOptions[index + 1]);\n }\n }\n\n highlightPreviousOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > 0) {\n this.highlightOption(shownOptions[index - 1]);\n }\n }\n\n private clearHighlightedOption() {\n if (this.highlightedOption !== null) {\n this.highlightedOption.highlighted = false;\n this._highlightedOption = null;\n }\n }\n\n private getHighlightedIndexFromList(options: Array<Option>) {\n for (let i = 0; i < options.length; i++) {\n if (options[i].highlighted) {\n return i;\n }\n }\n return -1;\n }\n\n getHighlightedIndex() {\n return this.getHighlightedIndexFromList(this.filtered);\n }\n\n /** Util. **/\n\n hasShown() {\n return this.options.some((option) => {\n return option.shown;\n });\n }\n\n hasSelected() {\n return this.options.some((option) => {\n return option.selected;\n });\n }\n\n hasShownSelected() {\n return this.options.some((option) => {\n return option.shown && option.selected;\n });\n }\n\n private getFirstShown(): Option {\n for (const option of this.options) {\n if (option.shown) {\n return option;\n }\n }\n return null;\n }\n\n private getFirstShownSelected(): Option {\n for (const option of this.options) {\n if (option.shown && option.selected) {\n return option;\n }\n }\n return null;\n }\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { STYLE } from './select-dropdown.component.style';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\n@Component({\n selector: 'select-dropdown',\n template: `<div [ngStyle]=\"{ 'top.px': top, 'left.px': left, 'width.px': width }\">\n <div class=\"filter\" *ngIf=\"!multiple\">\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n (click)=\"onSingleFilterClick($event)\"\n (input)=\"onSingleFilterInput($event)\"\n (keydown)=\"onSingleFilterKeydown($event)\"\n />\n </div>\n\n <div class=\"options\" #optionsList>\n <ul (wheel)=\"onOptionsWheel($event)\">\n <li\n *ngFor=\"let option of optionList.filtered\"\n [ngClass]=\"{\n highlighted: option.highlighted,\n selected: option.selected,\n disabled: option.disabled\n }\"\n [ngStyle]=\"getOptionStyle(option)\"\n (click)=\"onOptionClick(option)\"\n (mouseover)=\"onOptionMouseover(option)\"\n >\n {{ option.label }}\n </li>\n <li *ngIf=\"!optionList.hasShown()\" class=\"message\">\n {{ notFoundMsg }}\n </li>\n </ul>\n </div>\n</div>\n`,\n styles: [STYLE],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectDropdownComponent\n implements AfterViewInit, OnChanges, OnInit {\n @Input() filterEnabled: boolean;\n @Input() highlightColor: string;\n @Input() highlightTextColor: string;\n @Input() left: number;\n @Input() multiple: boolean;\n @Input() notFoundMsg: string;\n @Input() optionList: OptionList;\n @Input() top: number;\n @Input() width: number;\n\n @Output() close = new EventEmitter<boolean>();\n @Output() optionClicked = new EventEmitter<Option>();\n @Output() singleFilterClick = new EventEmitter<null>();\n @Output() singleFilterInput = new EventEmitter<string>();\n @Output() singleFilterKeydown = new EventEmitter<any>();\n\n @ViewChild('filterInput') filterInput: any;\n @ViewChild('optionsList') optionsList: any;\n\n disabledColor = '#fff';\n disabledTextColor = '9e9e9e';\n\n /** Event handlers. **/\n\n // Angular life cycle hooks.\n\n ngOnInit() {\n this.optionsReset();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('optionList')) {\n this.optionsReset();\n }\n }\n\n ngAfterViewInit() {\n this.moveHighlightedIntoView();\n if (!this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n }\n\n // Filter input (single select).\n\n onSingleFilterClick(event: any) {\n this.singleFilterClick.emit(null);\n }\n\n onSingleFilterInput(event: any) {\n this.singleFilterInput.emit(event.target.value);\n }\n\n onSingleFilterKeydown(event: any) {\n this.singleFilterKeydown.emit(event);\n }\n\n // Options list.\n\n onOptionsWheel(event: any) {\n this.handleOptionsWheel(event);\n }\n\n onOptionMouseover(option: Option) {\n this.optionList.highlightOption(option);\n }\n\n onOptionClick(option: Option) {\n this.optionClicked.emit(option);\n }\n\n /** Initialization. **/\n\n private optionsReset() {\n this.optionList.resetFilter();\n this.optionList.highlight();\n }\n\n /** View. **/\n\n getOptionStyle(option: Option): any {\n if (option.highlighted) {\n return {\n 'background-color': this.highlightColor,\n color: this.highlightTextColor\n };\n } else {\n return {};\n }\n }\n\n clearFilterInput() {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n }\n }\n\n moveHighlightedIntoView() {\n const list = this.optionsList.nativeElement;\n const listHeight = list.offsetHeight;\n\n const itemIndex = this.optionList.getHighlightedIndex();\n\n if (itemIndex > -1) {\n const item = list.children[0].children[itemIndex];\n const itemHeight = item.offsetHeight;\n\n const itemTop = itemIndex * itemHeight;\n const itemBottom = itemTop + itemHeight;\n\n const viewTop = list.scrollTop;\n const viewBottom = viewTop + listHeight;\n\n if (itemBottom > viewBottom) {\n list.scrollTop = itemBottom - listHeight;\n } else if (itemTop < viewTop) {\n list.scrollTop = itemTop;\n }\n }\n }\n\n private handleOptionsWheel(e: any) {\n const div = this.optionsList.nativeElement;\n const atTop = div.scrollTop === 0;\n const atBottom = div.offsetHeight + div.scrollTop === div.scrollHeight;\n\n if (atTop && e.deltaY < 0) {\n e.preventDefault();\n } else if (atBottom && e.deltaY > 0) {\n e.preventDefault();\n }\n }\n}\n","import {\n AfterViewInit,\n Component,\n Input,\n OnChanges,\n OnInit,\n Output,\n EventEmitter,\n ExistingProvider,\n ViewChild,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { STYLE } from './select.component.style';\nimport { SelectDropdownComponent } from './select-dropdown.component';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\nexport const SELECT_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable:no-use-before-declare\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n};\n\n@Component({\n selector: 'ng-select',\n template: `<div\n #selection\n [attr.tabindex]=\"disabled ? null : 0\"\n [ngClass]=\"{\n open: isOpen,\n focus: hasFocus,\n below: isBelow,\n disabled: disabled\n }\"\n (click)=\"onSelectContainerClick($event)\"\n (focus)=\"onSelectContainerFocus()\"\n (keydown)=\"onSelectContainerKeydown($event)\"\n (window:click)=\"onWindowClick()\"\n (window:resize)=\"onWindowResize()\"\n>\n <div class=\"single\" *ngIf=\"!multiple\">\n <div class=\"value\" *ngIf=\"optionList.hasSelected()\">\n {{ optionList.selection[0].label }}\n </div>\n <div class=\"placeholder\" *ngIf=\"!optionList.hasSelected()\">\n {{ placeholderView }}\n </div>\n <div\n class=\"clear\"\n *ngIf=\"allowClear\"\n (click)=\"onClearSelectionClick($event)\"\n >\n &#x2715;\n </div>\n <div class=\"toggle\" *ngIf=\"isOpen\">&#x25B2;</div>\n <div class=\"toggle\" *ngIf=\"!isOpen\">&#x25BC;</div>\n </div>\n\n <div class=\"multiple\" *ngIf=\"multiple\">\n <div class=\"option\" *ngFor=\"let option of optionList.selection\">\n <span class=\"deselect-option\" (click)=\"onDeselectOptionClick(option)\">\n &#x2715;\n </span>\n {{ option.label }}\n </div>\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n tabindex=\"-1\"\n [placeholder]=\"placeholderView\"\n [ngStyle]=\"{ 'width.px': filterInputWidth }\"\n (input)=\"onMultipleFilterInput($event)\"\n (keydown)=\"onMultipleFilterKeydown($event)\"\n />\n </div>\n</div>\n<select-dropdown\n *ngIf=\"isOpen\"\n #dropdown\n [multiple]=\"multiple\"\n [optionList]=\"optionList\"\n [notFoundMsg]=\"notFoundMsg\"\n [highlightColor]=\"highlightColor\"\n [highlightTextColor]=\"highlightTextColor\"\n [filterEnabled]=\"filterEnabled\"\n [width]=\"width\"\n [top]=\"top\"\n [left]=\"left\"\n (close)=\"onDropdownClose($event)\"\n (optionClicked)=\"onDropdownOptionClicked($event)\"\n (singleFilterClick)=\"onSingleFilterClick()\"\n (singleFilterInput)=\"onSingleFilterInput($event)\"\n (singleFilterKeydown)=\"onSingleFilterKeydown($event)\"\n>\n</select-dropdown>\n`,\n styles: [STYLE],\n providers: [SELECT_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent\n implements AfterViewInit, ControlValueAccessor, OnChanges, OnInit {\n /** Keys. **/\n\n private KEYS: any = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n UP: 38,\n DOWN: 40\n };\n\n @Input() options: Array<any>;\n\n @Input() allowClear = false;\n @Input() disabled = false;\n @Input() highlightColor = '#2196f3';\n @Input() highlightTextColor = '#fff';\n @Input() multiple = false;\n @Input() noFilter = 0;\n @Input() notFoundMsg = 'No results found';\n @Input() placeholder = '';\n\n @Output() opened: EventEmitter<null> = new EventEmitter<null>();\n @Output() closed: EventEmitter<null> = new EventEmitter<null>();\n @Output() selected: EventEmitter<any> = new EventEmitter<any>();\n @Output() deselected: EventEmitter<any> = new EventEmitter<any>();\n @Output() typed: EventEmitter<any> = new EventEmitter<any>();\n\n @ViewChild('selection') selectionSpan: any;\n @ViewChild('dropdown') dropdown: SelectDropdownComponent;\n @ViewChild('filterInput') filterInput: any;\n\n private _value: Array<any> = [];\n optionList: OptionList;\n\n // Selection state variables.\n hasSelected = false;\n\n // View state variables.\n filterEnabled = true;\n filterInputWidth = 1;\n hasFocus = false;\n isBelow = true;\n isDisabled = false;\n isOpen = false;\n placeholderView = '';\n\n clearClicked = false;\n selectContainerClicked = false;\n\n // Width and position for the dropdown container.\n width: number;\n top: number;\n left: number;\n\n private onChange = (_: any) => {};\n private onTouched = () => {};\n\n /** Event handlers. **/\n\n // Angular lifecycle hooks.\n\n ngOnInit() {\n this.placeholderView = this.placeholder;\n }\n\n ngAfterViewInit() {\n this.updateFilterWidth();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('options')) {\n this.updateOptionsList(changes['options'].isFirstChange());\n }\n if (changes.hasOwnProperty('noFilter')) {\n const numOptions: number = this.optionList.options.length;\n const minNumOptions: number = changes['noFilter'].currentValue;\n this.filterEnabled = numOptions >= minNumOptions;\n }\n }\n\n // Window.\n\n onWindowClick() {\n if (!this.selectContainerClicked) {\n this.closeDropdown();\n }\n this.clearClicked = false;\n this.selectContainerClicked = false;\n }\n\n onWindowResize() {\n this.updateWidth();\n }\n\n // Select container.\n\n onSelectContainerClick(event: any) {\n this.selectContainerClicked = true;\n if (!this.clearClicked) {\n this.toggleDropdown();\n }\n }\n\n onSelectContainerFocus() {\n this.onTouched();\n }\n\n onSelectContainerKeydown(event: any) {\n this.handleSelectContainerKeydown(event);\n }\n\n // Dropdown container.\n\n onDropdownOptionClicked(option: Option) {\n this.multiple ? this.toggleSelectOption(option) : this.selectOption(option);\n }\n\n onDropdownClose(focus: any) {\n this.closeDropdown(focus);\n }\n\n // Single filter input.\n\n onSingleFilterClick() {\n this.selectContainerClicked = true;\n }\n\n onSingleFilterInput(term: string) {\n setTimeout(() => {\n if (term.length > 2) {\n this.typed.emit(term);\n }\n }, 500);\n this.optionList.filter(term);\n }\n\n onSingleFilterKeydown(event: any) {\n this.handleSingleFilterKeydown(event);\n }\n\n // Multiple filter input.\n\n onMultipleFilterInput(event: any) {\n if (!this.isOpen) {\n this.openDropdown();\n }\n this.updateFilterWidth();\n setTimeout(() => {\n this.optionList.filter(event.target.value);\n });\n }\n\n onMultipleFilterKeydown(event: any) {\n this.handleMultipleFilterKeydown(event);\n }\n\n // Single clear select.\n\n onClearSelectionClick(event: any) {\n this.clearClicked = true;\n this.clearSelection();\n this.closeDropdown(true);\n }\n\n // Multiple deselect option.\n\n onDeselectOptionClick(option: Option) {\n this.clearClicked = true;\n this.deselectOption(option);\n }\n\n /** API. **/\n\n // TODO fix issues with global click/key handler that closes the dropdown.\n open() {\n this.openDropdown();\n }\n\n close() {\n this.closeDropdown();\n }\n\n clear() {\n this.clearSelection();\n }\n\n select(value: string) {\n this.optionList.getOptionsByValue(value).forEach((option) => {\n this.selectOption(option);\n });\n this.valueChanged();\n }\n\n /** ControlValueAccessor interface methods. **/\n\n writeValue(value: any) {\n this.value = value;\n }\n\n registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Value. **/\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this.multiple ? this._value : this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n\n if (!OptionList.equalValues(v, this._value)) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n private valueChanged() {\n this._value = this.optionList.value;\n\n this.hasSelected = this._value.length > 0;\n this.placeholderView = this.hasSelected ? '' : this.placeholder;\n this.updateFilterWidth();\n\n this.onChange(this.value);\n }\n\n /** Initialization. **/\n\n private updateOptionsList(firstTime: boolean) {\n let v: Array<string>;\n\n if (!firstTime) {\n v = this.optionList.value;\n }\n\n this.optionList = new OptionList(this.options);\n\n if (!firstTime) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n /** Dropdown. **/\n\n private toggleDropdown() {\n if (!this.isDisabled) {\n this.isOpen ? this.closeDropdown(true) : this.openDropdown();\n }\n }\n\n private openDropdown() {\n if (!this.isOpen) {\n this.updateWidth();\n this.updatePosition();\n this.isOpen = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n this.opened.emit(null);\n }\n }\n /* tslint:disable */\n private closeDropdown(focus: boolean = false) {\n if (this.isOpen) {\n this.clearFilterInput();\n this.isOpen = false;\n if (focus) {\n this.focus();\n }\n this.closed.emit(null);\n }\n }\n /* tslint:enable */\n /** Select. **/\n\n private selectOption(option: Option) {\n if (!option.selected) {\n this.optionList.select(option, this.multiple);\n this.valueChanged();\n this.selected.emit(option.undecoratedCopy());\n // Is this not allready done when setting the value??\n /*setTimeout(() => {\n if (this.multiple) {\n this.updateFilterWidth();\n }\n });*/\n }\n }\n\n private deselectOption(option: Option) {\n if (option.selected) {\n this.optionList.deselect(option);\n this.valueChanged();\n this.deselected.emit(option.undecoratedCopy());\n setTimeout(() => {\n if (this.multiple) {\n // this.updateFilterWidth();\n this.updatePosition();\n this.optionList.highlight();\n if (this.isOpen) {\n this.dropdown.moveHighlightedIntoView();\n }\n }\n });\n }\n }\n\n private clearSelection() {\n const selection: Array<Option> = this.optionList.selection;\n if (selection.length > 0) {\n this.optionList.clearSelection();\n this.valueChanged();\n\n if (selection.length === 1) {\n this.deselected.emit(selection[0].undecoratedCopy());\n } else {\n this.deselected.emit(\n selection.map((option) => {\n return option.undecoratedCopy();\n })\n );\n }\n }\n }\n\n private toggleSelectOption(option: Option) {\n option.selected ? this.deselectOption(option) : this.selectOption(option);\n }\n\n private selectHighlightedOption() {\n const option: Option = this.optionList.highlightedOption;\n if (option !== null) {\n this.selectOption(option);\n this.closeDropdown(true);\n }\n }\n\n private deselectLast() {\n const sel: Array<Option> = this.optionList.selection;\n\n if (sel.length > 0) {\n const option: Option = sel[sel.length - 1];\n this.deselectOption(option);\n this.setMultipleFilterInput(option.label + ' ');\n }\n }\n\n /** Filter. **/\n\n private clearFilterInput() {\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n } else {\n this.dropdown.clearFilterInput();\n }\n }\n\n private setMultipleFilterInput(value: string) {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = value;\n }\n }\n\n private handleSelectContainerKeydown(event: any) {\n const key = event.which;\n\n if (this.isOpen) {\n if (key === this.KEYS.ESC || (key === this.KEYS.UP && event.altKey)) {\n this.closeDropdown(true);\n } else if (key === this.KEYS.TAB) {\n this.closeDropdown();\n } else if (key === this.KEYS.ENTER) {\n this.selectHighlightedOption();\n } else if (key === this.KEYS.UP) {\n this.optionList.highlightPreviousOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n } else if (key === this.KEYS.DOWN) {\n this.optionList.highlightNextOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n }\n } else {\n if (\n key === this.KEYS.ENTER ||\n key === this.KEYS.SPACE ||\n (key === this.KEYS.DOWN && event.altKey)\n ) {\n /* FIREFOX HACK:\n *\n * The setTimeout is added to prevent the enter keydown event\n * to be triggered for the filter input field, which causes\n * the dropdown to be closed again.\n */\n setTimeout(() => {\n this.openDropdown();\n });\n }\n }\n }\n\n private handleMultipleFilterKeydown(event: any) {\n const key = event.which;\n\n if (key === this.KEYS.BACKSPACE) {\n if (\n this.hasSelected &&\n this.filterEnabled &&\n this.filterInput.nativeElement.value === ''\n ) {\n this.deselectLast();\n }\n }\n }\n\n private handleSingleFilterKeydown(event: any) {\n const key = event.which;\n\n if (\n key === this.KEYS.ESC ||\n key === this.KEYS.TAB ||\n key === this.KEYS.UP ||\n key === this.KEYS.DOWN ||\n key === this.KEYS.ENTER\n ) {\n this.handleSelectContainerKeydown(event);\n }\n }\n\n /** View. **/\n\n focus() {\n this.hasFocus = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n } else {\n this.selectionSpan.nativeElement.focus();\n }\n }\n\n blur() {\n this.hasFocus = false;\n this.selectionSpan.nativeElement.blur();\n }\n\n updateWidth() {\n this.width = this.selectionSpan.nativeElement.offsetWidth;\n }\n\n updatePosition() {\n const e = this.selectionSpan.nativeElement;\n this.left = e.offsetLeft;\n this.top = e.offsetTop + e.offsetHeight;\n }\n\n updateFilterWidth() {\n if (typeof this.filterInput !== 'undefined') {\n const value: string = this.filterInput.nativeElement.value;\n this.filterInputWidth =\n value.length === 0\n ? 1 + this.placeholderView.length * 10\n : 1 + value.length * 10;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { SelectComponent } from './select.component';\nimport { SelectDropdownComponent } from './select-dropdown.component';\n\n@NgModule({\n declarations: [SelectComponent, SelectDropdownComponent],\n exports: [SelectComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class SelectModule {}\n","import {\n Pipe,\n PipeTransform,\n OnDestroy,\n WrappedValue,\n ChangeDetectorRef\n} from '@angular/core';\nimport { of } from 'rxjs';\n\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DomSanitizer } from '@angular/platform-browser';\n// import { FileUploadResourceService } from '../../etl-api/file-upload-resource.service';\n\n// Using similarity from AsyncPipe to avoid having to pipe |secure|async in HTML.\n// tslint:disable-next-line:use-pipe-transform-interface\n@Pipe({\n name: 'secure',\n pure: false\n})\nexport class SecurePipe implements PipeTransform, OnDestroy {\n private _latestValue: any = null;\n private _latestReturnedValue: any = null;\n private _subscription: Subscription = null;\n private _obj: Observable<any> = null;\n private getfile;\n private previousUrl: string;\n private _result: BehaviorSubject<any> = new BehaviorSubject(null);\n private result: Observable<any> = this._result.asObservable();\n private _internalSubscription: Subscription = null;\n\n constructor(\n private _ref: ChangeDetectorRef,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnDestroy(): void {\n if (this._subscription) {\n this._dispose();\n }\n }\n\n transform(url: string, getfile): any {\n this.getfile = getfile;\n const obj = this.internalTransform(url);\n return this.asyncTrasnform(obj);\n }\n\n private internalTransform(url: string): Observable<any> {\n if (!url) {\n return this.result;\n }\n\n if (this.previousUrl !== url) {\n this.previousUrl = url;\n this._internalSubscription = this.getfile(url).subscribe((m) => {\n const sanitized = this.sanitizer.bypassSecurityTrustUrl(m);\n this._result.next(sanitized);\n });\n }\n\n return this.result;\n }\n\n private asyncTrasnform(obj: Observable<any>): any {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.asyncTrasnform(obj);\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return WrappedValue.wrap(this._latestValue);\n }\n\n private _subscribe(obj: Observable<any>) {\n const _this = this;\n this._obj = obj;\n\n this._subscription = obj.subscribe({\n next: function (value) {\n return _this._updateLatestValue(obj, value);\n },\n error: (e: any) => {\n throw e;\n }\n });\n }\n\n private _dispose() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n if (this._internalSubscription) {\n this._internalSubscription.unsubscribe();\n }\n\n this._internalSubscription = null;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n }\n\n private _updateLatestValue(async: any, value: Object) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurePipe } from './components/file-upload/secure.pipe';\nimport { DataSources } from './form-entry/data-sources/data-sources';\n@NgModule({\n declarations: [SecurePipe],\n imports: [CommonModule],\n exports: [SecurePipe],\n providers: [DataSources]\n})\nexport class SharedModule {}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n Renderer2,\n ChangeDetectorRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport { SecurePipe } from './secure.pipe';\n@Component({\n selector: 'app-file-upload',\n template: `<lib-file-uploader\n [srcUrl]=\"pdfUrl\"\n [formEntry]=\"formEntryMode\"\n [(ngModel)]=\"fileUuid\"\n (_onClear)=\"clearValue()\"\n (uploadData)=\"onFileChange($event)\"\n>\n</lib-file-uploader>\n<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!pdfUploaded\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this.dataSource.fetchFile\"\n alt=\"\"\n />\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true\n }\n ],\n styles: [\n `\n img {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n `\n ]\n})\nexport class FileUploadComponent implements OnInit, ControlValueAccessor {\n uploading = false;\n fileUuid = null;\n pdfUploaded = false;\n formEntryMode = true;\n pdfUrl: string;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.fileUuid) {\n this.checkFileType();\n }\n }\n public onFileChange(fileList) {\n for (const file of fileList) {\n this.upload(file);\n }\n }\n upload(data) {\n if (this.dataSource) {\n this.uploading = true;\n this.dataSource.fileUpload(data).subscribe(\n (result) => {\n this.fileUuid = result.image;\n this.checkFileType();\n this.propagateChange(this.fileUuid);\n this.uploading = false;\n },\n (error) => {\n this.uploading = false;\n }\n );\n }\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value !== this.fileUuid) {\n this.fileUuid = value;\n this.checkFileType();\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (_: any) => {};\n\n public clearValue() {\n this.fileUuid = null;\n this.pdfUploaded = false;\n this.pdfUrl = null;\n this.propagateChange(this.fileUuid);\n }\n\n public getPdfUrl(fileUuid: string) {\n this.dataSource.fetchFile(fileUuid, 'pdf').subscribe((file) => {\n this.pdfUploaded = true;\n this.pdfUrl = file.changingThisBreaksApplicationSecurity;\n });\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.getPdfUrl(this.fileUuid);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { NgxFileUploaderModule } from 'ngx-file-uploader';\n\nimport { SharedModule } from '../../shared.module';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { FileUploadComponent } from './file-upload.component';\nimport { WebcamModule } from 'ngx-webcam';\n\n@NgModule({\n imports: [\n CommonModule,\n SelectModule,\n FormsModule,\n SharedModule,\n WebcamModule,\n NgxFileUploaderModule\n ],\n exports: [FileUploadComponent],\n declarations: [FileUploadComponent],\n providers: []\n})\nexport class RemoteFileUploadModule {}\n","/**\n * date-picker.component\n */\n\nimport { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport * as _ from 'lodash';\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./date-picker.component.css');\n// const myDpTpl: string = require('./date-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'date-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelDatePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">\n <div class=\"picker-header-nav\">\n <span class=\"nav-prev\" (click)=\"prev()\"></span>\n </div>\n <div class=\"picker-header-content\">\n <div class=\"content\">\n <span (click)=\"showMonthSelection()\" class=\"month\">{{\n calendarDate | moment: 'MMMM'\n }}</span>\n <span class=\"seperator\">|</span>\n <span (click)=\"showYearSelection()\" class=\"year\">{{\n calendarDate | moment: 'YYYY'\n }}</span>\n </div>\n </div>\n <div class=\"picker-header-nav\">\n <span class=\"nav-next\" (click)=\"next()\"></span>\n </div>\n </div>\n <div class=\"picker-calendar\">\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span class=\"picker-weekday\" *ngFor=\"let day of dayNames\">{{\n day\n }}</span>\n </div>\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span\n class=\"picker-day\"\n (click)=\"selectDay(day)\"\n [ngClass]=\"{\n 'out-focus': day.month() != calendarDate.month(),\n today: day.isSame(today),\n selected: day.isSame(selectedDate)\n }\"\n *ngFor=\"let day of calendarDays\"\n >\n {{ day | moment: 'D' }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayMonths\">\n <span\n class=\"picker-month\"\n *ngFor=\"let month of monthsShort\"\n (click)=\"selectMonth(month)\"\n [ngClass]=\"{\n selected: month === currentMonth\n }\"\n >\n {{ month }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayYears\">\n <span\n class=\"picker-year\"\n *ngFor=\"let year of displayYearRange\"\n (click)=\"selectYear(year)\"\n [ngClass]=\"{\n selected: year === currentYear\n }\"\n >\n {{ year }}\n </span>\n </div>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-today\" (click)=\"selectToday()\">\n <span class=\"text\">Today</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearPickDate()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelDatePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:666px}.picker-box{font-family:'Open Sans';min-width:400px!important;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;display:flex;height:2.5rem;width:100%}.picker-header-nav{position:relative;cursor:pointer;width:calc(100% / 8)}.picker-header-nav>*{position:absolute;top:50%;right:auto;bottom:auto;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.picker-header-nav .nav-next::before,.picker-header-nav .nav-prev::before{content:' ';border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker-header-nav .nav-next::before{border-right:0;border-left:.75em solid #000}.picker-header-content{width:calc(100% * 6 / 8);text-align:center}.picker-header-content .month{font-size:1.778rem;line-height:2.5rem;margin-right:.5rem;font-weight:700}.picker-header-content .year{font-style:italic;color:#999}.picker-calendar{width:100%}.picker-calendar .picker-calendar-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.625rem}.picker-calendar .picker-weekday{font-weight:700;text-align:left;color:#999;width:calc(100% / 7)}.picker-calendar .picker-day,.picker-calendar .picker-month,.picker-calendar .picker-year{font-size:1.333rem;line-height:2.5rem;position:relative;height:2.5rem;text-align:center;cursor:pointer;width:calc(100% / 7)}.picker-calendar .picker-day:hover,.picker-calendar .picker-month:hover,.picker-calendar .picker-year:hover{background:#b1dcfb}.picker-calendar .out-focus{color:#ddd}.picker-calendar .out-focus:hover{color:#000}.picker-calendar .selected{background:#0089ec;color:#fff}.picker-calendar .selected:hover{background:#0089ec}.picker-calendar .today::before{content:' ';position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker-footer{cursor:pointer}.picker-footer .picker-action{text-align:center;width:calc(100% / 3)}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-today::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-today::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class DatePickerComponent implements OnInit {\n public dayNames: Array<string>;\n\n @Input() public initDate: any;\n @Input() public locale = 'en';\n @Input() public viewFormat = 'll';\n @Input() public returnObject = 'js';\n @Output() public onDatePickerCancel = new EventEmitter<boolean>();\n @Output() public onSelectDate = new EventEmitter<any>();\n\n public calendarDate: Moment;\n public selectedDate: Moment;\n public currentMonth: any;\n public today: Moment;\n public currentYear: number;\n public onDisplayMonths = false;\n public onDisplayYears = false;\n public displayYearsIndex = 0;\n public displayYearRange: Array<number>;\n public fullYearRange: Array<any>;\n public monthsShort: Array<string> = moment.monthsShort();\n public calendarDays: Array<Moment>;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.initValue();\n // default to current year range\n _.each(this.fullYearRange, (v, i) => {\n this.currentYear = this.calendarDate.clone().startOf('year').year();\n if (v.indexOf(this.currentYear) !== -1) {\n this.displayYearsIndex = i;\n }\n });\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n this.generateCalendar();\n }\n\n public prev(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex--;\n if (this.displayYearsIndex < 0) {\n this.displayYearsIndex = 0;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n } else {\n this.calendarDate = this.calendarDate.clone().subtract(1, 'M');\n }\n this.generateCalendar();\n }\n\n public showMonthSelection(): void {\n this.onDisplayMonths = true;\n this.onDisplayYears = false;\n }\n\n public showYearSelection(): void {\n this.onDisplayYears = true;\n this.onDisplayMonths = false;\n }\n\n public next(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex++;\n if (this.displayYearsIndex >= this.fullYearRange.length) {\n this.displayYearsIndex = this.fullYearRange.length - 1;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex++];\n } else {\n this.calendarDate = this.calendarDate.clone().add(1, 'M');\n }\n this.generateCalendar();\n }\n\n public selectDay(day: Moment): void {\n const daysDifference = day.diff(\n this.calendarDate.clone().startOf('date'),\n 'days'\n );\n day = this.calendarDate.clone().add(daysDifference, 'd');\n const selectedDay = this.parseToReturnObjectType(day);\n this.onSelectDate.emit(selectedDay);\n this.cancelDatePicker();\n return;\n }\n\n public selectMonth(month: string) {\n this.calendarDate = this.calendarDate.clone().month(month);\n this.onDisplayMonths = false;\n this.generateCalendar();\n }\n\n public selectYear(year: number) {\n this.calendarDate = this.calendarDate.clone().year(year);\n this.onDisplayYears = false;\n this.generateCalendar();\n }\n\n public selectToday(): void {\n const today = this.parseToReturnObjectType(moment());\n this.onSelectDate.emit(today);\n this.cancelDatePicker();\n return;\n }\n\n public clearPickDate(): void {\n this.onSelectDate.emit(null);\n this.cancelDatePicker();\n return;\n }\n\n public cancelDatePicker(): void {\n this.onDatePickerCancel.emit(false);\n return;\n }\n\n protected generateYears(): void {\n const currentYear = moment().year();\n const startYr = this.calendarDate.clone().subtract(100, 'y').year();\n // const endYr = this.calendarDate.clone().add(10, 'y').year();\n const years = [];\n for (let year = startYr; year <= currentYear; year++) {\n years.push(year);\n }\n\n this.fullYearRange = _.chunk(years, 14);\n }\n\n protected initValue() {\n // set moment locale (default is en)\n moment.locale(this.locale);\n // set today value\n this.today = moment().startOf('date');\n this.currentMonth = this.monthsShort[moment().month()];\n this.currentYear = moment().year();\n\n // set week days name array\n this.dayNames = moment.weekdaysShort(true);\n\n // check if the input initDate has value\n if (this.initDate) {\n this.calendarDate =\n this.returnObject === 'string'\n ? moment(this.initDate, this.viewFormat)\n : moment(this.initDate);\n this.selectedDate = this.calendarDate.clone().startOf('date');\n } else {\n this.calendarDate = moment();\n }\n this.generateYears();\n }\n\n protected generateCalendar(): void {\n this.calendarDays = [];\n const start =\n 0 -\n ((this.calendarDate.clone().startOf('month').day() +\n (7 - moment.localeData().firstDayOfWeek())) %\n 7);\n const end = 41 + start; // iterator ending point\n\n for (let i = start; i <= end; i += 1) {\n const day = this.calendarDate.clone().startOf('month').add(i, 'days');\n this.calendarDays.push(day);\n }\n }\n\n protected parseToReturnObjectType(day: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return day.toDate();\n\n case 'string':\n return day.format(this.viewFormat);\n\n case 'moment':\n return day;\n\n case 'json':\n return day.toJSON();\n\n case 'array':\n return day.toArray();\n\n case 'iso':\n return day.toISOString();\n\n case 'object':\n return day.toObject();\n\n default:\n return day;\n }\n }\n}\n","/**\n * time-picker.component\n */\n\nimport { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./time-picker.component.css');\n// const myDpTpl: string = require('./time-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'time-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelTimePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">Time Picker</div>\n <div class=\"picker-table\">\n <ul class=\"picker-table-time\">\n <li class=\"picker-table-number hour\">\n <span class=\"arrow up\" (click)=\"increaseHour()\"></span>\n {{ time | moment: hourFormat }}\n <span class=\"arrow down\" (click)=\"decreaseHour()\"></span>\n </li>\n <li class=\"picker-table-separator\">:</li>\n <li class=\"picker-table-number minute\">\n <span class=\"arrow up\" (click)=\"increaseMinute()\"></span>\n {{ time | moment: 'mm' }}\n <span class=\"arrow down\" (click)=\"decreaseMinute()\"></span>\n </li>\n <li *ngIf=\"showSecond\" class=\"picker-table-separator\">:</li>\n <li *ngIf=\"showSecond\" class=\"picker-table-number second\">\n <span class=\"arrow up\" (click)=\"increaseSecond()\"></span>\n {{ time | moment: 'ss' }}\n <span class=\"arrow down\" (click)=\"decreaseSecond()\"></span>\n </li>\n <li *ngIf=\"use12Hour\" class=\"picker-table-meridiem meridiem\">\n {{ time | moment: 'A' }}\n </li>\n </ul>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-now\" (click)=\"selectNow()\">\n <span class=\"text\">Now</span>\n </div>\n <div class=\"picker-action action-confirm\" (click)=\"selectTime()\">\n <span class=\"text\">Confirm</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearTime()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelTimePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:40rem;font-family:'Open Sans'}.picker-box{width:100%;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;height:2.5rem;width:100%}.picker-header{text-align:center}.picker-table{width:100%;margin:2.5rem 0}.picker-table-time{font-size:2.37rem;line-height:2.5rem;list-style:none;margin:0;padding:0;display:flex;justify-content:center;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-table-meridiem,.picker-table-number,.picker-table-separator{text-align:center}.picker-table-meridiem,.picker-table-number{position:relative;width:20%}.arrow{position:absolute;left:50%;border:solid #777;border-width:0 .2rem .2rem 0;display:inline-block;padding:.25rem;cursor:pointer}.arrow.up{top:-1rem;-webkit-transform:translateX(-50%) rotate(-135deg);transform:translateX(-50%) rotate(-135deg)}.arrow.down{bottom:-1rem;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.arrow:hover{border-color:#1975d2}.picker-table-separator{width:calc(20% / 3)}.picker-footer{display:flex;justify-content:center;width:100%;cursor:pointer}.picker-footer .picker-action{width:25%;text-align:center}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-confirm::before,.picker-footer .action-now::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-now::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-confirm::before{width:1rem;height:1rem;border-radius:100%;background-color:#00b5ad}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class TimePickerComponent implements OnInit {\n @Input() initTime: any;\n @Input() showSecond = true;\n @Input() viewFormat = 'hh:mm A';\n @Input() use12Hour = false;\n @Input() returnObject = 'js';\n @Output() onSelectTime = new EventEmitter<any>();\n @Output() onTimePickerCancel = new EventEmitter<boolean>();\n hourFormat = 'HH';\n public time: Moment;\n\n constructor() {}\n\n ngOnInit(): void {\n if (this.use12Hour) {\n this.hourFormat = 'hh';\n }\n this.time = this.initTime\n ? moment(this.initTime, this.viewFormat)\n : moment();\n\n // check if the input initDate has value\n if (this.initTime) {\n this.time =\n this.returnObject === 'string'\n ? moment(this.initTime, this.viewFormat)\n : moment(this.initTime);\n } else {\n this.time = moment();\n }\n }\n\n increaseHour(): void {\n this.time = this.time.clone().add(1, 'h');\n }\n\n decreaseHour(): void {\n this.time = this.time.clone().subtract(1, 'h');\n }\n\n increaseMinute() {\n this.time = this.time.clone().add(1, 'm');\n }\n\n decreaseMinute() {\n this.time = this.time.clone().subtract(1, 'm');\n }\n\n increaseSecond(): void {\n this.time = this.time.clone().add(1, 's');\n }\n\n decreaseSecond(): void {\n this.time = this.time.clone().subtract(1, 's');\n }\n\n selectTime(): void {\n const selectTime = this.parseToReturnObjectType(this.time);\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n selectNow(): void {\n const selectTime = this.parseToReturnObjectType(moment());\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n clearTime(): void {\n this.onSelectTime.emit(null);\n this.cancelTimePicker();\n return;\n }\n\n cancelTimePicker(): void {\n this.onTimePickerCancel.emit(false);\n return;\n }\n\n protected parseToReturnObjectType(time: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return time.toDate();\n\n case 'string':\n return time.format(this.viewFormat);\n\n case 'moment':\n return time;\n\n case 'json':\n return time.toJSON();\n\n case 'array':\n return time.toArray();\n\n case 'iso':\n return time.toISOString();\n\n case 'object':\n return time.toObject();\n\n default:\n return time;\n }\n }\n}\n","/**\n * modal.component\n */\n\nimport {\n Component,\n Output,\n OnInit,\n EventEmitter,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./modal.component.css');\n// const myDpTpl: string = require('./modal.component.html');\n// webpack2_\n\n@Component({\n selector: 'picker-modal',\n template: `<section class=\"x-modal\">\n <section class=\"modal-overlay\" (click)=\"closeModal()\"></section>\n <section class=\"modal-main\" id=\"section-modal-main\">\n <ng-content></ng-content>\n </section>\n</section>\n`,\n styles: [`:host{z-index:9999999999}*,::after,::before{box-sizing:border-box}.modal-main{position:absolute;left:19.6%;right:auto;top:auto;z-index:111;background-color:#fff;border:1px solid #d7dad7;border-radius:6px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0);box-shadow:0 5px 15px rgba(0,0,0,.3)}`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: []\n})\nexport class ModalComponent implements OnInit {\n @Output() onOverlayClick = new EventEmitter<boolean>();\n\n constructor() {}\n\n ngOnInit() {}\n\n closeModal() {\n this.onOverlayClick.emit(false);\n }\n}\n","/**\n * moment.pipe\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Moment } from 'moment/moment';\n\n@Pipe({ name: 'moment' })\nexport class MomentPipe implements PipeTransform {\n transform(moment: Moment, format?: string): string {\n return format ? moment.format(format) : moment.format('MMM DD, YYYY');\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as moment_ from 'moment';\n\nconst Moment = moment_;\n\n@Component({\n selector: 'date-time-picker',\n template: `<div class=\"row\">\n <div *ngIf=\"!showTime\" class=\"col-xs-12 col-md-12\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-8 col-md-8\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-4 col-md-4\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n </div>\n</div>\n<date-picker\n *ngIf=\"showDatePicker\"\n [initDate]=\"value\"\n (onSelectDate)=\"setDate($event)\"\n (onDatePickerCancel)=\"toggleDatePicker($event)\"\n></date-picker>\n\n<time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"setTime($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n></time-picker>\n`,\n styles: [`input[readonly]{background-color:#fff}.up{bottom:100%!important;top:auto!important}.glyphicon{top:1px}`],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor {\n @Input() modelValue: any;\n @Input() showDate = true;\n @Input() showTime = false;\n @Input() showWeeks = false;\n @Input() weeks: number[] = [2, 4, 6, 8, 12, 16, 24];\n @Output() onDateChange = new EventEmitter<any>();\n public showDatePicker = false;\n public showTimePicker = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor() {}\n\n ngOnInit() {}\n\n weeksSelected(count) {\n const now = new Date();\n const nextDate = now.setDate(now.getDate() + count * 7);\n this.value = Moment(nextDate).format();\n }\n setDate(date: any): void {\n if (date && date !== '') {\n this.value = Moment(date).format();\n } else {\n this.value = date;\n }\n }\n\n setTime(time: any): void {\n if (time && time !== '') {\n this.value = Moment(time).format();\n } else {\n this.value = time;\n }\n return;\n }\n\n toggleDatePicker(status: boolean): void {\n this.showDatePicker = status;\n /*setTimeout(function() {\n let _body = document.getElementById('content-wrapper').getBoundingClientRect(),\n elem = document.getElementById('section-modal-main');\n if (elem) {\n let elemBox = elem.getBoundingClientRect();\n if (elemBox.bottom > _body.bottom) {\n elem.style.bottom = '36px';\n }\n }\n }, 0);*/\n return;\n }\n\n toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n get value() {\n return this.modelValue;\n }\n\n set value(val) {\n this.modelValue = val;\n this.onDateChange.emit(val);\n this.onChange(val);\n this.onTouched();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n writeValue(value) {\n if (value instanceof Date) {\n this.value = Moment(value).format();\n } else {\n this.value = value;\n }\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { TimePickerComponent } from './time-picker/time-picker.component';\nimport { ModalComponent } from './picker-modal/modal.component';\nimport { MomentPipe } from './pipes/moment.pipe';\nimport { DateTimePickerComponent } from './date-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n exports: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n providers: []\n})\nexport class DateTimePickerModule {}\n","import { Moment } from 'moment/moment';\n\nimport {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormControl\n} from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport * as moment_ from 'moment';\nimport { MatDatepicker } from '@angular/material/datepicker';\nconst moment = moment_;\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'LL'\n },\n display: {\n dateInput: 'MMMM DD, YYYY (dddd)', // August 18, 2025 (Monday)\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY'\n }\n};\n\n@Component({\n selector: 'ngx-date-time-picker',\n template: `<div>\n <div class=\"row\">\n <div [class]=\"getDatePickerCssClass()\">\n <div class=\"input-group\">\n <input\n matInput\n [matDatepicker]=\"picker\"\n class=\"form-control\"\n [value]=\"value\"\n placeholder=\"Choose a date\"\n (dateChange)=\"onDateSelect($event)\"\n (click)=\"picker.open()\"\n readonly\n />\n <mat-datepicker #picker (opened)=\"onOpen()\" (closed)=\"onClose()\"></mat-datepicker>\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n class=\"input-group-btn\"\n ></mat-datepicker-toggle>\n </div>\n </div>\n <div [class]=\"getWeekPickerCssClass()\" *ngIf=\"showWeeks\">\n <mat-select\n placeholder=\"Select Weeks\"\n class=\"form-control\"\n name=\"weeks\"\n (selectionChange)=\"weekSelect($event)\"\n >\n <mat-option *ngFor=\"let count of weeks\" [value]=\"count\">\n {{ count }} Weeks\n </mat-option>\n </mat-select>\n </div>\n <div [class]=\"getTimePickerCssClass()\" *ngIf=\"showTime\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n <time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"onTimeSelect($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n ></time-picker>\n </div>\n </div>\n</div>\n`,\n styles: [`#time-section{display:inline-block}#ngx-atp-time-picker,#ngx-mat-form-field{width:100%}.up{bottom:100%!important;top:auto!important}.time-btn{margin-top:-20px}::ng-deep .highlight-date{border-radius:999px;background-color:#90ee90!important}::ng-deep .highlight-date[data-tooltip]:hover::after{content:attr(data-tooltip);position:absolute;top:-40px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#333;color:#fff;padding:9px 10px;border-radius:4px;font-size:12px;line-height:6px;white-space:pre-wrap;z-index:1000;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:-webkit-max-content;width:-moz-max-content;width:max-content;text-align:start}::ng-deep .highlight-date[data-tooltip]:hover::before{content:'';position:absolute;top:-8px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border:4px solid transparent;border-top-color:#333;z-index:1000}`],\n providers: [\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n { provide: DateAdapter, useClass: MomentDateAdapter },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class NgxDateTimePickerComponent\n implements OnInit, ControlValueAccessor {\n // public date = new FormControl(moment());\n public selectedTime = moment().format();\n public selectedDate = moment().format();\n public loadInitial = false;\n public value;\n public showTimePicker = false;\n @Input() weeks: number[] = [0, 2, 4, 6, 8, 12, 16, 24];\n @Input() modelValue: any;\n @Input() showTime = false;\n @Input() showWeeks = true;\n @Input() dateFormat = 'MMMM DD, YYYY (dddd)';\n\n private _showHolidays = true;\n @Input()\n public set showHolidays(v: boolean | string) {\n this._showHolidays = v === true || v === 'true';\n }\n\n @ViewChild('picker') picker: MatDatepicker<Date>;\n\n private observer: MutationObserver | null = null;\n\n private _dataSource: any;\n @Input()\n public get dataSource(): any {\n return this._dataSource;\n }\n public set dataSource(v: any) {\n this._dataSource = v;\n }\n\n @Output() onDateChange = new EventEmitter<any>();\n public onChange: any = () => {};\n public onTouched: any = () => {};\n public ngOnInit() {}\n\n public writeValue(value) {\n this.value = value;\n }\n\n public registerOnChange(fn) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn) {}\n\n public onTimeSelect($event) {\n const setDate = moment(this.selectedDate);\n const setTime = $event;\n this.setDateTime(setDate, setTime);\n }\n\n public onDateSelect($event) {\n const setDate = moment($event.value);\n const setTime = this.selectedTime;\n const dateString = this.setDateTime(setDate, setTime);\n\n const selectedDate = $event.value;\n this.value = dateString;\n }\n\n public toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n\n public setCurrentTime() {\n const setDate = moment(this.selectedDate);\n const currentTime = moment().format('HH:mm:ss');\n this.setDateTime(setDate, currentTime);\n }\n\n public weekSelect($event) {\n const dateToUse = moment().format();\n const nextWeekDate = moment(dateToUse).add($event.value, 'weeks');\n const nextWeekTime = dateToUse;\n this.setDateTime(nextWeekDate, nextWeekTime);\n }\n\n public selectionChange($event) {\n console.log('Week selected', $event);\n }\n\n public getWeekPickerCssClass() {\n if (this.showTime) {\n return 'col-sm-2 form-group';\n }\n return 'col-sm-3 form-group';\n }\n\n public getDatePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n\n if (this.showTime === true) {\n return 'col-sm-8 form-group';\n }\n return 'col-sm-12 form-group';\n }\n\n public getTimePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n return 'col-sm-4 form-group';\n }\n\n public setDateTime(setDate, setTime) {\n const newDate = moment(setDate).format('DD-MM-YYYY');\n let newTime;\n if (this.showTime) {\n newTime = moment(setTime).format('HH:mm:ss');\n } else {\n newTime = '00:00:00';\n }\n const newDateTime = moment(newDate + '' + newTime, 'DD-MM-YYYY HH:mm:ss');\n const dateTimeString = moment(newDateTime).format();\n this.selectedDate = dateTimeString;\n this.selectedTime = dateTimeString;\n this.value = dateTimeString;\n this.onChange(this.value);\n\n return dateTimeString;\n }\n\n onOpen() {\n if (this._showHolidays) {\n const calendarBody = document.querySelector('.mat-calendar-content');\n if (calendarBody) {\n this.observer = new MutationObserver(() => {\n this.highlightHolidays();\n });\n this.observer.observe(calendarBody, {\n childList: true,\n subtree: true\n });\n }\n }\n }\n\n onClose() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n\n public highlightHolidays() {\n const isMonthView = !!document.querySelector('mat-month-view');\n if (!isMonthView) {\n const calendarCells = document.querySelectorAll(\n '.mat-calendar-body-cell'\n );\n for (let i = 0; i < calendarCells.length; i++) {\n calendarCells[i].classList.remove('highlight-date');\n calendarCells[i].removeAttribute('data-tooltip');\n }\n return;\n }\n\n const cells = document.querySelectorAll('.mat-calendar-body-cell');\n for (let i = 0; i < cells.length; i++) {\n const cell = cells[i];\n const date = new Date(cell.getAttribute('aria-label'));\n const cellDate = moment(date).format('YYYY-MM-DD');\n\n const holidays = this.dataSource.filter((v) => v.date === cellDate);\n if (holidays.length > 0) {\n const holidayName = holidays\n .map((h) => h.name)\n .sort()\n .join('\\n\\n');\n cell.classList.add('highlight-date');\n cell.setAttribute('data-tooltip', holidayName);\n } else {\n cell.classList.remove('highlight-date');\n cell.removeAttribute('data-tooltip');\n }\n }\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport {\n MatNativeDateModule,\n MatInputModule,\n MatTooltipModule\n} from '@angular/material';\nimport { NgxDateTimePickerComponent } from './ngx-date-time-picker.component';\n// import { AmazingTimePickerModule } from 'amazing-time-picker';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n DateTimePickerModule,\n // AmazingTimePickerModule,\n MatSelectModule,\n MatTooltipModule\n ],\n declarations: [NgxDateTimePickerComponent],\n exports: [\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n NgxDateTimePickerComponent\n ],\n providers: []\n})\nexport class NgxDateTimePickerModule {}\n","import { SelectOption } from './interfaces/select-option';\nexport class Option {\n label: string;\n value: any;\n constructor(options: SelectOption) {\n this.label = options.label;\n this.value = options.value;\n }\n}\n","import { Component, Input, forwardRef, OnInit, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { Option } from '../form-entry/question-models/select-option';\n\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\n@Component({\n selector: 'afe-ng-select',\n template: `<ng-select\n (searchInputText)=\"getChangingText($event)\"\n (ngModelChange)=\"onValueChange($event)\"\n [options]=\"question_options\"\n [multiple]=\"multiple\"\n >\n </ng-select> `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfeNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class AfeNgSelectComponent\n implements ControlValueAccessor, OnInit, OnChanges {\n subject: BehaviorSubject<Option[]>;\n subjectOption: BehaviorSubject<Option>;\n @Input() dataSource: DataSource;\n @Input() multiple: boolean;\n @Input() extras: any;\n question_options: any = [];\n selected_question_option: any;\n errors: any = [];\n propagateChange = (_: any) => {};\n\n getChangingText(event) {\n // console.log(event);\n this.getData(event).subscribe((options) => {\n this.question_options = options;\n });\n }\n\n writeValue(obj: any): void {}\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {}\n\n ngOnChanges(changes: any) {}\n\n ngOnInit() {\n if (this.extras) {\n if (this.extras.originalValue) {\n this.resolveSelectedOption(this.extras.originalValue).subscribe(\n (option) => {\n this.selected_question_option = option;\n }\n );\n }\n }\n }\n\n getData(searchText: string): Observable<Option[]> {\n this.subject = new BehaviorSubject<Option[]>([]);\n\n const OptionsObservable = this.dataSource.searchOptions(searchText);\n\n OptionsObservable.subscribe(\n (options) => {\n // console.log('options', options);\n const mappedOptions: Option[] = new Array<Option>();\n\n for (let i = 0; i < options.length; i++) {\n mappedOptions.push(new Option(options[i]));\n }\n this.subject.next(mappedOptions);\n },\n (error) => {\n this.subject.error(error);\n }\n );\n\n return this.subject.asObservable();\n }\n\n onValueChange(event) {}\n resolveSelectedOption(value: any): Observable<Option> {\n this.subjectOption = new BehaviorSubject<Option>(null);\n const OptionObservable = this.dataSource.resolveSelectedValue(value);\n\n OptionObservable.subscribe(\n (option) => {\n // console.log('option', option);\n this.subjectOption.next(option);\n },\n (error) => {\n this.subjectOption.error(error);\n }\n );\n\n return this.subjectOption.asObservable();\n }\n\n resetOptions() {\n this.subject.next(new Array<Option>());\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Injectable()\nexport class FormSchemaCompiler {\n constructor() {}\n\n public compileFormSchema(\n formSchema: Object,\n referencedComponents: Array<any>\n ): Object {\n // get all referenced forms\n const refForms: Object = this.getReferencedForms(\n formSchema,\n referencedComponents\n );\n if (_.isEmpty(refForms)) {\n return formSchema;\n }\n\n // get all place-holders from the form schema\n const placeHolders = this.getAllPlaceholderObjects(formSchema);\n if (_.isEmpty(placeHolders)) {\n return formSchema;\n }\n\n // replace all placeHolders\n this.replaceAllPlaceholdersWithActualObjects(refForms, placeHolders);\n return formSchema;\n }\n\n private findSchemaByName(\n schemaArray: Array<any>,\n nameOfSchema: string\n ): Object {\n if (_.isEmpty(schemaArray) || _.isEmpty(nameOfSchema)) {\n return;\n }\n let foundSchema: any = {};\n _.each(schemaArray, (schema: any) => {\n if (schema.name === nameOfSchema) {\n foundSchema = schema;\n }\n });\n return foundSchema;\n }\n\n private getPageInSchemaByLabel(schema: any, pageLabel: string): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel)) {\n return;\n }\n let foundPage: Object = {};\n _.each(schema.pages, (page) => {\n if (page.label === pageLabel) {\n foundPage = page;\n }\n });\n return foundPage;\n }\n\n private getSectionInSchemaByPageLabelBySectionLabel(\n schema: Object,\n pageLabel: string,\n sectionLabel: string\n ): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel) || _.isEmpty(sectionLabel)) {\n return;\n }\n const foundPage: any = this.getPageInSchemaByLabel(schema, pageLabel);\n if (_.isEmpty(foundPage)) {\n return;\n }\n let foundSection: Object = {};\n _.each(foundPage.sections, (section) => {\n if (section.label === sectionLabel) {\n foundSection = section;\n }\n });\n return foundSection;\n }\n\n private getQuestionByIdInSchema(schema: any, questionId: string): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n if (Array.isArray(schema)) {\n let question: Array<any>;\n for (let i = 0; i < schema.length; i++) {\n if (!_.isEmpty(schema[i])) {\n question = this.getQuestionByIdInSchema(schema[i], questionId);\n }\n if (!_.isEmpty(question)) {\n break;\n }\n }\n return question;\n } else if (typeof schema === 'object') {\n if (this.isQuestionObjectWithId(schema, questionId)) {\n return schema;\n } else if (this.isSchemaSubObjectExpandable(schema)) {\n const toExpand = schema.pages || schema.sections || schema.questions;\n return this.getQuestionByIdInSchema(toExpand, questionId);\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n private getQuestionsArrayByQuestionIdInSchema(\n schema: any,\n questionId: string\n ): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n return this.getQuestionsArrayByQuestionId(schema, schema, questionId);\n }\n\n private getQuestionsArrayByQuestionId(\n parent: any,\n object: any,\n questionId: string\n ): Array<any> {\n if (Array.isArray(object)) {\n let returnedValue: Array<any>;\n for (let i = 0; i < object.length; i++) {\n if (!_.isEmpty(object[i])) {\n returnedValue = this.getQuestionsArrayByQuestionId(\n object,\n object[i],\n questionId\n );\n }\n if (!_.isEmpty(returnedValue)) {\n break;\n }\n }\n\n return returnedValue;\n } else if (typeof object === 'object') {\n if (this.isQuestionObjectWithId(object, questionId)) {\n return parent;\n } else if (this.isSchemaSubObjectExpandable(object)) {\n const toExpand = object.pages || object.sections || object.questions;\n return this.getQuestionsArrayByQuestionId(\n toExpand,\n toExpand,\n questionId\n );\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n // object is page or section or question\n private isSchemaSubObjectExpandable(object: Object): Boolean {\n if (typeof object === 'object') {\n const objectKeys = Object.keys(object);\n if (\n _.includes(objectKeys, 'pages') ||\n _.includes(objectKeys, 'sections') ||\n _.includes(objectKeys, 'questions')\n ) {\n return true;\n }\n }\n return false;\n }\n\n private isQuestionObjectWithId(object: Object, id: any): Boolean {\n return object['id'] === id;\n }\n\n private getAllPlaceholderObjects(schema: Object): Array<any> {\n const referencedObjects: Array<any> = [];\n this.extractPlaceholderObjects(schema, referencedObjects);\n return referencedObjects;\n }\n\n private extractPlaceholderObjects(\n subSchema: any,\n objectsArray: Array<Object>\n ): void {\n if (_.isEmpty(subSchema)) {\n return;\n }\n if (Array.isArray(subSchema)) {\n for (let i = 0; i < subSchema.length; i++) {\n if (!_.isEmpty(subSchema[i])) {\n this.extractPlaceholderObjects(subSchema[i], objectsArray);\n }\n }\n } else if (typeof subSchema === 'object') {\n if (!_.isEmpty(subSchema.reference)) {\n objectsArray.push(subSchema);\n } else if (this.isSchemaSubObjectExpandable(subSchema)) {\n const toExpand =\n subSchema.pages || subSchema.sections || subSchema.questions;\n this.extractPlaceholderObjects(toExpand, objectsArray);\n }\n }\n }\n\n private fillPlaceholderObject(\n placeHolderObject: Object,\n referenceObject: Object\n ): Object {\n for (const member in referenceObject) {\n if (_.isEmpty(placeHolderObject[member])) {\n placeHolderObject[member] = referenceObject[member];\n }\n }\n return placeHolderObject;\n }\n\n private replaceAllPlaceholdersWithActualObjects(\n keyValReferencedForms: Object,\n placeHoldersArray: Array<any>\n ): Array<any> {\n _.each(placeHoldersArray, (placeHolder) => {\n const referencedObject: Object = this.getReferencedObject(\n placeHolder.reference,\n keyValReferencedForms\n );\n\n if (_.isEmpty(referencedObject)) {\n console.error(\n 'Form compile: Error finding referenced object',\n placeHolder.reference\n );\n } else {\n placeHolder = this.fillPlaceholderObject(placeHolder, referencedObject);\n placeHolder = this.removeExcludedQuestionsFromPlaceholder(placeHolder);\n delete placeHolder['reference'];\n }\n });\n return placeHoldersArray;\n }\n\n private removeObjectFromArray(array: Array<any>, object: Object): void {\n const indexOfObject = array.indexOf(object);\n if (indexOfObject === -1) {\n return;\n }\n\n array.splice(indexOfObject, 1);\n }\n\n private removeExcludedQuestionsFromPlaceholder(placeHolder: any): Object {\n if (Array.isArray(placeHolder.reference.excludeQuestions)) {\n _.each(placeHolder.reference.excludeQuestions, (excludedQuestionId) => {\n const questionsArray: Array<any> = this.getQuestionsArrayByQuestionIdInSchema(\n placeHolder,\n excludedQuestionId\n );\n\n if (!Array.isArray(questionsArray)) {\n return;\n }\n const question = this.getQuestionByIdInSchema(\n questionsArray,\n excludedQuestionId\n );\n\n this.removeObjectFromArray(questionsArray, question);\n });\n }\n return placeHolder;\n }\n\n private getReferencedObject(\n referenceData: any,\n keyValReferencedForms: Object\n ): Object {\n if (_.isEmpty(referenceData.form)) {\n console.error(\n 'Form compile: reference missing form attribute',\n referenceData\n );\n return;\n }\n if (_.isEmpty(keyValReferencedForms[referenceData.form])) {\n console.error(\n 'Form compile: referenced form alias not found',\n referenceData\n );\n return;\n }\n if (!_.isEmpty(referenceData.questionId)) {\n return this.getQuestionByIdInSchema(\n keyValReferencedForms[referenceData.form],\n referenceData.questionId\n );\n }\n\n if (!_.isEmpty(referenceData.page) && !_.isEmpty(referenceData.section)) {\n return this.getSectionInSchemaByPageLabelBySectionLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page,\n referenceData.section\n );\n }\n if (!_.isEmpty(referenceData.page)) {\n return this.getPageInSchemaByLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page\n );\n }\n console.error(\n 'Form compile: Unsupported reference type',\n referenceData.reference\n );\n }\n\n private getReferencedForms(\n formSchema: any,\n formSchemasLookupArray: Array<any>\n ): Object {\n const referencedForms: Array<any> = formSchema.referencedForms;\n\n if (_.isEmpty(referencedForms)) {\n return;\n }\n\n const keyValReferencedForms: Object = {};\n\n _.each(referencedForms, (reference: any) => {\n keyValReferencedForms[reference.alias] = this.findSchemaByName(\n formSchemasLookupArray,\n reference.formName\n );\n });\n return keyValReferencedForms;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TextQuestionOptions } from './interfaces/text-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextInputQuestion extends QuestionBase {\n placeholder: string;\n constructor(options: TextQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { TextInputQuestion } from './text-input-question';\nimport { TextAreaQuestionOptions } from './interfaces/text-area-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextAreaInputQuestion extends TextInputQuestion {\n isExpanded: boolean;\n rows: number;\n\n constructor(options: TextAreaQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.isExpanded = options.isExpanded || false;\n this.rows = options.rows || 18;\n this.renderingType = 'textarea';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { SelectQuestionOptions } from './interfaces/select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class SelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n dataSource?: any;\n\n constructor(options: SelectQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n this.dataSource = options.dataSource || '';\n }\n}\n","import { QuestionBase } from './question-base';\nimport { UiSelectQuestionOptions } from './interfaces/ui-select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class UiSelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n searchFunction: Function;\n resolveFunction: Function;\n constructor(options: UiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'ui-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { DateQuestionOptions } from './interfaces/date-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class DateQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n showHolidays = true;\n dataSource?: any;\n\n constructor(options: DateQuestionOptions) {\n super(options);\n this.renderingType = 'date';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { SelectQuestion } from './select-question';\nimport { MultiSelectQuestionOptions } from './interfaces/multi-select-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class MultiSelectQuestion extends SelectQuestion {\n options: { key: string; value: string }[];\n\n constructor(options: MultiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'multi-select' || 'single-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from '../question-base';\nimport { BaseOptions } from './base-options';\n\nexport abstract class NestedQuestion extends QuestionBase {\n abstract questions: QuestionBase[];\n constructor(options: BaseOptions) {\n super(options);\n }\n}\n","import { QuestionBase } from './question-base';\nimport { GroupQuestionOptions } from './interfaces/group-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class QuestionGroup extends NestedQuestion {\n questions: QuestionBase[];\n isExpanded = true;\n\n constructor(options: GroupQuestionOptions) {\n super(options);\n this.renderingType = 'group';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormGroup;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { RepeatingQuestionOptions } from './interfaces/repeating-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class RepeatingQuestion extends NestedQuestion {\n questions: QuestionBase[];\n\n constructor(options: RepeatingQuestionOptions) {\n super(options);\n this.renderingType = 'repeating';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormArray;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { CheckboxOptions } from './interfaces/checkbox-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class CheckBoxQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n\n constructor(options: CheckboxOptions) {\n super(options);\n this.renderingType = 'checkbox' || 'radio';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TimeQuestionOptions } from './interfaces/time-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TimeQuestion extends QuestionBase {\n constructor(options: TimeQuestionOptions) {\n super(options);\n this.renderingType = 'time';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { FileUploadQuestionOptions } from './interfaces/file-upload-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class FileUploadQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n dataSource?: any;\n constructor(options: FileUploadQuestionOptions) {\n super(options);\n this.renderingType = 'file';\n this.dataSource = options.dataSource;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TestOrderQuestionOptions } from './interfaces/test-order-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TestOrderQuestion extends QuestionBase {\n orderType: string;\n selectableOrders: { concept: string; label: string }[];\n orderSettingUuid: string;\n rendering: string;\n options: any[];\n constructor(options: TestOrderQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.orderType = options.orderType;\n this.selectableOrders = options.selectableOrders;\n this.options = options.options;\n this.orderSettingUuid = options.orderSettingUuid;\n this.rendering = options.orderSettingUuid;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class DateValidationModel extends ValidationModel {\n allowFutureDates = false;\n\n constructor(validations: any) {\n super(validations);\n\n this.allowFutureDates =\n validations.allowFutureDates === 'true' ? true : false;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MaxValidationModel extends ValidationModel {\n max: number;\n\n constructor(validations: any) {\n super(validations);\n const max: any = validations.max;\n this.max = +max;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MinValidationModel extends ValidationModel {\n min: number;\n\n constructor(validations: any) {\n super(validations);\n const min: any = validations.min;\n this.min = +min;\n }\n}\n","export class DecimalPointValidationModel {\n type: string;\n message: string;\n decimalPlace = 0;\n failsWhenExpression = '';\n\n constructor(validations: any) {\n this.type = 'js_expression';\n this.decimalPlace = validations.decimalPlace;\n }\n setFailExpression(): void {\n this.failsWhenExpression = `!isEmpty(myValue) && String(myValue).split('.')[1].length !== ${this.decimalPlace}`;\n }\n setMessage() {\n this.message = `Value must be to ${this.decimalPlace} decimal places`;\n }\n setValuesAndExpressions() {\n this.setMessage();\n this.setFailExpression();\n }\n}\n","import { Option } from '../question-models/select-option';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\n\nexport class DummyDataSource implements DataSource {\n options: Observable<Option[]>;\n option: Observable<Option>;\n returnErrorOnNext = false;\n\n constructor() {}\n\n resolveSelectedValue(value): Observable<Option> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter((option) => option.value === value);\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions[0]);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n fileUpload(url) {\n return of({ image: '' });\n }\n fetchFile(url) {\n return of({ image: '' });\n }\n searchOptions(searchText): Observable<Option[]> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter(\n (option) => option.label.indexOf(searchText) !== -1\n );\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n\n sampleData(): any {\n return [\n {\n concept: 'a899e0ac-1350-11df-a1f1-0026b9348838',\n label: 'None'\n },\n {\n concept: 'a8ad1276-1350-11df-a1f1-0026b9348838',\n label: 'Breathlessness'\n },\n {\n concept: 'a892e4b4-1350-11df-a1f1-0026b9348838',\n label: 'Chest pain'\n },\n {\n concept: 'a8afc8b8-1350-11df-a1f1-0026b9348838',\n label: 'Cough = 2 weeks'\n },\n {\n concept: 'd7adae14-c386-49cc-8f7c-765d8ceec566',\n label: 'Fever for = 2 weeks'\n },\n {\n concept: '3f57aafc-7162-41da-a51b-6a804cb6f5e8',\n label: 'New exposure to household contact with TB'\n },\n {\n concept: 'a89807f0-1350-11df-a1f1-0026b9348838',\n label: 'Noticeable Weight loss'\n },\n {\n concept: 'e1862fef-68ed-4df4-90dd-a00152f719aa',\n label: 'Night sweats = 2 weeks'\n },\n {\n concept: 'a8ad462e-1350-11df-a1f1-0026b9348838',\n label: 'Abdomen'\n },\n {\n concept: 'f218c60e-4b54-475a-a4fa-facab9216da8',\n label: 'Groin'\n },\n {\n concept: 'a8a774b0-1350-11df-a1f1-0026b9348838',\n label: 'Joints'\n },\n {\n concept: '4639388c-ee31-4dcf-abb4-ad71253493bb',\n label: 'Neck Kw'\n }\n ];\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class HistoricalEncounterDataService {\n dataSources: any = {};\n constructor() {}\n\n registerEncounters(name: string, encounters: any) {\n const encStore: any = {\n data: [],\n getValue: (key: string, index = 0): any => {\n const pathArray = key.split('.');\n if (pathArray.length > 0) {\n return this.getFirstValue(pathArray, encStore.data[index]);\n }\n return encStore.data[index][key];\n },\n getAllObjects: () => {\n return encStore.data;\n },\n getSingleObject: (index = 0) => {\n return encStore.data[index];\n }\n };\n\n if (_.isArray(encounters)) {\n const group: Array<any> = [];\n _.each(encounters, (encounter) => {\n group.push(this._transformEncounter(encounter));\n });\n\n // Sort them in reverse chronological order\n encStore.data = _.sortBy(group, 'encounterDatetime').reverse();\n } else {\n // Assume a single openmrs rest encounter object.\n encStore.data.push(this._transformEncounter(encounters));\n }\n\n this.putObject(name, encStore);\n }\n\n putObject(name, object): void {\n this.dataSources[name] = object;\n }\n\n getObject(name: string): any {\n return this.dataSources[name] || null;\n }\n\n getFirstValue(path: Array<string>, object: any): any {\n const answers = [];\n\n this.getAllValues(path, object, answers);\n\n if (answers.length > 0) {\n return {\n value: answers[0],\n valueDate: moment(object.encounterDatetime).format('ll')\n };\n }\n }\n\n getAllValues(path, object, answers) {\n if (_.isNil(object)) {\n return;\n }\n\n if (path.length <= 1) {\n if (!_.isNil(object[path[0]])) {\n answers.push(object[path[0]]);\n }\n return;\n }\n\n const newpath = path.splice(1);\n const key = path[0];\n\n if (_.isArray(object[key]) && object[key].length > 0) {\n _.each(object[key], (childObject) => {\n this.getAllValues(newpath.slice(0), childObject, answers);\n });\n } else {\n this.getAllValues(newpath.slice(0), object[key], answers);\n }\n }\n\n private _transformEncounter(encounter: any) {\n if (_.isNil(encounter)) {\n return;\n }\n // Transform encounter Level details to key value pairs.\n const prevEncounter: any = {\n encounterDatetime: encounter.encounterDatetime\n };\n\n if (encounter.location && encounter.location.uuid) {\n prevEncounter.location = encounter.location.uuid;\n }\n\n if (encounter.patient && encounter.patient.uuid) {\n prevEncounter.patient = encounter.patient.uuid;\n }\n\n if (encounter.form && encounter.form.uuid) {\n prevEncounter.form = encounter.form.uuid;\n }\n\n if (encounter.encounterType && encounter.encounterType.uuid) {\n prevEncounter.encounterType = encounter.encounterType.uuid;\n }\n\n if (encounter.provider) {\n const provider = encounter.provider;\n prevEncounter.provider = provider.uuid;\n }\n\n // Deal with obs.\n if (encounter.obs) {\n const processedObs: any = this._transformObs(encounter.obs);\n\n // add in individual processed obs to prevEncounter\n _.extend(prevEncounter, processedObs);\n }\n\n return prevEncounter;\n }\n\n private _transformObs(obs: any): any {\n if (!obs) {\n return null;\n }\n\n const obsRep: any = {};\n if (_.isArray(obs)) {\n _.each(obs, (singleObs) => {\n this._augumentObs(obsRep, this._transformObs(singleObs));\n });\n return obsRep;\n } else if (obs.groupMembers) {\n const group: any = {};\n _.each(obs.groupMembers, (member) => {\n this._augumentObs(group, this._transformObs(member));\n });\n\n // Handle already existing data\n if (obsRep[obs.concept.uuid] && _.isArray(obsRep[obs.concept.uuid])) {\n obsRep[obs.concept.uuid].push(group);\n } else {\n obsRep[obs.concept.uuid] = [group];\n }\n return obsRep;\n } else {\n if (obs.value instanceof Object) {\n obsRep[obs.concept.uuid] = obs.value.uuid;\n } else {\n obsRep[obs.concept.uuid] = obs.value;\n }\n return obsRep;\n }\n }\n\n private _augumentObs(existing: any, toAdd: any): any {\n for (const key in toAdd) {\n if (_.has(existing, key)) {\n // check if not an array yet\n if (!_.isArray(existing[key])) {\n const temp = existing[key];\n existing[key] = [temp];\n }\n\n // Check whether the incoming is array (for group members)\n if (_.isArray(toAdd[key])) {\n Array.prototype.push.apply(existing[key], toAdd[key]);\n } else {\n existing[key].push(toAdd[key]);\n }\n } else {\n existing[key] = toAdd[key];\n }\n }\n return existing;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { HistoricalEncounterDataService } from '../services/historical-encounter-data.service';\nimport { JsExpressionHelper } from './js-expression-helper';\nimport {\n Runnable,\n ExpressionRunner\n} from '../expression-runner/expression-runner';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\n@Injectable()\nexport class HistoricalHelperService {\n constructor() {}\n\n public evaluate(\n expr: string,\n dataSources: any,\n additionalScopevalues: any\n ): any {\n const HD = new HistoricalEncounterDataService();\n HD.registerEncounters('prevEnc', dataSources['rawPrevEnc']);\n const deps: any = {\n HD: HD\n };\n\n if (additionalScopevalues) {\n for (const o in additionalScopevalues) {\n if (additionalScopevalues[o]) {\n deps[o] = additionalScopevalues[o];\n }\n }\n }\n\n const helper = new JsExpressionHelper();\n const control: AfeFormControl = new AfeFormControl();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n expr,\n control,\n helper.helperFunctions,\n deps\n );\n\n return runnable.run();\n }\n\n public evaluatePrecondition(\n expr: string,\n dataSources: any,\n historicalValue: any\n ): any {\n const additionalScope = {\n histValue: historicalValue\n };\n\n return this.evaluate(expr, dataSources, additionalScope);\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport { TextInputQuestion } from '../question-models/text-input-question';\nimport { TextAreaInputQuestion } from '../question-models/text-area-input-question';\nimport { SelectQuestion } from '../question-models/select-question';\nimport { UiSelectQuestion } from '../question-models/ui-select-question';\nimport { DateQuestion } from '../question-models/date-question';\nimport { TimeQuestion } from './../question-models/time-question';\nimport { MultiSelectQuestion } from '../question-models/multi-select-question';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { RepeatingQuestion } from '../question-models/repeating-question';\nimport { QuestionBase } from '../question-models/question-base';\nimport { FileUploadQuestion } from '../question-models/file-upload-question';\nimport { TestOrderQuestion } from '../question-models/test-order-question';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { DecimalPointValidationModel } from '../question-models/decimal-point-validation.model';\nimport { DummyDataSource } from '../data-sources/dummy-data-source';\nimport { HistoricalHelperService } from '../helpers/historical-expression-helper-service';\nimport { Form } from './form';\nimport { CheckBoxQuestion } from '../question-models/models';\n\nexport class QuestionFactory {\n dataSources: any = {};\n historicalHelperService: HistoricalHelperService = new HistoricalHelperService();\n constructor() {}\n\n createQuestionModel(formSchema: any, form?: Form): QuestionBase {\n if (form) {\n const dataSources = form.dataSourcesContainer.dataSources;\n this.dataSources = dataSources;\n }\n return this.toFormQuestionModel(formSchema);\n }\n\n toSelectQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n\n const options: any = question.options;\n options.splice(0, 0, {\n label: '',\n value: ''\n });\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumericQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumberQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDecimalQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'decimal';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDateQuestion(schemaQuestion: any): DateQuestion {\n if (schemaQuestion.type === 'encounterDatetime') {\n return this.toEncounterDatetimeQuestion(schemaQuestion);\n }\n const question = new DateQuestion({ type: '', key: '' });\n question.renderingType = 'date';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showTime = schemaQuestion.questionOptions.showTime as boolean;\n question.showHolidays = schemaQuestion.questionOptions\n .showHolidays as boolean;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n question.dataSource = 'holidays';\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTimeQuestion(schemaQuestion: any): TimeQuestion {\n const question = new TimeQuestion({ type: '', key: '' });\n question.renderingType = 'time';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterDatetimeQuestion(schemaQuestion: any): DateQuestion {\n const question = new DateQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.renderingType = 'date';\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showHolidays = schemaQuestion.questionOptions\n .showHolidays as boolean;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n question.showTime = true;\n\n question.dataSource = 'holidays';\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toCheckBoxQuestion(schemaQuestion: any): CheckBoxQuestion {\n const question = new CheckBoxQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.answers.map((obj) => {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.options.splice(0, 0);\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n const mappings: any = {\n label: 'label',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toMultiCheckboxQuestion(schemaQuestion: any): MultiSelectQuestion {\n const question = new MultiSelectQuestion({\n renderType: '',\n options: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.validators = this.addValidators(schemaQuestion);\n question.dataSource = new DummyDataSource();\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextAreaQuestion(schemaQuestion: any): TextAreaInputQuestion {\n const question = new TextAreaInputQuestion({\n isExpanded: false,\n rows: 18,\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.isExpanded = schemaQuestion.isExpanded;\n question.rows = schemaQuestion.questionOptions.rows;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFileUploadQuestion(schemaQuestion: any): FileUploadQuestion {\n const question = new FileUploadQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'file';\n question.dataSource = 'file';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDrugQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'drug';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toProblemQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'problem';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toConceptAnswerSelect(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource =\n schemaQuestion.questionOptions.dataSource || 'conceptAnswers';\n question.dataSourceOptions = {\n concept: schemaQuestion.questionOptions.concept\n };\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toRepeatingQuestion(schemaQuestion: any): RepeatingQuestion {\n const question = new RepeatingQuestion({\n questions: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n if (schemaQuestion.type === 'testOrder') {\n const testOrder = this.toTestOrderQuestion(schemaQuestion);\n const orders = [];\n orders.push(testOrder);\n question.questions = orders;\n }\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toGroupQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toPageQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'page';\n question.controlType = AfeControlType.None;\n question.questions = [];\n schemaQuestion.sections.forEach((element) => {\n question.questions.push(this.toSectionQuestion(element));\n });\n return question;\n }\n\n toFormQuestionModel(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'form';\n question.controlType = AfeControlType.AfeFormGroup;\n question.extras = schemaQuestion;\n question.questions = [];\n schemaQuestion.pages.forEach((element) => {\n question.questions.push(this.toPageQuestion(element));\n });\n\n return question;\n }\n\n toSectionQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'section';\n question.controlType = AfeControlType.None;\n question.isExpanded = schemaQuestion.isExpanded === 'true' ? true : false;\n question.questions = this.getSchemaQuestions(schemaQuestion.questions);\n return question;\n }\n\n toPersonAttributeQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAttribute';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterProviderQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'provider';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFieldSetQuestion(schemaQuestion: any): QuestionGroup {\n const toReturn = this.toGroupQuestion(schemaQuestion);\n toReturn.renderingType = 'field-set';\n return toReturn;\n }\n\n toEncounterLocationQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'location';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'amrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toSiblingLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'siblingLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNonAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'nonAmrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTestOrderQuestion(schemaQuestion: any): TestOrderQuestion {\n const question = new TestOrderQuestion({\n type: '',\n key: '',\n orderType: '',\n selectableOrders: [],\n orderSettingUuid: '',\n label: '',\n rendering: ''\n });\n\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.selectableOrders.map(\n function (obj) {\n return {\n label: obj.label,\n value: obj.concept\n };\n }\n );\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n this.copyProperties(mappings, schemaQuestion, question);\n return question;\n }\n\n getSchemaQuestions(schema: any): any {\n const listQuestions = new Array();\n this.getQuestions(schema, listQuestions);\n return listQuestions;\n }\n\n getQuestions(schema: any, foundArray: any): any {\n if (!Array.isArray(foundArray)) {\n foundArray = [];\n }\n if (Array.isArray(schema)) {\n for (const property in schema) {\n if (schema.hasOwnProperty(property)) {\n this.getQuestions(schema[property], foundArray);\n }\n }\n }\n\n if (schema && !Array.isArray(schema) && typeof schema === 'object') {\n if (schema.questionOptions) {\n if (\n schema.questionOptions.rendering === 'group' ||\n schema.questionOptions.rendering === 'repeating'\n ) {\n // schema.questions = this.getGroupMembers(schema.questions);\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n } else if (schema.questionOptions.rendering === 'field-set') {\n } else {\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n }\n } else {\n for (const o in schema) {\n if (schema.hasOwnProperty(o)) {\n this.getQuestions(schema[o], foundArray);\n }\n }\n }\n }\n }\n\n getChildrenQuestionModels(schema: any): any {\n const children = [];\n this.getQuestions(schema, children);\n return children;\n }\n\n toModel(schema: any, renderType: string): any {\n if (renderType === 'ui-select-extended') {\n renderType = schema.type;\n }\n if (!schema.id) {\n schema['id'] = this.generateId(10);\n }\n\n if (\n schema.questionOptions &&\n (schema.questionOptions.showDate === true ||\n schema.questionOptions.showDate === 'true')\n ) {\n schema = this.convertOldVersionComplexObsQuestionToNewVersion(schema);\n renderType = 'field-set';\n }\n\n switch (renderType) {\n case 'select':\n return this.toSelectQuestion(schema);\n case 'single-select':\n return this.toSelectQuestion(schema);\n case 'multi-select':\n return this.toSelectQuestion(schema);\n case 'numeric':\n return this.toNumericQuestion(schema);\n case 'number':\n return this.toNumberQuestion(schema);\n case 'decimal':\n return this.toDecimalQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'date':\n return this.toDateQuestion(schema);\n case 'time':\n return this.toTimeQuestion(schema);\n case 'multiCheckbox':\n return this.toMultiCheckboxQuestion(schema);\n case 'drug':\n return this.toDrugQuestion(schema);\n case 'problem':\n return this.toProblemQuestion(schema);\n case 'group':\n return this.toGroupQuestion(schema);\n case 'field-set':\n return this.toFieldSetQuestion(schema);\n case 'repeating':\n return this.toRepeatingQuestion(schema);\n case 'personAttribute':\n return this.toPersonAttributeQuestion(schema);\n case 'text':\n return this.toTextQuestion(schema);\n case 'textarea':\n return this.toTextAreaQuestion(schema);\n case 'select-concept-answers':\n return this.toConceptAnswerSelect(schema);\n case 'encounterLocation':\n return this.toEncounterLocationQuestion(schema);\n case 'amrsLocations':\n return this.toAmrsLocationsQuestion(schema);\n case 'nonAmrsLocations':\n return this.toNonAmrsLocationsQuestion(schema);\n case 'siblingLocations':\n return this.toSiblingLocationsQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'radio':\n return this.toCheckBoxQuestion(schema);\n case 'checkbox':\n return this.toCheckBoxQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'file':\n return this.toFileUploadQuestion(schema);\n default:\n console.warn('New Schema Question Type found.........' + renderType);\n return this.toTextQuestion(schema);\n }\n }\n\n convertOldVersionComplexObsQuestionToNewVersion(schemaQuestion: any) {\n const converted: any = {};\n converted.type = 'complex-obs';\n converted.label = schemaQuestion.label;\n converted.id = 'complex_' + schemaQuestion.id;\n converted.questionOptions = {};\n converted.questionOptions.concept = schemaQuestion.questionOptions.concept;\n converted.questionOptions.rendering = 'field-set';\n converted.questions = [];\n converted.validators = [];\n\n const mainField: any = JSON.parse(JSON.stringify(schemaQuestion));\n mainField.type = 'complex-obs-child';\n delete mainField.questionOptions.showDate;\n delete mainField.questionOptions.shownDateOptions;\n mainField.questionOptions.obsField = 'value';\n\n const dateField: any = {};\n dateField.type = 'complex-obs-child';\n dateField.label = 'Date of ' + mainField.label;\n dateField.id = 'date_' + mainField.id;\n dateField.questionOptions = {};\n dateField.questionOptions.concept = schemaQuestion.questionOptions.concept;\n dateField.questionOptions.rendering = 'date';\n dateField.questionOptions.obsField = 'obsDatetime';\n const dateOptions: any = (Object as any).assign(\n {},\n schemaQuestion.questionOptions.shownDateOptions\n );\n dateField.validators = dateOptions.validators;\n dateField.hide = dateOptions.hide;\n\n converted.questions.push(mainField);\n converted.questions.push(dateField);\n\n return converted;\n }\n\n copyProperties(mappings: any, source: any, destination: QuestionBase) {\n for (const property in source) {\n if (\n mappings.hasOwnProperty(property) &&\n destination.hasOwnProperty(mappings[property])\n ) {\n destination[mappings[property]] = source[property];\n }\n }\n }\n\n addValidators(schemaQuestion: any): Array<ValidationModel> {\n const validators: Array<ValidationModel> = [];\n\n if (schemaQuestion.validators) {\n // TODO - add more validator types\n _.forEach(schemaQuestion.validators, (validator: any) => {\n switch (validator.type) {\n case 'date':\n validators.push(new DateValidationModel(validator));\n break;\n case 'js_expression':\n validators.push(new JsExpressionValidationModel(validator));\n break;\n case 'decimal':\n const decimalModel = new DecimalPointValidationModel(validator);\n decimalModel.setValuesAndExpressions();\n validators.push(decimalModel);\n break;\n case 'conditionalAnswered':\n validators.push(new ConditionalValidationModel(validator));\n break;\n default:\n validators.push(new ValidationModel(validator));\n break;\n }\n });\n }\n\n const questionOptions = schemaQuestion.questionOptions;\n const renderingType = questionOptions ? questionOptions.rendering : '';\n if (renderingType === 'number' || renderingType === 'decimal') {\n if (questionOptions.max && questionOptions.min) {\n validators.push(\n new MaxValidationModel({\n type: 'max',\n max: questionOptions.max\n })\n );\n validators.push(\n new MinValidationModel({\n type: 'min',\n min: questionOptions.min\n })\n );\n }\n }\n\n // add conditional required validators\n if (typeof schemaQuestion.required === 'object') {\n const required: any = schemaQuestion.required;\n\n if (required.type === 'conditionalRequired') {\n validators.push(\n new ConditionalValidationModel({\n referenceQuestionId: required.referenceQuestionId,\n referenceQuestionAnswers: required.referenceQuestionAnswers,\n type: required.type,\n message: required.message\n })\n );\n }\n }\n\n return validators;\n }\n\n addHistoricalExpressions(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.historicalExpression &&\n schemaQuestion.historicalExpression.length > 0\n ) {\n question.setHistoricalValue(true);\n if (schemaQuestion.showHistoricalEncounterDate !== undefined) {\n question.showHistoricalEncounterDate(\n schemaQuestion.showHistoricalEncounterDate === 'true'\n );\n } else {\n question.showHistoricalEncounterDate();\n }\n const origValue = this.historicalHelperService.evaluate(\n schemaQuestion.historicalExpression,\n this.dataSources,\n undefined\n );\n question.historicalDataValue = origValue;\n // console.info('historical value', origValue);\n // console.info('historical data question :::', question);\n // console.info('schema data question :::', schemaQuestion);\n\n if (schemaQuestion.historicalPrepopulateCondition && origValue) {\n const toPopulate = this.historicalHelperService.evaluatePrecondition(\n schemaQuestion.historicalPrepopulateCondition,\n this.dataSources,\n origValue\n );\n\n if (toPopulate) {\n question.defaultValue = origValue.value;\n }\n return; // don't try to evaluate the other option\n }\n\n if (schemaQuestion.historicalPrepopulate && origValue) {\n // sample schema options for this branch\n // \"historicalPrepopulate\":true,\n // \"allowedHistoricalValueAgeInDays\": 40000,\n const valDate = moment(origValue.valueDate);\n const differenceInDays = moment().diff(valDate, 'days');\n if (Number.isInteger(schemaQuestion.allowedHistoricalValueAgeInDays)) {\n if (\n differenceInDays <= schemaQuestion.allowedHistoricalValueAgeInDays\n ) {\n question.defaultValue = origValue.value;\n }\n } else {\n question.defaultValue = origValue.value;\n }\n }\n }\n }\n\n addCalculatorProperty(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.questionOptions &&\n typeof schemaQuestion.questionOptions.calculate === 'object'\n ) {\n question.calculateExpression =\n schemaQuestion.questionOptions.calculate.calculateExpression;\n }\n }\n\n addAlertProperty(schemaQuestion: any, question: QuestionBase): any {\n if (schemaQuestion.alert) {\n question.alert = schemaQuestion.alert;\n }\n // if (typeof schemaQuestion.message === 'object') {\n // if (schemaQuestion.message.alertWhenExpression) {\n // question.message = schemaQuestion.message.alertWhenExpression;\n // }\n // }\n }\n\n addDisableOrHideProperty(schemaQuestion: any, question: QuestionBase): any {\n if (!!schemaQuestion.disable) {\n question.disable = schemaQuestion.disable;\n }\n\n if (typeof schemaQuestion.disable === 'object') {\n question.disable = schemaQuestion.disable.disableWhenExpression;\n }\n\n if (!!schemaQuestion.hide) {\n question.hide = schemaQuestion.hide;\n }\n if (typeof schemaQuestion.hide === 'object') {\n if (schemaQuestion.hide.hideWhenExpression) {\n question.hide = schemaQuestion.hide.hideWhenExpression;\n }\n }\n }\n private generateId(x) {\n let s = '_';\n while (s.length < x && x > 0) {\n const r = Math.random();\n s +=\n r < 0.1\n ? Math.floor(r * 100)\n : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65));\n }\n return '_' + s;\n }\n}\n","import { Injectable } from '@angular/core';\n// import { AbstractControl } from '@angular/forms';\n\nimport { LeafNode, GroupNode, ArrayNode, NodeBase } from './form-node';\nimport {\n QuestionBase,\n NestedQuestion,\n RepeatingQuestion,\n QuestionGroup\n} from '../question-models/models';\nimport { FormControlService } from './form-control.service';\nimport { QuestionFactory } from './question.factory';\nimport {\n AfeFormGroup,\n AfeControlType,\n AfeFormArray\n} from '../../abstract-controls-extension';\nimport { ControlRelationsFactory } from './control-relations.factory';\nimport { Validations } from '../validators/validations';\n\nimport { Form } from './form';\n\n@Injectable()\nexport class FormFactory {\n public hd: any = {\n getValue: () => {\n return 20;\n }\n };\n\n constructor(\n public controlService: FormControlService,\n public questionFactroy: QuestionFactory,\n public controlRelationsFactory: ControlRelationsFactory\n ) {}\n\n createForm(schema: any, dataSource?: any): Form {\n const form: Form = new Form(schema, this, this.questionFactroy);\n if (dataSource) {\n for (const key in dataSource) {\n if (dataSource.hasOwnProperty(key)) {\n form.dataSourcesContainer.registerDataSource(\n key,\n dataSource[key],\n false\n );\n }\n }\n }\n const question = this.questionFactroy.createQuestionModel(schema, form);\n form.rootNode = this.createNode(question, null, null, form) as GroupNode;\n\n this.buildRelations(form.rootNode);\n form.updateHiddenDisabledStateForAllControls();\n form.updateAlertsForAllControls();\n return form;\n }\n\n buildRelations(rootNode: GroupNode) {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildRelations(rootNode);\n\n // enable js expression validations\n Validations.JSExpressionValidatorsEnabled = true;\n }\n\n createNode(\n question: QuestionBase | NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): NodeBase {\n let node: NodeBase = null;\n if (question instanceof NestedQuestion) {\n if (question instanceof RepeatingQuestion) {\n node = this.createArrayNode(question, parentNode, parentControl, form);\n } else {\n node = this.createGroupNode(question, parentNode, parentControl, form);\n }\n } else {\n node = this.createLeafNode(question, parentNode, parentControl, form);\n }\n return node;\n }\n\n createLeafNode(\n question: QuestionBase,\n parentNode: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): LeafNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n );\n return new LeafNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n }\n\n createGroupNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): GroupNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const groupNode = new GroupNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n this.createNodeChildren(\n question,\n groupNode,\n controlModel || parentControl,\n form\n );\n return groupNode;\n }\n\n createArrayNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): ArrayNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const arrayNode = new ArrayNode(\n question,\n controlModel,\n parentControl,\n this,\n form,\n parentNode ? parentNode.path : undefined\n );\n arrayNode.createChildFunc = this.createArrayNodeChild;\n arrayNode.removeChildFunc = this.removeArrayNodeChild;\n\n arrayNode.addChildNodeCreatedListener((node: GroupNode) => {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildArrayNodeRelations(node);\n Validations.JSExpressionValidatorsEnabled = true;\n });\n return arrayNode;\n }\n\n createNodeChildren(\n question: NestedQuestion,\n node: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): any {\n question.questions.forEach((element) => {\n const child = this.createNode(element, node, parentControl, form);\n node.setChild(element.key, child);\n });\n return node.children;\n }\n\n createArrayNodeChild(\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n ): GroupNode {\n if (factory === null || factory === undefined) {\n factory = this;\n }\n const groupQuestion: QuestionGroup = new QuestionGroup({\n key: node.path + '.' + node.children.length + '',\n type: 'group',\n extras: question.extras,\n label: '',\n questions: question.questions\n });\n\n if (question.controlType === AfeControlType.None) {\n groupQuestion.controlType = question.controlType;\n }\n\n const group = factory.createGroupNode(groupQuestion, null, null, node.form);\n node.children.push(group);\n\n if (node.control instanceof AfeFormArray) {\n const nodeControl = node.control as AfeFormArray;\n nodeControl.setControl(nodeControl.controls.length, group.control);\n }\n\n return group;\n }\n\n removeArrayNodeChild(index: number, node: ArrayNode) {\n const nodeToRemove = node.children[index];\n\n node.children.splice(index, 1);\n if (node.control !== null || node.control !== undefined) {\n if (node.control instanceof AfeFormArray) {\n const control = node.control as AfeFormArray;\n const controlIndexToRemove = control.controls.indexOf(\n nodeToRemove.control\n );\n if (controlIndexToRemove >= 0) {\n control.removeAt(controlIndexToRemove);\n }\n }\n }\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport {\n NodeBase,\n ArrayNode,\n GroupNode,\n LeafNode\n} from '../form-factory/form-node';\n\nexport class ObsAdapterHelper {\n constructor() {}\n\n findObsAnswerToQuestion(node: NodeBase, obsArray: Array<any>): Array<any> {\n const found = [];\n\n if (!this.isObsNode(node)) {\n return found;\n }\n\n if (\n node instanceof LeafNode ||\n (node instanceof GroupNode && node.question.extras.type === 'complex-obs')\n ) {\n _.each(obsArray, (item) => {\n if (\n item.concept &&\n item.concept.uuid === node.question.extras.questionOptions.concept\n ) {\n found.push(item);\n }\n });\n\n return found;\n }\n\n // At this point the node is either a group or a repeating node\n\n const childQuestionsUuids = this.getChildQuestionsConceptUuids(node);\n if (childQuestionsUuids.length > 0) {\n _.each(obsArray, (obs) => {\n if (\n obs.concept &&\n obs.concept.uuid === node.question.extras.questionOptions.concept &&\n Array.isArray(obs.groupMembers) &&\n this.isSubsetOf(\n childQuestionsUuids,\n this.getGroupMembersConceptUuids(obs)\n )\n ) {\n found.push(obs);\n }\n });\n }\n\n return found;\n }\n\n getChildQuestionsConceptUuids(node: NodeBase): Array<string> {\n const found = [];\n\n if (node.question.extras && node.question.extras.questions) {\n _.each(node.question.extras.questions, (question) => {\n if (question.questionOptions && question.questionOptions.concept) {\n found.push(question.questionOptions.concept);\n }\n });\n }\n\n return found;\n }\n\n getGroupMembersConceptUuids(obsWithGroupMembers): Array<string> {\n const found = [];\n\n if (Array.isArray(obsWithGroupMembers.groupMembers)) {\n _.each(obsWithGroupMembers.groupMembers, (member) => {\n found.push(member.concept.uuid);\n });\n }\n\n return found;\n }\n\n isObsNode(node: NodeBase): boolean {\n return (\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs' ||\n node.question.extras.type === 'complex-obs-child')\n );\n }\n\n isSubsetOf(supersetArray: Array<any>, subsetArray: Array<any>): boolean {\n if (subsetArray.length === 0 && supersetArray.length === 0) {\n return true;\n }\n return subsetArray.every((element): boolean => {\n return supersetArray.indexOf(element) >= 0;\n });\n }\n\n setSimpleObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const obsToUse = obs[0];\n\n // set initial value\n node.initialValue = obsToUse;\n\n if (!this.isEmpty(obsToUse.value) && obsToUse.value.uuid) {\n // answer to the obs is a concept, use uuid value\n this.setNodeFormControlValue(node, obsToUse.value.uuid);\n } else if (!this.isEmpty(obsToUse.value)) {\n this.setNodeFormControlValue(node, obsToUse.value);\n }\n }\n }\n\n setMultiselectObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n node.initialValue = obs;\n\n const obsUuids = [];\n for (const m of obs) {\n obsUuids.push(m.value.uuid);\n }\n\n this.setNodeFormControlValue(node, obsUuids);\n }\n }\n\n setComplexObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n // set the obs value here\n this.setNodeValue(valueField, obs);\n node.initialValue = valueField.initialValue;\n\n // set the date value here\n dateField.initialValue = valueField.initialValue;\n this.setNodeFormControlValue(\n dateField,\n valueField.initialValue.obsDatetime\n );\n }\n }\n\n setGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const groupNode = node as GroupNode;\n groupNode.initialValue = obs[0];\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs[0].groupMembers);\n }\n }\n }\n\n setRepeatingGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const arrayNode = node as ArrayNode;\n arrayNode.initialValue = obs;\n\n for (let i = 0; i < obs.length; i++) {\n const createdNode = arrayNode.createChildNode();\n this.setGroupObsNodeValue(createdNode, [obs[i]]);\n }\n }\n }\n\n setNodeValue(node: NodeBase, obs: Array<any>) {\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs);\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n this.setNodeValue(arrayNode.children[i], obs);\n }\n break;\n }\n break;\n case 'simple':\n // search asnwering obs at this point\n const answeringObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setSimpleObsNodeValue(node, answeringObs);\n break;\n\n case 'multiselect':\n // search asnwering obs at this point\n const multiselectObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setMultiselectObsNodeValue(node, multiselectObs);\n break;\n\n case 'complex':\n // search asnwering obs at this point\n const complexObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setComplexObsNodeValue(node, complexObs);\n break;\n\n case 'group':\n const groupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (groupObs.length > 0) {\n this.setGroupObsNodeValue(node, groupObs);\n }\n\n break;\n case 'repeatingGroup':\n const repeatingGroupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (repeatingGroupObs.length > 0) {\n this.setRepeatingGroupObsNodeValue(node, repeatingGroupObs);\n }\n\n break;\n default:\n console.error('Unknown obs node', node);\n break;\n }\n }\n\n setNodeFormControlValue(node: NodeBase, value) {\n node.control.setValue(value);\n // TODO: Determine if we need this call\n // node.control.updateValueAndValidity();\n\n // TODO: Remove this hack and put it in appropriate place\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n }\n\n getObsNodeType(node: NodeBase): string {\n if (this.isObsNode(node)) {\n if (\n node instanceof LeafNode &&\n (node.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n node.question.extras.questionOptions.rendering === 'checkbox' ||\n node.question.extras.questionOptions.rendering === 'multi-select')\n ) {\n return 'multiselect';\n }\n\n if (node instanceof LeafNode) {\n return 'simple';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n return 'complex';\n }\n\n if (\n node instanceof ArrayNode &&\n node.question.extras.type === 'obsGroup' &&\n node.question.extras.questionOptions.rendering === 'repeating'\n ) {\n return 'repeatingGroup';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'obsGroup'\n ) {\n return 'group';\n }\n\n return 'unknownObs';\n }\n return 'unknown';\n }\n\n // PAYLOAD GENERATION FUNCTIONS\n getSimpleObsPayload(node: NodeBase): any {\n // check for empty values first\n if (this.isEmpty(node.control.value)) {\n if (node.initialValue) {\n // Handle case for existing voided obs\n return {\n uuid: node.initialValue.uuid,\n voided: true\n };\n }\n return null;\n }\n\n // check for exisiting, unchanged values\n if (node.initialValue && !this.simpleNodeValueChanged(node)) {\n return null;\n }\n\n // all numbers, text, concepts answers are handled in the same way\n // no need for further formatting in this case\n const obs: any = {\n concept: node.question.extras.questionOptions.concept,\n value: node.control.value\n };\n\n // handle date fields\n if (node.question.extras.questionOptions.rendering === 'date') {\n obs.value = this.toOpenMrsDateTimeString(node.control.value);\n }\n\n if (node.initialValue) {\n // for existing cases, delete concept property, and add uuid\n delete obs.concept;\n obs.uuid = node.initialValue.uuid;\n }\n\n return obs;\n }\n\n getComplexObsPayload(node: NodeBase) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n const valuePayload = this.getObsNodePayload(valueField);\n console.log('valuePayload', valuePayload);\n\n // set obs datetime for the generated payload\n if (valuePayload.length > 0) {\n valuePayload[0].obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return valuePayload[0];\n } else if (valuePayload.length === 0 && node.initialValue) {\n // determine if date changed\n if (\n !this.areDatesEqual(\n node.initialValue.obsDatetime,\n dateField.control.value\n )\n ) {\n const payload: any = {\n uuid: node.initialValue.uuid\n };\n payload.obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return payload;\n }\n }\n return null;\n }\n\n getMultiselectObsPayload(node: NodeBase): Array<any> {\n const payload: Array<any> = [];\n\n const existingUuids = [];\n\n // add voided obs i.e. deleted options\n if (Array.isArray(node.initialValue)) {\n _.each(node.initialValue, (item) => {\n existingUuids.push(item.value.uuid);\n if (Array.isArray(node.control.value)) {\n if (node.control.value.indexOf(item.value.uuid) < 0) {\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n } else {\n // every value was deleted\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n });\n }\n\n // add new obs i.e they didn't exisit originally\n if (Array.isArray(node.control.value)) {\n _.each(node.control.value, (item) => {\n if (existingUuids.indexOf(item) < 0) {\n payload.push({\n concept: node.question.extras.questionOptions.concept,\n value: item\n });\n }\n });\n }\n\n return payload;\n }\n\n getGroupPayload(node: NodeBase) {\n const nodeAsGroup: GroupNode = node as GroupNode;\n\n let childrenPayload = [];\n _.each(nodeAsGroup.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n });\n\n if (childrenPayload.length === 0) {\n return null;\n }\n\n const groupPayload: any = {\n groupMembers: childrenPayload\n };\n\n if (nodeAsGroup.initialValue) {\n groupPayload.uuid = nodeAsGroup.initialValue.uuid;\n } else {\n groupPayload.concept =\n nodeAsGroup.question.extras.questionOptions.concept;\n }\n\n return groupPayload;\n }\n\n getRepeatingGroupPayload(node: NodeBase) {\n const nodeAsArray: ArrayNode = node as ArrayNode;\n\n let childrenPayload = [];\n\n const groupsUuidsAfterEditting = [];\n _.each(nodeAsArray.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n if (child.initialValue && child.initialValue.uuid) {\n groupsUuidsAfterEditting.push(child.initialValue.uuid);\n }\n });\n\n // void deleted groups\n // console.log('groupsUuidsAfterEditting', groupsUuidsAfterEditting);\n if (nodeAsArray.initialValue && Array.isArray(nodeAsArray.initialValue)) {\n _.each(nodeAsArray.initialValue, (obs) => {\n if (groupsUuidsAfterEditting.indexOf(obs.uuid) < 0) {\n const voidedGroup = {\n uuid: obs.uuid,\n voided: true\n };\n childrenPayload.push(voidedGroup);\n }\n });\n }\n\n if (childrenPayload.length <= 0) {\n return null;\n }\n return childrenPayload;\n }\n\n getObsNodePayload(node: NodeBase): Array<any> {\n let payload = [];\n\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n const groupNodePayoad = this.getObsNodePayload(\n groupNode.children[o]\n );\n if (Array.isArray(groupNodePayoad) && groupNodePayoad.length > 0) {\n payload = payload.concat(groupNodePayoad);\n }\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n const arrayNodePayload = this.getObsNodePayload(\n arrayNode.children[i]\n );\n if (\n Array.isArray(arrayNodePayload) &&\n arrayNodePayload.length > 0\n ) {\n payload = payload.concat(arrayNodePayload);\n }\n }\n break;\n }\n break;\n case 'simple':\n const simpleObs = this.getSimpleObsPayload(node);\n if (simpleObs !== null) {\n payload.push(simpleObs);\n }\n break;\n\n case 'multiselect':\n const multiselectObs = this.getMultiselectObsPayload(node);\n\n if (Array.isArray(multiselectObs) && multiselectObs.length > 0) {\n payload = payload.concat(multiselectObs);\n }\n break;\n\n case 'complex':\n const complexObs = this.getComplexObsPayload(node);\n if (complexObs !== null) {\n payload.push(complexObs);\n }\n break;\n\n case 'group':\n const groupedObs = this.getGroupPayload(node);\n if (groupedObs && groupedObs !== null) {\n payload.push(groupedObs);\n }\n break;\n case 'repeatingGroup':\n const repeatingGroupedObs = this.getRepeatingGroupPayload(node);\n if (\n Array.isArray(repeatingGroupedObs) &&\n repeatingGroupedObs.length > 0\n ) {\n payload = payload.concat(repeatingGroupedObs);\n }\n break;\n default:\n break;\n }\n\n return payload;\n }\n\n simpleNodeValueChanged(node: NodeBase): boolean {\n if (node.initialValue) {\n if (node.initialValue.value && node.initialValue.value.uuid) {\n // question whose answer is a concept\n return node.control.value !== node.initialValue.value.uuid;\n }\n\n if (node.question.extras.questionOptions.rendering === 'date') {\n return !this.areDatesEqual(node.control.value, node.initialValue.value);\n }\n return node.control.value !== node.initialValue.value;\n }\n return false;\n }\n\n areDatesEqual(date1, date2) {\n return moment(date1).isSame(date2);\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n toOpenMrsDateTimeString(datetime: string): string {\n if (this.isEmpty(datetime)) {\n return undefined;\n } else {\n // transform value to memoent value to avoid error\n const formattedVal = moment(datetime).format();\n const val = formattedVal.substring(0, 19).replace('T', ' ');\n return this.isEmpty(val) ? undefined : val;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'rxjs';\n\nimport * as _ from 'lodash';\n\nimport { LeafNode, GroupNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport { ObsAdapterHelper } from './obs-adapter-helper';\n\n@Injectable()\nexport class ObsValueAdapter implements ValueAdapter {\n constructor(private helper: ObsAdapterHelper) {}\n\n generateFormPayload(form: Form) {\n return this.helper.getObsNodePayload(form.rootNode);\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Get obs Payload\n // return this.getObsPayload(questionNodes);\n }\n\n populateForm(form: Form, payload) {\n this.helper.setNodeValue(form.rootNode, payload);\n\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Extract set obs\n // this.setValues(questionNodes, payload);\n }\n\n // TODO: Get rid of all the functions below as they will not be needed\n // once the helper is stable\n\n setValues(nodes, payload?, forcegroup?) {\n if (nodes) {\n for (const node of nodes) {\n if (node instanceof LeafNode) {\n this.setObsValue(node, payload);\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n } else if (\n (node.question &&\n node.question.extras &&\n node.question.renderingType === 'group') ||\n forcegroup\n ) {\n const groupObs = _.find(payload, (o: any) => {\n return (\n o.concept.uuid === node.question.extras.questionOptions.concept &&\n o.groupMembers\n );\n });\n if (groupObs) {\n if (node.node) {\n node.node['initialValue'] = groupObs;\n }\n\n this.setValues(node.groupMembers, groupObs.groupMembers);\n }\n if (forcegroup && node.payload) {\n this.setValues(node.groupMembers, node.payload.groupMembers);\n }\n } else if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n this.setComplexObsValue(node, payload);\n } else if (\n node.question &&\n node.question.extras &&\n node.question.renderingType === 'repeating' &&\n !forcegroup\n ) {\n this.setRepeatingGroupValues(node, payload);\n node.node.control.updateValueAndValidity();\n } else {\n throw new Error('not implemented');\n }\n }\n }\n }\n\n setObsValue(node, payload) {\n if (\n (node.question &&\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n (node.question.extras.type === 'complex-obs-child' &&\n node.question.extras.questionOptions.obsField === 'value')) &&\n node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||\n node.question.extras.questionOptions.rendering !== 'checkbox' ||\n node.question.extras.questionOptions.rendering !== 'multi-select'\n ) {\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (obs) {\n if (obs.value instanceof Object) {\n node.control.setValue(obs.value.uuid);\n node.control.updateValueAndValidity();\n } else {\n node.control.setValue(obs.value);\n node.control.updateValueAndValidity();\n }\n node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };\n }\n } else {\n const multiObs = _.filter(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (multiObs && multiObs.length > 0) {\n node.control.setValue(this.getMultiselectValues(multiObs));\n node.control.updateValueAndValidity();\n node['initialValue'] = multiObs;\n }\n }\n }\n\n setComplexObsValue(node, payload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n // set the usual obs value\n this.setObsValue(valueField, payload);\n\n // set the obs date\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n\n if (obs) {\n dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };\n (dateField as LeafNode).control.setValue(obs.obsDatetime);\n (dateField as LeafNode).control.updateValueAndValidity();\n }\n }\n\n getMultiselectValues(multiObs) {\n const values = [];\n for (const m of multiObs) {\n values.push(m.value.uuid);\n }\n return values;\n }\n\n setRepeatingGroupValues(node, payload) {\n const groupRepeatingObs = _.filter(payload, (o: any) => {\n const found =\n o.concept.uuid === node.question.extras.questionOptions.concept;\n let intersect = false;\n if (found && o.groupMembers) {\n const obs = o.groupMembers.map((a) => {\n return a.concept.uuid;\n });\n\n const schemaQuestions = node.question.questions.map((a) => {\n return a.extras.questionOptions.concept;\n });\n\n intersect = _.intersection(obs, schemaQuestions).length > 0;\n }\n return found && intersect;\n });\n if (groupRepeatingObs.length > 0) {\n node.node['initialValue'] = groupRepeatingObs;\n for (let i = 0; i < groupRepeatingObs.length; i++) {\n node.node.createChildNode();\n }\n }\n const groups = [];\n let index = 0;\n for (const child of node.node.children) {\n const children = Object.keys(child.children).map(function (key) {\n return child.children[key];\n });\n const groupPayload = groupRepeatingObs[index];\n groups.push({\n question: node.question,\n groupMembers: children,\n payload: groupPayload\n });\n index++;\n }\n this.setValues(groups, groupRepeatingObs, true);\n }\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n for (const section of page.page) {\n arrays.push(section.section);\n }\n }\n return merged.concat.apply([], arrays);\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n\n processGroup(obs, obsPayload) {\n if (\n obs.question &&\n obs.question.extras &&\n obs.question.extras.questionOptions.rendering === 'group'\n ) {\n const members = _.filter(\n this.getObsPayload(obs.groupMembers),\n (o: any) => {\n return o.value !== '';\n }\n );\n\n const mappedMembers = members.map((a) => {\n return a.voided;\n });\n if (members.length > 0 && mappedMembers.every(Boolean)) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n voided: true\n });\n } else if (members.length > 0) {\n if (obs.node.initialValue) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n groupMembers: members\n });\n } else {\n obsPayload.push({\n concept: obs.question.extras.questionOptions.concept,\n groupMembers: members\n });\n }\n }\n }\n }\n\n mapInitialGroup(group) {\n let current = {};\n for (const member of group.groupMembers) {\n let value: any = '';\n if (member.value instanceof Object) {\n value = member.value.uuid;\n } else if (member.value) {\n value = member.value;\n } else if (member.groupMembers && member.groupMembers.length > 0) {\n current = this.mapInitialGroup(group);\n }\n current[member.concept.uuid + ':' + value] = value;\n }\n return current;\n }\n\n mapModelGroup(node, value) {\n const current = {};\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n const groupQuestion: any = _.find(node.question.questions, {\n key: key\n });\n const modelValue = value[key];\n if (modelValue instanceof Object) {\n } else if (modelValue !== '') {\n current[\n groupQuestion.extras.questionOptions.concept + ':' + modelValue\n ] = modelValue;\n }\n }\n }\n return current;\n }\n\n processRepeatingGroups(node, obsPayload) {\n const initialValues = [];\n if (node.node.initialValue) {\n for (const group of node.node.initialValue) {\n initialValues.push({\n uuid: group.uuid,\n value: this.mapInitialGroup(group)\n });\n }\n }\n const repeatingModel = [];\n for (const value of node.node.control.value) {\n repeatingModel.push({ value: this.mapModelGroup(node, value) });\n }\n const deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);\n const newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);\n const groupConcept = node.question.extras.questionOptions.concept;\n let newObsPayload = [];\n if (deleted.length > 0) {\n const deletedObs = this.createGroupDeletedObs(deleted);\n for (const d of deletedObs) {\n obsPayload.push(d);\n }\n if (newObs.length > 0) {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n } else {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n\n if (newObsPayload.length > 0) {\n for (const p of newObsPayload) {\n obsPayload.push(p);\n }\n }\n }\n\n leftOuterJoinArrays(first, second) {\n const unique = first.filter(function (obj) {\n return !second.some(function (obj2) {\n return _.isEqual(obj.value, obj2.value);\n });\n });\n return unique;\n }\n\n createGroupNewObs(payload, groupConcept) {\n const newPayload = [];\n for (const obs of payload) {\n const groupPayload = [];\n /* tslint:disable */\n for (let key in obs.value) {\n let concept = key.split(':')[0];\n let value = key.split(':')[1];\n groupPayload.push({ concept: concept, value: value });\n }\n newPayload.push({ concept: groupConcept, groupMembers: groupPayload });\n /* tslint:enable */\n }\n return newPayload;\n }\n\n createGroupDeletedObs(payload) {\n const deletedObs = [];\n for (const d of payload) {\n deletedObs.push({ uuid: d.uuid, voided: true });\n }\n return deletedObs;\n }\n\n getExactTime(datetime: string) {\n return datetime.substring(0, 19).replace('T', ' ');\n }\n\n processObs(obs, obsPayload) {\n if (obs.control && obs.question.extras) {\n const obsValue = {\n concept: obs.question.extras.questionOptions.concept,\n value:\n obs.question.extras.questionOptions.rendering === 'date' &&\n !this.isEmpty(obs.control.value)\n ? this.getExactTime(obs.control.value)\n : obs.control.value\n };\n\n if (\n obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n obs.question.extras.questionOptions.rendering === 'checkbox' ||\n obs.question.extras.questionOptions.rendering === 'multi-select'\n ) {\n const multis = this.processMultiSelect(\n obs.question.extras.questionOptions.concept,\n obs.control.value\n );\n if (obs.initialValue) {\n const mappedInitial = obs.initialValue.map((a) => {\n return {\n uuid: a.uuid,\n value: { concept: a.concept.uuid, value: a.value.uuid }\n };\n });\n const mappedCurrent = multis.map((a) => {\n return { value: a };\n });\n const deletedObs = this.leftOuterJoinArrays(\n mappedInitial,\n mappedCurrent\n );\n const newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);\n this.processDeletedMultiSelectObs(deletedObs, obsPayload);\n this.processNewMultiSelectObs(newObs, obsPayload);\n } else {\n this.processNewMultiSelectObs(multis, obsPayload);\n }\n } else {\n if (obs.initialValue && obs.initialValue.value && obsValue) {\n this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);\n } else if (obsValue.value !== '' && obsValue.value !== null) {\n obsPayload.push(obsValue);\n }\n }\n }\n }\n\n processComplexObs(node, obsPayload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n\n if (valueField) {\n // process obs as usual\n this.processObs(valueField, obsPayload);\n\n // obtain the last inserted obs and set the obsDatetime\n const createdPayload =\n obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;\n if (\n createdPayload &&\n ((createdPayload.concept &&\n createdPayload.concept ===\n node.question.extras.questionOptions.concept) ||\n (valueField.initialValue &&\n createdPayload.uuid === valueField.initialValue.obsUuid))\n ) {\n if (\n dateField.initialValue &&\n dateField.control.value !== dateField.initialValue.value\n ) {\n createdPayload.obsDatetime = dateField.control.value;\n }\n }\n }\n }\n\n processDeletedMultiSelectObs(values, obsPayload) {\n for (const value of values) {\n obsPayload.push({ uuid: value.uuid, voided: true });\n }\n }\n\n processNewMultiSelectObs(values, obsPayload) {\n for (const multi of values) {\n if (multi.value instanceof Object) {\n obsPayload.push(multi.value);\n } else {\n obsPayload.push(multi);\n }\n }\n }\n\n updateOrVoidObs(obsValue, initialValue, obsPayload) {\n if (this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, voided: true });\n } else if (!this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });\n }\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({\n page: page,\n label: o.children[key].question.label\n });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({\n section: section,\n node: o.children[key],\n label: o.children[key].question.label\n });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n }\n }\n return questions;\n }\n\n processMultiSelect(concept, values) {\n const multiSelectObs = [];\n if (values && values !== null) {\n for (const value of values) {\n const obs = {\n concept: concept,\n value: value\n };\n multiSelectObs.push(obs);\n }\n }\n return multiSelectObs;\n }\n\n isObs(node) {\n return (\n node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs'\n );\n }\n\n getObsPayload(nodes) {\n const obsPayload = [];\n for (const node of nodes) {\n if (this.isObs(node)) {\n if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'group')\n ) {\n this.processGroup(node, obsPayload);\n } else if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'repeating')\n ) {\n this.processRepeatingGroups(node, obsPayload);\n } else if (\n node instanceof GroupNode &&\n (node as GroupNode).question.extras.type === 'complex-obs'\n ) {\n this.processComplexObs(node, obsPayload);\n } else {\n this.processObs(node, obsPayload);\n }\n }\n }\n return obsPayload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport * as _ from 'lodash';\n@Injectable()\nexport class OrderValueAdapter implements ValueAdapter {\n formOrderNodes = [];\n private provider = '';\n\n generateFormPayload(form: Form) {\n this.formOrderNodes = [];\n this._setOrderProvider(form);\n this._findTestOrderQuestionNodes(form.rootNode);\n return this._createOrdersPayload(this.formOrderNodes, form);\n }\n\n populateForm(form: Form, payload) {\n form.existingOrders = payload;\n this.formOrderNodes = [];\n this._findTestOrderQuestionNodes(form.rootNode);\n const existingOrders = this._getExistingOrders(form);\n this._setOrderValues(this.formOrderNodes, existingOrders);\n }\n\n private _setOrderProvider(form: Form) {\n if (form.valueProcessingInfo.providerUuid) {\n this.provider = form.valueProcessingInfo.providerUuid;\n }\n }\n\n private _createOrdersPayload(orderNodes, form: Form) {\n const payload = [];\n const selectedOrders = [];\n let deletedOrders = [];\n const existingOrders = this._getExistingOrders(form);\n for (const orderNode of orderNodes) {\n const orderNodeValues = orderNode.control.value;\n const orders = [];\n if (existingOrders) {\n existingOrders.map(function (obj) {\n orders[obj.concept] = obj.concept;\n });\n }\n\n for (const order in orderNodeValues) {\n if (orderNodeValues.hasOwnProperty(order)) {\n const orderValue = orderNodeValues[order][orderNode.question.key];\n\n const payloadOrder = this._createPayloadOrder(\n orderValue,\n orderNode.question.extras\n );\n\n if (\n orders[orderValue] !== orderValue &&\n payloadOrder.concept !== ''\n ) {\n payload.push(payloadOrder);\n }\n selectedOrders[orderValue] = orderValue;\n if (payloadOrder.orderNumber === '') {\n delete payloadOrder.orderNumber;\n }\n if (payloadOrder.uuid === '') {\n delete payloadOrder.uuid;\n }\n }\n }\n }\n\n deletedOrders = this._getDeletedOrders(selectedOrders, existingOrders);\n return this._addDeletedOrdersToPayload(deletedOrders, payload);\n }\n\n private _getExistingOrders(form: Form) {\n if (form.existingOrders && form.existingOrders.orders) {\n let existingOrders = form.existingOrders.orders.map((o) => {\n return {\n concept: o.concept.uuid,\n orderNumber: o.orderNumber,\n orderUuid: o.uuid,\n voided: o.voided,\n dateVoided: o.auditInfo.dateVoided\n };\n });\n\n return (existingOrders = _.filter(existingOrders, (order: any) => {\n if (order.voided === true || order.dateVoided) {\n return false;\n } else {\n return true;\n }\n }));\n } else {\n return;\n }\n }\n\n private _setOrderValues(node, existingOrders) {\n this._findTestOrderQuestionNodes(node);\n\n const orderNodes = this.formOrderNodes;\n for (const orderNode of orderNodes) {\n this._setOrderNodeValues(orderNode, existingOrders);\n }\n }\n\n private _addDeletedOrdersToPayload(deletedOrders, payload): any {\n for (const order in deletedOrders) {\n if (deletedOrders.hasOwnProperty(order)) {\n payload.push({ uuid: deletedOrders[order], voided: true });\n }\n }\n return payload;\n }\n\n private _createPayloadOrder(orderConcept, quesitonExtras): any {\n const order = {\n concept: '',\n type: '',\n orderer: '',\n careSetting: ''\n };\n order.concept = orderConcept;\n order.type = quesitonExtras.questionOptions.orderType;\n order.orderer = this.provider;\n order.careSetting = quesitonExtras.questionOptions.orderSettingUuid;\n\n // delete orderer if provider not provided\n if (order.orderer === '') {\n delete order.orderer;\n }\n\n return order;\n }\n\n private _getDeletedOrders(selectedOrders, existingOrders): any {\n const deleteOrders = [];\n if (selectedOrders) {\n for (const order in existingOrders) {\n if (existingOrders.hasOwnProperty(order)) {\n const existingOrderConcept = existingOrders[order].concept;\n const selectedOrder = selectedOrders[existingOrderConcept];\n if (selectedOrder !== existingOrderConcept) {\n deleteOrders.push(existingOrders[order].orderUuid);\n }\n }\n }\n }\n // console.log('Deleted Orders ', deleteOrders);\n return deleteOrders;\n }\n\n private _setOrderNodeValues(node, orders) {\n let index = 0;\n node['initialValue'] = orders;\n for (const order of orders) {\n node.createChildNode();\n const value = {};\n value[node.question.key] = order.concept;\n const childNode = node.children[index];\n childNode.control.setValue(value);\n childNode['initialValue'] = value;\n childNode['orderNumber'] = order.orderNumber;\n // console.log('Set Value', node.children[index].control.value, node, childNode);\n index++;\n }\n }\n\n private _findTestOrderQuestionNodes(formNode) {\n if (formNode.children) {\n if (formNode.children instanceof Object) {\n for (const key in formNode.children) {\n if (formNode.children.hasOwnProperty(key)) {\n switch (formNode.children[key].question.renderingType) {\n case 'page':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'section':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'group':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n\n break;\n case 'repeating':\n if (formNode.children) {\n // tslint:disable-next-line:forin\n for (const node in formNode.children) {\n const question = formNode.children[node].question;\n if (\n question.extras &&\n question.extras.type === 'testOrder'\n ) {\n this.formOrderNodes.push(formNode.children[node]);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\n\nimport { ValueAdapter } from './value.adapter';\nimport { ObsValueAdapter } from './obs.adapter';\nimport { OrderValueAdapter } from './order.adapter';\n\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class EncounterAdapter implements ValueAdapter {\n constructor(\n public ordersAdapter: OrderValueAdapter,\n public obsAdapter: ObsValueAdapter\n ) {}\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n\n if (Array.isArray(payload.orders)) {\n this.ordersAdapter.populateForm(form, payload);\n }\n if (Array.isArray(payload.obs)) {\n this.obsAdapter.populateForm(form, payload.obs);\n }\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (payload === undefined || payload === null) {\n throw new Error('Expected payload');\n }\n\n const nodes = this.getEncounterNodes(rootNode);\n\n nodes.forEach((node) => {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n if (payload['encounterDatetime']) {\n // console.log('date', payload['encounterDatetime']);\n node.control.setValue(\n moment(payload['encounterDatetime']).toDate()\n );\n node.initialValue = moment(payload['encounterDatetime']).toDate();\n }\n break;\n case 'encounterProvider':\n if (\n Array.isArray(payload['encounterProviders']) &&\n payload['encounterProviders'].length > 0\n ) {\n const firstProvider: any =\n payload['encounterProviders'][0].provider;\n if (firstProvider && firstProvider.uuid) {\n // Very weird work around for an issue with setting the value\n node.control.setValue(firstProvider.uuid);\n setTimeout(() => {\n node.control.setValue(firstProvider.uuid);\n });\n node.initialValue = firstProvider.uuid;\n }\n }\n break;\n case 'encounterLocation':\n if (payload['location'] && payload['location'].uuid) {\n node.control.setValue(payload['location'].uuid);\n node.initialValue = payload['location'].uuid;\n }\n break;\n default:\n break;\n }\n });\n }\n\n generateFormPayload(form: Form) {\n const payload = this.generateNodePayload(form.rootNode);\n\n this.setNonFilledPayloadMembers(form, payload);\n\n payload['obs'] = this.obsAdapter.generateFormPayload(form) || [];\n\n payload['orders'] = this.ordersAdapter.generateFormPayload(form) || [];\n\n return payload;\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getEncounterNodes(rootNode);\n const payload = {};\n\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== ''\n ) {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n const dateValue = moment(node.control.value).utcOffset(\n rootNode.form.valueProcessingInfo.utcOffset || '+0300'\n );\n payload['encounterDatetime'] = dateValue.format(\n 'YYYY-MM-DD HH:mm:ss'\n );\n break;\n case 'encounterProvider':\n if (node.control.value && node.control.value !== '') {\n const providers = [];\n providers.push({\n provider: node.control.value,\n encounterRole: 'a0b03050-c99b-11e0-9572-0800200c9a66' // unknown provider role in the encounter as default\n });\n payload['encounterProviders'] = providers;\n }\n break;\n case 'encounterLocation':\n payload['location'] = node.control.value;\n break;\n default:\n break;\n }\n }\n });\n\n return payload;\n }\n\n getEncounterNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getEncounterNodes(rootNode, results);\n return results;\n }\n\n setNonFilledPayloadMembers(form: Form, payload) {\n if (form.valueProcessingInfo.patientUuid) {\n this.setPayloadPatientUuid(payload, form.valueProcessingInfo.patientUuid);\n }\n\n if (form.valueProcessingInfo.visitUuid) {\n this.setPayloadVisitUuid(payload, form.valueProcessingInfo.visitUuid);\n }\n\n if (form.valueProcessingInfo.encounterTypeUuid) {\n this.setPayloadEncounterTypeUuid(\n payload,\n form.valueProcessingInfo.encounterTypeUuid\n );\n }\n\n if (form.valueProcessingInfo.formUuid) {\n this.setPayloadFormUuid(payload, form.valueProcessingInfo.formUuid);\n }\n\n if (form.valueProcessingInfo.encounterUuid) {\n this.setPayloadEncounterUuid(\n payload,\n form.valueProcessingInfo.encounterUuid\n );\n }\n }\n\n setPayloadPatientUuid(payload, patientUuid: string) {\n payload['patient'] = patientUuid;\n }\n\n setPayloadVisitUuid(payload, visitUuid: string) {\n payload['visit'] = visitUuid;\n }\n\n setPayloadEncounterTypeUuid(payload, encounterTypeUuid: string) {\n payload['encounterType'] = encounterTypeUuid;\n }\n\n setPayloadFormUuid(payload, formUuid: string) {\n payload['form'] = formUuid;\n }\n\n setPayloadEncounterUuid(payload, encounterUuid: string) {\n payload['uuid'] = encounterUuid;\n }\n\n private _getEncounterNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (this._isEncounterNode(rootNode)) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getEncounterNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getEncounterNodes(child, array);\n });\n }\n }\n\n private _isEncounterNode(node: NodeBase): boolean {\n if (\n node.question.extras &&\n (node.question.extras.type === 'encounterDatetime' ||\n node.question.extras.type === 'encounterProvider' ||\n node.question.extras.type === 'encounterLocation')\n ) {\n return true;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAttribuAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAttributeNodes(rootNode);\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n if (node.question.extras.questionOptions.isSimpleValue === true) {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n value: node.control.value\n });\n } else {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n hydratedObject: node.control.value\n });\n }\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (!Array.isArray(payload)) {\n throw new Error('Expected an array of attributes');\n }\n\n const nodes = this.getPersonAttributeNodes(rootNode);\n\n nodes.forEach((node) => {\n payload.forEach((element) => {\n if (\n element.attributeType.uuid ===\n node.question.extras.questionOptions.attributeType\n ) {\n if (element.value.uuid) {\n node.control.setValue(element.value.uuid);\n node.initialValue = element.value.uuid;\n } else {\n node.control.setValue(element.value);\n node.initialValue = element.value;\n }\n }\n });\n });\n }\n\n getPersonAttributeNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAttributesNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAttributesNodes(\n rootNode: NodeBase,\n array: Array<NodeBase>\n ) {\n if (\n rootNode.question.extras &&\n (rootNode.question.extras.type === 'personAttribute' ||\n rootNode.question.extras.type === 'amrsLocations' ||\n rootNode.question.extras.type === 'nonAmrsLocations' ||\n rootNode.question.extras.type === 'siblingLocations')\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAttributesNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAttributesNodes(child, array);\n });\n }\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n ViewChild,\n Output,\n EventEmitter,\n Renderer2\n} from '@angular/core';\nimport { SelectComponent } from '../../components/select/select.component';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n@Component({\n selector: 'remote-select',\n template: `<div>\n <ng-select\n [id]=\"componentID\"\n [noFilter]=\"0\"\n (selected)=\"selected($event)\"\n (deselected)=\"removed($event)\"\n [options]=\"items\"\n [allowClear]=\"true\"\n [placeholder]=\"placeholder\"\n [notFoundMsg]=\"notFoundMsg\"\n (typed)=\"typed($event)\"\n tabindex=\"0\"\n >\n </ng-select>\n <div *ngIf=\"loading\">resolving....</div>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteSelectComponent),\n multi: true\n }\n ]\n})\nexport class RemoteSelectComponent implements OnInit, ControlValueAccessor {\n // @Input() dataSource: DataSource;\n @Input() placeholder = 'Search...';\n @Input() componentID: string;\n items = [];\n value = [];\n loading = false;\n searchText = '';\n notFoundMsg = 'match no found';\n @Output() done: EventEmitter<any> = new EventEmitter<any>();\n\n characters = [];\n @ViewChild(SelectComponent) private selectC: SelectComponent;\n\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n if (this._dataSource && this._dataSource.dataFromSourceChanged) {\n this.subscribeToDataSourceDataChanges();\n }\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n subscribeToDataSourceDataChanges() {\n this._dataSource.dataFromSourceChanged.subscribe((results) => {\n if (results.length > 0) {\n this.items = results;\n this.notFoundMsg = '';\n // console.log('updating items', results, this.selectC.value);\n this.restoreSelectedValue(this.selectC.value, results);\n } else {\n this.notFoundMsg = 'Not found';\n this.items = [];\n }\n });\n }\n\n public typed(value: any): void {\n this.search(value);\n }\n search(value: string) {\n if (this.dataSource) {\n this.searchText = value;\n this.notFoundMsg = 'Loading.........';\n this.dataSource.searchOptions(value).subscribe(\n (result) => {\n if (result.length > 0) {\n const existing = _.map(this.value, _.clone);\n const concat = existing.concat(result);\n this.items = _.uniqBy(concat, 'value');\n }\n this.notFoundMsg = '';\n },\n (error) => {\n this.notFoundMsg = 'Errored';\n }\n );\n }\n }\n\n restoreSelectedValue(value, results) {\n let found = false;\n _.each(results, (item) => {\n if (item.value === value) {\n setTimeout(() => {\n this.selectC.select(value);\n this.selectC.value = value;\n });\n found = true;\n }\n });\n if (!found) {\n // console.log('not found after loading items', value, results);\n setTimeout(() => {\n this.selectC.select('');\n this.selectC.value = '';\n });\n }\n }\n\n canSearch(searchText: string) {\n return (\n (searchText.length - this.searchText.length >= 2 ||\n (searchText.length - this.searchText.length <= 2 &&\n searchText !== '')) &&\n this.loading === false\n );\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value && value !== '') {\n if (this.dataSource) {\n this.loading = true;\n this.dataSource.resolveSelectedValue(value).subscribe(\n (result: any) => {\n this.items = [result];\n setTimeout(() => {\n this.selectC.select(result.value);\n this.selectC.value = result.value;\n });\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n removed(event) {\n console.log('Removed');\n this.propagateChange('');\n }\n selected(event) {\n this.propagateChange(event.value);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (change: any) => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { RemoteSelectComponent } from './remote-select.component';\n\n@NgModule({\n imports: [CommonModule, SelectModule, FormsModule],\n exports: [RemoteSelectComponent],\n declarations: [RemoteSelectComponent],\n providers: []\n})\nexport class RemoteSelectModule {}\n","import { Component, OnInit, OnChanges, Input } from '@angular/core';\n\nimport { LeafNode } from '../../form-entry/form-factory/form-node';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\ninterface DailyScheduled {\n date: string;\n count: {\n scheduled: number;\n };\n}\ninterface WeeeklyScheduleReport {\n reports: {\n attended: any;\n hasNotReturned: any;\n scheduled: any;\n };\n results: DailyScheduled[];\n totals: {\n attended: number;\n hasNotReturned: number;\n scheduled: number;\n };\n}\ninterface DayCount {\n date: string;\n count: number;\n}\n\n@Component({\n selector: 'appointments-overview',\n template: `<div *ngIf=\"showAppointments\" class=\"appointments\">\n <p *ngIf=\"loadingAppointments\">\n <span *ngIf=\"!appointmentsLoaded && errorLoadingAppointments\"\n >Error checking appointments</span\n >\n <span *ngIf=\"loadingAppointments\"\n ><span class=\"fa fa-spinner fa-spin\"></span>Checking appointments...</span\n >\n </p>\n <div *ngIf=\"appointmentsLoaded && !errorLoadingAppointments\">\n <table\n *ngIf=\"appointments.length > 0\"\n class=\"table table-stripped table-bordered\"\n >\n <thead>\n <tr>\n <th\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span>{{ appointment.date }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span\n ><strong\n ><em>{{ appointment.count }}</em></strong\n ></span\n >\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n`,\n styles: [`.appointments{margin-top:12px;font-size:12px;color:#999}.appointments p{padding-top:12px}.appointments th{border-bottom:0!important;color:#333}.appointments td span,.appointments th span{display:block}.appointments td.active,.appointments th.active{background-color:#3c8dbc;color:#fff!important;padding:0}.appointments td.active span,.appointments th.active span{padding:4px}.appointments span.fa{display:inline-block;margin-right:7px}`]\n})\nexport class AppointmentsOverviewComponent implements OnInit, OnChanges {\n @Input() node: LeafNode;\n showAppointments = false;\n loadingAppointments = false;\n errorLoadingAppointments = false;\n appointmentsLoaded = false;\n appointments: Array<any> = [];\n today = '';\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.node.control.valueChanges.subscribe((v) => {\n this.resetProperties();\n const node = this.node;\n if (\n node.question.extras.questionOptions.concept &&\n (node.question.extras.questionOptions.concept ===\n 'a8a666ba-1350-11df-a1f1-0026b9348838' ||\n node.question.extras.questionOptions.concept ===\n 'a89d2398-1350-11df-a1f1-0026b9348838')\n ) {\n // console.log('what change is here', this.showAppointments);\n if (!this.showAppointments) {\n this.loadingAppointments = true;\n this.showAppointments = true;\n let dataSource;\n if (node.form && node.form.dataSourcesContainer.dataSources) {\n dataSource =\n node.form.dataSourcesContainer.dataSources\n .monthlyScheduleResourceService;\n }\n const locationUuid =\n node.form.dataSourcesContainer.dataSources.userLocation.uuid;\n if (dataSource && locationUuid) {\n const startDate = moment(v)\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD');\n const endDate = moment(v)\n .endOf('week')\n .subtract(1, 'day')\n .format('YYYY-MM-DD');\n this.today = moment(v).format('DD-MM-YYYY');\n dataSource\n .getMonthlySchedule({\n startDate: startDate,\n endDate: endDate,\n limit: 5,\n locationUuids: locationUuid,\n department: 'HIV',\n groupBy: 'groupByPerson,groupByAttendedDate,groupByRtcDate'\n })\n .subscribe(\n (data: WeeeklyScheduleReport) => {\n const _data: DayCount[] = [];\n const weeklyMap = new Map();\n // create the weeks schedule with zero appointments\n for (let i = 0; i < 5; i++) {\n const scheduleDate = moment(v)\n .startOf('week')\n .add(i, 'day')\n .format('YYYY-MM-DD');\n const scheduledObj: DailyScheduled = {\n date: scheduleDate,\n count: {\n scheduled: 0\n }\n };\n weeklyMap.set(scheduleDate, scheduledObj);\n }\n\n const results: DailyScheduled[] = data.results || [];\n // replace placeholder schedules with actual schedules in the map obj\n results.forEach((scheduled: DailyScheduled) => {\n weeklyMap.set(scheduled.date, scheduled);\n });\n // retrieve scheduled obj from map to data array\n weeklyMap.forEach((value: DailyScheduled, key: string) => {\n const dayCount: DayCount = {\n date: key,\n count: value.count.scheduled || 0\n };\n _data.push(dayCount);\n });\n this.appointmentsLoaded = true;\n this.loadingAppointments = false;\n\n this.appointments = _data;\n },\n (error: any) => {\n this.loadingAppointments = false;\n this.errorLoadingAppointments = true;\n this.showAppointments = false;\n console.error(error);\n }\n );\n } else {\n this.showAppointments = false;\n this.errorLoadingAppointments = true;\n }\n }\n }\n });\n }\n\n resetProperties() {\n this.loadingAppointments = false;\n this.appointmentsLoaded = false;\n this.errorLoadingAppointments = false;\n this.showAppointments = false;\n this.appointments = [];\n this.today = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n GroupNode,\n LeafNode,\n ArrayNode,\n NodeBase\n} from '../form-entry/form-factory/form-node';\nimport * as _ from 'lodash';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\nimport { Observable } from 'rxjs';\nimport { SelectOption } from '../form-entry/question-models/interfaces/select-option';\nconst comma = ', ';\nconst newLine = '\\n';\n\n@Injectable()\nexport class EncounterViewerService implements DataSource {\n constructor() {}\n public resolveSelectedValue(value: any): Observable<SelectOption> {\n return;\n }\n public searchOptions(searchText: any): Observable<SelectOption[]> {\n return;\n }\n public fileUpload(data: any): Observable<any> {\n return;\n }\n public fetchFile(url: any): Observable<any> {\n return;\n }\n\n public resolveSelectedValueFromSchema(\n answerUuid: string,\n schema: any\n ): string {\n let label;\n if (schema.pages) {\n _.forEach(schema.pages, (page) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, page);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.sections) {\n _.forEach(schema.sections, (section) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, section);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.questions) {\n _.forEach(schema.questions, (question) => {\n if (question.questions) {\n const l = this.resolveSelectedValueFromSchema(answerUuid, question);\n if (l) {\n label = l;\n }\n } else {\n if (question.questionOptions.answers) {\n _.forEach(question.questionOptions.answers, (answer) => {\n if (answer.concept === answerUuid) {\n label = answer.label;\n }\n });\n } else if (question.questionOptions.selectableOrders) {\n _.forEach(question.questionOptions.selectableOrders, (order) => {\n if (order.concept === answerUuid) {\n label = order.label;\n }\n });\n }\n }\n });\n }\n return label;\n }\n\n public hasAnswer(node: NodeBase) {\n let answered = false;\n if (node.initialValue) {\n answered = true;\n }\n return answered;\n }\n\n public questionsAnswered(node: any, answered?: boolean[]) {\n const $answered = answered || [];\n if (node.question.renderingType === 'page') {\n _.forEach(node.children, (childNode: any) => {\n this.questionsAnswered(childNode, $answered);\n });\n } else if (node.question.renderingType === 'section') {\n _.forEach(node.children, (childNode) => {\n if (childNode.question.renderingType === 'group') {\n _.forEach(childNode.children, (child) => {\n const ans = this.questionsAnswered(child, $answered);\n if (ans) {\n $answered.push(ans);\n }\n });\n } else if (this.hasAnswer(childNode)) {\n $answered.push(true);\n }\n });\n } else {\n return this.hasAnswer(node);\n }\n\n if ($answered.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n\n public isDate(val: any) {\n if (Date.parse(val)) {\n return true;\n } else {\n return false;\n }\n }\n public convertTime(unixTimestamp: number) {\n const a = new Date(unixTimestamp);\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n const year = a.getFullYear();\n const month = months[a.getMonth()];\n const date = a.getDate();\n const hour = a.getHours();\n const min = a.getMinutes();\n const sec = a.getSeconds();\n const suffix = hour < 12 ? 'AM' : 'PM';\n let time;\n if (hour === 0 && min === 0) {\n time = date + ' ' + month + ' ' + year;\n } else {\n time =\n date +\n ' ' +\n month +\n ' ' +\n year +\n ' ' +\n hour +\n ':' +\n min +\n suffix +\n ' (EAT)';\n }\n return time;\n }\n}\n","import { Component, OnInit, Input, Inject } from '@angular/core';\nimport {\n NodeBase,\n GroupNode,\n LeafNode\n} from '../../form-entry/form-factory/form-node';\nimport { QuestionBase } from '../../form-entry/question-models/question-base';\nimport * as _ from 'lodash';\n\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { DataSources } from '../../form-entry/data-sources/data-sources';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\n\nimport { EncounterViewerService } from '../encounter-viewer.service';\n\n@Component({\n selector: 'encounter-viewer',\n template: `<div class=\"viewer\">\n <div *ngIf=\"rootNode.question.renderingType === 'form'\" class=\"form\">\n <div *ngFor=\"let question of rootNode.question.questions; let i = index\">\n <div *ngIf=\"questionsAnswered(rootNode.children[question.key])\">\n <div [attr.id]=\"'page' + i\" class=\"panel panel-default\">\n <p class=\"page-label panel-heading text-primary\">\n {{ question.label }}\n </p>\n <div class=\"panel-body\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentComponent]=\"this\"\n [parentGroup]=\"rootNode.control\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.renderingType === 'page'\" class=\"page\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n\n <div\n *ngIf=\"\n rootNode.question.renderingType === 'section' &&\n questionsAnswered(rootNode)\n \"\n class=\"section\"\n >\n <div class=\"panel panel-primary\">\n <p class=\"panel-heading section-label\">{{ rootNode.question.label }}</p>\n </div>\n <div *ngFor=\"let question of rootNode.question.questions\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [parentComponent]=\"this\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n </div>\n\n <!--Leaf Controls-->\n <div style=\"margin-left: 10px\">\n <form *ngIf=\"rootNode.question.controlType === 0\" [formGroup]=\"parentGroup\">\n <div *ngIf=\"rootNode.control.value\">\n <div class=\"question-answer\">\n <label\n *ngIf=\"rootNode.question.label\"\n [attr.for]=\"rootNode.question.key\"\n style=\"font-weight: 400\"\n >\n {{ rootNode.question.label }}\n </label>\n <span *ngIf=\"checkForColon(rootNode.question.label)\">:</span>\n <div\n [ngSwitch]=\"rootNode.question.renderingType\"\n style=\"display: inline-block; font-weight: bold\"\n >\n <div *ngSwitchCase=\"'file'\">\n <file-preview\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"fileDataSource\"\n ></file-preview>\n </div>\n <div *ngSwitchCase=\"'remote-select'\">\n <remote-answer\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"remoteDataSource\"\n ></remote-answer>\n </div>\n <div *ngSwitchDefault style=\"display: inline-block\">\n <question-control\n [schema]=\"_schema\"\n [value]=\"rootNode.control.value\"\n [dataSource]=\"customDataSource\"\n ></question-control>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n\n <!--Array Controls-->\n <div\n *ngIf=\"rootNode.question.controlType === 1 && questionsAnswered(rootNode)\"\n >\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'repeating'\">\n <div [ngSwitch]=\"rootNode.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <label>{{ rootNode.question.label }}:</label>\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\">\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.controlType === 2\">\n <!--GROUP-->\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n <div *ngSwitchCase=\"'field-set'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n</div>\n`,\n styles: [`.page-label{font-size:20px;font-weight:700}.section-label{font-size:18px;font-weight:500}.panel-primary{border:none!important}.question-answer{font-size:16px}.panel{margin-bottom:5px}div.section{margin-bottom:15px!important}.line-breaker{white-space:pre-line}hr{margin:10px}`]\n})\nexport class EncounterViewerComponent implements OnInit {\n public rootNode: NodeBase;\n public enc: any;\n public fileDataSource: DataSource;\n public remoteDataSource: DataSource;\n public customDataSource: DataSource;\n public _schema;\n @Input() public parentGroup: AfeFormGroup;\n @Input() public parentComponent: EncounterViewerComponent;\n @Input() set node(rootNode: NodeBase) {\n this.rootNode = rootNode;\n }\n\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n\n @Input() public set encounter(enc: any) {\n this.enc = enc;\n }\n @Input() set form(form: any) {\n this.rootNode = form.rootNode;\n this._schema = form.schema;\n console.log(this.getQuestionNodes(this.traverse(this.rootNode)));\n }\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private dataSources: DataSources\n ) {}\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n arrays.push(page.page);\n }\n return merged.concat.apply([], arrays);\n }\n public ngOnInit() {\n if (this.rootNode) {\n }\n if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'file'\n ) {\n this.fileDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'remote-select'\n ) {\n this.remoteDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else {\n this.customDataSource = this.encounterViewerService;\n }\n }\n\n public questionsAnswered(node: any) {\n const $answered = this.encounterViewerService.questionsAnswered(node);\n return $answered;\n }\n\n public questionAnswered(node: NodeBase) {\n const answered = this.encounterViewerService.hasAnswer(node);\n return answered;\n }\n\n public checkForColon(questionLabel: string) {\n if (questionLabel.indexOf(':') === -1) {\n return true;\n } else {\n return false;\n }\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({ page: page });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({ section: section });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n } else {\n console.log('Console.log', o);\n }\n }\n return questions;\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Form } from '../form-entry/form-factory/form';\nimport { ObsValueAdapter } from '../form-entry/value-adapters/obs.adapter';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { DataSources } from '../form-entry/data-sources/data-sources';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\nimport { combineLatest, BehaviorSubject } from 'rxjs';\nimport { Observable } from 'rxjs/Observable';\n\nimport * as moment_ from 'moment';\nimport * as _ from 'lodash';\nimport * as pdfMake from 'pdfmake/build/pdfmake.js';\nimport 'pdfmake/build/vfs_fonts.js';\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\n\nconst moment = moment_;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncounterPdfViewerService {\n private remoteDataSource: DataSource;\n public error: boolean;\n public errorMessage: string;\n public showLoader: boolean;\n public subscribedAnswers: any = {\n questions: {\n stack: []\n },\n answers: []\n };\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private obsValueAdapter: ObsValueAdapter,\n private dataSources: DataSources\n ) {}\n\n getPages(\n pages: any,\n form: Form,\n remoteSelectsOnly?: boolean,\n remoteAns?: any\n ): any[] {\n const content = [];\n let remoteQuestions = [];\n\n for (const page of pages) {\n if (remoteSelectsOnly) {\n remoteQuestions = remoteQuestions.concat(\n this.getSections(page.page, form, false, remoteAns)\n );\n } else {\n for (const question of form.rootNode.question.questions) {\n if (\n page.label ===\n form.rootNode.children[question.key].question.label &&\n this.encounterViewerService.questionsAnswered(\n form.rootNode.children[question.key]\n )\n ) {\n content.push({\n style: 'tableExample',\n table: {\n widths: ['*'],\n headerRows: 1,\n keepWithHeaderRows: 1,\n body: [\n [{ text: page.label, style: 'tableHeader' }],\n [\n {\n style: 'tableExample',\n table: {\n widths: ['*'],\n body: this.getSections(page.page, form, true, remoteAns)\n },\n layout: 'noBorders',\n margin: [5, 0, 0, 0]\n }\n ]\n ]\n },\n layout: {\n hLineWidth: function (i, node) {\n return i === 0 || i === node.table.body.length ? 0.5 : 0.5;\n },\n vLineWidth: function (i, node) {\n return i === 0 || i === node.table.widths.length ? 0.5 : 0.5;\n },\n hLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n },\n vLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n }\n }\n });\n }\n }\n }\n }\n return remoteSelectsOnly ? remoteQuestions : content;\n }\n\n getSections(sections: any, form: Form, resolve: any, remoteAns: any): any[] {\n const content = [];\n const answeredSections = [];\n let questions: Array<Observable<any>> = [];\n\n sections.map((s) => {\n if (this.encounterViewerService.questionsAnswered(s.node)) {\n answeredSections.push(s);\n }\n });\n\n for (const section of answeredSections) {\n questions = questions.concat(this.getRemoteSectionData(section.section));\n }\n\n if (resolve && remoteAns) {\n for (const section of answeredSections) {\n content.push([\n {\n table: {\n widths: ['*'],\n body: [\n [{ text: section.label, style: 'tableSubheader' }],\n [this.getSectionData(section.section, remoteAns, form)]\n ]\n },\n layout: 'noBorders'\n }\n ]);\n }\n return content;\n } else {\n return questions;\n }\n }\n\n private appendResolvedAnswer(\n resolvedAnswer: any,\n questions: any,\n node?: any\n ) {\n if (resolvedAnswer) {\n questions.stack.push({\n text: [\n `${node ? node.question.label : 'Question label'}${\n node ? (node.question.label.indexOf(':') > 1 ? '' : ':') : ''\n } `,\n { text: `${resolvedAnswer}`, bold: true }\n ],\n style: 'answers'\n });\n }\n }\n\n // get remote selects only\n getRemoteSectionData(section: any): any {\n const questions: Array<Observable<any>> = [];\n this.subscribedAnswers.questions.stack = [];\n\n for (const node of section) {\n if (node.question.renderingType === 'remote-select') {\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n if (node.control.value !== '') {\n if (this.remoteDataSource) {\n questions.push(\n this.remoteDataSource.resolveSelectedValue(node.control.value)\n );\n }\n }\n }\n }\n return questions;\n }\n\n // merge remote selects\n getSectionData(section: any, remoteAns: any[], form: Form): any {\n const questions = {\n stack: []\n };\n\n let resolvedAnswer = '';\n\n for (const node of section) {\n switch (node.question.renderingType) {\n case 'group':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'field-set':\n if (node.children) {\n const groupMembers = [];\n const result = Object.keys(node.children).map(\n (key) => node.children[key]\n );\n\n if (result) {\n groupMembers.push(result);\n questions.stack.push(\n this.getSectionData(groupMembers[0], remoteAns, form)\n );\n }\n }\n break;\n\n case 'repeating':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'remote-select':\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n for (const ans of remoteAns) {\n if (ans.value === node.control.value) {\n this.appendResolvedAnswer(ans.label, questions, node);\n }\n }\n break;\n\n default:\n const answer = node.control.value;\n if (answer) {\n resolvedAnswer = this.resolveValue(answer, form);\n this.appendResolvedAnswer(resolvedAnswer, questions, node);\n }\n }\n }\n\n return questions;\n }\n\n resolveValue(answer: any, form: Form, arrayElement?: boolean): any {\n if (answer !== '') {\n if (this.isUuid(answer)) {\n const val = this.encounterViewerService.resolveSelectedValueFromSchema(\n answer,\n form.schema\n );\n if (!arrayElement) {\n if (val) {\n return val.toUpperCase();\n } else {\n return answer;\n }\n } else {\n return val;\n }\n } else if (_.isArray(answer)) {\n const arr = [];\n _.forEach(answer, (elem) => {\n arr.push(this.resolveValue(elem, form, true));\n });\n return arr.toString();\n } else if (this.isDate(answer)) {\n if (!arrayElement) {\n return this.encounterViewerService.convertTime(answer);\n } else {\n return this.encounterViewerService.convertTime(answer);\n }\n } else if (typeof answer === 'object') {\n const values = [];\n const result = Object.keys(answer).map((key) => [key, answer[key]]);\n\n values.push(result);\n return values;\n } else {\n return answer;\n }\n }\n }\n\n generatePdfDefinition(form: Form): any {\n const docDefinition$ = new BehaviorSubject<any>({});\n const remoteSelects = this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n true\n );\n\n combineLatest(remoteSelects).subscribe((remoteAns) => {\n if (remoteAns) {\n const docDefinition = {\n pageSize: 'A4',\n content: this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n false,\n remoteAns\n ),\n styles: {\n answers: {\n fontSize: 8\n },\n banner: {\n fontSize: 9,\n bold: true,\n margin: [50, 15, 30, 0]\n },\n bannerItem: {\n margin: [2, 2, 2, 2]\n },\n bannerLabel: {\n color: '#2f4f4f'\n },\n confidential: {\n color: 'red',\n fontSize: 8,\n bold: true,\n margin: [60, 0, 0, 0]\n },\n footer: {\n alignment: 'center',\n fontSize: 8,\n bold: true\n },\n header: {\n fontSize: 9,\n bold: true,\n margin: [5, 5, 5, 5]\n },\n pageNumber: {\n color: '#2f4f4f',\n fontSize: 6\n },\n tableExample: {\n fontSize: 10,\n margin: [5, 0, 0, 5]\n },\n tableHeader: {\n fillColor: '#f5f5f5',\n width: ['100%'],\n borderColor: '#333',\n fontSize: 9,\n bold: true,\n margin: [5, 0, 5, 0]\n },\n tableSubheader: {\n fillColor: '#337ab7',\n width: ['100%'],\n fontSize: 9,\n color: 'white',\n margin: [5, 0, 5, 0]\n },\n timestamp: {\n bold: true,\n color: '#2f4f4f'\n }\n },\n defaultStyle: {\n fontSize: 7\n }\n };\n docDefinition$.next(docDefinition);\n }\n });\n\n return docDefinition$;\n }\n\n displayPdf(form) {\n const pdf = pdfMake;\n let patient;\n pdf.vfs = pdfMake.vfs;\n\n if (form.dataSourcesContainer.dataSources._dataSources) {\n patient =\n form.dataSourcesContainer.dataSources._dataSources['patientInfo'];\n }\n\n this.generatePdfDefinition(form).subscribe(\n (docDefinition) => {\n if (!_.isEmpty(docDefinition)) {\n if (typeof patient !== 'undefined') {\n const banner = [];\n\n if (patient.name) {\n banner.push({\n text: [\n { text: 'Name: ', style: 'bannerLabel' },\n { text: `${this.titleize(patient.name)}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.nid) {\n banner.push({\n text: [\n { text: 'ID: ', style: 'bannerLabel' },\n { text: `${patient.nid}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.birthdate) {\n banner.push({\n text: [\n { text: 'DOB: ', style: 'bannerLabel' },\n {\n text: `${moment(patient.birthdate).format('l')} (${\n patient.age\n } yo)`\n }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mui) {\n banner.push({\n text: [\n { text: 'MUI: ', style: 'bannerLabel' },\n { text: `${patient.mui}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mhn) {\n banner.push({\n text: [\n { text: 'MTRH No: ', style: 'bannerLabel' },\n { text: `${patient.mhn}` }\n ],\n style: 'bannerItem'\n });\n }\n\n docDefinition.header = {\n style: 'banner',\n table: {\n body: [banner]\n },\n layout: 'noBorders'\n };\n }\n\n docDefinition.footer = (currentPage, pageCount) => {\n return {\n style: 'footer',\n widths: ['*', 'auto'],\n table: {\n body: [\n [\n {\n text:\n 'Note: Confidentiality is one of the core duties of all medical practitioners. ' +\n \"Patients' personal health information should be kept private.\",\n style: 'confidential'\n },\n ''\n ],\n [\n {\n text: `Generated on ${new Date().toUTCString()}`,\n style: 'timestamp'\n },\n {\n text: `${currentPage.toString()} of ${pageCount}`,\n style: 'pageNumber'\n }\n ]\n ]\n },\n layout: 'noBorders'\n };\n };\n\n const win = window.open('', '_blank');\n pdf.createPdf(docDefinition).open({}, win);\n }\n },\n (error) => {\n console.log('Error: ', error);\n }\n );\n }\n\n isDate(val: any) {\n return moment(val, moment.ISO_8601, true).isValid();\n }\n\n isUuid(value: string) {\n return (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n );\n }\n\n titleize(str) {\n return str.replace(\n /\\w\\S*/g,\n (s) => s.charAt(0).toUpperCase() + s.substr(1).toLowerCase()\n );\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Form } from '../../form-entry/form-factory/form';\nimport { NodeBase } from '../../form-entry/form-factory/form-node';\nimport { EncounterAdapter } from '../../form-entry/value-adapters/encounter.adapter';\n\nimport { EncounterPdfViewerService } from '../encounter-pdf-viewer.service';\n\n@Component({\n selector: 'encounter-renderer',\n template: `<a\n type=\"button\"\n style=\"display: block; font-size: 28px; cursor: pointer\"\n class=\"text-right\"\n (click)=\"displayPdf()\"\n>\n <span class=\"glyphicon text-primary glyphicon-print\"></span>\n</a>\n<encounter-viewer\n class=\"card\"\n [form]=\"$form\"\n [encounter]=\"$enc\"\n></encounter-viewer>\n`,\n styles: [`.card{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}`]\n})\nexport class EncounterContainerComponent implements OnInit {\n public $form: Form;\n public $enc: any;\n\n @Input() public set form(form) {\n this.$form = form;\n }\n @Input() public set encounter(enc) {\n this.$enc = enc;\n }\n\n constructor(\n private encAdapter: EncounterAdapter,\n private encounterPdfViewerService: EncounterPdfViewerService\n ) {}\n\n ngOnInit() {}\n\n displayPdf() {\n this.encounterPdfViewerService.displayPdf(this.$form);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'question-control',\n styles: [`input{border:none;box-shadow:none;color:#000;background:#fff!important;padding-top:23px;display:block;position:relative}`],\n template: `<div>\n {{ innerValue }}\n</div>\n`\n})\nexport class QuestionControlComponent implements OnInit {\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n @Input() public set value(value) {\n this._value = value;\n }\n @Input() public set dataSource(dataSource: any) {\n this._dataSource = dataSource;\n }\n // The internal data model\n public innerValue: any = '';\n private _value: any;\n private _schema: any;\n private _dataSource: EncounterViewerService;\n constructor() {}\n\n ngOnInit() {\n this.writeValue(this._value);\n }\n public isUuid(value: string) {\n if (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n // Current time string.\n\n public writeValue(v: any, arrayElement?: boolean) {\n if (v !== this.innerValue) {\n if (this.isUuid(v)) {\n if (!arrayElement) {\n const val = this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n if (val) {\n this.innerValue = val.toUpperCase();\n } else {\n this.innerValue = v;\n }\n } else {\n return this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n }\n } else if (_.isArray(v)) {\n const arr = [];\n _.forEach(v, (el) => {\n arr.push(this.writeValue(el, true));\n });\n this.innerValue = arr;\n } else if (this.isDate(v)) {\n if (!arrayElement) {\n this.innerValue = this._dataSource.convertTime(v);\n } else {\n return this._dataSource.convertTime(v);\n }\n } else {\n if (!arrayElement) {\n this.innerValue = v;\n } else {\n return v;\n }\n }\n }\n }\n\n public isDate(str: string) {\n return this._dataSource.isDate(str) && !_.isNumber(str);\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'file-preview',\n styles: [``],\n template: `<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!resultsIsPdf\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this._dataSource.fetchFile\"\n alt=\"image\"\n />\n </div>\n <a *ngIf=\"resultsIsPdf\" (click)=\"getUrl()\" style=\"cursor: pointer\"\n ><u>Open PDF</u></a\n > `,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FilePreviewComponent),\n multi: true\n }\n ]\n})\nexport class FilePreviewComponent implements ControlValueAccessor, OnInit {\n @Input() public source: any;\n public fileUuid = null;\n public pdfUrl: any;\n public resultsIsPdf = false;\n public _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor(private encounterService: EncounterViewerService) {}\n ngOnInit() {}\n // get accessor\n get value(): any {\n return this.fileUuid;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n this.checkFileType();\n }\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.resultsIsPdf = true;\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {\n // const files = event.srcElement.files;\n // const fileToLoad = files[0];\n // const fileReader = new FileReader();\n // fileReader.onload = (fileLoadedEvent) => {\n // const data = fileReader.result;\n // const fileType = data.substring('data:image/'.length, data.indexOf(';base64'));\n // const payload = {\n // data,\n // extension: fileType\n // };\n // };\n // fileReader.readAsDataURL(fileToLoad);\n }\n public getUrl() {\n this.dataSource.fetchFile(this.fileUuid, 'pdf').subscribe((file) => {\n window.open(file.changingThisBreaksApplicationSecurity, '_blank');\n });\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'remote-answer',\n styles: [],\n template: `\n <div *ngIf=\"innerValue\">\n {{ innerValue }}\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteAnswerComponent),\n multi: true\n }\n ]\n})\nexport class RemoteAnswerComponent implements ControlValueAccessor {\n @Input() public source: any;\n public innerValue = null;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor() {}\n // get accessor\n get value(): any {\n return this.innerValue;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.innerValue) {\n if (this._dataSource) {\n this._dataSource.resolveSelectedValue(v).subscribe((ans) => {\n this.innerValue = ans.label;\n });\n } else {\n this.innerValue = v;\n }\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EncounterViewerComponent } from './encounter-view/encounter-viewer.component';\nimport { EncounterContainerComponent } from './encounter-container/encounter-container.component';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { EncounterPdfViewerService } from './encounter-pdf-viewer.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { QuestionControlComponent } from './display-controls/question-control.component';\nimport { FilePreviewComponent } from './display-controls/file-preview.component';\nimport { RemoteAnswerComponent } from './display-controls/remote-answer.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { SharedModule } from '../shared.module';\n@NgModule({\n declarations: [\n EncounterViewerComponent,\n EncounterContainerComponent,\n QuestionControlComponent,\n FilePreviewComponent,\n RemoteAnswerComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n HttpClientModule,\n SharedModule\n ],\n providers: [EncounterViewerService, EncounterPdfViewerService],\n exports: [EncounterContainerComponent, HttpClientModule]\n})\nexport class EncounterViewerModule {}\n","import {\n Component,\n Input,\n forwardRef,\n OnInit,\n AfterViewInit\n} from '@angular/core';\n\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'checkbox',\n template: `<div *ngFor=\"let option of options; let i = index\">\n <label class=\"form-control no-border\">\n <input\n type=\"checkbox\"\n id=\"i + 'id'\"\n (change)=\"selectOpt(option, $event)\"\n value=\"option.value\"\n [checked]=\"option.checked\"\n />\n {{ option.label }}\n </label>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlComponent),\n multi: true\n }\n ],\n styles: [\n `\n .no-border {\n border: 0;\n box-shadow: none;\n }\n `\n ]\n})\nexport class CheckboxControlComponent implements OnInit, AfterViewInit {\n @Input() public options: Array<any>;\n @Input() public selected: Array<any>;\n public _value: Array<any> = [];\n\n public ngOnInit() {\n this.options = this.options.map((option) => {\n if (this.selected.indexOf(option.value) !== -1) {\n Object.assign(option, { checked: true });\n }\n return option;\n });\n }\n\n public ngAfterViewInit() {}\n\n public writeValue(value: any) {\n this.value = value;\n }\n\n public registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this._value || this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n }\n\n public selectOpt(option, event) {\n if (event.target.checked) {\n this._value.push(option.value);\n } else {\n this.options.forEach((o) => {\n if (o.value === option.value) {\n this._value.splice(o, 1);\n }\n });\n }\n\n this.onChange(this.value);\n }\n\n private onChange = (change: any) => {};\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxControlComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [CheckboxControlComponent],\n exports: [CheckboxControlComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class CheckboxModule {}\n","import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Component, OnInit, forwardRef } from '@angular/core';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Component({\n selector: 'ngx-time-picker',\n template: `<input\n type=\"time\"\n class=\"form-control\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onTimeSelect($event)\"\n/>\n`,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => NgxTimePickerComponent)\n }\n ]\n})\nexport class NgxTimePickerComponent implements OnInit, ControlValueAccessor {\n public value: string = moment().format('HH:mm:ss');\n public onChange: any = () => {};\n public onTouched: any = () => {};\n\n public ngOnInit() {}\n\n public writeValue(value: any): void {\n this.value = this.formatTimeValue(value);\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n public onTimeSelect($event: string): void {\n const timeValue = this.formatTimeValue($event);\n this.value = timeValue;\n this.onChange(timeValue);\n }\n\n public formatTimeValue(timeInputString: string): string {\n /*\n Allows processing of data that comes in as date-time\n or just time i.e '1970-03-01 12:32:21' or '12:32:21'\n or '12:32' or '1970-01-01T13:03:00.000+0300'\n */\n let timeArray = [];\n let dateArray = [];\n let timeValue = '';\n\n if (typeof timeInputString === 'undefined' || timeInputString === null) {\n } else {\n timeArray = timeInputString.split(':');\n dateArray = timeInputString.split('-');\n }\n if (timeArray.length === 1 && moment(timeInputString).isValid()) {\n timeValue = moment(timeInputString).format('HH:mm:ss');\n } else if (timeArray.length > 1 && timeArray.length < 2) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length > 1) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length <= 1) {\n timeValue = moment(timeInputString, 'HH:mm:ss').format('HH:mm:ss');\n } else {\n timeValue = moment().format('HH:mm:ss');\n }\n return timeValue;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxTimePickerComponent } from './ngx-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n declarations: [NgxTimePickerComponent],\n exports: [NgxTimePickerComponent],\n providers: []\n})\nexport class NgxTimePickerModule {}\n","import { NgModule } from '@angular/core';\nimport { MatTabsModule, MatIconModule, MatCardModule } from '@angular/material';\n// import { NoopAnimationsModule} from '@angular/platform-browser/animations';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormBuilder } from '@angular/forms';\nimport { DebugModeService } from '../form-entry/services/debug-mode.service';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { FormErrorsService } from './services/form-errors.service';\nimport { FormControlService } from './form-factory/form-control.service';\nimport { ValidationFactory } from './form-factory/validation.factory';\nimport { FormRendererComponent } from './form-renderer/form-renderer.component';\nimport { ErrorRendererComponent } from './error-renderer/error-renderer.component';\nimport { HistoricalValueDirective } from './directives/historical-value-directive';\nimport { HistoricalFieldHelperService } from './helpers/historical-field-helper-service';\nimport { SelectModule } from '../components/select/select.module';\n// import { NgSelectModule } from '@ng-select/ng-select';\nimport { RemoteFileUploadModule } from '../components/file-upload/file-upload.module';\nimport { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';\nimport { NgxDateTimePickerModule } from '../components/ngx-date-time-picker/ngx-date-time-picker.module';\nimport { AfeNgSelectComponent } from '../components/afe-ng-select.component';\nimport { HidersDisablersFactory } from './form-factory/hiders-disablers.factory';\nimport { AlertsFactory } from './form-factory/show-messages.factory';\nimport { ExpressionRunner } from './expression-runner/expression-runner';\nimport { JsExpressionHelper } from './helpers/js-expression-helper';\nimport { FormSchemaCompiler } from './services/form-schema-compiler.service';\nimport { FormFactory } from './form-factory/form.factory';\nimport { QuestionFactory } from './form-factory/question.factory';\nimport { ControlRelationsFactory } from './form-factory/control-relations.factory';\nimport { EncounterAdapter } from './value-adapters/encounter.adapter';\nimport { PersonAttribuAdapter } from './value-adapters/person-attribute.adapter';\nimport { OrderValueAdapter } from './value-adapters/order.adapter';\nimport { ObsAdapterHelper } from './value-adapters/obs-adapter-helper';\nimport { ObsValueAdapter } from './value-adapters/obs.adapter';\nimport { RemoteSelectModule } from '../components/remote-select/remote-select.module';\nimport { AppointmentsOverviewComponent } from '../components/appointments-overview/appointments-overview.component';\nimport { EncounterViewerModule } from '../encounter-viewer/encounter-viewer.module';\nimport { CheckboxModule } from '../components/check-box/checkbox.module';\nimport { SharedModule } from '../shared.module';\nimport { TimeAgoPipe } from 'time-ago-pipe';\nimport { NgxTimePickerModule } from '../components/ngx-time-picker/ngx-time-picker.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CollapseModule,\n // NgSelectModule,\n SelectModule,\n DateTimePickerModule,\n RemoteSelectModule,\n // NoopAnimationsModule,\n RemoteFileUploadModule,\n EncounterViewerModule,\n CheckboxModule,\n MatIconModule,\n MatTabsModule,\n MatCardModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule,\n SharedModule\n ],\n declarations: [\n FormRendererComponent,\n AfeNgSelectComponent,\n AppointmentsOverviewComponent,\n HistoricalValueDirective,\n ErrorRendererComponent,\n TimeAgoPipe\n ],\n providers: [\n FormBuilder,\n FormControlService,\n FormErrorsService,\n ValidationFactory,\n HidersDisablersFactory,\n AlertsFactory,\n ExpressionRunner,\n JsExpressionHelper,\n HistoricalFieldHelperService,\n FormSchemaCompiler,\n FormFactory,\n QuestionFactory,\n ValidationFactory,\n ControlRelationsFactory,\n ObsAdapterHelper,\n ObsValueAdapter,\n EncounterAdapter,\n PersonAttribuAdapter,\n OrderValueAdapter,\n DebugModeService\n ],\n exports: [\n FormRendererComponent,\n AfeNgSelectComponent,\n ErrorRendererComponent,\n DateTimePickerModule,\n EncounterViewerModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule\n ]\n})\nexport class FormEntryModule {}\n","export class Pair {\n key: string;\n\n value: any;\n\n constructor(key: string, value: any) {\n this.key = key;\n this.value = value;\n }\n}\n","export enum RenderingType {\n Form,\n Page,\n Section,\n Select,\n DropDown\n}\n","/*\n * Public API Surface of ngx-formentry\n */\nexport { FormEntryModule } from './form-entry/form-entry.module';\n// export { DateTimePickerModule } from './components/date-time-picker/date-time-picker.module';\nexport { AfeFormControl } from './abstract-controls-extension/afe-form-control';\nexport { AfeFormGroup } from './abstract-controls-extension/afe-form-group';\nexport { AfeFormArray } from './abstract-controls-extension/afe-form-array';\nexport { AfeControlType } from './abstract-controls-extension/afe-control-type';\nexport { EncounterPdfViewerService } from './encounter-viewer/encounter-pdf-viewer.service';\nexport { ControlRelationsFactory } from './form-entry/form-factory/control-relations.factory';\nexport { FormControlService } from './form-entry/form-factory/form-control.service';\nexport { FormFactory } from './form-entry/form-factory/form.factory';\nexport { Form } from './form-entry/form-factory/form';\nexport { QuestionFactory } from './form-entry/form-factory/question.factory';\nexport { ValidationFactory } from './form-entry/form-factory/validation.factory';\nexport { FormSchemaCompiler } from './form-entry/services/form-schema-compiler.service';\nexport { HistoricalEncounterDataService } from './form-entry/services/historical-encounter-data.service';\nexport { FormErrorsService } from './form-entry/services/form-errors.service';\nexport { EncounterAdapter } from './form-entry/value-adapters/encounter.adapter';\nexport { PersonAttribuAdapter } from './form-entry/value-adapters/person-attribute.adapter';\nexport { OrderValueAdapter } from './form-entry/value-adapters/order.adapter';\nexport { ObsValueAdapter } from './form-entry/value-adapters/obs.adapter';\nexport { ObsAdapterHelper } from './form-entry/value-adapters/obs-adapter-helper';\nexport { ValueAdapter } from './form-entry/value-adapters/value.adapter';\nexport { DataSources } from './form-entry/data-sources/data-sources';\nexport { CheckBoxQuestion } from './form-entry/question-models/checkbox.model';\nexport { ConditionalValidationModel } from './form-entry/question-models/conditional-validation.model';\nexport { DateQuestion } from './form-entry/question-models/date-question';\nexport { DateValidationModel } from './form-entry/question-models/date-validation.model';\nexport { FileUploadQuestion } from './form-entry/question-models/file-upload-question';\nexport { QuestionGroup } from './form-entry/question-models/group-question';\nexport { JsExpressionValidationModel } from './form-entry/question-models/js-expression-validation.model';\nexport { MaxValidationModel } from './form-entry/question-models/max-validation.model';\nexport { MinValidationModel } from './form-entry/question-models/min-validation.model';\nexport { MultiSelectQuestion } from './form-entry/question-models/multi-select-question';\nexport { Pair } from './form-entry/question-models/pair.model';\nexport { QuestionBase } from './form-entry/question-models/question-base';\nexport { RenderingType } from './form-entry/question-models/rendering-type';\nexport { RepeatingQuestion } from './form-entry/question-models/repeating-question';\nexport { Option } from './form-entry/question-models/select-option';\nexport { SelectQuestion } from './form-entry/question-models/select-question';\nexport { TestOrderQuestion } from './form-entry/question-models/test-order-question';\nexport { TextAreaInputQuestion } from './form-entry/question-models/text-area-input-question';\nexport { TextInputQuestion } from './form-entry/question-models/text-input-question';\nexport { UiSelectQuestion } from './form-entry/question-models/ui-select-question';\nexport { ValidationModel } from './form-entry/question-models/validation.model';\nexport { BaseOptions } from './form-entry/question-models/interfaces/base-options';\nexport { RepeatingQuestionOptions } from './form-entry/question-models/interfaces/repeating-question-options';\nexport { GroupQuestionOptions } from './form-entry/question-models/interfaces/group-question-options';\nexport { NestedQuestion } from './form-entry/question-models/interfaces/nested-questions';\nexport { DateTimePickerModule } from './components/date-time-picker/date-time-picker.module';\nexport { NgxDateTimePickerModule } from './components/ngx-date-time-picker/ngx-date-time-picker.module';\nexport { JsExpressionHelper } from './form-entry/helpers/js-expression-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {AfeNgSelectComponent as ɵbg} from './components/afe-ng-select.component';\nexport {AppointmentsOverviewComponent as ɵbh} from './components/appointments-overview/appointments-overview.component';\nexport {CheckboxControlComponent as ɵz} from './components/check-box/checkbox.component';\nexport {CheckboxModule as ɵy} from './components/check-box/checkbox.module';\nexport {DatePickerComponent as ɵg} from './components/date-time-picker/date-picker/date-picker.component';\nexport {DateTimePickerComponent as ɵk} from './components/date-time-picker/date-time-picker.component';\nexport {ModalComponent as ɵi} from './components/date-time-picker/picker-modal/modal.component';\nexport {MomentPipe as ɵj} from './components/date-time-picker/pipes/moment.pipe';\nexport {TimePickerComponent as ɵh} from './components/date-time-picker/time-picker/time-picker.component';\nexport {FileUploadComponent as ɵq} from './components/file-upload/file-upload.component';\nexport {RemoteFileUploadModule as ɵn} from './components/file-upload/file-upload.module';\nexport {SecurePipe as ɵp} from './components/file-upload/secure.pipe';\nexport {MY_FORMATS as ɵba,NgxDateTimePickerComponent as ɵbb} from './components/ngx-date-time-picker/ngx-date-time-picker.component';\nexport {NgxTimePickerComponent as ɵbd} from './components/ngx-time-picker/ngx-time-picker.component';\nexport {NgxTimePickerModule as ɵbc} from './components/ngx-time-picker/ngx-time-picker.module';\nexport {RemoteSelectComponent as ɵm} from './components/remote-select/remote-select.component';\nexport {RemoteSelectModule as ɵl} from './components/remote-select/remote-select.module';\nexport {SelectDropdownComponent as ɵe} from './components/select/select-dropdown.component';\nexport {STYLE as ɵf} from './components/select/select-dropdown.component.style';\nexport {SELECT_VALUE_ACCESSOR as ɵb,SelectComponent as ɵc} from './components/select/select.component';\nexport {STYLE as ɵd} from './components/select/select.component.style';\nexport {SelectModule as ɵa} from './components/select/select.module';\nexport {FilePreviewComponent as ɵw} from './encounter-viewer/display-controls/file-preview.component';\nexport {QuestionControlComponent as ɵv} from './encounter-viewer/display-controls/question-control.component';\nexport {RemoteAnswerComponent as ɵx} from './encounter-viewer/display-controls/remote-answer.component';\nexport {EncounterContainerComponent as ɵu} from './encounter-viewer/encounter-container/encounter-container.component';\nexport {EncounterViewerComponent as ɵs} from './encounter-viewer/encounter-view/encounter-viewer.component';\nexport {EncounterViewerModule as ɵr} from './encounter-viewer/encounter-viewer.module';\nexport {EncounterViewerService as ɵt} from './encounter-viewer/encounter-viewer.service';\nexport {HistoricalValueDirective as ɵbi} from './form-entry/directives/historical-value-directive';\nexport {ErrorRendererComponent as ɵbk} from './form-entry/error-renderer/error-renderer.component';\nexport {ExpressionRunner as ɵbm} from './form-entry/expression-runner/expression-runner';\nexport {HidersDisablersFactory as ɵbl} from './form-entry/form-factory/hiders-disablers.factory';\nexport {AlertsFactory as ɵbo} from './form-entry/form-factory/show-messages.factory';\nexport {FormRendererComponent as ɵbe} from './form-entry/form-renderer/form-renderer.component';\nexport {DEFAULT_STYLES as ɵbf} from './form-entry/form-renderer/form-renderer.component.css';\nexport {HistoricalFieldHelperService as ɵbj} from './form-entry/helpers/historical-field-helper-service';\nexport {CheckboxOptions as ɵbp} from './form-entry/question-models/interfaces/checkbox-options';\nexport {DateQuestionOptions as ɵbq} from './form-entry/question-models/interfaces/date-question-options';\nexport {FileUploadQuestionOptions as ɵbr} from './form-entry/question-models/interfaces/file-upload-question-options';\nexport {MultiSelectQuestionOptions as ɵbt} from './form-entry/question-models/interfaces/multi-select-options';\nexport {SelectOption as ɵbu} from './form-entry/question-models/interfaces/select-option';\nexport {SelectQuestionOptions as ɵbs} from './form-entry/question-models/interfaces/select-question-options';\nexport {TestOrderQuestionOptions as ɵbv} from './form-entry/question-models/interfaces/test-order-question-options';\nexport {TextAreaQuestionOptions as ɵbx} from './form-entry/question-models/interfaces/text-area-question-options';\nexport {TextQuestionOptions as ɵbw} from './form-entry/question-models/interfaces/text-question-options';\nexport {UiSelectQuestionOptions as ɵby} from './form-entry/question-models/interfaces/ui-select-question-options';\nexport {DebugModeService as ɵbn} from './form-entry/services/debug-mode.service';\nexport {SharedModule as ɵo} from './shared.module';"],"names":["isEmpty","_.first","_.forEach","_.last","_.findIndex","_.filter","_.isArray","_.each","_.isUndefined","STYLE","moment","_.chunk","Option","_.isEmpty","_.includes","_.sortBy","_.isNil","_.extend","_.has","_.find","_.intersection","first","_.isEqual","_.map","_.clone","_.uniqBy","pdfMake.vfs","_.isNumber","noop"],"mappings":"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,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ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"}