@hmcts/ccd-case-ui-toolkit 5.0.6-angular11-upgrade → 5.0.7-angular11-upgrade

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 (214) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +17664 -4536
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +2 -2
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  5. package/esm2015/lib/shared/components/activity/activity-banner/activity-banner.component.js +42 -0
  6. package/esm2015/lib/shared/components/activity/activity-banner/index.js +2 -0
  7. package/esm2015/lib/shared/components/activity/activity-icon/activity-icon.component.js +35 -0
  8. package/esm2015/lib/shared/components/activity/activity-icon/index.js +2 -0
  9. package/esm2015/lib/shared/components/activity/activity.component.js +150 -0
  10. package/esm2015/lib/shared/components/activity/activity.module.js +53 -0
  11. package/esm2015/lib/shared/components/activity/index.js +5 -0
  12. package/esm2015/lib/shared/components/case-editor/services/case-worker.service.js +32 -0
  13. package/esm2015/lib/shared/components/case-editor/services/judicial-worker.service.js +32 -0
  14. package/esm2015/lib/shared/components/case-header/case-header.component.js +65 -0
  15. package/esm2015/lib/shared/components/case-header/case-header.module.js +35 -0
  16. package/esm2015/lib/shared/components/case-header/index.js +3 -0
  17. package/esm2015/lib/shared/components/case-list/case-list.component.js +370 -0
  18. package/esm2015/lib/shared/components/case-list/case-list.module.js +45 -0
  19. package/esm2015/lib/shared/components/case-list/index.js +3 -0
  20. package/esm2015/lib/shared/components/case-list-filters/case-list-filters.component.js +57 -0
  21. package/esm2015/lib/shared/components/case-list-filters/case-list-filters.module.js +59 -0
  22. package/esm2015/lib/shared/components/case-list-filters/index.js +3 -0
  23. package/esm2015/lib/shared/components/create-case-filters/create-case-filters-selection.model.js +8 -0
  24. package/esm2015/lib/shared/components/create-case-filters/create-case-filters.component.js +257 -0
  25. package/esm2015/lib/shared/components/create-case-filters/create-case-filters.module.js +42 -0
  26. package/esm2015/lib/shared/components/create-case-filters/index.js +4 -0
  27. package/esm2015/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.js +57 -0
  28. package/esm2015/lib/shared/components/dialogs/delete-or-cancel-dialog/index.js +2 -0
  29. package/esm2015/lib/shared/components/dialogs/dialogs.module.js +49 -0
  30. package/esm2015/lib/shared/components/dialogs/document-dialog/index.js +2 -0
  31. package/esm2015/lib/shared/components/dialogs/index.js +6 -0
  32. package/esm2015/lib/shared/components/dialogs/remove-dialog/index.js +2 -0
  33. package/esm2015/lib/shared/components/dialogs/save-or-discard-dialog/index.js +2 -0
  34. package/esm2015/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.js +61 -0
  35. package/esm2015/lib/shared/components/error/callback-errors.component.js +145 -0
  36. package/esm2015/lib/shared/components/error/domain/error-context.js +3 -0
  37. package/esm2015/lib/shared/components/error/domain/index.js +2 -0
  38. package/esm2015/lib/shared/components/error/errors.module.js +31 -0
  39. package/esm2015/lib/shared/components/error/index.js +4 -0
  40. package/esm2015/lib/shared/components/error-message/error-message.component.js +51 -0
  41. package/esm2015/lib/shared/components/error-message/error-message.module.js +39 -0
  42. package/esm2015/lib/shared/components/error-message/index.js +3 -0
  43. package/esm2015/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.js +55 -0
  44. package/esm2015/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.js +52 -0
  45. package/esm2015/lib/shared/components/event-start/components/task-assigned/task-assigned.component.js +104 -0
  46. package/esm2015/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.js +60 -0
  47. package/esm2015/lib/shared/components/event-start/components/task-conflict/task-conflict.component.js +54 -0
  48. package/esm2015/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.js +52 -0
  49. package/esm2015/lib/shared/components/event-start/event-guard/event-start.guard.js +103 -0
  50. package/esm2015/lib/shared/components/event-start/event-start.component.js +52 -0
  51. package/esm2015/lib/shared/components/event-start/event-start.module.js +69 -0
  52. package/esm2015/lib/shared/components/event-start/index.js +10 -0
  53. package/esm2015/lib/shared/components/event-start/models/event-start-state-machine-context.model.js +2 -0
  54. package/esm2015/lib/shared/components/event-start/models/event-start-states-enum.model.js +16 -0
  55. package/esm2015/lib/shared/components/event-start/models/index.js +3 -0
  56. package/esm2015/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.js +29 -0
  57. package/esm2015/lib/shared/components/event-start/services/event-start-state-machine.service.js +168 -0
  58. package/esm2015/lib/shared/components/event-start/services/index.js +2 -0
  59. package/esm2015/lib/shared/components/index.js +20 -0
  60. package/esm2015/lib/shared/components/loading-spinner/index.js +2 -0
  61. package/esm2015/lib/shared/components/loading-spinner/loading-spinner.component.js +33 -0
  62. package/esm2015/lib/shared/components/pagination/index.js +3 -0
  63. package/esm2015/lib/shared/components/pagination/pagination.component.js +255 -0
  64. package/esm2015/lib/shared/components/pagination/pagination.module.js +33 -0
  65. package/esm2015/lib/shared/components/palette/address/index.js +3 -0
  66. package/esm2015/lib/shared/components/palette/case-link/index.js +3 -0
  67. package/esm2015/lib/shared/components/palette/index.js +32 -0
  68. package/esm2015/lib/shared/components/workbasket-filters/index.js +3 -0
  69. package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.component.js +448 -0
  70. package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.module.js +60 -0
  71. package/esm2015/lib/shared/domain/work-allocation/case-worker.model.js +2 -0
  72. package/esm2015/lib/shared/domain/work-allocation/judicial-worker.model.js +2 -0
  73. package/esm2015/lib/shared/index.js +2 -1
  74. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +15548 -4262
  75. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  76. package/lib/shared/components/activity/activity-banner/activity-banner.component.d.ts +12 -0
  77. package/lib/shared/components/activity/activity-banner/activity-banner.component.d.ts.map +1 -0
  78. package/lib/shared/components/activity/activity-banner/index.d.ts +2 -0
  79. package/lib/shared/components/activity/activity-banner/index.d.ts.map +1 -0
  80. package/lib/shared/components/activity/activity-icon/activity-icon.component.d.ts +11 -0
  81. package/lib/shared/components/activity/activity-icon/activity-icon.component.d.ts.map +1 -0
  82. package/lib/shared/components/activity/activity-icon/index.d.ts +2 -0
  83. package/lib/shared/components/activity/activity-icon/index.d.ts.map +1 -0
  84. package/lib/shared/components/activity/activity.component.d.ts +32 -0
  85. package/lib/shared/components/activity/activity.component.d.ts.map +1 -0
  86. package/lib/shared/components/activity/activity.module.d.ts +12 -0
  87. package/lib/shared/components/activity/activity.module.d.ts.map +1 -0
  88. package/lib/shared/components/activity/index.d.ts +5 -0
  89. package/lib/shared/components/activity/index.d.ts.map +1 -0
  90. package/lib/shared/components/case-editor/services/case-worker.service.d.ts +16 -0
  91. package/lib/shared/components/case-editor/services/case-worker.service.d.ts.map +1 -0
  92. package/lib/shared/components/case-editor/services/judicial-worker.service.d.ts +16 -0
  93. package/lib/shared/components/case-editor/services/judicial-worker.service.d.ts.map +1 -0
  94. package/lib/shared/components/case-header/case-header.component.d.ts +15 -0
  95. package/lib/shared/components/case-header/case-header.component.d.ts.map +1 -0
  96. package/lib/shared/components/case-header/case-header.module.d.ts +11 -0
  97. package/lib/shared/components/case-header/case-header.module.d.ts.map +1 -0
  98. package/lib/shared/components/case-header/index.d.ts +3 -0
  99. package/lib/shared/components/case-header/index.d.ts.map +1 -0
  100. package/lib/shared/components/case-list/case-list.component.d.ts +47 -0
  101. package/lib/shared/components/case-list/case-list.component.d.ts.map +1 -0
  102. package/lib/shared/components/case-list/case-list.module.d.ts +13 -0
  103. package/lib/shared/components/case-list/case-list.module.d.ts.map +1 -0
  104. package/lib/shared/components/case-list/index.d.ts +3 -0
  105. package/lib/shared/components/case-list/index.d.ts.map +1 -0
  106. package/lib/shared/components/case-list-filters/case-list-filters.component.d.ts +19 -0
  107. package/lib/shared/components/case-list-filters/case-list-filters.component.d.ts.map +1 -0
  108. package/lib/shared/components/case-list-filters/case-list-filters.module.d.ts +13 -0
  109. package/lib/shared/components/case-list-filters/case-list-filters.module.d.ts.map +1 -0
  110. package/lib/shared/components/case-list-filters/index.d.ts +3 -0
  111. package/lib/shared/components/case-list-filters/index.d.ts.map +1 -0
  112. package/lib/shared/components/create-case-filters/create-case-filters-selection.model.d.ts +7 -0
  113. package/lib/shared/components/create-case-filters/create-case-filters-selection.model.d.ts.map +1 -0
  114. package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts +57 -0
  115. package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts.map +1 -0
  116. package/lib/shared/components/create-case-filters/create-case-filters.module.d.ts +12 -0
  117. package/lib/shared/components/create-case-filters/create-case-filters.module.d.ts.map +1 -0
  118. package/lib/shared/components/create-case-filters/index.d.ts +4 -0
  119. package/lib/shared/components/create-case-filters/index.d.ts.map +1 -0
  120. package/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.d.ts +12 -0
  121. package/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.d.ts.map +1 -0
  122. package/lib/shared/components/dialogs/delete-or-cancel-dialog/index.d.ts +2 -0
  123. package/lib/shared/components/dialogs/delete-or-cancel-dialog/index.d.ts.map +1 -0
  124. package/lib/shared/components/dialogs/dialogs.module.d.ts +13 -0
  125. package/lib/shared/components/dialogs/dialogs.module.d.ts.map +1 -0
  126. package/lib/shared/components/dialogs/document-dialog/index.d.ts +2 -0
  127. package/lib/shared/components/dialogs/document-dialog/index.d.ts.map +1 -0
  128. package/lib/shared/components/dialogs/index.d.ts +6 -0
  129. package/lib/shared/components/dialogs/index.d.ts.map +1 -0
  130. package/lib/shared/components/dialogs/remove-dialog/index.d.ts +2 -0
  131. package/lib/shared/components/dialogs/remove-dialog/index.d.ts.map +1 -0
  132. package/lib/shared/components/dialogs/save-or-discard-dialog/index.d.ts +2 -0
  133. package/lib/shared/components/dialogs/save-or-discard-dialog/index.d.ts.map +1 -0
  134. package/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.d.ts +13 -0
  135. package/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.d.ts.map +1 -0
  136. package/lib/shared/components/error/callback-errors.component.d.ts +25 -0
  137. package/lib/shared/components/error/callback-errors.component.d.ts.map +1 -0
  138. package/lib/shared/components/error/domain/error-context.d.ts +5 -0
  139. package/lib/shared/components/error/domain/error-context.d.ts.map +1 -0
  140. package/lib/shared/components/error/domain/index.d.ts +2 -0
  141. package/lib/shared/components/error/domain/index.d.ts.map +1 -0
  142. package/lib/shared/components/error/errors.module.d.ts +10 -0
  143. package/lib/shared/components/error/errors.module.d.ts.map +1 -0
  144. package/lib/shared/components/error/index.d.ts +4 -0
  145. package/lib/shared/components/error/index.d.ts.map +1 -0
  146. package/lib/shared/components/error-message/error-message.component.d.ts +8 -0
  147. package/lib/shared/components/error-message/error-message.component.d.ts.map +1 -0
  148. package/lib/shared/components/error-message/error-message.module.d.ts +12 -0
  149. package/lib/shared/components/error-message/error-message.module.d.ts.map +1 -0
  150. package/lib/shared/components/error-message/index.d.ts +3 -0
  151. package/lib/shared/components/error-message/index.d.ts.map +1 -0
  152. package/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.d.ts +10 -0
  153. package/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.d.ts.map +1 -0
  154. package/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.d.ts +10 -0
  155. package/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.d.ts.map +1 -0
  156. package/lib/shared/components/event-start/components/task-assigned/task-assigned.component.d.ts +23 -0
  157. package/lib/shared/components/event-start/components/task-assigned/task-assigned.component.d.ts.map +1 -0
  158. package/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.d.ts +7 -0
  159. package/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.d.ts.map +1 -0
  160. package/lib/shared/components/event-start/components/task-conflict/task-conflict.component.d.ts +9 -0
  161. package/lib/shared/components/event-start/components/task-conflict/task-conflict.component.d.ts.map +1 -0
  162. package/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.d.ts +10 -0
  163. package/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.d.ts.map +1 -0
  164. package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts +20 -0
  165. package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts.map +1 -0
  166. package/lib/shared/components/event-start/event-start.component.d.ts +20 -0
  167. package/lib/shared/components/event-start/event-start.component.d.ts.map +1 -0
  168. package/lib/shared/components/event-start/event-start.module.d.ts +17 -0
  169. package/lib/shared/components/event-start/event-start.module.d.ts.map +1 -0
  170. package/lib/shared/components/event-start/index.d.ts +10 -0
  171. package/lib/shared/components/event-start/index.d.ts.map +1 -0
  172. package/lib/shared/components/event-start/models/event-start-state-machine-context.model.d.ts +13 -0
  173. package/lib/shared/components/event-start/models/event-start-state-machine-context.model.d.ts.map +1 -0
  174. package/lib/shared/components/event-start/models/event-start-states-enum.model.d.ts +15 -0
  175. package/lib/shared/components/event-start/models/event-start-states-enum.model.d.ts.map +1 -0
  176. package/lib/shared/components/event-start/models/index.d.ts +3 -0
  177. package/lib/shared/components/event-start/models/index.d.ts.map +1 -0
  178. package/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.d.ts +15 -0
  179. package/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.d.ts.map +1 -0
  180. package/lib/shared/components/event-start/services/event-start-state-machine.service.d.ts +40 -0
  181. package/lib/shared/components/event-start/services/event-start-state-machine.service.d.ts.map +1 -0
  182. package/lib/shared/components/event-start/services/index.d.ts +2 -0
  183. package/lib/shared/components/event-start/services/index.d.ts.map +1 -0
  184. package/lib/shared/components/index.d.ts +16 -0
  185. package/lib/shared/components/index.d.ts.map +1 -0
  186. package/lib/shared/components/loading-spinner/index.d.ts +2 -0
  187. package/lib/shared/components/loading-spinner/index.d.ts.map +1 -0
  188. package/lib/shared/components/loading-spinner/loading-spinner.component.d.ts +7 -0
  189. package/lib/shared/components/loading-spinner/loading-spinner.component.d.ts.map +1 -0
  190. package/lib/shared/components/pagination/index.d.ts +3 -0
  191. package/lib/shared/components/pagination/index.d.ts.map +1 -0
  192. package/lib/shared/components/pagination/pagination.component.d.ts +26 -0
  193. package/lib/shared/components/pagination/pagination.component.d.ts.map +1 -0
  194. package/lib/shared/components/pagination/pagination.module.d.ts +10 -0
  195. package/lib/shared/components/pagination/pagination.module.d.ts.map +1 -0
  196. package/lib/shared/components/palette/address/index.d.ts +3 -0
  197. package/lib/shared/components/palette/address/index.d.ts.map +1 -0
  198. package/lib/shared/components/palette/case-link/index.d.ts +3 -0
  199. package/lib/shared/components/palette/case-link/index.d.ts.map +1 -0
  200. package/lib/shared/components/palette/index.d.ts +32 -0
  201. package/lib/shared/components/palette/index.d.ts.map +1 -0
  202. package/lib/shared/components/workbasket-filters/index.d.ts +3 -0
  203. package/lib/shared/components/workbasket-filters/index.d.ts.map +1 -0
  204. package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts +85 -0
  205. package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts.map +1 -0
  206. package/lib/shared/components/workbasket-filters/workbasket-filters.module.d.ts +12 -0
  207. package/lib/shared/components/workbasket-filters/workbasket-filters.module.d.ts.map +1 -0
  208. package/lib/shared/domain/work-allocation/case-worker.model.d.ts +14 -0
  209. package/lib/shared/domain/work-allocation/case-worker.model.d.ts.map +1 -0
  210. package/lib/shared/domain/work-allocation/judicial-worker.model.d.ts +8 -0
  211. package/lib/shared/domain/work-allocation/judicial-worker.model.d.ts.map +1 -0
  212. package/lib/shared/index.d.ts +1 -0
  213. package/lib/shared/index.d.ts.map +1 -1
  214. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["i0","ctx_r1","email","phone","workhours","FooterComponent","title","ctx_r2","selectors","inputs","isSolicitor","ngContentSelectors","decls","vars","consts","template","rf","ctx","FooterComponent_div_2_Template","FooterComponent_div_3_Template","Component","args","selector","templateUrl","styleUrls","Input","HeaderBarComponent","this","signOutRequest","EventEmitter","prototype","signOut","emit","username","outputs","HeaderBarComponent_div_3_Template","HeaderBarComponent_div_4_Template","HeaderBarComponent_div_9_Template","Output","NavigationComponent","ctx_r0","label","imageLink","NavigationItemComponent","link","NavigationItemComponent_input_3_Template","PhaseComponent","phaseLabel","phaseLink","HeadersModule","CommonModule","RouterModule","ngJitMode","declarations","imports","exports","NgModule","BodyComponent","encapsulation","ViewEncapsulation","None","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","__values","o","s","Symbol","iterator","m","call","next","value","done","TypeError","__read","n","e","ar","push","error","__spread","concat","_r8_1","_r6","hourChange","i0__namespace","inputFocus","ctx_r3","hourId","displayHour","_c0","isInvalid","_r13_1","_r11","minuteChange","ctx_r4","minuteId","displayMinute","_r18_1","_r16","secondChange","ctx_r5","secondId","displaySecond","DateInputComponent","isTouched","displayDay","displayMonth","displayYear","DATE_FORMAT","rawValue","ngOnInit","mandatory","isDateTime","hour","minute","second","writeValue","obj","removeMilliseconds","_a","split","datePart","timePart","dateValues","year","month","day","timeParts","validate","control","viewValue","required","isDateFormat","getValueForValidation","pattern","registerOnChange","fn","propagateChange","registerOnTouched","ngOnDestroy","dayChange","monthChange","yearChange","touch","formControl","markAsTouched","markAsUntouched","dayId","id","monthId","yearId","date","pad","join","val","test","num","padNum","undefined","toString","replace","dateTime","type","features","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","NG_VALIDATORS","_r21_1","_r0","_r1","_r2","DateInputComponent_div_16_Template","DateInputComponent_div_17_Template","DateInputComponent_div_18_Template","providers","AlertMessageType","AlertComponent","showIcon","alertMessageType","TYPE_WARNING","TYPE_SUCCESS","TYPE_ERROR","TYPE_INFORMATION","AlertComponent_ng_container_2_Template","AlertComponent_ng_container_3_Template","AlertComponent_ng_container_4_Template","AlertComponent_ng_container_5_Template","WARNING","ERROR","SUCCESS","INFORMATION","AlertIconClassPipe","transform","CLASS_SUCCESS","CLASS_WARNING","pure","Pipe","name","AlertModule","TabComponent","selected","_r4_1","panel_r1","$implicit","show","_c1","_c2","TabsComponent","route","panelIds","ngAfterContentInit","_this","panels","forEach","panel","snapshot","fragment","toArray","indexOf","i1","ActivatedRoute","contentQueries","dirIndex","TabsComponent_li_2_Template","tabs","ViewChildren","ContentChildren","TabsModule","ConditionalShowRegistrarService","registeredDirectives","register","newDirective","reset","token","factory","Injectable","GreyBarService","rendererFactory","fieldsToggledToShow","renderer","createRenderer","showGreyBar","field","el","isCollection","addGreyBar","removeGreyBar","divSelector","nativeElement","querySelector","removeClass","addToggledToShow","fieldId","removeToggledToShow","filter","wasToggledToShow","find","addClass","RendererFactory2","FormatTranslatorService","translate","javaFormat","result","prev","inQuote","maybePush","flag","javaFormat_1","javaFormat_1_1","showOnlyDates","dateFormat","includes","removeTime","trim","hasDate","toLowerCase","is24Hour","hasNoDay","hasNoDayAndMonth","hasHours","hasMinutes","hasSeconds","DatePipe","formatTrans","zone","format","resultDate","match","DATE_FORMAT_REGEXP","offsetDate","getDate","getOffsetDate","translateDateFormat","moment","MONTHS","getMonth","getFullYear","getHour","getHours","getMinutes","getSeconds","toInt","parsedDate","Date","parse","isNaN","shortISO","toLocaleDateString","reverse","thisMoment","localOffset","getTimezoneOffset","getTime","minutes","seconds","hourStr","hourNum","str","parseInt","RegExp","i1.FormatTranslatorService","WizardPageField","FixedListItem","FieldType","Type","CaseField","_list_items","get","isDynamic","_value","code","set","list_items","field_type","fixed_list_items","items","isComplexDisplay","display_context_parameter","extractBracketValue","isComplexEntry","isComplex","isReadonly","isOptional","isMandatory","_","isEmpty","display_context","toUpperCase","some","t","isCaseLink","complex_fields","cf","fmt","paramName","leftBracket","rightBracket","a","startsWith","substr","Expose","FieldsUtils","convertToCaseField","plainToClassFromExist","toValuesMap","caseFields","valueMap","prepareValue","getType","elem","slice","isObject","isNonEmptyObject","keys","isArray","areCollectionValuesSimpleFields","fieldValue","isCollectionOfSimpleTypes","isMultiSelectValue","form","isNonEmptyArray","isCollectionWithValue","pageFormFields","cloneObject","assign","getCaseFields","caseView","caseDataFields","reduce","acc","tab","fields","metadataFields","caseField","findIndex","metadataField","addCaseFieldAndComponentReferences","comp","containsNonEmptyValues","object","values","map","objectRefs","hasNonNullPrimitive","x","constructor","y","handleNestedDynamicLists","jsonBody","case_fields","setDynamicListDefinition","valueMap_1","complexField","getMoneyGBP","currencyPipe","getLabel","datePipe","textForInvalidField","getFixedListLabelByCodeOrEmpty","relevantItem","item","invalidValue","caseFieldType","rootCaseField","SERVER_RESPONSE_FIELD_TYPE_COMPLEX","SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE","dynamicListValue","getDynamicListValue","complexValue","data","formatted_value","console","log","SERVER_RESPONSE_FIELD_TYPE_COLLECTION","collection_field_type","jsonBlock","getNestedFieldValues","jsonData","output","elementKey","buildCanShowPredicate","eventTrigger","currentState","getCurrentEventState","page","parsedShowCondition","mergeCaseFieldsAndFormFields","controls","cloneCaseField","formFields","mergeFields","DEFAULT_MERGE_FUNCTION","mergeLabelCaseFieldsAndFormFields","LABEL_MERGE_FUNCTION","controlIterator","aControl","formArrayFn","formGroupFn","controlFn","FormArray","FormGroup","FormControl","mergeFunction","LABEL_SUFFIX","CurrencyPipe","idx","f","elements","ShowCondition","condition","orConditions","andConditions","search","OR_CONDITION_REGEXP","AND_CONDITION_REGEXP","addPathPrefixToCondition","showCondition","pathPrefix","extractConditions","getInstance","instance","instanceCache","hiddenCannotChange","conditions","allUnchangeable","path","getField","head","shift","ft","conditions_1","conditions_1_1","conditionsArray","separator","CONTAINS","CONDITION_EQUALS","CONDITION_NOT_EQUALS","matchAndConditions","updatePathName","matchByContextFields","contextFields","pathName_1","pathTail","pathFinalIndex_1","pop","mappedPathTail","Number","orCondition","matchEqualityCondition","every","andCondition","conditionSeparator","_b","tail","currentValue","findValueForComplexCondition","expectedValue","unquoted","checkValueContains","checkValueEquals","conditionSeparaor","checkMultiSelectListEquals","endsWith","removeStarChar","checkValueNotEquals","okIfBothEmpty","formatCurrentValue","expectedValues","sort","values_1","getValue","findValueForComplexConditionInArray","findValueForComplexConditionForPathIfAny","arrayIndex","dropNumberPath","isDynamicList","dynamiclist","_score","has","substring","right","Map","Constants","MANDATORY","REGEX_WHITESPACES","FormValidatorsService","addValidators","CUSTOM_VALIDATED_TYPES","validators","Validators","regular_expression","emptyValidator","min","minLength","max","maxLength","validator","setValidators","AbstractFormFieldComponent","idPrefix","registerControl","container","parent","formGroup","existing","addControlToParent","addControlToFormArray","addControlToFormGroup","index","setControl","addControl","Directive","AbstractFieldWriteComponent","_super","isExpanded","isInSearchBlock","fixCaseField","__","create","__extends","ngOnChanges","changes","change","createElementId","elementId","ConditionalShowFormDirective","fieldsUtils","handleFormControl","evaluateControl","handleFormArray","formArray","handleFormGroup","groupControl","cKey","ngAfterViewInit","evalAllShowHideConditions","subscribeToFormChanges","unsubscribeFromFormChanges","formChangesSubscription","valueChanges","pipe","debounceTime","subscribe","component","evaluateCondition","hidden","show_condition","condResult","allFieldValues","buildPath","disabled","enable","emitEvent","disable","getCurrentPagesReadOnlyAndFormFieldValues","getFormFieldsValuesIncludingDisabled","getRawValue","unsubscribe","i1.FieldsUtils","ConditionalShowModule","FieldTypeSanitiser","sanitiseLists","FIELD_TYPE_DYNAMIC_RADIO_LIST","FIELD_TYPE_DYNAMIC_LIST","convertStringToDynamicListOutput","FIELD_TYPE_COMPLEX","FIELD_TYPE_COLLECTION","formElement","stringValue","listItems","getListItems","matches","PlaceholderService","PlaceholderSubstitutor","FormValueService","fieldTypeSanitiser","getFieldValue","fieldKey","colIndex","fieldIds","currentFieldId","currentForm","removeMultiSelectLabels","data_1","data_1_1","keys_1","keys_1_1","isReadOnly","isLabel","isEmptyData","allEmpty","_c","clearOptionalEmpty","clearEmpty","sanitise","sanitiseObject","sanitiseCaseReference","reference","filterCurrentPageFields","editForm","cloneForm","JSON","stringify","element","sanitiseDynamicLists","clearNonCaseFields","dataKey","removeNullLabels","caseFields_1","caseFields_1_1","collection","collection_1","e_5","collection_1_1","removeEmptyDocuments","caseFields_2","caseFields_2_1","collection_2","e_7","collection_2_1","removeUnnecessaryFields","clearNonCase","caseFields_3","caseFields_3_1","removeInvalidCollectionData","collection_3","e_9","collection_3_1","objCollection","removeEmptyCollectionsWithMinValidation","caseFields_4","caseFields_4_1","rawObject","sanitisedObject","documentFieldKeys","sanitiseValue","String","sanitiseArray","rawArray","i1.FieldTypeSanitiser","resolvePlaceholders","stringToResolve","resolvedFormValues","originalStringToResolve","wrapPlaceholder","PLACEHOLDER_START","PLACEHOLDER_END","hasUnresolvedPlaceholder","resetPlaceholderSubstitutor","doesPlaceholderContainCollectionItems","isScanningStringToResolve","isStartPlaceholderAndNotCollecting","setStartCollecting","isCollecting","isClosingPlaceholder","substitute","isOpeningPlaceholder","appendCharacter","scanIndex","appendOriginalStringIfCollectionItemAsPlaceholder","numberCollectionItemsAsPlaceholder","PLACEHOLDER_PATTERN","isStartingPlaceholder","charAt","OPENING_PLACEHOLDER","CLOSING_PLACEHOLDER","collectionItemIndex","fieldIdToSubstitute","startSubstitutionIndex","isMatchingPlaceholderPattern","isFieldIdInFormFields","updateNumberOfCollectionItemsAsPlaceholder","isFieldIdToSubstituteReferringItself","substituteWithEmptyString","substituteFromFormFields","NEW_LINE","PLACEHOLDER_CONTENT_PATTERN","getSubstitutionValueOrEmpty","getSubstitutionValueLengthOrZero","getNumberOfCollectionItemsIfAny","pageFormFieldsClone","STARTING_PLACEHOLDER","newNumber","Math","doSubstitution","resetScanIndexAfterSubstitution","placeholder","replacedString","LabelSubstitutorDirective","placeholderService","elementsToSubstitute","initialLabel","initialHintText","hint_text","getReadOnlyAndFormFields","shouldSubstitute","uniqueContextFields","removeDuplicates","original","unique","i2.PlaceholderService","LabelSubstitutorModule","FocusElementDirective","focus","focusElement","selectRootElement","ElementRef","Renderer2","FocusElementModule","DisplayMode","ActivityInfo","Activity","AddressModel","AddressLine1","AddressLine2","AddressLine3","PostTown","County","PostCode","Country","Alert","WizardPage","getCol1Fields","wizardProps","page_column_no","getCol2Fields","isMultiColumn","CaseEventTrigger","hasFields","hasPages","wizard_pages","CaseViewEvent","CaseViewTrigger","DELETE","CaseEvent","CaseState","CaseTypeLite","CaseType","EventCaseField","Jurisdiction","Banner","CaseTab","CaseView","CasePrintDocument","HRef","DocumentLinks","Document","Embedded","DocumentData","FormDocument","HttpError","timestamp","toISOString","DEFAULT_ERROR","message","DEFAULT_MESSAGE","status","DEFAULT_STATUS","exception","details","callbackErrors","callbackWarnings","from","response","OrganisationConverter","toSimpleAddress","organisationModel","simpleAddress","addressLine1","addressLine2","addressLine3","townCity","county","country","postCode","toSimpleOrganisationModel","organisationIdentifier","address","hasRoles","profile","user","idam","roles","Profile","isCourtAdmin","Field","elementPath","SearchResultViewColumn","SearchResultViewItem","DRAFT_PREFIX","Draft","stripDraftId","draftId","isDraft","SearchResultView","hasDrafts","results","case_id","CaseDetails","CaseEventData","WorkbasketInputModel","order","WorkbasketInput","PaginationMetadata","SortOrder","SortParameters","comparator","sortOrder","ComplexFieldOverride","CaseFieldBuilder","withACLs","acls","withId","withFieldType","withDisplayContext","withDisplayContextParameter","withHidden","withHintText","withLabel","withOrder","withSecurityLabel","security_label","withShowCondition","withShowSummaryContentOption","option","show_summary_content_option","withValue","withListValue","build","textFieldType","CaseReferencePipe","caseReference","g1","g2","g3","g4","CcdCaseTitlePipe","caseTitle","caseFieldValues","i1.PlaceholderService","i2.FieldsUtils","SortSearchResultPipe","searchResults","sortParameters","isUndefined","compare","DESCENDING","PipesModule","AbstractAppConfig","getDocumentManagementUrlV2","getDocumentSecureMode","getRemotePrintServiceUrl","getUserInfoApiUrl","getAccessManagementMode","getAccessManagementBasicViewMock","getAccessManagementRequestReviewMockModel","getLocationRefApiUrl","getCamRoleAssignmentsApiUrl","AuthService","appConfig","document","signIn","loginUrl","getLoginUrl","clientId","getOAuth2ClientId","redirectUri","encodeURIComponent","location","href","origin","PATH_OAUTH2_REDIRECT","DOCUMENT","Inject","HttpErrorService","authService","convertToHttpError","httpError","HttpErrorResponse","headers","CONTENT_TYPE","setError","removeError","handle","redirectIfNotAuthorised","throwError","i1.AuthService","HttpService","httpclient","httpErrorService","url","options","errorHandler","setDefaultValue","catchError","res","post","body","put","delete","observe","withCredentials","HttpHeaders","HEADER_ACCEPT","HEADER_CONTENT_TYPE","HttpClient","i2.HttpErrorService","SessionStorageService","getItem","sessionStorage","setItem","removeItem","clear","ActivityService","http","sessionStorageService","userAuthorised","activityUrl","handleHttpError","getOptions","userDetails","getActivities","caseId","_i","postActivity","activity","verifyUserIsAuthorized","DUMMY_CASE_REFERENCE","getActivityUrl","i1.HttpService","i2.AbstractAppConfig","i3.SessionStorageService","ActivityPollingService","activityService","ngZone","config","pendingRequests","pollConfig","interval","getActivityNexPollRequestMs","attempts","getActivityRetry","backgroundPolling","batchCollectionDelayMs","getActivityBatchCollectionDelayMs","maxRequestsPerBatch","getActivityMaxRequestPerBatch","isEnabled","subscribeToActivity","Subject","subject","size","runOutsideAngular","currentTimeoutHandle","setTimeout","run","flushRequests","stopPolling","pollActivitiesSubscription","clearTimeout","requests","performBatchRequest","pollActivities","caseIds","polling","apply","EMPTY","postViewActivity","ACTIVITY_VIEW","postEditActivity","ACTIVITY_EDIT","activities","err","activityType","pollingConfig","i1.ActivityService","NgZone","AddressParser","classification","CLASSIFICATION_CODE","addressModel","parseAddressLine1","parseAddressLine2","parseAddressLine3","POSTCODE","POST_TOWN","AddressesService","UK","addressLine","RD06","SUB_BUILDING_NAME","ORGANISATION_NAME","DEPARTMENT_NAME","PO_BOX_NUMBER","prefixWithCommaIfPresent","BUILDING_NAME","removeNonAddressValues","BUILDING_NUMBER","THOROUGHFARE_NAME","DEPENDENT_LOCALITY","DOUBLE_DEPENDENT_LOCALITY","DEPENDENT_THOROUGHFARE_NAME","line","removeUndefinedString","removeInitialComma","removeEmptySpaces","getAddressesForPostcode","postcode","getPostcodeLookupUrl","addresses","DPA","formatAddressLines","shiftAddressLinesUp","toCapitalCase","sentence","AlertService","router","preservedError","preservedWarning","preservedSuccess","preserveAlerts","successes","Observable","observer","successObserver","publish","refCount","errors","errorObserver","warnings","warningObserver","alerts","alertObserver","events","event","NavigationStart","preserveMessages","alert","level","warning","success","preserve","setPreserveAlerts","urlInfo","currentUrlIncludesInfo","urlInfo_1","urlInfo_1_1","urlSnip","isPreserveAlerts","msgObject","Router","CaseFieldService","DocumentManagementService","uploadFile","formData","getDocStoreUrl","delay","RESPONSE_DELAY","getMediaViewerInfo","documentFieldValue","mediaViewerInfo","document_binary_url","transformDocumentUrl","document_filename","content_type","getContentType","annotation_api_url","getAnnotationApiUrl","case_jurisdiction","jurisdiction","fileExtension","position","lastIndexOf","isImage","IMAGE","isWord","WORD","isExcel","EXCEL","isPowerpoint","POWERPOINT","TXT","RTF","PDF","imageType","imagesList","wordType","wordList","excelType","excelList","powerpointType","powerpointList","documentBinaryUrl","remoteHrsPattern","getRemoteHrsUrl","getHrsUrl","remoteDocumentManagementPattern","getRemoteDocumentManagementUrl","getDocumentManagementUrl","DraftService","errorService","createDraft","ctid","eventData","saveDraftEndpoint","getCreateOrUpdateDraftsUrl","V2_MEDIATYPE_DRAFT_CREATE","updateDraft","V2_MEDIATYPE_DRAFT_UPDATE","getDraft","getViewOrDeleteDraftsUrl","V2_MEDIATYPE_DRAFT_READ","deleteDraft","V2_MEDIATYPE_DRAFT_DELETE","createOrUpdateDraft","caseTypeId","caseEventData","i1.HttpErrorService","ErrorNotifierService","errorSource","asObservable","announceError","EventStatusService","isIncomplete","eventStatus","CALLBACK_STATUS_INCOMPLETE","DELETE_DRAFT_STATUS_INCOMPLETE","CALLBACK_STATUS_COMPLETE","DELETE_DRAFT_STATUS_COMPLETE","FieldsPurger","deleteFieldValue","parentField","fieldType","fieldControl","complexSubField","retain_hidden_value","collectionFieldType_1","complexFieldValues","subFieldId","subCaseField","parentFormGroup","at","documentFieldValues","setValue","clearHiddenFields","wizard","currentPageId","clearHiddenFieldForFieldShowCondition","clearHiddenFieldForPageShowCondition","currentEventState","pages","wp","hasShowConditionPage","isHidden","resetPage","currentPage","getPage","wizard_page_fields","wpf","case_field","findCaseFieldByWizardPageFieldId","hasShowConditionField","resetField","retainHiddenValueByFieldType","fieldGroup","caseRoleFormControl","wizardPageField","case_field_id","wizardPage","getShowConditionKey","fieldControls_1","FormErrorService","mapFieldErrors","errorKey","getFormControl","setErrors","group","inArray","JurisdictionService","selectedJurisdictionSource","selectedJurisdiction","announceSelectedJurisdiction","NavigationOrigin","BannersService","httpService","getBanners","jurisdictionReferences","getBannersUrl","V2_MEDIATYPE_BANNERS","params","HttpParams","append","banners","NavigationNotifierService","navigationSource","BehaviorSubject","navigation","announceNavigation","OrderService","sortAsc","DEFAULT_COMPARE_FUNCTION","array","sortingFunction","aOrdered","bOrdered","ProfileService","getCaseDataUrl","URL","V2_MEDIATYPE_USER_PROFILE","plainToClass","ProfileNotifier","profileSource","announceProfile","RequestOptionsBuilder","includeParam","buildOptions","metaCriteria","caseCriteria","view","_d","criterion","_e","_f","FIELD_PREFIX","HasLoadingState","LoadingService","registered","loading","distinctUntilChanged","generateToken","unregister","window","performance","now","SearchService","requestOptionsBuilder","loadingService","jurisdictionId","getApiUrl","loadingToken","finalize","searchCases","getPaginationPageSize","getSearchInputUrl","getSearchInputs","V2_MEDIATYPE_SEARCH_INPUTS","currentJurisdiction","currentCaseType","searchInputs","isDataValid","Error","VIEW_SEARCH","VIEW_WORKBASKET","i1.AbstractAppConfig","i2.HttpService","i3.RequestOptionsBuilder","i4.LoadingService","RouterHelperService","getUrlSegmentsFromRoot","pathFromRoot","WindowService","locationAssign","setLocalStorage","localStorage","getLocalStorage","clearLocalStorage","removeLocalStorage","setSessionStorage","getSessionStorage","openOnNewTab","open","confirm","WorkbasketInputFilterService","getWorkbasketInputUrl","getWorkbasketInputs","V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS","workbasketInputs","DefinitionsService","getCaseTypes","access","getJurisdictions","DefinitionsModule","SearchResultViewItemComparatorFactory","createSearchResultViewItemComparator","column","case_field_type","textArrayComparator","numberComparator","stringComparator","fieldA","fieldB","OrganisationService","appconfig","mapOrganisation","organisations","organisationsVm","org","contactInformation","getActiveOrganisations","organisations$","getPrdUrl","cacheTimeOut","getCacheTimeOut","orgs","publishReplay","take","of","timer","BrowserService","isFirefox","navigator","userAgent","isSafari","isSafariAgent","isIEOrEdge","LoadingModule","TestRouteSnapshotBuilder","withParent","withParams","withData","queryParams","outlet","routeConfig","root","firstChild","children","paramMap","queryParamMap","typeComplexFields","role","read","update","_delete","show_summary","can_save_draft","event_token","hint","ACLs","displayContext","complexFieldOverride","complex_field_element_id","typeId","fixedListItems","wizardPageFields","pageColumnNumber","complexFieldOverrides","complex_field_overrides"],"sources":["../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/headers.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.html","../../../node_modules/tslib/tslib.es6.js","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert-icon-class.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/conditional-show-registrar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/grey-bar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/format-translator.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/date.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/fixed-list-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/field-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.utils.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/domain/conditional-show.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/commons/constants.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-validators.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-form-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-field-write.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show-form.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/field-type-sanitiser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-value.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/services/placeholder.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/activity/activity.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/addresses/address.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/alert/alert.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-event-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-state.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type-lite.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/event-case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/jurisdiction.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/banner.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-tab.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-print-document.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/document/document-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/http/http-error.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/organisation/organisation-converter.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/profile/profile.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-column.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/draft.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-details.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-event-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/workbasket/workbasket-input.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/pagination-metadata.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-parameters.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field-complex-override.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/case-field-builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/shared.test.fixture.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-reference/case-reference.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-title/ccd-case-title.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/search-result/sorting/sort-search-result.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/pipes.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/app.config.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/auth/auth.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/session/session-storage.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.polling.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/address-parser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/addresses.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/alert/alert.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/case-field.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/document-management/document-management.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/draft/draft.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/error/error-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/eventStatusService/event-status.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.purger.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/jurisdiction/jurisdiction.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/banners/banners.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-origin.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/order/order.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.notifier.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/request/request.options.builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search/search.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/router/router-helper.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/window/window.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/workbasket/workbasket-input-filter.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search-result/sorting/search-result-view-item-comparator-factory.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/organisation/organisation.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/browser/browser.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/test/test-route-snapshot-builder.ts"],"sourcesContent":["<footer class=\"group js-footer\" id=\"footer\" role=\"footer\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"footer-wrapper\">\n\n <!-- Condition: Solicitor -->\n <div *ngIf=\"isSolicitor\" class=\"footer-meta\">\n <div class=\"footer-meta-inner\">\n <ng-content select=\"[footerSolsNavLinks]\"></ng-content>\n <div class=\"open-government-licence\">\n <p class=\"logo\"><a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence</a></p>\n <p>All content is available under the <a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence v3.0</a>, except where otherwise stated</p>\n </div>\n </div>\n\n <div class=\"copyright\">\n <a href=\"https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/copyright-and-re-use/crown-copyright/\">© Crown copyright</a>\n </div>\n </div>\n\n <!-- Condition: Case Worker -->\n <div *ngIf=\"!isSolicitor\" class=\"footer-meta\">\n <div class=\"title\">\n <span class=\"footer-text\">Help</span>\n </div>\n <div class=\"email\">\n <span class=\"footer-text\">Email: <a href=\"mailto:{{email}}\">{{email}}</a></span>\n </div>\n <div class=\"phone\">\n <span class=\"footer-text\">Phone: {{phone}}</span>\n </div>\n <div class=\"work-hours\">\n <span class=\"footer-text\">{{workhours}}</span>\n </div>\n <ng-content select=\"[footerCaseWorkerNavLinks]\"></ng-content>\n </div>\n\n </div>\n</footer>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-footer-bar',\n templateUrl: './footer.html',\n styleUrls: ['./footer.scss']\n})\nexport class FooterComponent {\n\n @Input()\n public email: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public phone: string;\n\n @Input()\n public workhours: string;\n\n}\n","<header role=\"banner\" id=\"global-header\" class=\"with-proposition\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"header-wrapper\">\n\n <div class=\"header-global\" [class.header-logo]=\"isSolicitor\">\n <div *ngIf=\"isSolicitor\">\n <a href=\"https://www.gov.uk\" title=\"Go to the GOV.UK homepage\" id=\"logo\" class=\"content\" style=\"margin-left: 0px;\">\n <img src=\"/img/gov.uk_logotype_crown_invert_trans.png?0.23.0\" width=\"36\" height=\"32\" alt=\"\"> GOV.UK\n </a>\n </div>\n <div class=\"global-header\" *ngIf=\"!isSolicitor\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n </div>\n </div>\n\n <div class=\"header-proposition\">\n <div class=\"content\">\n <a href=\"#proposition-links\" class=\"js-header-toggle menu\">Menu</a>\n <div *ngIf=\"isSolicitor\" id=\"proposition-menu\">\n <div class=\"title-solicitor\">\n <span id=\"proposition-name\">{{title}}</span>\n <ng-content select=\"[headerNavigation]\"></ng-content>\n </div>\n </div>\n\n <div class=\"proposition-right\">\n <span id=\"user-name\">{{username}}</span>\n <a (click)=\"signOut()\" id=\"sign-out\" href=\"javascript:void(0)\">Sign Out</a>\n </div>\n </div>\n </div>\n\n </div>\n</header>\n","import { Component, Input, Output } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'cut-header-bar',\n templateUrl: './header-bar.html',\n styleUrls: ['./header-bar.scss']\n})\nexport class HeaderBarComponent {\n\n @Input()\n public title: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public username: string;\n\n @Output()\n private readonly signOutRequest: EventEmitter<any> = new EventEmitter();\n\n public signOut() {\n this.signOutRequest.emit();\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-bar',\n templateUrl: './navigation.html',\n styleUrls: ['./navigation.scss']\n})\nexport class NavigationComponent {\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div>\n <a [routerLinkActive]=\"'item-bold'\" [routerLink]=\"link\">{{label}}</a>\n <input type=\"image\" alt=\"{{label}} button\" *ngIf=\"imageLink\" src=\"{{imageLink}}\"/>\n</div>\n","<div>\n <nav [class.full-screen]=\"!isSolicitor\" class=\"cut-nav-bar\">\n <ng-content select=\"[leftNavLinks]\"></ng-content>\n <ng-content select=\"[rightNavLinks]\"></ng-content>\n </nav>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-item',\n templateUrl: './navigation-item.html',\n styleUrls: ['./navigation-item.scss']\n})\nexport class NavigationItemComponent {\n\n @Input()\n public label: string;\n\n @Input()\n public link: string;\n\n @Input()\n public imageLink: string;\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-phase-bar',\n templateUrl: './phase.html',\n styleUrls: ['./phase.scss']\n})\nexport class PhaseComponent {\n\n @Input()\n public phaseLabel: string;\n\n @Input()\n public phaseLink: string;\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div [class.full-screen]=\"!isSolicitor\" class=\"phase-banner\">\n <p>\n <strong class=\"phase-tag\">{{phaseLabel}}</strong>\n <span class=\"text-16\">This is a new service – your <a href=\"{{phaseLink}}\" target=\"_blank\" rel=\"noopener\">feedback</a> will help us to improve it.</span>\n </p>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { HeaderBarComponent } from './header-bar/header-bar.component';\nimport { NavigationItemComponent } from './navigation/navigation-item.component';\nimport { NavigationComponent } from './navigation/navigation.component';\nimport { PhaseComponent } from './phase/phase.component';\n\n@NgModule({\n imports: [CommonModule, RouterModule],\n declarations: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent],\n exports: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent]\n})\nexport class HeadersModule {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'cut-body',\n templateUrl: './body.html',\n styleUrls: ['./fonts.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BodyComponent {\n\n}\n","<div class=\"global-display\">\n <ng-content select=\"[topBody]\"></ng-content>\n <ng-content select=\"[leftBody]\"></ng-content>\n <ng-content select=\"[rightBody]\"></ng-content>\n</div>\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","<div class=\"form-date\">\n\n <div class=\"form-group form-group-day\">\n <label class=\"form-label\" [for]=\"dayId()\">Day</label>\n <input #dayInput\n class=\"form-control\"\n [id]=\"dayId()\"\n [name]=\"dayId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayDay\"\n (change)=\"dayChange(dayInput.value)\"\n (keyup)=\"dayChange(dayInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-month\">\n <label class=\"form-label\" [for]=\"monthId()\">Month</label>\n <input #monthInput\n class=\"form-control\"\n [id]=\"monthId()\"\n [name]=\"monthId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayMonth\"\n (change)=\"monthChange(monthInput.value)\"\n (keyup)=\"monthChange(monthInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-year\">\n <label class=\"form-label\" [for]=\"yearId()\">Year</label>\n <input #yearInput\n class=\"form-control\"\n [id]=\"yearId()\"\n [name]=\"yearId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayYear\"\n (change)=\"yearChange(yearInput.value)\"\n (keyup)=\"yearChange(yearInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-hour\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"hourId()\">Hour</label>\n <input #hourInput\n class=\"form-control\"\n [id]=\"hourId()\"\n [name]=\"hourId()\"\n type=\"number\"\n [value]=\"displayHour\"\n (input)=\"hourChange(hourInput.value)\"\n (keyup)=\"hourChange(hourInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-minute\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"minuteId()\">Minute</label>\n <input #minuteInput\n class=\"form-control\"\n [id]=\"minuteId()\"\n [name]=\"minuteId()\"\n type=\"number\"\n [value]=\"displayMinute\"\n (input)=\"minuteChange(minuteInput.value)\"\n (keyup)=\"minuteChange(minuteInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-second\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"secondId()\">Second</label>\n <input #secondInput\n class=\"form-control\"\n [id]=\"secondId()\"\n [name]=\"secondId()\"\n type=\"number\"\n [value]=\"displaySecond\"\n (input)=\"secondChange(secondInput.value)\"\n (keyup)=\"secondChange(secondInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n</div>\n","import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n@Component({\n selector: 'cut-date-input',\n templateUrl: './date-input.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n }\n ],\n})\nexport class DateInputComponent implements ControlValueAccessor, Validator, OnInit, OnDestroy {\n @Input()\n public id: string;\n\n @Input()\n public mandatory: boolean;\n\n @Input()\n public isDateTime: boolean;\n\n @Input()\n public formControl: FormControl;\n\n @Input()\n public isInvalid: boolean;\n\n public isTouched = false;\n public displayDay: string = null;\n public displayMonth: string = null;\n public displayYear: string = null;\n\n public displayHour: string = null;\n public displayMinute: string = null;\n public displaySecond: string = null;\n // Works with\n // 2018-04-09T08:02:27.542\n // 2018-04-09T08:02:27.542Z\n // 2018-04-09T08:02:27.542+01:00\n private readonly DATE_FORMAT =\n /^(19|20)\\d{2}-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?|Z)?$/;\n // year - month - day T HH : MM : SS .000 Z or + 01 : 00\n private propagateChange: (_: any) => {};\n private rawValue = '';\n private day: string;\n private month: string;\n private year: string;\n private hour: string;\n private minute: string;\n private second: string;\n\n public ngOnInit() {\n if (this.mandatory && this.isDateTime) {\n this.displayHour = '00';\n this.displayMinute = '00';\n this.displaySecond = '00';\n this.hour = '00';\n this.minute = '00';\n this.second = '00';\n }\n }\n\n public writeValue(obj: string): void { // 2018-04-09T08:02:27.542\n if (obj) {\n this.rawValue = this.removeMilliseconds(obj);\n // needs to handle also partial dates, e.g. -05-2016 (missing day)\n const [datePart, timePart] = this.rawValue.split('T');\n const dateValues = datePart.split('-');\n this.year = this.displayYear = dateValues[0] || '';\n this.month = this.displayMonth = dateValues[1] || '';\n this.day = this.displayDay = dateValues[2] || '';\n if (timePart) {\n const timeParts = timePart.split(':');\n this.hour = this.displayHour = timeParts[0] || '';\n this.minute = this.displayMinute = timeParts[1] || '';\n this.second = this.displaySecond = timeParts[2] || '';\n }\n }\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (this.mandatory && !this.viewValue()) {\n return {\n required: 'This field is required'\n };\n }\n if (control.value && !this.isDateFormat(this.getValueForValidation(control))) {\n return {\n pattern: 'Date is not valid'\n };\n }\n return undefined;\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n // Do nothing.\n }\n\n public ngOnDestroy() {\n this.validate = (control: AbstractControl): ValidationErrors => {\n return undefined;\n };\n }\n\n public dayChange(value: string) {\n // get value from input\n this.day = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public monthChange(value: string) {\n // get value from input\n this.month = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public yearChange(value: string) {\n // get value from input\n this.year = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public hourChange(value: string) {\n // get value from input\n this.hour = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public minuteChange(value: string) {\n // get value from input\n this.minute = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public secondChange(value: string) {\n // get value from input\n this.second = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public inputFocus() {\n this.isTouched = false;\n this.touch();\n }\n\n public touch() {\n if (this.isTouched) {\n this.formControl.markAsTouched();\n this.propagateChange(this.rawValue);\n } else {\n this.formControl.markAsUntouched();\n }\n }\n\n public dayId() {\n return this.id + '-day';\n }\n\n public monthId() {\n return this.id + '-month';\n }\n\n public yearId() {\n return this.id + '-year';\n }\n\n public hourId() {\n return this.id + '-hour';\n }\n\n public minuteId() {\n return this.id + '-minute';\n }\n\n public secondId() {\n return this.id + '-second';\n }\n\n private viewValue(): string {\n if (this.day || this.month || this.year || this.hour || this.minute || this.second) {\n const date = [\n this.year ? this.year : '',\n this.month ? this.pad(this.month) : '',\n this.day ? this.pad(this.day) : ''\n ].join('-');\n if (this.isDateTime) {\n const time = [\n this.hour ? this.pad(this.hour) : '',\n this.minute ? this.pad(this.minute) : '',\n this.second ? this.pad(this.second) : ''\n ].join(':');\n return date + 'T' + time + '.000';\n } else {\n return date;\n }\n }\n return null;\n }\n\n private isDateFormat(val: any): boolean {\n return this.DATE_FORMAT.test(val);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n\n private getValueForValidation(control: any) {\n if (this.isDateTime) {\n return control.value;\n } else {\n return control.value.replace(/Z.*/, 'T00:00:00Z');\n }\n }\n\n private removeMilliseconds(dateTime: string): string {\n return dateTime.replace(/\\..*/, '');\n }\n}\n","<div\n class=\"hmcts-banner\"\n [class.hmcts-banner--warning]=\"type === alertMessageType.WARNING || type === alertMessageType.ERROR\"\n [class.hmcts-banner--success]=\"type === alertMessageType.SUCCESS\"\n>\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"alertMessageType.WARNING\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.ERROR\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.SUCCESS\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.INFORMATION\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">{{type}}</span>\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\nexport enum AlertMessageType {\n WARNING = 'warning',\n SUCCESS = 'success',\n ERROR = 'error',\n INFORMATION = 'information'\n}\n\n@Component({\n selector: 'cut-alert',\n templateUrl: './alert.component.html',\n styleUrls: [\n './alert.component.scss'\n ]\n})\nexport class AlertComponent {\n\n // confirmation type has been removed as per EUI-3232\n public static readonly TYPE_WARNING = 'warning';\n public static readonly TYPE_SUCCESS = 'success';\n public static readonly TYPE_ERROR = 'error';\n public static readonly TYPE_INFORMATION = 'information';\n\n @Input()\n public type: AlertMessageType;\n\n @Input()\n public showIcon = true;\n\n public alertMessageType = AlertMessageType;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AlertComponent } from './alert.component';\n\n@Pipe({\n name: 'cutAlertIconClass'\n})\nexport class AlertIconClassPipe implements PipeTransform {\n private static readonly CLASS_WARNING = 'icon-alert';\n private static readonly CLASS_SUCCESS = 'icon-tick';\n\n public transform(type: string): string {\n switch (type) {\n case AlertComponent.TYPE_SUCCESS:\n return AlertIconClassPipe.CLASS_SUCCESS;\n case AlertComponent.TYPE_WARNING:\n default:\n return AlertIconClassPipe.CLASS_WARNING;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AlertIconClassPipe } from './alert-icon-class.pipe';\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n AlertComponent,\n AlertIconClassPipe\n ],\n exports: [\n AlertComponent\n ]\n})\nexport class AlertModule {}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-tab',\n templateUrl: './tab.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabComponent {\n\n @Input()\n public id: string;\n\n @Input()\n public title: string;\n\n @Input()\n public selected: boolean;\n\n}\n","<div\n class=\"tabs-panel\"\n [id]=\"id\"\n role=\"tabpanel\"\n [ngClass]=\"{\n 'js-hidden': !selected\n }\"\n [attr.aria-hidden]=\"!selected\"\n>\n <ng-content></ng-content>\n</div>\n","<div class=\"tabs\">\n\n <ul class=\"tabs-list\" role=\"list\">\n <li class=\"tabs-list-item\" *ngFor=\"let panel of panels\">\n <a\n class=\"tabs-toggle\"\n [routerLink]=\"['.']\"\n [fragment]=\"panel.id\"\n role=\"tab\"\n (click)=\"show(panel.id)\"\n [attr.aria-controls]=\"panel.id\"\n [attr.aria-selected]=\"panel.selected\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'tabs-toggle-selected': panel.selected\n }\"\n #tab\n >{{panel.title}}</a>\n </li>\n </ul>\n\n <div class=\"tabs-content\">\n <ng-content></ng-content>\n </div>\n\n</div>\n","import { AfterContentInit, Component, ContentChildren, ElementRef, QueryList, ViewChildren } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { TabComponent } from './tab.component';\n\n@Component({\n selector: 'cut-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabsComponent implements AfterContentInit {\n\n @ViewChildren('tab') public tabs!: QueryList<ElementRef>;\n\n @ContentChildren(TabComponent)\n public panels: QueryList<TabComponent>;\n\n private readonly panelIds: string[] = [];\n\n constructor(private readonly route: ActivatedRoute) {}\n\n public ngAfterContentInit(): void {\n this.panels.forEach((panel) => this.panelIds.push(panel.id));\n\n this.show(this.route.snapshot.fragment);\n }\n\n public show(id: string) {\n const panels: TabComponent[] = this.panels.toArray();\n\n id = id || panels[0].id;\n\n if (0 > this.panelIds.indexOf(id)) {\n id = panels[0].id;\n }\n\n panels.forEach((panel) => panel.selected = id === panel.id);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TabComponent } from './tab.component';\nimport { TabsComponent } from './tabs.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n TabsComponent,\n TabComponent,\n ],\n exports: [\n TabsComponent,\n TabComponent,\n ]\n})\nexport class TabsModule {}\n","import { Injectable } from '@angular/core';\nimport type { ConditionalShowFormDirective } from '../conditional-show-form.directive';\n\n@Injectable()\nexport class ConditionalShowRegistrarService {\n public registeredDirectives: ConditionalShowFormDirective[] = [];\n\n public register(newDirective: ConditionalShowFormDirective): void {\n this.registeredDirectives.push(newDirective);\n }\n\n public reset(): void {\n this.registeredDirectives = [];\n }\n}\n","import { ElementRef, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n/** Keeps track of initially hidden fields that toggle to show on the page (parent page).\n * Used to decide whether to redisplay the grey bar when returning to the page during\n * navigation between pages.\n */\n@Injectable()\nexport class GreyBarService {\n\n private fieldsToggledToShow: string[] = [];\n private readonly renderer: Renderer2;\n\n constructor(rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n }\n\n public showGreyBar(field: CaseField, el: ElementRef) {\n if (!field.isCollection()) {\n this.addGreyBar(el);\n }\n }\n\n public removeGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.removeClass(divSelector, 'show-condition-grey-bar');\n }\n }\n\n public addToggledToShow(fieldId: string) {\n this.fieldsToggledToShow.push(fieldId);\n }\n\n public removeToggledToShow(fieldId: string) {\n this.fieldsToggledToShow = this.fieldsToggledToShow.filter(id => id !== fieldId);\n }\n\n public wasToggledToShow(fieldId: string): boolean {\n return this.fieldsToggledToShow.find(id => id === fieldId) !== undefined;\n }\n\n public reset() {\n this.fieldsToggledToShow = [];\n }\n\n private addGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.addClass(divSelector, 'show-condition-grey-bar');\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\n/*\nTranslate a date time format string from the Java format provided by CCD to the format supported by Angular formatDate()\nVery simple translator that maps unsupported chars to the nearest equivalent.\nIf there is no equivalent puts ***x*** into the output where x is the unsupported character\n\nJava format\nG era text AD; Anno Domini; A\n u year year 2004; 04\n y year-of-era year 2004; 04\n D day-of-year number 189\n M/L month-of-year number/text 7; 07; Jul; July; J\n d day-of-month number 10\n\n Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter\n Y week-based-year year 1996; 96\n w week-of-week-based-year number 27\n W week-of-month number 4\n E day-of-week text Tue; Tuesday; T\n e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T\n F week-of-month number 3\n\n a am-pm-of-day text PM\n h clock-hour-of-am-pm (1-12) number 12\n K hour-of-am-pm (0-11) number 0\n k clock-hour-of-am-pm (1-24) number 0\n\n H hour-of-day (0-23) number 0\n m minute-of-hour number 30\n s second-of-minute number 55\n S fraction-of-second fraction 978\n A milli-of-day number 1234\n n nano-of-second number 987654321\n N nano-of-day number 1234000000\n\n V time-zone ID zone-id America/Los_Angeles; Z; -08:30\n z time-zone name zone-name Pacific Standard Time; PST\n O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00;\n X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;\n x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;\n Z zone-offset offset-Z +0000; -0800; -08:00;\n\n p pad next pad modifier 1\n\n ' escape for text delimiter\n '' single quote literal '\n [ optional section start\n ] optional section end\n # reserved for future use\n { reserved for future use\n } reserved for future use\n\n Angular dateFormat characters\n Era\tG, GG & GGG\tAbbreviated\tAD\nGGGG\tWide\tAnno Domini\nGGGGG\tNarrow\tA\nYear\ty\tNumeric: minimum digits\t2, 20, 201, 2017, 20173\nyy\tNumeric: 2 digits + zero padded\t02, 20, 01, 17, 73\nyyy\tNumeric: 3 digits + zero padded\t002, 020, 201, 2017, 20173\nyyyy\tNumeric: 4 digits or more + zero padded\t0002, 0020, 0201, 2017, 20173\nMonth\tM\tNumeric: 1 digit\t9, 12\nMM\tNumeric: 2 digits + zero padded\t09, 12\nMMM\tAbbreviated\tSep\nMMMM\tWide\tSeptember\nMMMMM\tNarrow\tS\nMonth standalone\tL\tNumeric: 1 digit\t9, 12\nLL\tNumeric: 2 digits + zero padded\t09, 12\nLLL\tAbbreviated\tSep\nLLLL\tWide\tSeptember\nLLLLL\tNarrow\tS\nWeek of year\tw\tNumeric: minimum digits\t1... 53\nww\tNumeric: 2 digits + zero padded\t01... 53\nWeek of month\tW\tNumeric: 1 digit\t1... 5\nDay of month\td\tNumeric: minimum digits\t1\ndd\tNumeric: 2 digits + zero padded\t01\nWeek day\tE, EE & EEE\tAbbreviated\tTue\nEEEE\tWide\tTuesday\nEEEEE\tNarrow\tT\nEEEEEE\tShort\tTu\nPeriod\ta, aa & aaa\tAbbreviated\tam/pm or AM/PM\naaaa\tWide (fallback to a when missing)\tante meridiem/post meridiem\naaaaa\tNarrow\ta/p\nPeriod*\tB, BB & BBB\tAbbreviated\tmid.\nBBBB\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nBBBBB\tNarrow\tmd\nPeriod standalone*\tb, bb & bbb\tAbbreviated\tmid.\nbbbb\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nbbbbb\tNarrow\tmd\nHour 1-12\th\tNumeric: minimum digits\t1, 12\nhh\tNumeric: 2 digits + zero padded\t01, 12\nHour 0-23\tH\tNumeric: minimum digits\t0, 23\nHH\tNumeric: 2 digits + zero padded\t00, 23\nMinute\tm\tNumeric: minimum digits\t8, 59\nmm\tNumeric: 2 digits + zero padded\t08, 59\nSecond\ts\tNumeric: minimum digits\t0... 59\nss\tNumeric: 2 digits + zero padded\t00... 59\nFractional seconds\tS\tNumeric: 1 digit\t0... 9\nSS\tNumeric: 2 digits + zero padded\t00... 99\nSSS\tNumeric: 3 digits + zero padded (= milliseconds)\t000... 999\nZone\tz, zz & zzz\tShort specific non location format (fallback to O)\tGMT-8\nzzzz\tLong specific non location format (fallback to OOOO)\tGMT-08:00\nZ, ZZ & ZZZ\tISO8601 basic format\t-0800\nZZZZ\tLong localized GMT format\tGMT-8:00\nZZZZZ\tISO8601 extended format + Z indicator for offset 0 (= XXXXX)\t-08:00\nO, OO & OOO\tShort localized GMT format\tGMT-8\nOOOO\tLong localized GMT format\tGMT-08:00\n */\n\n@Injectable()\nexport class FormatTranslatorService {\n public translate(javaFormat: string): string {\n const result = [];\n let prev = '\\0';\n let inQuote = false;\n\n const maybePush = <T>(target: T[], obj: T, flag: boolean) => {\n if (!flag) {\n target.push(obj);\n }\n };\n for (const c of javaFormat) {\n switch (c) {\n case '\\'':\n if (prev === '\\'') {\n // literal single quote - ignore\n inQuote = false;\n } else {\n inQuote = !inQuote;\n }\n break;\n // Due to formatting constraints on the webapp, all 'd' characters should be replaced with 'D' (for Moment library)\n // This is because we want the date, not the day (this format will need to be converted back)\n case 'd':\n maybePush(result, 'D', inQuote);\n break;\n // moment library defines year as capital y\n case 'y':\n maybePush(result, 'Y', inQuote);\n break;\n case 'e':\n case 'c':\n maybePush(result, 'E', inQuote); // no lower case E\n break;\n case 'F':\n maybePush(result, 'W', inQuote);\n break;\n case 'K':\n maybePush(result, 'H', inQuote);\n break;\n case 'k':\n maybePush(result, 'h', inQuote);\n break;\n // commented out A change to '***' due to use in moment library for AM/PM\n // added 'a' specification to stop discrepancy in am/AM pm/PM formatting\n case 'a':\n maybePush(result, 'A', inQuote);\n break;\n case 'n':\n case 'N':\n maybePush(result, '***' + c + '***', inQuote); // No way to support A - millisec of day, n - nano of second, N - nano of Day\n break;\n case 'V':\n case 'O':\n maybePush(result, 'z', inQuote);\n break;\n case 'x':\n case 'X':\n maybePush(result, 'Z', inQuote);\n break;\n default:\n maybePush(result, c, inQuote);\n }\n prev = c;\n }\n return result.join('');\n }\n\n public showOnlyDates(dateFormat: string): string {\n // replace 'd' character with 'D' for the moment library\n // This ensures only dates allowed\n while (dateFormat.includes('d')) {\n dateFormat = dateFormat.replace('d', 'D');\n }\n while (dateFormat.includes('y')) {\n dateFormat = dateFormat.replace('y', 'Y');\n }\n return dateFormat;\n }\n\n public removeTime(dateFormat: string): string {\n // remove hours irrelevant of whether 12 or 24 hour clock\n while (dateFormat.includes('H') || dateFormat.includes('h')) {\n dateFormat = dateFormat.replace('H', '');\n dateFormat = dateFormat.replace('h', '');\n }\n // remove minutes\n while (dateFormat.includes('m')) {\n dateFormat = dateFormat.replace('m', '');\n }\n // remove seconds (s) and micro seconds (S)\n while (dateFormat.includes('S') || dateFormat.includes('s')) {\n dateFormat = dateFormat.replace('S', '');\n dateFormat = dateFormat.replace('s', '');\n }\n // because there is time removal algorithm can make reasonable assumption to remove colons\n while (dateFormat.includes(':')) {\n dateFormat = dateFormat.replace(':', '');\n }\n return dateFormat.trim();\n }\n\n public hasDate(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') >= 0 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public is24Hour(value: string): boolean {\n return this.translate(value).length &&\n value.indexOf('H') >= 0;\n }\n\n public hasNoDay(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasNoDayAndMonth(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') === -1 &&\n value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasHours(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('h') >= 0 && value.indexOf('m') === -1;\n }\n\n public hasMinutes(value: string): boolean {\n return this.translate(value).length && value.indexOf('m') >= 0 && value.toLowerCase().indexOf('h') >= 0;\n }\n\n public hasSeconds(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('s') >= 0;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { FormatTranslatorService } from '../../../services/case-fields/format-translator.service';\n\n@Pipe({\n name: 'ccdDate'\n})\nexport class DatePipe implements PipeTransform {\n\n private static readonly DATE_FORMAT_REGEXP =\n new RegExp('^(\\\\d{4})-?(\\\\d\\\\d)-?(\\\\d\\\\d)(?:T(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?:\\\\.(\\\\d+))?)?)?(Z|([+-])(\\\\d\\\\d):?(\\\\d\\\\d))?|Z)?$');\n // 1 2 3 4 5 6 7 8 9 10 11\n private static readonly MONTHS = [\n ['Jan'], ['Feb'], ['Mar'], ['Apr'], ['May'], ['Jun'], ['Jul'], ['Aug'], ['Sep'], ['Oct'], ['Nov'], ['Dec'],\n ];\n\n /**\n * constructor to allow format translator to be injected\n * @param formatTrans format translator\n */\n constructor(private readonly formatTrans: FormatTranslatorService) {\n }\n\n public transform(value: string, zone?: string, format?: string): string {\n let resultDate = null;\n const ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n if (value) {\n // included to avoid editing the hour twice on second pass through\n // this occurs on case details when datepipe is applied twice\n if (!value.includes('T')) {\n zone = 'utc';\n }\n const match: RegExpMatchArray = value.match(DatePipe.DATE_FORMAT_REGEXP);\n // Make sure we actually have a match.\n if (match) {\n let offsetDate = null;\n const date = this.getDate(match);\n if (zone === 'local') {\n offsetDate = this.getOffsetDate(date);\n } else {\n offsetDate = this.getDate(match);\n }\n // 'short' format is meaningful to formatDate, but not the same meaning as in the unit tests\n if (this.formatTrans && format && format !== 'short') {\n // support for java style formatting strings for dates\n format = this.translateDateFormat(format);\n resultDate = moment(date).format(format);\n } else {\n // RDM-1149 changed the pipe logic so that it doesn't add an hour to 'Summer Time' dates on DateTime field type\n resultDate = `${offsetDate.getDate()} ${DatePipe.MONTHS[offsetDate.getMonth()]} ${offsetDate.getFullYear()}`;\n if (match[4] && match[5] && match[6] && format !== 'short') {\n resultDate += ', ';\n resultDate += this.getHour(offsetDate.getHours().toString()) + ':';\n resultDate += this.pad(offsetDate.getMinutes()) + ':';\n resultDate += this.pad(offsetDate.getSeconds()) + ' ';\n resultDate += (this.toInt(offsetDate.getHours().toString()) >= 12) ? 'PM' : 'AM';\n }\n }\n } else {\n // EUI-2667. See if what we've been given is actually a formatted date that\n // we could attempt to do something with.\n const parsedDate: number = Date.parse(value);\n // We successfully parsed it so let's use it.\n if (!isNaN(parsedDate)) {\n const d: Date = new Date(parsedDate);\n // If what we received didn't include time, don't include it here either.\n if (value.indexOf(':') < 0) {\n const shortDate: string = d.toLocaleDateString('en-GB');\n const shortISO: string = shortDate.split('/').reverse().join('-');\n return this.transform(shortISO, zone, format);\n }\n // If it did include time, we want a full ISO string.\n const thisMoment = moment(d).format(ISO_FORMAT);\n return this.transform(thisMoment, zone, format);\n }\n }\n }\n return resultDate;\n }\n\n private translateDateFormat(format: string) {\n if (this.formatTrans) {\n return this.formatTrans.translate(format);\n } else {\n return format;\n }\n }\n\n private getOffsetDate(date: Date): Date {\n const localOffset = - date.getTimezoneOffset() / 60;\n return new Date(date.getTime() + localOffset * 3600 * 1000);\n }\n\n private getDate(match: RegExpMatchArray): Date {\n const year = this.toInt(match[1]);\n const month = this.toInt(match[2]) - 1;\n const day = this.toInt(match[3]);\n let resultDate;\n if (match[4] && match[5] && match[6]) {\n const hour = this.toInt(match[4]);\n const minutes = this.toInt(match[5]);\n const seconds = this.toInt(match[6]);\n resultDate = new Date(year, month, day, hour, minutes, seconds, 0);\n } else {\n resultDate = new Date(year, month, day);\n }\n return resultDate;\n }\n\n private getHour(hourStr: string): number {\n let hourNum = this.toInt(hourStr);\n if (hourNum > 12) {\n hourNum = hourNum - 12;\n } else if (hourNum === 0) {\n hourNum = 12;\n }\n return hourNum;\n }\n\n private toInt(str: string): number {\n return parseInt(str, 10);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n}\n","import { Orderable } from '../../../domain/order/orderable.model';\nimport { ComplexFieldOverride } from './wizard-page-field-complex-override.model';\n\nexport class WizardPageField implements Orderable {\n public case_field_id: string;\n public order?: number;\n public page_column_no?: number;\n public complex_field_overrides?: ComplexFieldOverride[];\n}\n","import { Orderable } from '../order';\n\nexport class FixedListItem implements Orderable {\n public code: string;\n public label: string;\n public order?: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from './case-field.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FixedListItem } from './fixed-list-item.model';\n\n// @dynamic\nexport class FieldType {\n public id: string;\n public type: FieldTypeEnum;\n public min?: number | Date;\n public max?: number | Date;\n public regular_expression?: string;\n\n @Type(() => FixedListItem)\n public fixed_list_items?: FixedListItem[];\n\n @Type(() => CaseField)\n public complex_fields?: CaseField[];\n\n @Type(() => FieldType)\n public collection_field_type?: FieldType;\n }\n","import { Expose, Type } from 'class-transformer';\nimport * as _ from 'underscore';\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FieldType } from './field-type.model';\n\n// @dynamic\nexport class CaseField implements Orderable {\n public id: string;\n public hidden: boolean;\n public hiddenCannotChange: boolean;\n public label: string;\n public order?: number;\n\n @Type(() => FieldType)\n public field_type: FieldType;\n\n public hint_text?: string;\n public security_label?: string;\n public display_context: string;\n public display_context_parameter?: string;\n public month_format?: string;\n public show_condition?: string;\n public show_summary_change_option?: boolean;\n public show_summary_content_option?: number;\n public acls?: AccessControlList[];\n public metadata?: boolean;\n public formatted_value?: any;\n public retain_hidden_value: boolean;\n\n @Type(() => WizardPageField)\n public wizardProps?: WizardPageField;\n\n public _value: any;\n public _list_items: any = [];\n\n @Expose()\n public get value(): any {\n if (this.isDynamic()) {\n return this._value && this._value.value ? this._value.value.code : this._value;\n } else {\n return this._value;\n }\n }\n\n public set value(value: any) {\n if (this.isDynamic()) {\n if (value && value instanceof Object && value.list_items) {\n this._list_items = value.list_items;\n } else if (!this._list_items || this._list_items.length === 0) {\n // Extract the list items from the current value if that's the only place they exist.\n this._list_items = this.list_items;\n if (!value || !value.value) {\n value = null;\n }\n }\n }\n this._value = value;\n }\n\n @Expose()\n public get list_items(): any {\n if (this.isDynamic()) {\n return this._value && this._value.list_items ? this._value.list_items : this._list_items;\n } else {\n return this.field_type.fixed_list_items;\n }\n }\n\n public set list_items(items: any) {\n this._list_items = items;\n }\n\n @Expose()\n public get dateTimeEntryFormat(): string {\n if (this.isComplexDisplay()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEENTRY');\n }\n return null;\n }\n\n @Expose()\n public get dateTimeDisplayFormat(): string {\n if (this.isComplexEntry()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEDISPLAY');\n }\n return null;\n }\n\n @Expose()\n public isComplexDisplay() {\n return (this.isComplex() || this.isCollection()) && this.isReadonly();\n }\n\n @Expose()\n public isComplexEntry() {\n return (this.isComplex() || this.isCollection()) && (this.isOptional() || this.isMandatory());\n }\n\n @Expose()\n public isReadonly() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'READONLY';\n }\n\n @Expose()\n public isOptional() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n @Expose()\n public isMandatory() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'MANDATORY';\n }\n\n @Expose()\n public isCollection(): boolean {\n return this.field_type && this.field_type.type === 'Collection';\n }\n\n @Expose()\n public isComplex(): boolean {\n return this.field_type && this.field_type.type === 'Complex';\n }\n\n @Expose()\n public isDynamic(): boolean {\n const dynamicFieldTypes: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n if (!this.field_type) {\n return false;\n }\n\n return dynamicFieldTypes.some(t => t === this.field_type.type);\n }\n\n @Expose()\n public isCaseLink(): boolean {\n return this.isComplex()\n && this.field_type.id === 'CaseLink'\n && this.field_type.complex_fields.some(cf => cf.id === 'CaseReference');\n }\n public extractBracketValue(fmt: string, paramName: string, leftBracket= '(', rightBracket= ')' ): string {\n fmt = fmt.split(',')\n .find(a => a.trim().startsWith(paramName));\n if (fmt) {\n const s = fmt.indexOf(leftBracket) + 1;\n const e = fmt.indexOf(rightBracket, s);\n if (e > s && s >= 0) {\n return fmt.substr(s, (e - s));\n }\n }\n return null;\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { DatePipe } from '../../components/palette/utils/date.pipe';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseTab } from '../../domain/case-view/case-tab.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldType } from '../../domain/definition/field-type.model';\nimport { FixedListItem } from '../../domain/definition/fixed-list-item.model';\nimport { Predicate } from '../../domain/predicate.model';\nimport { FormatTranslatorService } from '../case-fields/format-translator.service';\n\n// @dynamic\n@Injectable()\nexport class FieldsUtils {\n // EUI-4244. 3 dashes instead of 1 to make this less likely to clash with a real field.\n public static readonly LABEL_SUFFIX = '---LABEL';\n // Handling of Dynamic Lists in Complex Types\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COLLECTION = 'Collection';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COMPLEX = 'Complex';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n private static readonly currencyPipe: CurrencyPipe = new CurrencyPipe('en-GB');\n private static readonly datePipe: DatePipe = new DatePipe(new FormatTranslatorService());\n\n public static convertToCaseField(obj: any): CaseField {\n if (!(obj instanceof CaseField)) {\n return plainToClassFromExist(new CaseField(), obj);\n }\n return obj;\n }\n\n public static toValuesMap(caseFields: CaseField[]): any {\n const valueMap = {};\n caseFields.forEach(field => {\n valueMap[field.id] = FieldsUtils.prepareValue(field);\n });\n return valueMap;\n }\n\n public static getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n public static isObject(elem: any): boolean {\n return typeof elem === 'object' && elem !== null;\n }\n\n public static isNonEmptyObject(elem: any): boolean {\n return this.isObject(elem) && Object.keys(elem).length !== 0;\n }\n\n public static isArray(elem: any): boolean {\n return Array.isArray(elem);\n }\n\n public static areCollectionValuesSimpleFields(fieldValue: any[]): boolean {\n return !this.isObject(fieldValue[0]['value']) && !Array.isArray(fieldValue[0]['value']) && fieldValue[0]['value'] !== undefined;\n }\n\n public static isCollectionOfSimpleTypes(fieldValue: any): boolean {\n return this.isCollection(fieldValue) && this.areCollectionValuesSimpleFields(fieldValue);\n }\n\n public static isMultiSelectValue(form: any): boolean {\n return this.isNonEmptyArray(form) && !this.isCollectionWithValue(form);\n }\n\n public static isNonEmptyArray(pageFormFields: any): boolean {\n return Array.isArray(pageFormFields) && pageFormFields[0] !== undefined;\n }\n\n public static isCollection(pageFormFields: any): boolean {\n return this.isNonEmptyArray(pageFormFields) && this.isCollectionWithValue(pageFormFields);\n }\n\n public static isCollectionWithValue(pageFormFields: any[]): boolean {\n return pageFormFields[0]['value'] !== undefined;\n }\n\n public static cloneObject(obj: any): any {\n return Object.assign({}, obj);\n }\n\n // temporary function until this can be moved to CaseView class (RDM-2681)\n public static getCaseFields(caseView: CaseView): CaseField[] {\n const caseDataFields: CaseField[] = caseView.tabs.reduce((acc: CaseField[], tab: CaseTab) => {\n return acc.concat(tab.fields);\n }, []);\n\n const metadataFields: CaseField[] = caseView.metadataFields;\n return metadataFields.concat(caseDataFields.filter((caseField: CaseField) => {\n return metadataFields.findIndex(metadataField => metadataField.id === caseField.id) < 0;\n }));\n }\n\n public static addCaseFieldAndComponentReferences (c: AbstractControl, cf: CaseField, comp: AbstractFormFieldComponent): void {\n c['caseField'] = cf;\n c['component'] = comp;\n }\n\n /**\n * Recursive check of an array or object and its descendants for the presence of any non-empty values.\n *\n * @param object The array or object to check\n * @returns `true` if the array or object (or a descendant) contains at least one non-empty value; `false` otherwise\n */\n public static containsNonEmptyValues(object: object): boolean {\n if (!object) {\n return false;\n }\n const values = Object.keys(object).map(key => object[key]);\n const objectRefs = [];\n // Also test for numeric values, and length > 0 for non-numeric values because this covers both strings and arrays.\n // Note: Deliberate use of non-equality (!=) operator for null check, to handle both null and undefined values.\n const hasNonNullPrimitive = values.some(x => (x != null &&\n ((typeof x === 'object' && x.constructor === Object) || Array.isArray(x)\n ? !objectRefs.push(x)\n : typeof x === 'number' || x.length > 0)\n ));\n return !hasNonNullPrimitive ? objectRefs.some(y => this.containsNonEmptyValues(y)) : hasNonNullPrimitive;\n }\n\n /**\n * handleNestedDynamicLists()\n * Reassigns list_item and value data to DynamicList children\n * down the tree. Server response returns data only in\n * the `value` object of parent complex type\n *\n * EUI-2530 Dynamic Lists for Elements in a Complex Type\n *\n * @param jsonBody - { case_fields: [ CaseField, CaseField ] }\n */\n public static handleNestedDynamicLists(jsonBody: { case_fields: CaseField[] }): any {\n\n if (jsonBody.case_fields) {\n jsonBody.case_fields.forEach(caseField => {\n if (caseField.field_type) {\n this.setDynamicListDefinition(caseField, caseField.field_type, caseField);\n }\n });\n }\n\n return jsonBody;\n }\n\n private static prepareValue(field: CaseField): any {\n if (field.value) {\n return field.value;\n } else if (field.isComplex()) {\n const valueMap = {};\n field.field_type.complex_fields.forEach(complexField => {\n valueMap[complexField.id] = FieldsUtils.prepareValue(complexField);\n });\n return valueMap;\n }\n }\n\n private static readonly DEFAULT_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n };\n\n private static readonly LABEL_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n switch (field.field_type.type) {\n case 'FixedList':\n case 'FixedRadioList': {\n result[field.id] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, result[field.id] || field.value);\n break;\n }\n case 'MultiSelectList': {\n const fieldValue = result[field.id] || [];\n result[field.id + FieldsUtils.LABEL_SUFFIX] = [];\n fieldValue.forEach((code: any, idx: any) => {\n result[field.id + FieldsUtils.LABEL_SUFFIX][idx] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, code);\n });\n break;\n }\n case 'Label': {\n result[field.id] = FieldsUtils.getLabel(field);\n break;\n }\n case 'MoneyGBP': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getMoneyGBP(fieldValue);\n break;\n }\n case 'Date': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getDate(fieldValue);\n break;\n }\n case 'Complex': {\n if (result[field.id] && field.field_type.complex_fields) {\n field.field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, result[field.id]);\n }\n });\n }\n break;\n }\n case 'Collection': {\n const elements = (result[field.id] || field.value);\n if (elements) {\n elements.forEach((elem: any) => {\n switch (field.field_type.collection_field_type.type) {\n case 'MoneyGBP': {\n elem.value = FieldsUtils.getMoneyGBP(elem.value);\n break;\n }\n case 'Date': {\n elem.value = FieldsUtils.getDate(elem.value);\n break;\n }\n case 'Complex': {\n if (field.field_type.collection_field_type.complex_fields) {\n field.field_type.collection_field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, elem.value);\n }\n });\n }\n break;\n }\n }\n });\n }\n break;\n }\n }\n };\n\n /**\n * Formats a `MoneyGBP` value to include currency units.\n * @param fieldValue The CurrencyPipe expects an `any` parameter so this must also be `any`,\n * but it should be \"number-like\" (e.g., '1234')\n * @returns A formatted string (e.g., £12.34)\n */\n private static getMoneyGBP(fieldValue: any): string {\n return fieldValue ? FieldsUtils.currencyPipe.transform(fieldValue / 100, 'GBP', 'symbol') : fieldValue;\n }\n\n private static getLabel(fieldValue: CaseField): string {\n return fieldValue ? fieldValue.label : '';\n }\n\n private static getDate(fieldValue: string): string {\n try {\n // Format specified here wasn't previously working and lots of tests depend on it not working\n // Now that formats work correctly many test would break - and this could affect services which may depend on\n // the orginal behaviour of returning dates in \"d MMM yyyy\"\n // Note - replaced 'd' with 'D' as datepipe using moment to avoid timezone discrepancies\n return FieldsUtils.datePipe.transform(fieldValue, null, 'D MMM yyyy');\n } catch (e) {\n return this.textForInvalidField('Date', fieldValue);\n }\n }\n\n private static getFixedListLabelByCodeOrEmpty(field: CaseField, code: string): string {\n const relevantItem: FixedListItem = code ? field.field_type.fixed_list_items.find(item => item.code === code) : null;\n return relevantItem ? relevantItem.label : '';\n }\n\n private static textForInvalidField(type: string, invalidValue: string): string {\n return `{ Invalid ${type}: ${invalidValue} }`;\n }\n\n private static setDynamicListDefinition(caseField: CaseField, caseFieldType: FieldType, rootCaseField: CaseField) {\n if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COMPLEX) {\n\n caseFieldType.complex_fields.forEach(field => {\n try {\n const isDynamicField = FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE.indexOf(field.field_type.type) !== -1;\n\n if (isDynamicField) {\n const dynamicListValue = this.getDynamicListValue(rootCaseField.value, field.id);\n if (dynamicListValue) {\n const list_items = dynamicListValue[0].list_items;\n const complexValue = dynamicListValue.map(data => data.value);\n const value = {\n list_items,\n value: complexValue.length > 0 ? complexValue : undefined\n };\n field.value = {\n ...value\n };\n field.formatted_value = {\n ...field.formatted_value,\n ...value\n };\n }\n } else {\n this.setDynamicListDefinition(field, field.field_type, rootCaseField);\n }\n } catch (error) {\n console.log(error);\n }\n });\n } else if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COLLECTION) {\n if (caseFieldType.collection_field_type) {\n this.setDynamicListDefinition(caseField, caseFieldType.collection_field_type, rootCaseField);\n }\n }\n }\n\n private static getDynamicListValue(jsonBlock: any, key: string) {\n\n const data = jsonBlock ? this.getNestedFieldValues(jsonBlock, key, []) : [];\n\n return data.length > 0 ? data : null;\n }\n\n private static getNestedFieldValues(jsonData: any, key: string, output: any[] = []) {\n if (jsonData && jsonData[key]) {\n output.push(jsonData[key]);\n } else {\n for (const elementKey in jsonData) {\n if (typeof jsonData === 'object' && jsonData.hasOwnProperty(elementKey)) {\n this.getNestedFieldValues(jsonData[elementKey], key, output);\n }\n }\n }\n return output;\n }\n\n public buildCanShowPredicate(eventTrigger: CaseEventTrigger, form: any): Predicate<WizardPage> {\n const currentState = this.getCurrentEventState(eventTrigger, form);\n return (page: WizardPage): boolean => {\n return page.parsedShowCondition.match(currentState);\n };\n }\n\n public getCurrentEventState(eventTrigger: { case_fields: CaseField[] }, form: FormGroup): object {\n return this.mergeCaseFieldsAndFormFields(eventTrigger.case_fields, form.controls['data'].value);\n }\n\n public cloneCaseField(obj: any): CaseField {\n return Object.assign(new CaseField(), obj);\n }\n\n public mergeCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.DEFAULT_MERGE_FUNCTION);\n }\n\n public mergeLabelCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.LABEL_MERGE_FUNCTION);\n }\n\n public controlIterator(\n aControl: AbstractControl,\n formArrayFn: (array: FormArray) => void,\n formGroupFn: (group: FormGroup) => void,\n controlFn: (control: FormControl) => void\n ): void {\n if (aControl instanceof FormArray) { // We're in a collection\n formArrayFn(aControl);\n } else if (aControl instanceof FormGroup) { // We're in a complex type.\n formGroupFn(aControl);\n } else if (aControl instanceof FormControl) { // FormControl\n controlFn(aControl);\n }\n }\n\n private mergeFields(caseFields: CaseField[], formFields: object, mergeFunction: (field: CaseField, result: object) => void): object {\n const result: object = FieldsUtils.cloneObject(formFields);\n caseFields.forEach(field => {\n mergeFunction(field, result);\n if (field.field_type && field.field_type.complex_fields && field.field_type.complex_fields.length > 0) {\n result[field.id] = this.mergeFields(field.field_type.complex_fields, result[field.id], mergeFunction);\n }\n });\n return result;\n }\n}\n","import * as _score from 'underscore';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\nexport class ShowCondition {\n\n // Expects a show condition of the form: <fieldName>=\"string\"\n constructor(public condition: string) {\n if (!!condition) {\n if (condition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n this.orConditions = condition.split(ShowCondition.OR_CONDITION_REGEXP);\n } else {\n this.andConditions = condition.split(ShowCondition.AND_CONDITION_REGEXP);\n }\n }\n }\n\n private static readonly AND_CONDITION_REGEXP = new RegExp('\\\\sAND\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly OR_CONDITION_REGEXP = new RegExp('\\\\sOR\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly CONDITION_NOT_EQUALS = '!=';\n private static readonly CONDITION_EQUALS = '=';\n private static readonly CONTAINS = 'CONTAINS';\n private static readonly instanceCache = new Map<string, ShowCondition>();\n\n private readonly orConditions: string[] = null;\n private readonly andConditions: string[] = null;\n public static addPathPrefixToCondition(showCondition: string, pathPrefix: string): string {\n if (!pathPrefix || pathPrefix === '') {\n return showCondition;\n }\n if (showCondition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n let orConditions = showCondition.split(ShowCondition.OR_CONDITION_REGEXP);\n orConditions = this.extractConditions(orConditions, pathPrefix);\n return orConditions.join(' OR ');\n } else {\n let andConditions = showCondition.split(ShowCondition.AND_CONDITION_REGEXP);\n andConditions = this.extractConditions(andConditions, pathPrefix);\n return andConditions.join(' AND ');\n }\n }\n\n // Cache instances so that we can cache results more effectively\n public static getInstance(condition: string): ShowCondition {\n let instance = this.instanceCache.get(condition);\n if (!instance) {\n instance = new ShowCondition(condition);\n this.instanceCache.set(condition, instance);\n }\n return instance;\n }\n\n /**\n * Determine whether a ShowCondition model is affected by fields that have\n * a display_context of HIDDEN or READONLY, which means they aren't able to\n * be changed by the user's actions.\n *\n * @param showCondition The ShowCondition model to evaluate.\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public static hiddenCannotChange(showCondition: ShowCondition, caseFields: CaseField[]): boolean {\n if (showCondition && caseFields) {\n const conditions: string[] = showCondition.andConditions || showCondition.orConditions;\n if (conditions && conditions.length > 0) {\n let allUnchangeable = true;\n for (const condition of conditions) {\n const [field] = ShowCondition.getField(condition);\n const path: string[] = field.split('.');\n let head = path.shift();\n let caseField: CaseField = caseFields.find(cf => cf.id === head);\n while (path.length > 0) {\n head = path.shift();\n if (caseField) {\n // Jump out if this is HIDDEN or READONLY, regardless of whether or not it's\n // complex or a collection - nested fields will \"inherit\" the display_context.\n if (['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1) {\n break;\n }\n\n // Consider what type of field this is.\n const ft = caseField.field_type;\n switch (ft.type) {\n case 'Collection':\n if (ft.collection_field_type.type === 'Complex' && ft.collection_field_type.complex_fields) {\n caseField = ft.collection_field_type.complex_fields.find(cf => cf.id === head);\n }\n break;\n case 'Complex':\n if (ft.complex_fields) {\n caseField = ft.complex_fields.find(cf => cf.id === head);\n }\n break;\n }\n }\n }\n if (caseField) {\n allUnchangeable = allUnchangeable && ['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1;\n }\n }\n return allUnchangeable;\n }\n }\n return false;\n }\n\n private static extractConditions(conditionsArray: string[], pathPrefix: string): string[] {\n const extracted = conditionsArray.map(condition => {\n if (condition.startsWith(pathPrefix)) {\n return condition;\n }\n return `${pathPrefix}.${condition}`;\n });\n return extracted;\n }\n\n private static getField(condition: string): [string, string?] {\n let separator: string = ShowCondition.CONTAINS;\n if (condition.indexOf(ShowCondition.CONTAINS) < 0) {\n separator = ShowCondition.CONDITION_EQUALS;\n if (condition.indexOf(ShowCondition.CONDITION_NOT_EQUALS) > -1) {\n separator = ShowCondition.CONDITION_NOT_EQUALS;\n }\n }\n return [ condition.split(separator)[0], separator ];\n }\n\n public match(fields: object, path?: string): boolean {\n if (!this.condition) {\n return true;\n }\n return this.matchAndConditions(fields, this.updatePathName(path));\n }\n\n public matchByContextFields(contextFields: CaseField[]): boolean {\n return this.match(FieldsUtils.toValuesMap(contextFields));\n }\n\n /**\n * Determine whether this is affected by fields that have a display_context\n * of HIDDEN or READONLY, which means they aren't able to be changed by the\n * user's actions.\n *\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public hiddenCannotChange(caseFields: CaseField[]): boolean {\n return ShowCondition.hiddenCannotChange(this, caseFields);\n }\n\n /**\n * Path Name gets updated for complex sub fields\n * @param path Path name.\n */\n private updatePathName(path: string): string {\n if (path && path.split(/[_]+/g).length > 0) {\n const [pathName, ...pathTail] = path.split(/[_]+/g);\n const pathFinalIndex = pathTail.pop();\n const pathTailString = pathTail.toString();\n let mappedPathTail;\n\n mappedPathTail = pathTail.map((value) => {\n return Number(pathFinalIndex) === Number(value) ? pathName : value;\n });\n\n return pathTailString !== mappedPathTail.toString()\n ? `${pathName}_${mappedPathTail.join('_')}_${pathFinalIndex}`\n : path;\n } else {\n return path;\n }\n }\n\n private matchAndConditions(fields: object, path?: string): boolean {\n if (!!this.orConditions) {\n return this.orConditions.some(orCondition => this.matchEqualityCondition(fields, orCondition, path));\n } else if (!!this.andConditions) {\n return this.andConditions.every(andCondition => this.matchEqualityCondition(fields, andCondition, path));\n } else {\n return false;\n }\n }\n\n private matchEqualityCondition(fields: object, condition: string, path?: string): boolean {\n const [field, conditionSeparator] = ShowCondition.getField(condition);\n const [head, ...tail] = field.split('.');\n const currentValue = this.findValueForComplexCondition(fields, head, tail, path);\n const expectedValue = this.unquoted(condition.split(conditionSeparator)[1]);\n if (conditionSeparator === ShowCondition.CONTAINS) {\n return this.checkValueContains(expectedValue, currentValue);\n } else {\n return this.checkValueEquals(expectedValue, currentValue, conditionSeparator);\n }\n }\n\n private checkValueEquals(expectedValue: string, currentValue: any, conditionSeparaor: string): boolean {\n if (expectedValue.search('[,]') > -1) { // for multi-select list\n return this.checkMultiSelectListEquals(expectedValue, currentValue, conditionSeparaor);\n } else if (expectedValue.endsWith('*') && currentValue && conditionSeparaor !== ShowCondition.CONDITION_NOT_EQUALS) {\n if (typeof currentValue === 'string') {\n return currentValue.startsWith(this.removeStarChar(expectedValue));\n }\n return expectedValue === '*';\n } else {\n // changed from '===' to '==' to cover number field conditions\n if (conditionSeparaor === ShowCondition.CONDITION_NOT_EQUALS) {\n return this.checkValueNotEquals(expectedValue, currentValue);\n } else {\n return currentValue == expectedValue || this.okIfBothEmpty(expectedValue, currentValue); // tslint:disable-line\n }\n }\n }\n\n private checkValueNotEquals(expectedValue: string, currentValue: any): boolean {\n const formatCurrentValue = currentValue ? currentValue.toString().trim() : '';\n if ('*' === expectedValue && formatCurrentValue !== '') {\n return false;\n }\n const formatExpectedValue = expectedValue ? expectedValue.toString().trim() : '';\n return formatCurrentValue != formatExpectedValue; // tslint:disable-line\n }\n\n private checkMultiSelectListEquals(expectedValue: string, currentValue: any, conditionSeparator: string): boolean {\n const expectedValues = expectedValue.split(',').sort().toString();\n const values = currentValue ? currentValue.sort().toString() : '';\n if (conditionSeparator === ShowCondition.CONDITION_NOT_EQUALS) {\n return expectedValues !== values;\n } else {\n return expectedValues === values;\n }\n }\n\n private checkValueContains(expectedValue: string, currentValue: any): boolean {\n if (expectedValue.search(',') > -1) {\n const expectedValues = expectedValue.split(',').sort();\n const values = currentValue ? currentValue.sort().toString() : '';\n return expectedValues.every(item => values.search(item) >= 0);\n } else {\n const values = currentValue && Array.isArray(currentValue) ? currentValue.toString() : '';\n return values.search(expectedValue) >= 0;\n }\n }\n\n private findValueForComplexCondition(fields: object, head: string, tail: string[], path?: string): any {\n if (!fields) {\n return undefined;\n }\n if (tail.length === 0) {\n return this.getValue(fields, head);\n } else {\n if (FieldsUtils.isArray(fields[head])) {\n return this.findValueForComplexConditionInArray(fields, head, tail, path);\n } else {\n return this.findValueForComplexConditionForPathIfAny(fields, head, tail, path);\n }\n }\n }\n\n private findValueForComplexConditionForPathIfAny(fields: object, head: string, tail: string[], path?: string): any {\n if (path) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), pathTail.join('_'));\n } else {\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), path);\n }\n }\n\n private findValueForComplexConditionInArray(fields: object, head: string, tail: string[], path?: string): any {\n // use the path to resolve which array element we refer to\n if (path && path.startsWith(head)) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n if (pathTail.length > 0) {\n try {\n const arrayIndex = Number.parseInt(pathTail[0], 10);\n const [__, ...dropNumberPath] = pathTail;\n return (fields[head][arrayIndex] !== undefined) ? this.findValueForComplexCondition(\n fields[head][arrayIndex]['value'], tail[0], tail.slice(1), dropNumberPath.join('_')) : null;\n } catch (e) {\n console.log('Error while parsing number', pathTail[0], e);\n }\n }\n } else {\n console.log('Path in formArray should start with ', head, ', full path: ', path);\n }\n }\n\n private getValue(fields: object, head: string): any {\n if (this.isDynamicList(fields[head])) {\n return fields[head].value.code;\n } else {\n return fields[head];\n }\n }\n\n private isDynamicList(dynamiclist: object): boolean {\n return !_score.isEmpty(dynamiclist) &&\n (_score.has(dynamiclist, 'value') && _score.has(dynamiclist, 'list_items'));\n }\n\n private unquoted(str: string): string {\n return str.replace(/(?:^\")|(?:\"$)/g, '');\n }\n\n private removeStarChar(str: string): string {\n return str.substring(0, str.length - 1);\n }\n\n private okIfBothEmpty(right: string, value: any): boolean {\n return value === null && (right === '');\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class Constants {\n public static readonly MANDATORY: string = 'MANDATORY';\n public static readonly REGEX_WHITESPACES: string = '^[^ ]+(?:\\\\s+[^ ]+)*$';\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\n\nimport { Constants } from '../../commons/constants';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FormValidatorsService {\n\n private static readonly CUSTOM_VALIDATED_TYPES: FieldTypeEnum[] = [\n 'Date', 'MoneyGBP', 'Label'\n ];\n public static addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n if (\n caseField.display_context === Constants.MANDATORY &&\n FormValidatorsService.CUSTOM_VALIDATED_TYPES.indexOf(caseField.field_type.type) === -1\n ) {\n const validators = [Validators.required];\n if (caseField.field_type.type === 'Text') {\n if (caseField.field_type.regular_expression) {\n validators.push(Validators.pattern(caseField.field_type.regular_expression));\n } else {\n validators.push(this.emptyValidator());\n }\n if (caseField.field_type.min && (typeof caseField.field_type.min === 'number')) {\n validators.push(Validators.minLength(caseField.field_type.min));\n }\n if (caseField.field_type.max && (typeof caseField.field_type.max === 'number')) {\n validators.push(Validators.maxLength(caseField.field_type.max));\n }\n }\n if (control.validator) {\n validators.push(control.validator);\n }\n control.setValidators(validators);\n }\n return control;\n }\n\n public static emptyValidator(): ValidatorFn {\n const validator = (control: AbstractControl):ValidationErrors | null => {\n if (control && control.value && control.value.toString().trim().length === 0) {\n return { required: {} };\n }\n return null;\n };\n return validator;\n }\n\n // TODO: Strip this out as it's only here for the moment because\n // the service is being injected all over the place but it doesn't\n // need to be as FormValidatorsService.addValidators is perfectly\n // happy being static.\n public addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n return FormValidatorsService.addValidators(caseField, control);\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\n\ntype FormContainer = FormGroup | FormArray;\n\n@Directive()\nexport abstract class AbstractFormFieldComponent {\n @Input()\n public caseField: CaseField;\n\n @Input()\n public formGroup: FormGroup;\n\n @Input()\n public parent?: FormContainer;\n\n @Input()\n public idPrefix = '';\n\n public id() {\n return this.idPrefix + this.caseField.id;\n }\n\n protected registerControl<T extends AbstractControl>(control: T, replace = false): AbstractControl {\n const container: FormContainer = this.parent || this.formGroup;\n if (!container) {\n return control;\n }\n const existing = container.controls[this.caseField.id];\n if (existing) {\n if (replace) {\n // Set the validators on the replacement with what already exists.\n control.setValidators(existing.validator);\n } else {\n return existing;\n }\n }\n this.addValidators(this.caseField, control);\n FieldsUtils.addCaseFieldAndComponentReferences(control, this.caseField, this);\n return this.addControlToParent(control, container, replace);\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n // No validators by default, override this method to add validators to the form control\n }\n\n private addControlToParent(control: AbstractControl, parent: FormContainer, replace: boolean): AbstractControl {\n if (parent instanceof FormArray) {\n return this.addControlToFormArray(control, parent, replace);\n }\n return this.addControlToFormGroup(control, parent, replace);\n }\n\n private addControlToFormArray(control: AbstractControl, parent: FormArray, replace: boolean): AbstractControl {\n const index = parseInt(this.caseField.id, 10);\n if (replace && !isNaN(index)) {\n parent.setControl(index, control);\n } else {\n parent.push(control);\n }\n return control;\n }\n\n private addControlToFormGroup(control: AbstractControl, parent: FormGroup, replace: boolean): AbstractControl {\n if (replace) {\n if (this.caseField.field_type && this.caseField.field_type.id === 'CaseLink' && this.caseField.field_type.type === 'Complex' && /^-?\\d+$/.test(this.caseField.id)) {\n parent.setControl('CaseReference', control['controls']['CaseReference']);\n } else {\n parent.setControl(this.caseField.id, control);\n }\n } else {\n parent.addControl(this.caseField.id, control);\n }\n return control;\n }\n}\n","import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { AbstractFormFieldComponent } from './abstract-form-field.component';\n\n@Directive()\nexport abstract class AbstractFieldWriteComponent extends AbstractFormFieldComponent implements OnChanges {\n\n @Input()\n public isExpanded = false;\n\n @Input()\n public isInSearchBlock = false;\n\n public constructor() {\n super();\n this.fixCaseField();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n const change = changes['caseField'];\n if (change) {\n const cfNew = change.currentValue;\n if (!(cfNew instanceof CaseField)) {\n this.fixCaseField();\n }\n }\n }\n\n public createElementId(elementId: string): string {\n return `${this.id()}_${elementId}`;\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n FormValidatorsService.addValidators(caseField, control);\n }\n\n private fixCaseField() {\n if (this.caseField && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n }\n}\n","import { AfterViewInit, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { AbstractFieldWriteComponent } from '../../components/palette/base-field/abstract-field-write.component';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ShowCondition } from './domain/conditional-show.model';\n\n@Directive({ selector: '[ccdConditionalShowForm]' })\n/** Hides and shows all fields in a form. Works on read only fields and form fields.\n * The show condition is evaluated on all the fields of the page. i.e. read only and form fields.\n * Evaluation of the show condition includes disabled fields, which can be on their initial value or empty. Executes on the\n * host field initialization and when any field of the form changes.\n * Collaborates with the GreyBarService to show a vertical grey bar when a field initially hidden on the page is shown. When returning\n * to the page after the page has been left, the grey bar has to be redisplayed. If instead on initial page load the field renders as\n * initially shown, the grey bar is not displayed.\n */\nexport class ConditionalShowFormDirective implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() public caseFields: CaseField[];\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n\n private allFieldValues: any;\n private formChangesSubscription: Subscription;\n\n constructor(private readonly fieldsUtils: FieldsUtils) {\n }\n\n public ngOnInit() {\n if (!this.formGroup) {\n this.formGroup = new FormGroup({});\n }\n }\n\n /**\n * Moved the evaluation of show/hide conditions and subscription\n * to form changes until after the form has been fully created.\n *\n * Prior to this change, I traced more than 5,100,000 firings of\n * the evaluateCondition INSIDE the show_condition check on page\n * load for an event with a lot of content. After this change,\n * that number dropped to fewer than 2,500 - that's a.\n */\n public ngAfterViewInit() {\n this.evalAllShowHideConditions();\n this.subscribeToFormChanges();\n }\n\n public ngOnDestroy() {\n this.unsubscribeFromFormChanges();\n }\n\n /*\n * Delay the execution of evalShowHideConditions for 100ms\n * Evaluating showHideConditions on input is inefficient as all forms are evaluated\n * whilst the user is still typing. We are better off allowing the user to finish typing\n * then evaluate the show hide conditions.\n */\n private subscribeToFormChanges() {\n this.unsubscribeFromFormChanges();\n this.formChangesSubscription = this.formGroup.valueChanges\n .pipe(\n debounceTime(100)\n )\n .subscribe(_ => {\n this.evalAllShowHideConditions();\n });\n }\n\n private evaluateControl(control: AbstractControl) {\n const cf = control['caseField'] as CaseField;\n const component = control['component'] as AbstractFormFieldComponent;\n this.evaluateCondition(cf, component, control);\n }\n\n private evaluateCondition(cf: CaseField, component: AbstractFormFieldComponent, control: AbstractControl) {\n if (cf) {\n if (cf.display_context === 'HIDDEN') {\n cf.hidden = true; // display_context === 'HIDDEN' means always hide\n } else if (cf.show_condition) {\n const showCondition: ShowCondition = ShowCondition.getInstance(cf.show_condition);\n const condResult = showCondition.match(this.allFieldValues, this.buildPath(component, cf));\n if (cf.hidden === null || cf.hidden === undefined) {\n cf.hidden = false;\n }\n if (condResult === cf.hidden) {\n cf.hidden = !condResult;\n }\n // EUI-3267. If this field is showing, set the hiddenCannotChange flag.\n // This is used in the display of the grey bar.\n if (!cf.hidden) {\n cf.hiddenCannotChange = showCondition.hiddenCannotChange(this.caseFields);\n }\n // Disable the control if it's hidden so that it doesn't count towards the\n // validation state of the form, but only if it's actually being validated.\n if (control.validator) {\n if (cf.hidden === true && !control.disabled) {\n control.disable({ emitEvent: false });\n } else if (cf.hidden !== true && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n }\n }\n }\n\n // make sure for the 3 callbacks that we are bound to this via an arrow function\n private readonly handleFormControl = (formControl: FormControl): void => {\n this.evaluateControl(formControl);\n }\n\n private readonly handleFormArray = (formArray: FormArray): void => {\n this.evaluateControl(formArray);\n formArray.controls.forEach(formControl => {\n this.fieldsUtils.controlIterator(formControl, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n\n private readonly handleFormGroup = (formGroup: FormGroup): void => {\n this.evaluateControl(formGroup);\n let groupControl = formGroup;\n if (formGroup.get('value') && formGroup.get('value') instanceof FormGroup) { // Complex Field\n groupControl = formGroup.get('value') as FormGroup;\n } else if (formGroup.controls) {\n // Special Fields like AddressUK, AddressGlobal\n groupControl = formGroup;\n }\n if (groupControl.controls) {\n Object.keys(groupControl.controls).forEach(cKey => {\n // EUI-3359.\n // Get the control from groupControl.controls[cKey] rather than\n // groupControl.get(cKey) as the latter does pathing and will interpret\n // full stops in cKey as delimeters for being nested within an array,\n // which makes no sense in this situation.\n const control = groupControl.controls[cKey];\n this.fieldsUtils.controlIterator(control, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n }\n\n private evalAllShowHideConditions(): void {\n this.getCurrentPagesReadOnlyAndFormFieldValues();\n this.fieldsUtils.controlIterator(this.formGroup, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n }\n\n private buildPath(c: AbstractFormFieldComponent, field: CaseField): string {\n if (c && c instanceof AbstractFieldWriteComponent) {\n if (c.idPrefix) {\n return c.idPrefix + field.id;\n }\n }\n return field.id;\n }\n\n private getCurrentPagesReadOnlyAndFormFieldValues(): any {\n const formFields = this.getFormFieldsValuesIncludingDisabled();\n this.allFieldValues = this.fieldsUtils.mergeCaseFieldsAndFormFields(this.contextFields, formFields);\n return this.allFieldValues;\n }\n\n private getFormFieldsValuesIncludingDisabled(): any {\n return this.formGroup.getRawValue();\n }\n\n private unsubscribeFromFormChanges(): void {\n if (this.formChangesSubscription) {\n this.formChangesSubscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ConditionalShowFormDirective } from './conditional-show-form.directive';\nimport { ConditionalShowRegistrarService } from './services/conditional-show-registrar.service';\nimport { GreyBarService } from './services/grey-bar.service';\n\n@NgModule({\n declarations: [\n ConditionalShowFormDirective\n ],\n exports: [\n ConditionalShowFormDirective\n ],\n providers: [\n FieldsUtils,\n ConditionalShowRegistrarService,\n GreyBarService\n ]\n})\nexport class ConditionalShowModule {}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FieldTypeSanitiser {\n public static readonly FIELD_TYPE_COMPLEX: FieldTypeEnum = 'Complex';\n public static readonly FIELD_TYPE_COLLECTION: FieldTypeEnum = 'Collection';\n public static readonly FIELD_TYPE_DYNAMIC_LIST: FieldTypeEnum = 'DynamicList';\n public static readonly FIELD_TYPE_DYNAMIC_RADIO_LIST: FieldTypeEnum = 'DynamicRadioList';\n\n /**\n * This method finds dynamiclists in a form and replaces their string\n * values, with a JSON object, as below:\n * From: 'xyz'\n * To : {\n * value: { code:'xyz', label:'XYZ' },\n * list_items: [\n * { code:'xyz', label:'XYZ'},\n * { code:'abc', label:'ABC'}\n * ]\n * }\n * @param caseFields The CaseFields to assess.\n * @param data The data in the form.\n */\n public sanitiseLists(caseFields: CaseField[], data: any) {\n if (!data || !caseFields) {\n return;\n }\n caseFields.forEach(caseField => {\n\n switch (caseField.field_type.type) {\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_RADIO_LIST:\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_LIST:\n this.convertStringToDynamicListOutput(caseField, data);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COMPLEX:\n this.sanitiseLists(caseField.field_type.complex_fields, data[caseField.id]);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COLLECTION:\n if (Array.isArray(data[caseField.id])) {\n data[caseField.id].forEach((formElement: any) => {\n this.sanitiseLists(caseField.field_type.collection_field_type.complex_fields, formElement.value);\n });\n }\n break;\n }\n\n });\n }\n\n private convertStringToDynamicListOutput(field: CaseField, data: any): void {\n const stringValue = data[field.id];\n if (typeof stringValue === 'string') {\n const listItems = this.getListItems(field);\n const matches = listItems.filter(value => value.code === stringValue);\n if (matches && matches.length > 0) {\n data[field.id] = {\n value: matches[0],\n list_items: listItems\n };\n }\n }\n }\n\n private getListItems(field: CaseField): any[] {\n if (field) {\n if (field.list_items) {\n return field.list_items;\n }\n if (field.formatted_value && field.formatted_value.list_items) {\n return field.formatted_value.list_items;\n }\n }\n return [];\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../fields/fields.utils';\nimport { FieldTypeSanitiser } from './field-type-sanitiser';\n\n@Injectable()\nexport class FormValueService {\n /**\n * Gets value of a field based on fieldKey which is a dot separated reference to value and collection index.\n * There are two exceptions:\n * 1) In case of a multiselect being identified as a leaf a '---LABEL' suffix is appended to the key and values of that key are returned\n * form= { 'list': ['code1', 'code2'],\n * 'list---LABEL': ['label1', 'label2'] },\n * fieldKey=list,\n * colIndex=0,\n * value=label1, label2\n * 2) In case of a collection of simple fields is identified as a leaf all values are joined seperated by a comma\n * form= { 'collection': [{ 'value': 'value1' }, { 'value': 'value2' }] }\n * fieldKey=collection\n * colIndex=1\n * value=value1, value2\n *\n * Other examples:\n * 1) simple field reference: form={ 'PersonFirstName': 'John' }, fieldKey=PersonFirstName, value=John\n * 2) complex field reference:\n * form= { complex1': {\n * 'simple11': 'value11',\n * 'simple12': 'value12',\n * 'complex2': {\n * 'simple21': 'value21'\n * }\n * }},\n * fieldKey=complex1.complex2.simple21\n * colIndex=0,\n * value=value21\n * 3) complex field with collection field with complex field reference:\n * form= { 'complex1': {\n * 'collection1': [\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value1',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value12'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value2',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value21'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value3',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value31'\n * }\n * }\n * }\n * }\n * }\n * ]}}\n * fieldKey=complex1.collection1.complex2.complex3.complex4.simple2\n * colIndex=2,\n * value=value21\n * 4) collection of complex types\n * form= { 'collection1': [\n * { 'value': {'complex1': {\n * 'simple1': 'value11',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value12'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value21',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value22'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value31',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value32'\n * }\n * }\n * }}\n * }\n * ]}\n * fieldKey=collection1.complex1.complex2.complex3.simple2\n * colIndex=2\n * value=value32\n *\n * If key is pointing at a complex or collection leaf (not simple, collection of simple or multiselect types) then undefined is returned.\n * Also no key referring a leaf that is contained within collection will contain index number. The index is passed as an argument to the\n * method.\n * @param form form\n * @param fieldKey dot separated reference to value\n * @param colIndex index of collection item being referenced or 0 otherwise\n * @returns string simple or combined value of a field\n */\n public static getFieldValue(form, fieldKey, colIndex) {\n const fieldIds = fieldKey.split('.');\n const currentFieldId = fieldIds[0];\n const currentForm = form[currentFieldId];\n if (FieldsUtils.isMultiSelectValue(currentForm)) {\n return form[currentFieldId + FieldsUtils.LABEL_SUFFIX].join(', ');\n } else if (FieldsUtils.isCollectionOfSimpleTypes(currentForm)) {\n return currentForm.map(fieldValue => fieldValue['value']).join(', ');\n } else if (FieldsUtils.isCollection(currentForm)) {\n return this.getFieldValue(currentForm[colIndex]['value'], fieldIds.slice(1).join('.'), colIndex);\n } else if (FieldsUtils.isNonEmptyObject(currentForm)) {\n return this.getFieldValue(currentForm, fieldIds.slice(1).join('.'), colIndex);\n } else {\n return currentForm;\n }\n }\n\n /**\n * A recursive method to remove anything with a `---LABEL` suffix.\n * @param data The data to recurse through and remove MultiSelect labels.\n */\n public static removeMultiSelectLabels(data: any): void {\n if (data && typeof data === 'object') {\n if (Array.isArray(data)) {\n for (const item of data) {\n FormValueService.removeMultiSelectLabels(item);\n }\n } else {\n const keys: string[] = Object.keys(data);\n for (const key of keys) {\n // Have we found one a MultiSelect label?\n if (key.indexOf(FieldsUtils.LABEL_SUFFIX) > 0) {\n // If so, remove it.\n delete data[key];\n } else {\n FormValueService.removeMultiSelectLabels(data[key]);\n }\n }\n }\n }\n }\n\n private static isReadOnly(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'READONLY' : false;\n }\n\n private static isOptional(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'OPTIONAL' : false;\n }\n\n private static isLabel(field: CaseField): boolean {\n if (field.field_type) {\n return field.field_type.type === 'Label';\n } else {\n return false;\n }\n }\n\n private static isEmptyData(data: object): boolean {\n if (data) {\n let allEmpty = true;\n for (const prop of Object.keys(data)) {\n const value = data[prop];\n if (value) {\n if (typeof(value) === 'object') {\n allEmpty = allEmpty && this.isEmptyData(value);\n } else {\n allEmpty = false;\n }\n }\n }\n return allEmpty;\n }\n return true;\n }\n\n /**\n * Should we clear out optional, empty, complex objects?\n * @param clearEmpty False property if we simply want to skip it.\n * @param data The data to assess for \"emptiness\".\n * @param field The CaseField that will tell us if this is optional.\n */\n private static clearOptionalEmpty(clearEmpty: boolean, data: object, field: CaseField): boolean {\n if (clearEmpty) {\n return FormValueService.isOptional(field) && FormValueService.isEmptyData(data);\n }\n return false;\n }\n\n constructor(private readonly fieldTypeSanitiser: FieldTypeSanitiser) {\n }\n\n public sanitise(rawValue: object): object {\n return this.sanitiseObject(rawValue);\n }\n\n public sanitiseCaseReference(reference: string): string {\n // strip non digits\n const s: string = reference.replace(/[\\D]/g, '');\n if (s.length > 16) {\n return s.substr(s.length - 16, 16);\n }\n return s;\n }\n\n public filterCurrentPageFields(caseFields: CaseField[], editForm: any): any {\n const cloneForm = JSON.parse(JSON.stringify(editForm));\n Object.keys(cloneForm['data']).forEach((key) => {\n if (caseFields.findIndex((element) => element.id === key) < 0) {\n delete cloneForm['data'][key];\n }\n });\n return cloneForm;\n }\n\n public sanitiseDynamicLists(caseFields: CaseField[], editForm: any): any {\n return this.fieldTypeSanitiser.sanitiseLists(caseFields, editForm.data);\n }\n\n public clearNonCaseFields(data: object, caseFields: CaseField[]) {\n for (const dataKey in data) {\n if (!caseFields.find(cf => cf.id === dataKey)) {\n delete data [dataKey];\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeNullLabels(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels that are null\n if ((data[field.id] === null) || (data[field.id] === '')) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n // Recurse and remove anything unnecessary from within a complex field.\n this.removeNullLabels(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeNullLabels(item, field.field_type.collection_field_type.complex_fields);\n this.removeNullLabels(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeEmptyDocuments(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Complex':\n // Recurse and remove any empty documents from within a complex field.\n this.removeEmptyDocuments(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear out empty documents\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any empty documents within.\n for (const item of collection) {\n this.removeEmptyDocuments(item, field.field_type.collection_field_type.complex_fields);\n this.removeEmptyDocuments(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n case 'Document':\n // Ensure this is executed only if the Document field is NOT hidden and is empty of data; hidden Document\n // fields are handled by the filterRawFormValues() function in CaseEditSubmit component\n if (field.hidden !== true && FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n /**\n * Clear out unnecessary fields from a data object, based on an array of CaseFields.\n * This method is recursive and will call itself if it encounters particular field types.\n *\n * @param data The object to be tidied up.\n * @param caseFields The CaseFields that need to be cleaned up.\n * @param clearEmpty Whether or not we should clear out empty, optional, complex objects.\n * @param clearNonCase Whether or not we should clear out non-case fields at the top level.\n */\n public removeUnnecessaryFields(data: object, caseFields: CaseField[], clearEmpty = false, clearNonCase = false): void {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n if (clearNonCase) {\n this.clearNonCaseFields(data, caseFields);\n }\n for (const field of caseFields) {\n if (!FormValueService.isLabel(field) && FormValueService.isReadOnly(field)) {\n // Retain anything that is readonly and not a label.\n continue;\n }\n if (field.hidden === true && field.display_context !== 'HIDDEN') {\n // Delete anything that is hidden (that is NOT readonly), and that\n // hasn't had its display_context overridden to make it hidden.\n delete data[field.id];\n } else if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels.\n delete data[field.id];\n break;\n case 'Document':\n if (FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n this.removeUnnecessaryFields(data[field.id], field.field_type.complex_fields, clearEmpty);\n // Also remove any optional complex objects that are completely empty.\n // EUI-4244: Ritesh's fix, passing true instead of clearEmpty.\n if (FormValueService.clearOptionalEmpty(true, data[field.id], field)) {\n delete data[field.id];\n }\n break;\n case 'Collection':\n // Check for valid collection data\n this.removeInvalidCollectionData(data, field);\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeUnnecessaryFields(item, field.field_type.collection_field_type.complex_fields, clearEmpty);\n this.removeUnnecessaryFields(item.value, field.field_type.collection_field_type.complex_fields, false);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n\n // Clear out any MultiSelect labels.\n FormValueService.removeMultiSelectLabels(data);\n }\n\n /**\n * Remove any empty or invalid arry with only id\n *\n * @param data The object tree of form values on which to perform the removal\n * @param field domain model object for each field\n */\n public removeInvalidCollectionData(data: object, field: CaseField) {\n if (data[field.id] && data[field.id].length > 0) {\n for (const objCollection of data[field.id]) {\n if (Object.keys(objCollection).length === 1 && Object.keys(objCollection).indexOf('id') > -1) {\n data[field.id] = [];\n }\n }\n }\n }\n\n /**\n * Remove any empty collection fields where a value of greater than zero is specified in the field's {@link FieldType}\n * `min` attribute.\n *\n * @param data The object tree of form values on which to perform the removal\n * @param caseFields The list of underlying {@link CaseField} domain model objects for each field\n */\n public removeEmptyCollectionsWithMinValidation(data: object, caseFields: CaseField[]): void {\n if (data && caseFields && caseFields.length > 0) {\n for (const field of caseFields) {\n if (field.field_type.type === 'Collection' && field.field_type.min > 0 && data[field.id] &&\n Array.isArray(data[field.id]) && data[field.id].length === 0) {\n delete data[field.id];\n }\n }\n }\n }\n\n private sanitiseObject(rawObject: object): object {\n if (!rawObject) {\n return rawObject;\n }\n\n let sanitisedObject = {};\n const documentFieldKeys = ['document_url', 'document_binary_url', 'document_filename'];\n for (const key in rawObject) {\n // If the key is one of documentFieldKeys, it means the field is of Document type. If the value of any of these\n // properties is null, the entire sanitised object to be returned should be null\n if (documentFieldKeys.indexOf(key) > -1 && rawObject[key] == null) {\n sanitisedObject = null;\n break;\n } else if ('CaseReference' === key) {\n sanitisedObject[key] = this.sanitiseValue(this.sanitiseCaseReference(String(rawObject[key])));\n } else {\n sanitisedObject[key] = this.sanitiseValue(rawObject[key]);\n if (Array.isArray(sanitisedObject[key])) {\n // If the 'sanitised' array is empty, whereas the original array had 1 or more items\n // delete the property from the sanatised object\n if (sanitisedObject[key].length === 0 && rawObject[key].length > 0) {\n delete sanitisedObject[key];\n }\n }\n }\n }\n return sanitisedObject;\n }\n\n private sanitiseArray(rawArray: any[]): any[] {\n if (!rawArray) {\n return rawArray;\n }\n\n rawArray.forEach(item => {\n if (item && item.hasOwnProperty('value')) {\n item.value = this.sanitiseValue(item.value);\n }\n });\n\n // Filter the array to ensure only truthy values are returned; double-bang operator returns the boolean true/false\n // association of a value. In addition, if the array contains items with a \"value\" object property, return only\n // those whose value object contains non-empty values, including for any descendant objects\n return rawArray\n .filter(item => !!item)\n .filter(item => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);\n }\n\n private sanitiseValue(rawValue: any): any {\n if (Array.isArray(rawValue)) {\n return this.sanitiseArray(rawValue);\n }\n\n switch (typeof rawValue) {\n case 'object':\n return this.sanitiseObject(rawValue);\n case 'string':\n return rawValue.trim();\n case 'number':\n return String(rawValue);\n default:\n return rawValue;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValueService } from '../../../services/form/form-value.service';\n\n// @dynamic\n@Injectable()\nexport class PlaceholderService {\n\n public resolvePlaceholders(pageFormFields: object, stringToResolve: string): string {\n const ps = new PlaceholderService.PlaceholderSubstitutor({pageFormFields, stringToResolve});\n return ps.resolvePlaceholders();\n }\n\n}\n\nexport namespace PlaceholderService {\n export class PlaceholderSubstitutor {\n private static readonly PLACEHOLDER_CONTENT_PATTERN = /^[a-zA-Z0-9_.\\]\\[]+$/;\n private static readonly PLACEHOLDER_PATTERN = /\\$\\{[a-zA-Z0-9_.\\]\\[]+\\}/;\n private static readonly STARTING_PLACEHOLDER = '$';\n private static readonly CLOSING_PLACEHOLDER = '}';\n private static readonly OPENING_PLACEHOLDER = '{';\n private static readonly NEW_LINE = `\n___\n`;\n\n private static readonly PLACEHOLDER_START =\n PlaceholderSubstitutor.STARTING_PLACEHOLDER + PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n private static readonly PLACEHOLDER_END = PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n\n private stringToResolve: string;\n private scanIndex: number;\n private numberCollectionItemsAsPlaceholder: number;\n private collectionItemIndex: number;\n private fieldIdToSubstitute: string;\n private startSubstitutionIndex: number;\n private isCollecting: boolean;\n private readonly resolvedFormValues = [];\n private readonly pageFormFields: object;\n private readonly originalStringToResolve: string;\n\n private static wrapPlaceholder(str: string): string {\n return `${this.PLACEHOLDER_START}${str}${this.PLACEHOLDER_END}`;\n }\n\n constructor(values: { stringToResolve: string, pageFormFields: object }) {\n this.stringToResolve = values.stringToResolve;\n this.originalStringToResolve = values.stringToResolve;\n this.pageFormFields = values.pageFormFields;\n }\n\n public resolvePlaceholders(): string {\n while (this.hasUnresolvedPlaceholder()) {\n this.resetPlaceholderSubstitutor();\n while (this.doesPlaceholderContainCollectionItems()) {\n while (this.isScanningStringToResolve()) {\n if (this.isStartPlaceholderAndNotCollecting()) {\n this.setStartCollecting();\n } else if (this.isCollecting) {\n if (this.isClosingPlaceholder()) {\n this.substitute();\n } else if (!this.isOpeningPlaceholder()) {\n this.appendCharacter();\n }\n }\n this.scanIndex++;\n }\n this.appendOriginalStringIfCollectionItemAsPlaceholder();\n }\n }\n return this.stringToResolve;\n }\n\n private isScanningStringToResolve(): boolean {\n return this.scanIndex < this.stringToResolve.length;\n }\n\n private doesPlaceholderContainCollectionItems(): boolean {\n return this.numberCollectionItemsAsPlaceholder-- > 0;\n }\n\n private hasUnresolvedPlaceholder(): boolean {\n return this.stringToResolve\n && typeof this.stringToResolve === 'string'\n && !!this.stringToResolve.match(PlaceholderSubstitutor.PLACEHOLDER_PATTERN);\n }\n\n private isStartPlaceholderAndNotCollecting(): boolean {\n return this.isStartingPlaceholder() && !this.isCollecting;\n }\n\n private isOpeningPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n }\n\n private isClosingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n }\n\n private resetPlaceholderSubstitutor(): void {\n this.scanIndex = 0;\n this.numberCollectionItemsAsPlaceholder = 1;\n this.collectionItemIndex = 0;\n this.fieldIdToSubstitute = '';\n this.startSubstitutionIndex = -1;\n this.isCollecting = false;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n\n private substitute(): void {\n if (this.isMatchingPlaceholderPattern() && this.isFieldIdInFormFields()) {\n this.updateNumberOfCollectionItemsAsPlaceholder();\n if (this.isFieldIdToSubstituteReferringItself()) {\n this.substituteWithEmptyString();\n } else {\n this.substituteFromFormFields();\n }\n } else {\n this.substituteWithEmptyString();\n }\n this.isCollecting = false;\n this.fieldIdToSubstitute = '';\n }\n\n private appendOriginalStringIfCollectionItemAsPlaceholder(): void {\n if (this.collectionItemIndex < this.numberCollectionItemsAsPlaceholder - 1) {\n this.stringToResolve += PlaceholderSubstitutor.NEW_LINE + this.originalStringToResolve;\n this.collectionItemIndex += 1;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n }\n\n private setStartCollecting(): void {\n this.isCollecting = true;\n this.startSubstitutionIndex = this.scanIndex;\n }\n\n private appendCharacter(): void {\n this.fieldIdToSubstitute += this.stringToResolve.charAt(this.scanIndex);\n }\n\n private isMatchingPlaceholderPattern(): boolean {\n return !!this.fieldIdToSubstitute.match(PlaceholderSubstitutor.PLACEHOLDER_CONTENT_PATTERN);\n }\n\n private isFieldIdInFormFields(): boolean {\n return this.getFieldValue() !== undefined;\n }\n\n private isFieldIdToSubstituteReferringItself(): boolean {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const value = this.getSubstitutionValueOrEmpty();\n return placeholder === value;\n }\n\n private getSubstitutionValueLengthOrZero(): number {\n return this.pageFormFields[this.fieldIdToSubstitute] ? this.getSubstitutionValueOrEmpty().toString().length : 0;\n }\n\n /**\n * Gets the value from `this` field, which could be any of a number of different types:\n * string | number | object | string[] | object[] | maybe others...\n * @returns The value associated with `this` field.\n */\n private getFieldValue(): any {\n if (this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute]) {\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n } else {\n const fieldValue = FormValueService.getFieldValue(this.pageFormFields, this.fieldIdToSubstitute, this.collectionItemIndex);\n this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute] = fieldValue;\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n }\n }\n\n private getSubstitutionValueOrEmpty(): string {\n const fieldValue = this.getFieldValue();\n return fieldValue ? fieldValue : '';\n }\n\n private getNumberOfCollectionItemsIfAny(): number {\n const fieldIds = this.fieldIdToSubstitute.split('.');\n let pageFormFieldsClone = FieldsUtils.cloneObject(this.pageFormFields);\n let numberCollectionItemsAsPlaceholder = 1;\n\n // tslint:disable-next-line\n for (let index = 0; index < fieldIds.length; index++) {\n if (FieldsUtils.isCollection(pageFormFieldsClone)) {\n numberCollectionItemsAsPlaceholder = pageFormFieldsClone.length;\n break;\n } else if (pageFormFieldsClone[fieldIds[index]] === undefined) {\n break;\n } else {\n pageFormFieldsClone = pageFormFieldsClone[fieldIds[index]];\n }\n }\n return numberCollectionItemsAsPlaceholder;\n }\n\n private isStartingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.STARTING_PLACEHOLDER;\n }\n\n private updateNumberOfCollectionItemsAsPlaceholder(): void {\n if (this.fieldIdToSubstitute.split('.').length > 1) {\n const newNumber = this.getNumberOfCollectionItemsIfAny();\n this.numberCollectionItemsAsPlaceholder = Math.max(newNumber, this.numberCollectionItemsAsPlaceholder);\n }\n }\n\n private substituteFromFormFields(): void {\n this.doSubstitution(this.getSubstitutionValueOrEmpty());\n this.resetScanIndexAfterSubstitution();\n }\n\n private substituteWithEmptyString(): void {\n this.doSubstitution('');\n this.scanIndex = this.startSubstitutionIndex;\n }\n\n private doSubstitution(value: string): void {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const replacedString = this.stringToResolve.substring(this.startSubstitutionIndex).replace(placeholder, value);\n this.stringToResolve = this.stringToResolve.substring(0, this.startSubstitutionIndex).concat(replacedString);\n }\n\n private resetScanIndexAfterSubstitution(): void {\n this.scanIndex = this.startSubstitutionIndex + this.getSubstitutionValueLengthOrZero();\n }\n }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { PlaceholderService } from './services/placeholder.service';\n\n@Directive({ selector: '[ccdLabelSubstitutor]' })\n/**\n * Checks all labels and substitutes any placholders that reference other fields values.\n */\nexport class LabelSubstitutorDirective implements OnInit, OnDestroy {\n\n @Input() public caseField: CaseField;\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n @Input() public elementsToSubstitute: string[] = ['label', 'hint_text'];\n\n private initialLabel: string;\n private initialHintText: string;\n\n constructor(\n private readonly fieldsUtils: FieldsUtils,\n private readonly placeholderService: PlaceholderService\n ) {}\n\n public ngOnInit(): void {\n this.initialLabel = this.caseField.label;\n this.initialHintText = this.caseField.hint_text;\n this.formGroup = this.formGroup || new FormGroup({});\n\n const fields: object = this.getReadOnlyAndFormFields();\n\n if (this.shouldSubstitute('label')) {\n this.caseField.label = this.resolvePlaceholders(fields, this.caseField.label);\n }\n if (this.shouldSubstitute('hint_text')) {\n this.caseField.hint_text = this.resolvePlaceholders(fields, this.caseField.hint_text);\n }\n if (this.shouldSubstitute('value')) {\n this.caseField.value = this.resolvePlaceholders(fields, this.caseField.value);\n }\n }\n\n public ngOnDestroy(): void {\n this.caseField.label = this.initialLabel;\n this.caseField.hint_text = this.initialHintText;\n }\n\n private shouldSubstitute(element: string): boolean {\n return this.elementsToSubstitute.find(e => e === element) !== undefined;\n }\n\n private getReadOnlyAndFormFields(): object {\n const formFields: object = this.getFormFieldsValuesIncludingDisabled();\n // TODO: Delete following line when @Input contextFields is fixed - https://tools.hmcts.net/jira/browse/RDM-3504\n const uniqueContextFields: CaseField[] = this.removeDuplicates(this.contextFields);\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(uniqueContextFields, formFields);\n }\n\n private removeDuplicates(original: CaseField[]): CaseField[] {\n const unique: CaseField[] = [];\n original.forEach(caseField => {\n const isUnique = unique.filter(e => e.id === caseField.id).length === 0;\n if (isUnique) {\n unique.push(caseField);\n }\n });\n return unique;\n }\n\n private getFormFieldsValuesIncludingDisabled(): object {\n return this.formGroup.getRawValue();\n }\n\n private resolvePlaceholders(fields: object, stringToResolve: string): string {\n return this.placeholderService.resolvePlaceholders(fields, stringToResolve);\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { LabelSubstitutorDirective } from './label-substitutor.directive';\n\n@NgModule({\n declarations: [\n LabelSubstitutorDirective\n ],\n exports: [\n LabelSubstitutorDirective\n ],\n providers: [\n FieldsUtils,\n CurrencyPipe,\n ]\n})\nexport class LabelSubstitutorModule {}\n","import { AfterContentInit, Directive, ElementRef, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[focusElement]'\n})\n/**\n * Focuses the host element after the content of the view has been initialised. Works on writable fields. If the\n * directive is used on more than one element, the last element to be initialised will be in focus.\n * NOTE:\n * The directive focuses on the element only for the very first time when the content into the component's view, the\n * view that the directive is in is initialised. Refocusing the element will require explicit focusing for e.g. by\n * calling this directives focus() method from the host component.\n */\nexport class FocusElementDirective implements AfterContentInit {\n\n constructor(private readonly el: ElementRef, private readonly renderer: Renderer2) {\n }\n\n public ngAfterContentInit(): void {\n this.focus();\n }\n\n public focus(): void {\n if (this.el.nativeElement) {\n const focusElement = this.renderer.selectRootElement(this.el.nativeElement, true);\n if (focusElement) {\n focusElement.focus();\n }\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FocusElementDirective } from './focus-element.directive';\n\n@NgModule({\n declarations: [\n FocusElementDirective\n ],\n exports: [\n FocusElementDirective\n ]\n})\nexport class FocusElementModule {\n}\n","export class ActivityInfo {\n public forename: string;\n public surname: string;\n}\n\nexport class Activity {\n public caseId: string;\n public viewers: ActivityInfo[];\n public editors: ActivityInfo[];\n public unknownViewers: number;\n public unknownEditors: number;\n}\n\nexport enum DisplayMode {\n BANNER,\n ICON\n}\n","export class AddressModel {\n public AddressLine1 = '';\n public AddressLine2 = '';\n public AddressLine3 = '';\n public PostTown = '';\n public County = '';\n public PostCode = '';\n public Country = '';\n}\n","import { AlertLevel } from './alert-level.model';\n\nexport class Alert {\n public level: AlertLevel;\n public message: string;\n}\n","import { Type } from 'class-transformer';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Orderable } from '../../../domain/order/orderable.model';\nimport { WizardPageField } from './wizard-page-field.model';\n\n// @dynamic\nexport class WizardPage implements Orderable {\n\n public id: string;\n public label: string;\n public order?: number;\n\n @Type(() => WizardPageField)\n public wizard_page_fields: WizardPageField[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public show_condition?: string;\n\n public parsedShowCondition: ShowCondition;\n\n public getCol1Fields(): CaseField[] {\n return this.case_fields?.filter(f =>\n !f.wizardProps.page_column_no || f.wizardProps.page_column_no === 1);\n }\n public getCol2Fields(): CaseField[] {\n return this.case_fields?.filter(f => f.wizardProps.page_column_no === 2);\n }\n\n public isMultiColumn(): boolean {\n return this.getCol2Fields()?.length > 0;\n }\n}\n","import { Type } from 'class-transformer';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { CaseField } from '../definition/case-field.model';\n\n// @dynamic\nexport class CaseEventTrigger {\n\n public id: string;\n public name: string;\n public description?: string;\n public case_id?: string;\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public event_token: string;\n\n @Type(() => WizardPage)\n public wizard_pages: WizardPage[];\n\n public show_summary?: boolean;\n public show_event_notes?: boolean;\n public end_button_label?: string;\n public can_save_draft?: boolean;\n\n public hasFields(): boolean {\n return this.case_fields && this.case_fields.length !== 0;\n }\n\n public hasPages(): boolean {\n return this.wizard_pages && this.wizard_pages.length !== 0;\n }\n}\n","export class CaseViewEvent {\n public id: number;\n public timestamp: string;\n public summary: string;\n public comment: string;\n public event_id: string;\n public event_name: string;\n public state_id: string;\n public state_name: string;\n public user_id: number;\n public user_last_name: string;\n public user_first_name: string;\n public significant_item: {\n type: string,\n description: string,\n url: string\n };\n}\n","import { Orderable } from '../order';\n\nexport class CaseViewTrigger implements Orderable {\n public static readonly DELETE = 'DELETE';\n\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { EventCaseField } from './event-case-field.model';\n\nexport class CaseEvent implements Orderable {\n public id: string;\n public name: string;\n public post_state: string;\n public pre_states: string[];\n public case_fields: EventCaseField[];\n public description: string;\n public order?: number;\n public acls?: AccessControlList[];\n}\n","import { Orderable } from '../order';\n\nexport class CaseState implements Orderable {\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { CaseEvent } from './case-event.model';\nimport { CaseState } from './case-state.model';\n\n// Light clone of CaseType to be used in Jurisdiction class\n// to avoid cyclic dependency\nexport class CaseTypeLite {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n public description: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseEvent } from './case-event.model';\nimport { CaseField } from './case-field.model';\nimport { CaseState } from './case-state.model';\nimport { Jurisdiction } from './jurisdiction.model';\n\n// @dynamics\nexport class CaseType {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public description: string;\n public jurisdiction: Jurisdiction;\n public printEnabled?: boolean;\n}\n","export class EventCaseField {\n public case_field_id: string;\n public showCondition: string;\n}\n","import { Banner } from './banner.model';\nimport { CaseTypeLite } from './case-type-lite.model';\n\nexport class Jurisdiction {\n public id: string;\n public name: string;\n public description: string;\n public caseTypes: CaseTypeLite[];\n}\n","export class Banner {\n public bannerDescription: string;\n public bannerUrlText: string;\n public bannerUrl: string;\n public bannerViewed: boolean;\n public bannerEnabled: boolean;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { Orderable } from '../order';\n\n// @dynamic\nexport class CaseTab implements Orderable {\n public id: string;\n public label: string;\n public order?: number;\n @Type(() => CaseField)\n public fields: CaseField[];\n public show_condition?: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { CaseTab } from './case-tab.model';\nimport { CaseViewEvent } from './case-view-event.model';\nimport { CaseViewTrigger } from './case-view-trigger.model';\n\n// @dynamic\nexport class CaseView {\n public case_id?: string;\n public case_type: {\n id: string,\n name: string,\n description?: string,\n jurisdiction: {\n id: string,\n name: string,\n description?: string\n },\n printEnabled?: boolean\n };\n public state: {\n id: string,\n name: string,\n description?: string\n title_display?: string\n };\n public channels: string[];\n @Type(() => CaseTab)\n public tabs: CaseTab[];\n public triggers: CaseViewTrigger[];\n public events: CaseViewEvent[];\n @Type(() => CaseField)\n public metadataFields?: CaseField[];\n public basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n}\n","export class CasePrintDocument {\n public name: string;\n public type: string;\n public url: string;\n}\n","export class HRef {\n public href: string;\n}\n\nexport class DocumentLinks {\n public self: HRef;\n public binary: HRef;\n}\n\nexport class Document {\n public _links: DocumentLinks;\n public originalDocumentName: string;\n public hashToken?: string;\n}\n\nexport class Embedded {\n public documents: Document[];\n}\n\nexport class DocumentData {\n public _embedded: Embedded;\n public documents: Document[];\n}\n\nexport class FormDocument {\n public document_url: string;\n public document_binary_url: string;\n public document_filename: string;\n public document_hash?: string;\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nexport class HttpError {\n\n constructor() {\n this.timestamp = new Date().toISOString();\n this.error = HttpError.DEFAULT_ERROR;\n this.message = HttpError.DEFAULT_MESSAGE;\n this.status = HttpError.DEFAULT_STATUS;\n this.exception = null;\n this.path = null;\n this.details = null;\n this.callbackErrors = null;\n this.callbackWarnings = null;\n }\n private static readonly DEFAULT_ERROR = 'Unknown error';\n private static readonly DEFAULT_MESSAGE = 'Something unexpected happened, our technical staff have been automatically notified';\n private static readonly DEFAULT_STATUS = 500;\n\n public timestamp: string;\n public status: number;\n public error: string;\n public exception: string;\n public message: string;\n public path: string;\n public details?: any;\n public callbackErrors?: any;\n public callbackWarnings?: any;\n public static from(response: HttpErrorResponse): HttpError {\n const error = new HttpError();\n\n // Check that the HttpErrorResponse contains an \"error\" object before mapping the error properties\n if (!!(response && response.error)) {\n Object.keys(error).forEach(key => {\n error[key] = response.error.hasOwnProperty(key) && response.error[key] ? response.error[key] : error[key];\n });\n }\n\n return error;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { OrganisationVm } from '../../services/organisation';\nimport { SimpleOrganisationModel } from './simple-organisation.model';\n\n@Injectable()\nexport class OrganisationConverter {\n\n private static toSimpleAddress(organisationModel: OrganisationVm): string {\n let simpleAddress = '';\n if (organisationModel.addressLine1) { simpleAddress += organisationModel.addressLine1 + '<br>'; }\n if (organisationModel.addressLine2) { simpleAddress += organisationModel.addressLine2 + '<br>'; }\n if (organisationModel.addressLine3) { simpleAddress += organisationModel.addressLine3 + '<br>'; }\n if (organisationModel.townCity) { simpleAddress += organisationModel.townCity + '<br>'; }\n if (organisationModel.county) { simpleAddress += organisationModel.county + '<br>'; }\n if (organisationModel.country) { simpleAddress += organisationModel.country + '<br>'; }\n if (organisationModel.postCode) { simpleAddress += organisationModel.postCode + '<br>'; }\n return simpleAddress;\n }\n\n public toSimpleOrganisationModel(organisationModel: OrganisationVm): SimpleOrganisationModel {\n return {\n organisationIdentifier: organisationModel.organisationIdentifier,\n name: organisationModel.name,\n address: OrganisationConverter.toSimpleAddress(organisationModel)\n };\n }\n}\n","import { Type } from 'class-transformer';\nimport { Jurisdiction } from '../definition/jurisdiction.model';\n\nfunction hasRoles(profile: Profile): boolean {\n if (profile.user && profile.user.idam && Array.isArray(profile.user.idam.roles)) {\n return profile.user.idam.roles.length > 0;\n }\n return false;\n}\n\n// @dynamic\nexport class Profile {\n public user: {\n idam: {\n id: string,\n email: string,\n forename: string,\n surname: string,\n roles: string[]\n }\n };\n\n public channels: string[];\n\n @Type(() => Jurisdiction)\n public jurisdictions: Jurisdiction[];\n\n public default: {\n workbasket: {\n jurisdiction_id: string,\n case_type_id: string,\n state_id: string\n }\n };\n\n public isSolicitor(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-solicitor')) !== undefined;\n }\n return false;\n }\n\n public isCourtAdmin(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-courtadmin')) !== undefined;\n }\n return false;\n }\n}\n","import { FieldType } from '../definition';\n\nexport class Field {\n constructor(\n public id: string,\n public field_type: FieldType,\n public elementPath?: string,\n public value?: string,\n public label?: string,\n public metadata?: boolean\n ) { }\n}\n","import { FieldType } from '../definition';\n\nexport class SearchResultViewColumn {\n public case_field_id: string;\n public case_field_type: FieldType;\n public display_context?: string;\n public display_context_parameter?: string;\n public label: string;\n public order: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\n\n// @dynamic\nexport class SearchResultViewItem {\n public case_id: string;\n public case_fields: object;\n @Type(() => CaseField)\n public hydrated_case_fields?: CaseField[];\n public columns?: object;\n public supplementary_data?: any;\n public display_context_parameter?: any;\n}\n","import { CaseDetails } from './case-details.model';\n\nexport const DRAFT_PREFIX = 'DRAFT';\nexport const DRAFT_QUERY_PARAM = 'draft';\nexport class Draft {\n\n public id: string;\n public document?: CaseDetails;\n public type?: string;\n public created?: string;\n public updated?: string;\n public static stripDraftId(draftId: string): string {\n return draftId.slice(DRAFT_PREFIX.length);\n }\n\n public static isDraft(id: string): boolean {\n return String(id).startsWith(DRAFT_PREFIX);\n }\n}\n","import { Type } from 'class-transformer';\nimport { Draft } from '../draft.model';\nimport { SearchResultViewColumn } from './search-result-view-column.model';\nimport { SearchResultViewItem } from './search-result-view-item.model';\n\n// @dynamic\nexport class SearchResultView {\n @Type(() => SearchResultViewColumn)\n public columns: SearchResultViewColumn[];\n\n @Type(() => SearchResultViewItem)\n public results: SearchResultViewItem[];\n public result_error?: string;\n\n public hasDrafts() {\n return this.results[0]\n && this.results[0].case_id\n && Draft.isDraft(this.results[0].case_id);\n }\n}\n","export class CaseDetails {\n public id: string;\n public jurisdiction: string;\n public case_type_id: string;\n public state: string;\n public created_date?: string;\n public last_modified?: string;\n public locked_by_user_id?: string;\n public security_level?: string;\n public case_data?: object;\n}\n","export class CaseEventData {\n public event: {\n id: string;\n summary: string;\n description: string;\n };\n public data?: object;\n public event_data?: object; // full event data\n public event_token: string;\n public ignore_warning: boolean;\n public draft_id?: string;\n public case_reference?: string;\n}\n","import { Orderable } from '../order/orderable.model';\nimport { Field } from '../search/field.model';\n\nexport class WorkbasketInputModel implements Orderable {\n constructor(\n public label: string,\n public order: number,\n public field: Field,\n public metadata?: boolean,\n public display_context_parameter?: string) {\n }\n}\n\nexport class WorkbasketInput {\n public workbasketInputs: WorkbasketInputModel[];\n}\n","export class PaginationMetadata {\n public total_results_count: number;\n public total_pages_count: number;\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","import { SearchResultViewItemComparator } from './search-result-view-item-comparator';\nimport { SortOrder } from './sort-order';\n\nexport class SortParameters {\n\n public comparator: SearchResultViewItemComparator;\n public sortOrder: SortOrder;\n\n constructor(comparator: SearchResultViewItemComparator, sortOrder: SortOrder) {\n this.comparator = comparator;\n this.sortOrder = sortOrder;\n }\n\n}\n","export class ComplexFieldOverride {\n public complex_field_element_id: string;\n public display_context: string;\n public label?: string;\n public hint_text?: string;\n public show_condition?: string;\n}\n","import { CaseField, FieldType } from '../domain/definition';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\n\nexport class CaseFieldBuilder {\n\n private readonly caseField: CaseField = new CaseField();\n public static create(): CaseFieldBuilder {\n return new CaseFieldBuilder();\n }\n\n public withACLs(acls: AccessControlList[]): CaseFieldBuilder {\n this.caseField.acls = acls;\n return this;\n }\n\n public withId(id: string): CaseFieldBuilder {\n this.caseField.id = id;\n return this;\n }\n\n public withFieldType(field_type: FieldType): CaseFieldBuilder {\n this.caseField.field_type = field_type;\n return this;\n }\n\n public withDisplayContext(display_context: string): CaseFieldBuilder {\n this.caseField.display_context = display_context;\n return this;\n }\n\n public withDisplayContextParameter(display_context_parameter: string): CaseFieldBuilder {\n this.caseField.display_context_parameter = display_context_parameter;\n return this;\n }\n\n public withHidden(hidden: boolean): CaseFieldBuilder {\n this.caseField.hidden = hidden;\n return this;\n }\n\n public withHintText(hint_text: string): CaseFieldBuilder {\n this.caseField.hint_text = hint_text;\n return this;\n }\n\n public withLabel(label: string): CaseFieldBuilder {\n this.caseField.label = label;\n return this;\n }\n\n public withOrder(order: number): CaseFieldBuilder {\n this.caseField.order = order;\n return this;\n }\n\n public withSecurityLabel(security_label: string): CaseFieldBuilder {\n this.caseField.security_label = security_label;\n return this;\n }\n\n public withShowCondition(show_condition: string): CaseFieldBuilder {\n this.caseField.show_condition = show_condition;\n return this;\n }\n\n public withShowSummaryContentOption(option: number): CaseFieldBuilder {\n this.caseField.show_summary_content_option = option;\n return this;\n }\n\n public withValue(value: any): CaseFieldBuilder {\n this.caseField.value = value;\n return this;\n }\n\n public withListValue(value: any): CaseFieldBuilder {\n this.caseField.list_items = value;\n return this;\n }\n\n public build(): CaseField {\n return this.caseField;\n }\n}\n","import { ComplexFieldOverride } from '../components/case-editor/domain/wizard-page-field-complex-override.model';\nimport { WizardPageField } from '../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../components/case-editor/domain/wizard-page.model';\nimport { ShowCondition } from '../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../domain/case-view/case-event-trigger.model';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\nimport { CaseField } from '../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../domain/definition/field-type-enum.model';\nimport { FieldType } from '../domain/definition/field-type.model';\nimport { FixedListItem } from '../domain/definition/fixed-list-item.model';\nimport { CaseFieldBuilder } from './case-field-builder';\n\nexport const textFieldType = (): FieldType => {\n return {\n id: 'Text',\n type: 'Text',\n complex_fields: []\n };\n};\n\nexport const createCaseEventTrigger = (id: string,\n name: string,\n case_id: string,\n show_summary: boolean,\n case_fields: CaseField[],\n wizard_pages = [],\n can_save_draft = false): CaseEventTrigger => {\n const eventTrigger = new CaseEventTrigger();\n\n eventTrigger.id = id;\n eventTrigger.name = name;\n eventTrigger.case_id = case_id;\n eventTrigger.show_summary = show_summary;\n eventTrigger.wizard_pages = wizard_pages;\n eventTrigger.event_token = 'test-token';\n eventTrigger.case_fields = case_fields;\n eventTrigger.can_save_draft = can_save_draft;\n return eventTrigger;\n};\n\nexport const aCaseField = (id: string, label: string, type: FieldTypeEnum, display_context: string,\n show_summary_content_option: number, typeComplexFields: CaseField[] = [],\n retain_hidden_value?: boolean, hidden?: boolean): CaseField => {\n return ({\n id: id || 'personFirstName',\n field_type: {\n id: type.toString() || 'Text',\n type: type || 'Text',\n complex_fields: typeComplexFields || []\n },\n display_context: display_context || 'OPTIONAL',\n label: label || 'First name',\n show_summary_content_option,\n retain_hidden_value: retain_hidden_value || false,\n hidden: hidden || false\n }) as CaseField;\n};\n\nexport const createWizardPage = (id: string,\n label: string,\n order: number,\n wizardPageFields: WizardPageField[] = [],\n caseFields: CaseField[] = [],\n showCondition: string,\n parsedShowCondition: ShowCondition = null): WizardPage => {\n const wizardPage = new WizardPage();\n wizardPage.id = id;\n wizardPage.label = label;\n wizardPage.order = order;\n wizardPage.wizard_page_fields = wizardPageFields;\n wizardPage.case_fields = caseFields;\n wizardPage.show_condition = showCondition;\n wizardPage.parsedShowCondition = parsedShowCondition;\n return wizardPage;\n};\n\nexport const createWizardPageField = (id: string,\n order: number,\n pageColumnNumber: number,\n complexFieldOverrides: ComplexFieldOverride[] = []): WizardPageField => {\n const wizardPageField = new WizardPageField();\n wizardPageField.case_field_id = id;\n wizardPageField.order = order;\n wizardPageField.page_column_no = pageColumnNumber;\n wizardPageField.complex_field_overrides = complexFieldOverrides;\n return wizardPageField;\n};\n\nexport const createComplexFieldOverride = (id: string,\n order: number,\n displayContext: string,\n label: string,\n hint: string,\n showCondition: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = displayContext;\n complexFieldOverride.label = label;\n complexFieldOverride.hint_text = hint;\n complexFieldOverride.show_condition = showCondition;\n return complexFieldOverride;\n};\n\nexport const createHiddenComplexFieldOverride = (id: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = 'HIDDEN';\n return complexFieldOverride;\n};\n\nexport const createCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined,\n show_condition = undefined,\n ACLs: AccessControlList[] = undefined,\n hidden?: boolean): CaseField => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withLabel(label || 'First name')\n .withHintText(hint || 'First name hint text')\n .withShowSummaryContentOption(0)\n .withOrder(order)\n .withShowCondition(show_condition || undefined)\n .withACLs(ACLs)\n .withHidden(hidden || false)\n .build();\n};\n\nexport const newCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined): CaseFieldBuilder => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withHintText(hint || 'First name hint text')\n .withLabel(label || 'First name')\n .withOrder(order)\n .withShowSummaryContentOption(0);\n};\n\nexport const createFieldType = (typeId: string,\n type: FieldTypeEnum,\n complex_fields: CaseField[] = [],\n collection_field_type: FieldType = undefined): FieldType => {\n return {\n id: typeId || 'Text',\n type: type || 'Text',\n complex_fields: complex_fields || [],\n collection_field_type: collection_field_type || undefined\n };\n};\n\nexport const createFixedListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'FixedList-' + typeId,\n type: 'FixedList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createMultiSelectListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'MultiSelectList-' + typeId,\n type: 'MultiSelectList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createACL = (role: string, create: boolean, read: boolean, update: boolean, _delete: boolean): AccessControlList => {\n return ({\n role: role || 'roleX',\n create,\n read,\n update,\n delete: _delete\n }) as AccessControlList;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\n\n@Pipe({\n name: 'ccdCaseReference'\n})\nexport class CaseReferencePipe implements PipeTransform {\n\n public transform(caseReference: string): string {\n if (!caseReference) {\n return '';\n }\n if (Draft.isDraft(caseReference)) {\n return DRAFT_PREFIX;\n } else {\n const regex = /(?:\\/)?(\\d{4})(\\d{4})(\\d{4})(\\d{4})/g;\n const result = String(caseReference).replace(regex, (match,\n g1, g2, g3, g4) => {\n const isLink = match[0] === '/';\n if (isLink) {\n return match;\n }\n\n return [g1, g2, g3, g4].join('-');\n });\n\n return result;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PlaceholderService } from '../../directives/substitutor/services/placeholder.service';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdCaseTitle'\n})\nexport class CcdCaseTitlePipe implements PipeTransform {\n constructor(private readonly placeholderService: PlaceholderService, private readonly fieldsUtils: FieldsUtils) {\n }\n public transform(caseTitle: string, caseFields: CaseField[], values: any): any {\n const caseFieldValues = this.getReadOnlyAndFormFields(values, caseFields);\n const result = this.placeholderService.resolvePlaceholders(caseFieldValues, caseTitle);\n return result;\n }\n\n private getReadOnlyAndFormFields(formGroup, caseFields: CaseField[]): any {\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(caseFields, formGroup.getRawValue());\n }\n\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SortOrder } from '../../../components/palette/complex/sort-order';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SortParameters } from '../../../domain/search/sorting/sort-parameters';\n\n@Pipe({\n name: 'ccdSortSearchResult'\n})\nexport class SortSearchResultPipe implements PipeTransform {\n\n public transform(searchResults: SearchResultViewItem[], sortParameters: SortParameters) {\n\n if (isUndefined(searchResults) || isUndefined(sortParameters)) {\n return searchResults;\n }\n return searchResults.sort(\n (a, b) => {\n return sortParameters.comparator.compare(a, b)\n * (sortParameters.sortOrder === SortOrder.DESCENDING ? 1 : -1);\n }\n );\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CaseReferencePipe } from './case-reference';\nimport { CcdCaseTitlePipe } from './case-title';\nimport { SortSearchResultPipe } from './search-result/sorting/sort-search-result.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n CaseReferencePipe,\n SortSearchResultPipe,\n CcdCaseTitlePipe\n ],\n exports: [\n CaseReferencePipe,\n SortSearchResultPipe,\n CcdCaseTitlePipe\n ]\n})\nexport class PipesModule {}\n","export interface AccessManagementBasicViewMockModel {\n active?: boolean;\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n accessProcess?: string;\n}\n\nexport interface AccessManagementRequestReviewMockModel {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n}\n\nexport abstract class AbstractAppConfig {\n public abstract load(): Promise<void>;\n public abstract getLoginUrl(): string;\n public abstract getApiUrl(): string;\n public abstract getCaseDataUrl(): string;\n public abstract getDocumentManagementUrl(): string;\n public getDocumentManagementUrlV2(): string {\n return undefined;\n }\n public getDocumentSecureMode(): boolean {\n return undefined;\n }\n public abstract getRemoteDocumentManagementUrl(): string;\n public abstract getHrsUrl(): string;\n public abstract getRemoteHrsUrl(): string;\n public abstract getAnnotationApiUrl(): string;\n public abstract getPostcodeLookupUrl(): string;\n public abstract getOAuth2ClientId(): string;\n public abstract getPaymentsUrl(): string;\n public abstract getPayBulkScanBaseUrl(): string;\n public abstract getCreateOrUpdateDraftsUrl(ctid: string): string;\n public abstract getViewOrDeleteDraftsUrl(did: string): string;\n public abstract getActivityUrl(): string;\n public abstract getActivityNexPollRequestMs(): number;\n public abstract getActivityRetry(): number;\n public abstract getActivityBatchCollectionDelayMs(): number;\n public abstract getActivityMaxRequestPerBatch(): number;\n public abstract getCaseHistoryUrl(caseId: string, eventId: string): string;\n public abstract getPrintServiceUrl(): string;\n /**\n * Dummy version replacing deprecated `getRemotePrintServiceUrl()`, to be removed in next major release\n * @deprecated\n * @returns `undefined`\n */\n public getRemotePrintServiceUrl(): string {\n return undefined;\n }\n public abstract getPaginationPageSize(): number;\n public abstract getBannersUrl(): string;\n public abstract getPrdUrl(): string;\n public abstract getCacheTimeOut(): number;\n public abstract getWorkAllocationApiUrl(): string;\n public getUserInfoApiUrl(): string {\n return undefined;\n }\n public getAccessManagementMode(): boolean {\n return undefined;\n }\n public getAccessManagementBasicViewMock(): AccessManagementBasicViewMockModel {\n return undefined;\n }\n public getAccessManagementRequestReviewMockModel(): AccessManagementRequestReviewMockModel {\n return undefined;\n }\n public getLocationRefApiUrl(): string {\n return undefined;\n }\n public getCamRoleAssignmentsApiUrl(): string {\n return undefined;\n }\n public abstract getRefundsUrl(): string;\n public abstract getPaymentReturnUrl(): string;\n}\n\nexport class CaseEditorConfig {\n public api_url: string;\n public case_data_url: string;\n public document_management_url: string;\n public document_management_url_v2: string;\n public hrs_url: string;\n public document_management_secure_enabled: boolean;\n public login_url: string;\n public oauth2_client_id: string;\n public postcode_lookup_url: string;\n public remote_document_management_url: string;\n public remote_hrs_url: string;\n public annotation_api_url: string;\n public payments_url: string;\n public pay_bulk_scan_url: string;\n public activity_batch_collection_delay_ms: number;\n public activity_next_poll_request_ms: number;\n public activity_retry: number;\n public activity_url: string;\n public activity_max_request_per_batch: number;\n public print_service_url: string;\n /**\n * remote_print_service_url marked as optional since deprecation, ahead of removal in next major release\n * @deprecated\n */\n public remote_print_service_url?: string;\n public pagination_page_size: number;\n public prd_url: string;\n public cache_time_out: number;\n public work_allocation_api_url: string;\n public user_info_api_url: string;\n public access_management_mode?: boolean;\n public access_management_basic_view_mock?: {\n active?: boolean,\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n },\n accessProcess?: string\n };\n public access_management_request_review_mock?: {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n };\n public location_ref_api_url?: string;\n public cam_role_assignments_api_url?: string;\n public refunds_url: string;\n public payment_return_url: string;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { AbstractAppConfig } from '../../../app.config';\n\n/**\n * `Oauth2Service` and `AuthService` cannot be merged as it creates a cyclic dependency on `AuthService` through `HttpErrorService`.\n */\n@Injectable()\nexport class AuthService {\n\n private static readonly PATH_OAUTH2_REDIRECT = '/oauth2redirect';\n\n constructor(private readonly appConfig: AbstractAppConfig,\n @Inject(DOCUMENT) private readonly document: any) {}\n\n public signIn(): void {\n const loginUrl = this.appConfig.getLoginUrl();\n const clientId = this.appConfig.getOAuth2ClientId();\n const redirectUri = encodeURIComponent(this.redirectUri());\n\n this.document.location.href = `${loginUrl}?response_type=code&client_id=${clientId}&redirect_uri=${redirectUri}`;\n }\n\n public redirectUri(): string {\n return this.document.location.origin + AuthService.PATH_OAUTH2_REDIRECT;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { AuthService } from '../auth/auth.service';\n\n\n@Injectable()\nexport class HttpErrorService {\n\n constructor(private readonly authService: AuthService) {}\n\n private static readonly CONTENT_TYPE = 'Content-Type';\n private static readonly JSON = 'json';\n\n private error: HttpError;\n public static convertToHttpError(error: HttpErrorResponse | any): HttpError {\n if (error instanceof HttpError) {\n return error;\n }\n let httpError = new HttpError();\n if (error instanceof HttpErrorResponse) {\n if (error.headers\n && error.headers.get(HttpErrorService.CONTENT_TYPE)\n && error.headers.get(HttpErrorService.CONTENT_TYPE).indexOf(HttpErrorService.JSON) !== -1) {\n try {\n httpError = HttpError.from(error);\n } catch (e) {\n console.error(e, e.message);\n }\n }\n if (!httpError.status) {\n httpError.status = error.status;\n }\n } else if (error) {\n if (error.message) {\n httpError.message = error.message;\n }\n if (error.status) {\n httpError.status = error.status;\n }\n }\n return httpError;\n }\n\n public setError(error: HttpError) {\n this.error = error;\n }\n\n public removeError(): HttpError {\n const error = this.error;\n this.error = null;\n return error;\n }\n\n public handle(error: HttpErrorResponse | any, redirectIfNotAuthorised = true): Observable<never> {\n const httpError: HttpError = HttpErrorService.convertToHttpError(error);\n if (redirectIfNotAuthorised && (httpError.status === 401 || httpError.status === 403)) {\n this.authService.signIn();\n }\n return throwError(httpError);\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService } from './http-error.service';\n\n@Injectable()\nexport class HttpService {\n\n private static readonly HEADER_ACCEPT = 'Accept';\n private static readonly HEADER_CONTENT_TYPE = 'Content-Type';\n\n constructor(\n private readonly httpclient: HttpClient,\n private readonly httpErrorService: HttpErrorService\n ) {}\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n\n public get(\n url: string,\n options?: OptionsType,\n redirectIfNotAuthorised = true,\n errorHandler?: (error: HttpErrorResponse) => HttpError): Observable<any> {\n return this.httpclient\n .get(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n let error: HttpErrorResponse | HttpError = res;\n if (typeof errorHandler === 'function') {\n error = errorHandler(res);\n }\n return this.httpErrorService.handle(error, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public post(url: string, body: any, options?: OptionsType, redirectIfNotAuthorised = true): Observable<any> {\n return this.httpclient\n .post(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public put(url: string, body: any, options?: OptionsType): Observable<any> {\n return this.httpclient\n .put(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public delete(url: string, options?: OptionsType): Observable<any> {\n return this.httpclient\n .delete(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n public setDefaultValue(options?: OptionsType): OptionsType {\n options = options || {observe: 'body'};\n options.withCredentials = true;\n\n if (!options.headers) {\n options.headers = new HttpHeaders()\n .set(HttpService.HEADER_ACCEPT, 'application/json')\n .set(HttpService.HEADER_CONTENT_TYPE, 'application/json');\n }\n return options;\n }\n}\n\nexport interface OptionsType {\n headers?: HttpHeaders;\n observe: 'body';\n params?: HttpParams | { [param: string]: string | string[]; };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class SessionStorageService {\n\n /**\n * Get an item from the session storage.\n */\n public getItem(key: string): string {\n return sessionStorage.getItem(key);\n }\n\n /**\n * Set an item in the session storage.\n */\n public setItem(key: string, value: string): void {\n sessionStorage.setItem(key, value);\n }\n\n /**\n * Remove an item from the session storage.\n */\n public removeItem(key: string): void {\n sessionStorage.removeItem(key);\n }\n\n /**\n * Clear all the items held in session storage.\n */\n public clear(): void {\n sessionStorage.clear();\n }\n}\n","import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService, HttpService, OptionsType } from '../http';\nimport { SessionStorageService } from '../session';\n\n// @dynamic\n@Injectable()\nexport class ActivityService {\n public static get ACTIVITY_VIEW() { return 'view'; }\n public static get ACTIVITY_EDIT() { return 'edit'; }\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly sessionStorageService: SessionStorageService\n ) {}\n\n public get isEnabled(): boolean {\n return this.activityUrl() && this.userAuthorised;\n }\n public static readonly DUMMY_CASE_REFERENCE = '0';\n\n private userAuthorised: boolean = undefined;\n\n private static handleHttpError(response: HttpErrorResponse): HttpError {\n const error: HttpError = HttpErrorService.convertToHttpError(response);\n if (response.status && response.status !== error.status) {\n error.status = response.status;\n }\n return error;\n }\n\n public getOptions(): OptionsType {\n const userDetails = JSON.parse(this.sessionStorageService.getItem('userDetails'));\n const headers = new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', userDetails.token);\n const options: OptionsType = {\n headers,\n withCredentials: true,\n observe: 'body',\n };\n return options;\n }\n\n public getActivities(...caseId: string[]): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId.join(',')}/activity`;\n return this.http\n .get(url, options, false, ActivityService.handleHttpError)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public postActivity(caseId: string, activity: string): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId}/activity`;\n const body = { activity };\n return this.http\n .post(url, body, options, false)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public verifyUserIsAuthorized(): void {\n if (this.sessionStorageService.getItem('userDetails') === undefined) {\n return;\n }\n if (this.activityUrl() && this.userAuthorised === undefined) {\n this.getActivities(ActivityService.DUMMY_CASE_REFERENCE).subscribe(\n () => this.userAuthorised = true,\n error => {\n if ([401, 403].indexOf(error.status) > -1) {\n this.userAuthorised = false;\n } else {\n this.userAuthorised = true;\n }\n }\n );\n }\n }\n\n private activityUrl(): string {\n return this.appConfig.getActivityUrl();\n }\n\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport polling, { IOptions } from 'rx-polling';\nimport { EMPTY, Observable, Subject, Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { ActivityService } from './activity.service';\n\n// @dynamic\n@Injectable()\nexport class ActivityPollingService {\n\n private readonly pendingRequests = new Map<string, Subject<Activity>>();\n private currentTimeoutHandle: any;\n private pollActivitiesSubscription: Subscription;\n private readonly pollConfig: IOptions;\n private readonly batchCollectionDelayMs: number;\n private readonly maxRequestsPerBatch: number;\n\n constructor(private readonly activityService: ActivityService, private readonly ngZone: NgZone, private readonly config: AbstractAppConfig) {\n this.pollConfig = {\n interval: config.getActivityNexPollRequestMs(),\n attempts: config.getActivityRetry(),\n backgroundPolling: true\n };\n this.batchCollectionDelayMs = config.getActivityBatchCollectionDelayMs();\n this.maxRequestsPerBatch = config.getActivityMaxRequestPerBatch();\n }\n\n public get isEnabled(): boolean {\n return this.activityService.isEnabled;\n }\n\n public subscribeToActivity(caseId: string, done: (activity: Activity) => void): Subject<Activity> {\n if (!this.isEnabled) {\n return new Subject<Activity>();\n }\n\n let subject = this.pendingRequests.get(caseId);\n if (subject) {\n subject.subscribe(done);\n } else {\n subject = new Subject<Activity>();\n subject.subscribe(done);\n this.pendingRequests.set(caseId, subject);\n }\n if (this.pendingRequests.size === 1) {\n this.ngZone.runOutsideAngular(() => {\n this.currentTimeoutHandle = setTimeout(\n () => this.ngZone.run(() => {\n // console.log('timeout: flushing requests')\n this.flushRequests();\n }),\n this.batchCollectionDelayMs);\n });\n }\n\n if (this.pendingRequests.size >= this.maxRequestsPerBatch) {\n // console.log('max pending hit: flushing requests');\n this.flushRequests();\n }\n return subject;\n }\n\n public stopPolling() {\n if (this.pollActivitiesSubscription) {\n this.pollActivitiesSubscription.unsubscribe();\n }\n }\n\n public flushRequests(): void {\n if (this.currentTimeoutHandle) {\n clearTimeout(this.currentTimeoutHandle);\n this.currentTimeoutHandle = undefined;\n }\n\n const requests = new Map(this.pendingRequests);\n this.pendingRequests.clear();\n this.performBatchRequest(requests);\n }\n\n public pollActivities(...caseIds: string[]): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n return polling(this.activityService.getActivities(...caseIds), this.pollConfig);\n }\n\n public postViewActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_VIEW);\n }\n\n public postEditActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_EDIT);\n }\n\n protected performBatchRequest(requests: Map<string, Subject<Activity>>): void {\n const caseIds = Array.from(requests.keys()).join();\n // console.log('issuing batch request for cases: ' + caseIds);\n this.ngZone.runOutsideAngular( () => {\n // run polling outside angular zone so it does not trigger change detection\n this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe(\n // process activity inside zone so it triggers change detection for activity.component.ts\n (activities: Activity[]) => this.ngZone.run( () => {\n activities.forEach((activity) => {\n // console.log('pushing activity: ' + activity.caseId);\n requests.get(activity.caseId).next(activity);\n });\n },\n (err) => {\n console.log('error: ' + err);\n Array.from(requests.values()).forEach((subject) => subject.error(err));\n }\n )\n );\n });\n }\n\n private postActivity(caseId: string, activityType: string): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n const pollingConfig = {\n ...this.pollConfig,\n interval: 5000 // inline with CCD Backend\n };\n\n return polling(this.activityService.postActivity(caseId, activityType), pollingConfig);\n }\n}\n","import { AddressModel } from '../../domain/addresses/address.model';\nimport { AddressesService } from './addresses.service';\n\n/**\n * Moving all this logic here into Address Parser class, so that it\n * will be easier for us when we move this parsing logic to into\n * `Shim` java service.\n */\n export class AddressParser {\n public parse(address: any) {\n const classification = `${address.CLASSIFICATION_CODE}`;\n const addressModel = new AddressModel();\n addressModel.AddressLine1 = this.parseAddressLine1(classification, address);\n addressModel.AddressLine2 = this.parseAddressLine2(classification, address);\n addressModel.AddressLine3 = this.parseAddressLine3(classification, address);\n addressModel.PostCode = address.POSTCODE;\n addressModel.PostTown = address.POST_TOWN;\n addressModel.Country = AddressesService.UK;\n return addressModel;\n }\n\n private parseAddressLine1(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.ORGANISATION_NAME} ${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n } else {\n addressLine =\n `${address.ORGANISATION_NAME}${this.prefixWithCommaIfPresent(address.BUILDING_NAME)}` +\n `${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine2(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine = `${address.BUILDING_NAME} `;\n } else {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine3(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n } else {\n addressLine =\n `${address.DEPENDENT_LOCALITY} ${address.DOUBLE_DEPENDENT_LOCALITY} ${address.DEPENDENT_THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private removeNonAddressValues(line: string) {\n line = line.replace(' null', ' ').replace('null ', ' ');\n line = this.removeUndefinedString(line);\n line = this.removeInitialComma(line);\n line = this.removeEmptySpaces(line);\n return line;\n }\n\n private removeUndefinedString(value: string) {\n return value.replace(new RegExp('undefined', 'gi'), '');\n }\n\n private removeEmptySpaces(value: string) {\n return value.replace(new RegExp(' +', 'gi'), ' ').trim();\n }\n\n private removeInitialComma(value: string) {\n return value.replace(new RegExp('^,', 'gi'), '');\n }\n\n private prefixWithCommaIfPresent(value: string) {\n return value ? ', ' + value : value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { AddressModel } from '../../domain/addresses';\nimport { HttpService } from '../http';\nimport { AddressParser } from './address-parser';\n\n@Injectable()\nexport class AddressesService {\n\n public static readonly DPA = 'DPA';\n\n public static readonly UK = 'United Kingdom';\n\n public static readonly RD06 = 'RD06';\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getAddressesForPostcode(postcode: string): Observable<AddressModel[]> {\n return this.http\n .get(this.appConfig.getPostcodeLookupUrl()\n .replace('${postcode}', postcode), undefined, false)\n .pipe(\n map(res => res.results))\n .pipe(\n map(output => output.map(addresses =>\n this.format(new AddressParser().parse(addresses[AddressesService.DPA]))\n ))\n );\n }\n\n private format(addressModel: AddressModel) {\n return this.formatAddressLines(this.shiftAddressLinesUp(addressModel));\n }\n\n private formatAddressLines(addressModel: AddressModel) {\n ['AddressLine1', 'AddressLine2', 'AddressLine3', 'PostTown'].forEach(value => {\n addressModel[value] = this.toCapitalCase(addressModel[value]);\n });\n return addressModel;\n }\n\n private shiftAddressLinesUp(addressModel: AddressModel) {\n if (addressModel.AddressLine2 === '') {\n addressModel.AddressLine2 = addressModel.AddressLine3;\n addressModel.AddressLine3 = '';\n }\n if (addressModel.AddressLine1 === '') {\n addressModel.AddressLine1 = addressModel.AddressLine2;\n addressModel.AddressLine2 = '';\n }\n return addressModel;\n }\n\n private toCapitalCase(sentence: string) {\n sentence = sentence.toLowerCase();\n sentence.split(' ').forEach((value, index) => {\n sentence = sentence.replace(value, value.charAt(0).toUpperCase() + value.substr(1));\n }\n );\n return sentence;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { ConnectableObservable, Observable, Observer } from 'rxjs';\nimport { publish, refCount } from 'rxjs/operators';\nimport { AlertLevel } from '../../domain/alert/alert-level.model';\nimport { Alert } from '../../domain/alert/alert.model';\n\n@Injectable()\nexport class AlertService {\n // the preserved messages\n public preservedError = '';\n public preservedWarning = '';\n public preservedSuccess = '';\n\n // TODO: Remove\n public message: string;\n public level: AlertLevel;\n\n public successes: ConnectableObservable<Alert>;\n public errors: ConnectableObservable<Alert>;\n public warnings: ConnectableObservable<Alert>;\n // TODO: Remove\n public alerts: ConnectableObservable<Alert>;\n\n private successObserver: Observer<Alert>;\n private errorObserver: Observer<Alert>;\n private warningObserver: Observer<Alert>;\n // TODO: Remove\n private alertObserver: Observer<Alert>;\n\n private preserveAlerts = false;\n\n constructor(private readonly router: Router) {\n\n this.successes = Observable\n .create(observer => this.successObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.successes.subscribe();\n\n this.errors = Observable\n .create(observer => this.errorObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.errors.subscribe();\n\n this.warnings = Observable\n .create(observer => this.warningObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.warnings.subscribe();\n\n // TODO: Remove\n this.alerts = Observable\n .create(observer => this.alertObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.alerts.subscribe();\n\n this.router\n .events\n .subscribe(event => {\n if (event instanceof NavigationStart) {\n // if there is no longer a preserve alerts setting for the page then clear all observers and preserved messages\n if (!this.preserveAlerts) {\n this.clear();\n }\n // if not, then set the preserving of alerts to false so rendering to a new page\n this.preserveAlerts = false;\n }\n });\n }\n\n public clear(): void {\n this.successObserver.next(null);\n this.errorObserver.next(null);\n this.warningObserver.next(null);\n this.preservedError = '';\n this.preservedWarning = '';\n this.preservedSuccess = '';\n\n // EUI-3381.\n this.alertObserver.next(null);\n this.message = '';\n }\n\n public error(message: string): void {\n this.preservedError = this.preserveMessages(message);\n const alert: Alert = { level: 'error', message };\n this.errorObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public warning(message: string): void {\n this.preservedWarning = this.preserveMessages(message);\n const alert: Alert = { level: 'warning', message };\n this.warningObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public success(message: string, preserve = false): void {\n this.preservedSuccess = this.preserveMessages(message);\n this.preserveAlerts = preserve || this.preserveAlerts;\n const alert: Alert = { level: 'success', message };\n this.successObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public setPreserveAlerts(preserve: boolean, urlInfo?: string[]) {\n // if there is no url setting then just preserve the messages\n if (!urlInfo) {\n this.preserveAlerts = preserve;\n } else {\n // check if the url includes the sting given\n this.preserveAlerts = this.currentUrlIncludesInfo(preserve, urlInfo);\n }\n }\n\n public currentUrlIncludesInfo(preserve: boolean, urlInfo: string[]): boolean {\n // loop through the list of strings and check the router includes all of them\n for (const urlSnip of urlInfo) {\n if (!this.router.url.includes(urlSnip)) {\n // return the opposite boolean value if the router does not include one of the strings\n return !preserve;\n }\n }\n // return the boolean value if all strings are in the url\n return preserve;\n }\n\n public isPreserveAlerts(): boolean {\n return this.preserveAlerts;\n }\n\n public preserveMessages(message: string): string {\n // preserve the messages if set to preserve them\n if (this.isPreserveAlerts()) {\n return message;\n } else {\n return '';\n }\n }\n\n // TODO: Remove\n public push(msgObject) {\n this.message = msgObject.message;\n this.level = msgObject.level;\n\n this.alertObserver.next({\n level: this.level,\n message: this.message\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\n\n@Injectable()\nexport class CaseFieldService {\n\n public isOptional (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n public isReadOnly (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'READONLY';\n }\n\n public isMandatory (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'MANDATORY';\n }\n\n public isLabel (field: CaseField) {\n if (!field || !field.field_type) {\n return false;\n }\n return field.field_type.type === 'Label';\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { DocumentData } from '../../domain/document/document-data.model';\nimport { HttpService } from '../http';\n\n@Injectable()\nexport class DocumentManagementService {\n private static readonly PDF = 'pdf';\n private static readonly IMAGE = 'image';\n private static readonly WORD = 'word';\n private static readonly EXCEL = 'excel';\n private static readonly POWERPOINT = 'powerpoint';\n private static readonly TXT = 'txt';\n private static readonly RTF = 'rtf';\n\n // This delay has been added to give enough time to the user on the UI to see the info messages on the document upload\n // field for cases when uploads are very fast.\n private static readonly RESPONSE_DELAY = 1000;\n\n private static readonly imagesList: string[] = ['GIF', 'JPG', 'JPEG', 'PNG', 'gif', 'jpg', 'jpeg', 'png'];\n private static readonly wordList: string[] = ['DOC', 'DOCX', 'doc', 'docx'];\n private static readonly excelList: string[] = ['XLS', 'XLSX', 'xls', 'xlsx'];\n private static readonly powerpointList: string[] = ['PPT', 'PPTX', 'ppt', 'pptx'];\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public uploadFile(formData: FormData): Observable<DocumentData> {\n const url = this.getDocStoreUrl();\n // Do not set any headers, such as \"Accept\" or \"Content-Type\", with null values; this is not permitted with the\n // Angular HttpClient in @angular/common/http. Just create and pass a new HttpHeaders object. Angular will add the\n // correct headers and values automatically\n const headers = new HttpHeaders();\n return this.http\n .post(url, formData, {headers, observe: 'body'})\n .pipe(delay(DocumentManagementService.RESPONSE_DELAY));\n }\n\n public getMediaViewerInfo(documentFieldValue: any): string {\n const mediaViewerInfo = {\n document_binary_url: this.transformDocumentUrl(documentFieldValue.document_binary_url),\n document_filename: documentFieldValue.document_filename,\n content_type: this.getContentType(documentFieldValue),\n annotation_api_url: this.appConfig.getAnnotationApiUrl(),\n case_id: documentFieldValue.id,\n case_jurisdiction: documentFieldValue.jurisdiction\n };\n return JSON.stringify(mediaViewerInfo);\n }\n\n public getContentType(documentFieldValue: any): string {\n let fileExtension = '<unknown>';\n if (documentFieldValue.document_filename) {\n const position = documentFieldValue.document_filename.lastIndexOf('.');\n if (position === documentFieldValue.document_filename.length) {\n fileExtension = '';\n } else if (position >= 0) {\n fileExtension = documentFieldValue.document_filename.slice(position + 1);\n }\n }\n if (this.isImage(fileExtension)) {\n return DocumentManagementService.IMAGE;\n } else if (this.isWord(fileExtension)) {\n return DocumentManagementService.WORD;\n } else if (this.isExcel(fileExtension)) {\n return DocumentManagementService.EXCEL;\n } else if (this.isPowerpoint(fileExtension)) {\n return DocumentManagementService.POWERPOINT;\n } else if (fileExtension.toLowerCase() === 'txt') {\n return DocumentManagementService.TXT;\n } else if (fileExtension.toLowerCase() === 'rtf') {\n return DocumentManagementService.RTF;\n } else if (fileExtension.toLowerCase() === 'pdf') {\n return DocumentManagementService.PDF;\n } else {\n return fileExtension;\n }\n }\n\n public isImage(imageType: string): boolean {\n return DocumentManagementService.imagesList.find(e => e === imageType) !== undefined;\n }\n\n public isWord(wordType: string): boolean {\n return DocumentManagementService.wordList.find(e => e === wordType) !== undefined;\n }\n\n public isExcel(excelType: string): boolean {\n return DocumentManagementService.excelList.find(e => e === excelType) !== undefined;\n }\n\n public isPowerpoint(powerpointType: string): boolean {\n return DocumentManagementService.powerpointList.find(e => e === powerpointType) !== undefined;\n }\n\n private transformDocumentUrl(documentBinaryUrl: string): string {\n const remoteHrsPattern = new RegExp(this.appConfig.getRemoteHrsUrl());\n documentBinaryUrl = documentBinaryUrl.replace(remoteHrsPattern, this.appConfig.getHrsUrl());\n const remoteDocumentManagementPattern = new RegExp(this.appConfig.getRemoteDocumentManagementUrl());\n return documentBinaryUrl.replace(remoteDocumentManagementPattern, this.getDocStoreUrl());\n }\n\n private getDocStoreUrl(): string {\n return this.appConfig.getDocumentSecureMode() ? this.appConfig.getDocumentManagementUrlV2() : this.appConfig.getDocumentManagementUrl();\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { CaseEventData } from '../../domain/case-event-data.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\nimport { HttpErrorService, HttpService } from '../http';\n\n@Injectable()\nexport class DraftService {\n\n public static readonly V2_MEDIATYPE_DRAFT_CREATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-create.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_UPDATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-update.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_READ =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-read.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_DELETE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-delete.v2+json;charset=UTF-8';\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {}\n\n public createDraft(ctid: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_CREATE)\n .set('Content-Type', 'application/json');\n return this.http\n .post(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public updateDraft(ctid: string, draftId: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid) + draftId;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_UPDATE)\n .set('Content-Type', 'application/json');\n return this.http\n .put(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public getDraft(draftId: string): Observable<CaseView> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_READ)\n .set('Content-Type', 'application/json');\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public deleteDraft(draftId: string): Observable<{} | any> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_DELETE)\n .set('Content-Type', 'application/json');\n return this.http\n .delete(url, {headers, observe: 'body'}).pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public createOrUpdateDraft(caseTypeId: string, draftId: string, caseEventData: CaseEventData): Observable<Draft> {\n if (!draftId) {\n return this.createDraft(caseTypeId, caseEventData);\n } else {\n return this.updateDraft(caseTypeId, Draft.stripDraftId(draftId), caseEventData);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class ErrorNotifierService {\n public errorSource: Subject<any> = new Subject<any>();\n public error = this.errorSource.asObservable();\n\n public announceError(error: any) {\n this.errorSource.next(error);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class EventStatusService {\n public static readonly CALLBACK_STATUS_INCOMPLETE = 'INCOMPLETE_CALLBACK';\n public static readonly DELETE_DRAFT_STATUS_INCOMPLETE = 'INCOMPLETE_DELETE_DRAFT';\n public static readonly CALLBACK_STATUS_COMPLETE = 'CALLBACK_COMPLETED';\n public static readonly DELETE_DRAFT_STATUS_COMPLETE = 'DELETE_DRAFT_COMPLETED';\n\n public static isIncomplete (eventStatus: string) {\n if (!eventStatus) {\n return false;\n }\n return EventStatusService.CALLBACK_STATUS_INCOMPLETE === eventStatus\n || EventStatusService.DELETE_DRAFT_STATUS_INCOMPLETE === eventStatus;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { Wizard } from '../../components/case-editor/domain/wizard.model';\nimport { ShowCondition } from '../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldsUtils } from './fields.utils';\n\n// @dynamic\n@Injectable()\nexport class FieldsPurger {\n\n constructor(private readonly fieldsUtils: FieldsUtils) {}\n\n /**\n * Deletes a field value by setting the value of the corresponding {@link FormControl} to null (or an empty array\n * if the field type is `Collection`), except when the field type is `Complex` or `Document`. For `Complex` field\n * types, this recursive method is called until simple or \"base\" field types are reached. For `Document` field\n * types, its _sub-field_ `FormControl` values are set to null.\n *\n * @param formGroup The `FormGroup` instance containing the `FormControl` for the specified field\n * @param field The `CaseField` whose value is to be deleted in the backend\n * @param parentField Reference to the parent `CaseField`. Used for checking specifically where a Complex field and\n * its sub-fields have `retain_hidden_value` set to `true`, but the field's parent has it set to `false` or undefined\n */\n public deleteFieldValue(formGroup: FormGroup, field: CaseField, parentField?: CaseField): void {\n const fieldType: FieldTypeEnum = field.field_type.type;\n const fieldControl = formGroup.get(field.id);\n\n if (fieldControl) {\n switch (fieldType) {\n case 'Complex':\n /**\n * If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for:\n *\n * * Any sub-fields where retain_hidden_value is false/undefined, if the parent field has\n * retain_hidden_value = true;\n * * ALL sub-fields if the parent field has retain_hidden_value = true BUT its _own_ parent has\n * retain_hidden_value = false/undefined (thus overriding anything else);\n * * ALL sub-fields if the parent field has retain_hidden_value = false/undefined;\n * * Any Complex sub-fields *regardless of their retain_hidden_value* (in order to inspect the sub-fields\n * of a Complex type within another Complex type)\n */\n if (field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n (complexSubField.field_type.type !== 'Complex' &&\n (field.retain_hidden_value\n ? !complexSubField.retain_hidden_value || (parentField && !parentField.retain_hidden_value)\n : true))) {\n // The fieldControl is cast to a FormGroup because a Complex field type uses this as its underlying\n // implementation\n this.deleteFieldValue(fieldControl as FormGroup, complexSubField, field);\n }\n }\n }\n break;\n case 'Collection':\n // If it is a collection of Complex types, loop through each one; else fall through to be handled as a\n // collection of simple types (in the same way as MultiSelectList), unless it's a collection of Document\n // types, which requires different handling\n const collectionFieldType = field.field_type.collection_field_type;\n if (collectionFieldType.type === 'Complex' && collectionFieldType.complex_fields.length > 0) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControl.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of collectionFieldType.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value, passing in the parent FormGroup\n const parentFormGroup: FormGroup = (fieldControl as FormArray).at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }));\n }\n break;\n } else if (collectionFieldType.type === 'Document') {\n // Get the array of Document field values\n const documentFieldValues = fieldControl.value as any[];\n\n // For each Document field value, set all its property values to null (this is not accepted by the\n // back-end but will be handled by sanitiseObject() in FormValueService before sending - see below for\n // the single Document case)\n if (documentFieldValues) {\n documentFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Get the FormGroup containing the FormControl for the sub-field and set its value to null\n (fieldControl as FormArray).at(index).get(`value.${subFieldId}`).setValue(null);\n }));\n }\n break;\n }\n // Omitted \"break\" is intentional because a collection should be handled as per MultiSelectList if it is\n // not a collection of Complex types\n // tslint:disable-next-line: no-switch-case-fall-through\n case 'MultiSelectList':\n // Field control should be a FormArray, so map each of its values to null\n // NOTE: The FormArray cannot just be set to an empty array because Angular checks that all existing values\n // of a FormArray are present; setting the control's value to an empty array causes a runtime error\n fieldControl.setValue(fieldControl.value.map(() => null));\n break;\n case 'Document':\n // NOTE: The field control (a FormGroup in this case) cannot just be set to null because Angular checks that\n // all existing values of a FormGroup are present; setting the control's value to null causes a runtime error\n const documentFieldValue = fieldControl.value;\n for (const key in documentFieldValue) {\n if (fieldControl.get(key)) {\n // The back-end doesn't accept null as a valid value for any of the Document field type properties but\n // this is handled by sanitiseObject() in FormValueService, returning a null object for the entire\n // Document field, if any of its properties is null - which is accepted by the back-end\n fieldControl.get(key).setValue(null);\n }\n }\n break;\n // Note: the default case applies to DynamicList fields, too\n default:\n fieldControl.setValue(null);\n }\n }\n }\n\n public clearHiddenFields(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger, currentPageId: string): void {\n this.clearHiddenFieldForFieldShowCondition(currentPageId, form, wizard, eventTrigger);\n this.clearHiddenFieldForPageShowCondition(form, wizard, eventTrigger);\n }\n\n private clearHiddenFieldForPageShowCondition(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger): void {\n const currentEventState = this.fieldsUtils.getCurrentEventState(eventTrigger, form);\n wizard.pages.forEach(wp => {\n if (this.hasShowConditionPage(wp, currentEventState)) {\n const condition = new ShowCondition(wp.show_condition);\n if (this.isHidden(condition, currentEventState)) {\n this.resetPage(form, wp);\n }\n }\n });\n }\n\n private clearHiddenFieldForFieldShowCondition(currentPageId: string, form: FormGroup, wizard: Wizard,\n eventTrigger: CaseEventTrigger): void {\n const formFields = form.getRawValue();\n const currentPage: WizardPage = wizard.getPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(eventTrigger, form));\n currentPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(currentPage, wpf);\n if (this.hasShowConditionField(case_field, formFields)) {\n const condition = new ShowCondition(case_field.show_condition);\n if (this.isHidden(condition, formFields.data) && !(this.isReadonly(case_field))) {\n this.resetField(form, case_field);\n }\n }\n this.retainHiddenValueByFieldType(case_field, form);\n });\n }\n\n private retainHiddenValueByFieldType(field: CaseField, form: any): void {\n // so far only applies to the new field type OrganisationPolicy which needs to retain the default case role value\n // for other case fields there should be no side effects\n if (field && field.field_type && field.field_type.id === 'OrganisationPolicy') {\n // <bubble_wrap>\n // Doing some null checking to stop it from falling over.\n const data: FormGroup = form.get('data') as FormGroup;\n if (data) {\n const fieldGroup: FormGroup = data.controls[field.id] as FormGroup;\n if (fieldGroup) {\n const caseRoleFormControl: FormControl = fieldGroup.get('OrgPolicyCaseAssignedRole') as FormControl;\n if (caseRoleFormControl) {\n caseRoleFormControl.enable();\n }\n }\n }\n // </bubble_wrap>\n }\n }\n\n private isHidden(condition: ShowCondition, formFields: any): boolean {\n return !condition.match(formFields);\n }\n\n private findCaseFieldByWizardPageFieldId(currentPage: WizardPage, wizardPageField: WizardPageField): CaseField {\n return currentPage.case_fields.find(cf => cf.id === wizardPageField.case_field_id);\n }\n\n private hasShowConditionPage(wizardPage: WizardPage, formFields: any): boolean {\n return wizardPage.show_condition && formFields[this.getShowConditionKey(wizardPage.show_condition)];\n }\n\n private hasShowConditionField(case_field: CaseField, formFields: any): boolean {\n return case_field.show_condition && formFields.data[this.getShowConditionKey(case_field.show_condition)];\n }\n\n private getShowConditionKey(show_condition: string): string {\n // Need to allow for negated conditions, i.e. !=, as well as regular ones (=)\n // Also need to allow for conditions specified using the \"CONTAINS\" keyword\n return show_condition.split(/!=|=|CONTAINS/)[0];\n }\n\n private resetField(form: FormGroup, field: CaseField): void {\n /**\n * If the hidden field's value is to be retained, do nothing (except if it is a Complex type or collection of\n * Complex types). This is a change to the previous behaviour (which used to clear the field value but remove it\n * from submission as an update to the back-end). The new behaviour is to leave the field as is, so if the field\n * is hidden but then un-hidden before form submission, any previously entered value is retained.\n *\n * For Complex field types, an additional check of sub-fields is required. The same applies to a collection of\n * Complex types.\n */\n if (field.retain_hidden_value) {\n const fieldType: FieldTypeEnum = field.field_type.type;\n // If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for any sub-fields\n // where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their retain_hidden_value*\n // (in order to inspect the sub-fields of a Complex type within another Complex type)\n if (fieldType === 'Complex' && field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n !complexSubField.retain_hidden_value) {\n // Check for the existence of the parent FormGroup corresponding to the Complex field; if it exists, call\n // deleteFieldValue() to delete the sub-field\n const parentFormGroup = (form.get('data') as FormGroup).controls[field.id] as FormGroup;\n if (parentFormGroup) {\n this.deleteFieldValue(parentFormGroup, complexSubField);\n }\n }\n }\n } else if (fieldType === 'Collection' && field.field_type.collection_field_type.type === 'Complex' &&\n field.field_type.collection_field_type.complex_fields.length > 0) {\n // If the field is a collection of Complex types, loop through each one and call deleteFieldValue() for any\n // sub-fields where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their\n // retain_hidden_value* (in order to inspect the sub-fields of a Complex type within another Complex type)\n\n // Get the array of field controls corresponding to the Complex field values\n const fieldControls = (form.get('data') as FormGroup).controls[field.id] as FormArray;\n\n if (fieldControls) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControls.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of field.field_type.collection_field_type.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value if retain_hidden_value is false, OR if the sub-field type is\n // Complex and regardless of retain_hidden_value, passing in the parent FormGroup\n if (subCaseField &&\n ((subCaseField.field_type.type === 'Complex' && subCaseField.field_type.complex_fields.length > 0) ||\n !subCaseField.retain_hidden_value)) {\n const parentFormGroup: FormGroup = fieldControls.at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }\n }));\n }\n }\n }\n } else {\n // Delete the field value\n this.deleteFieldValue(form.get('data') as FormGroup, field);\n }\n }\n\n private resetPage(form: FormGroup, wizardPage: WizardPage): void {\n wizardPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(wizardPage, wpf);\n this.resetField(form, case_field);\n });\n }\n\n private getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n private isObject(elem: any): boolean {\n return this.getType(elem) === 'Object';\n }\n\n // TODO: call isReadOnly on CaseFields once we make it available\n private isReadonly(case_field: CaseField): boolean {\n return case_field.display_context.toUpperCase() === 'READONLY';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\n@Injectable()\nexport class FormErrorService {\n\n public mapFieldErrors(errors: { id: string; message: string }[], form: FormGroup, errorKey: string): void {\n\n errors.forEach(error => {\n const formControl = this.getFormControl(form, error.id);\n\n if (formControl) {\n formControl.setErrors({\n [errorKey]: error.message\n });\n }\n });\n }\n\n private getFormControl(form: FormGroup, fieldId: string): FormControl {\n const fields = fieldId.split('.');\n\n let group: FormGroup = form;\n let inArray = false;\n let control: FormControl;\n fields.every((field, index) => {\n if (index === fields.length - 1) {\n control = group.controls[field] as FormControl;\n } else {\n group = group.controls[field] as FormGroup;\n\n if (inArray && group.controls['value']) {\n group = group.controls['value'] as FormGroup;\n }\n\n if (group && group.constructor && FormArray.name === group.constructor.name) {\n inArray = true;\n } else {\n inArray = false;\n }\n }\n return !!group;\n });\n\n return control;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\n\n@Injectable()\nexport class JurisdictionService {\n\n public readonly selectedJurisdictionSource = new Subject<Jurisdiction>();\n\n public selectedJurisdiction = this.selectedJurisdictionSource.asObservable();\n\n public announceSelectedJurisdiction(jurisdiction: Jurisdiction) {\n this.selectedJurisdictionSource.next(jurisdiction);\n }\n\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Banner } from '../../domain/definition/banner.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class BannersService {\n public static readonly V2_MEDIATYPE_BANNERS = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-banners.v2+json;charset=UTF-8';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getBanners(jurisdictionReferences: string[]): Observable<Banner[]> {\n const url = this.appConfig.getBannersUrl();\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', BannersService.V2_MEDIATYPE_BANNERS)\n .set('Content-Type', 'application/json');\n let params = new HttpParams();\n jurisdictionReferences.forEach(reference => params = params.append('ids', reference));\n return this.httpService\n .get(url, {params, headers, observe: 'body'})\n .pipe(\n map(body => body.banners)\n );\n }\n}\n","export enum NavigationOrigin {\n DRAFT_DELETED,\n ERROR_DELETING_DRAFT,\n DRAFT_RESUMED,\n EVENT_TRIGGERED,\n NO_READ_ACCESS_REDIRECTION\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class NavigationNotifierService {\n public navigationSource: BehaviorSubject<any> = new BehaviorSubject<any>({});\n public navigation = this.navigationSource.asObservable();\n\n public announceNavigation(origin: any) {\n this.navigationSource.next(origin);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Orderable } from '../../domain/order/orderable.model';\n\n// @dynamic\n@Injectable()\nexport class OrderService {\n\n /**\n * @deprecated Use `sort` function instead or `compareAsc`\n */\n public sortAsc: (a:Orderable, b:Orderable)=> number = OrderService.DEFAULT_COMPARE_FUNCTION;\n private static readonly DEFAULT_COMPARE_FUNCTION = (a: Orderable, b: Orderable) => {\n const aOrdered = a.order === 0 || a.order;\n const bOrdered = b.order === 0 || b.order;\n\n if (!aOrdered) {\n return !bOrdered ? 0 : 1;\n }\n\n if (!bOrdered) {\n return -1;\n }\n\n return a.order - b.order;\n }\n\n /**\n * Clone and sort array. Ascending order used by default.\n *\n * @param array Array to sort\n * @returns Orderable[] Sorted clone array.\n */\n public sort<T extends Orderable>(array: T[], sortingFunction = this.sortAsc): T[] {\n return array\n .slice()\n .sort(sortingFunction);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Profile } from '../../domain/profile/profile.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class ProfileService {\n\n public static readonly V2_MEDIATYPE_USER_PROFILE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-user-profile.v2+json;charset=UTF-8';\n private static readonly URL = '/internal/profile';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public get(): Observable<Profile> {\n const url = this.appConfig.getCaseDataUrl() + ProfileService.URL;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', ProfileService.V2_MEDIATYPE_USER_PROFILE)\n .set('Content-Type', 'application/json');\n\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map((p: object) => plainToClass(Profile, p))\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Profile } from '../../domain/profile/profile.model';\n\n@Injectable()\nexport class ProfileNotifier {\n public readonly profileSource: BehaviorSubject<Profile> = new BehaviorSubject<Profile>(new Profile());\n public profile = this.profileSource.asObservable();\n\n public announceProfile(profile: Profile) {\n this.profileSource.next(profile);\n }\n\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { OptionsType } from '..';\n\n@Injectable()\nexport class RequestOptionsBuilder {\n\n public static readonly FIELD_PREFIX = 'case.';\n\n /**\n * Assess the value to see if it should be included in the request options.\n * If it's null or an \"empty\" string, it shouldn't be.\n *\n * @param value The value to be assessed.\n */\n private static includeParam(value: any): boolean {\n if (value) {\n if (typeof(value) === 'string') {\n return value.trim().length > 0;\n }\n return true;\n }\n return false;\n }\n\n public buildOptions(metaCriteria: object, caseCriteria: object, view?: SearchView): OptionsType {\n // TODO: This should probably be the now built-in URLSearchParams but it\n // requires a bigger refactor and there are bigger fish to fry right now.\n let params = new HttpParams();\n\n if (view) {\n params = params.set('view', view);\n }\n\n if (metaCriteria) {\n for (const criterion of Object.keys(metaCriteria)) {\n // EUI-3490. Make sure the parameter should be included for adding it.\n // This was already handled by the old URLSearchParams mechanism.\n if (RequestOptionsBuilder.includeParam(metaCriteria[criterion])) {\n params = params.set(criterion, metaCriteria[criterion]);\n }\n }\n }\n\n if (caseCriteria) {\n for (const criterion of Object.keys(caseCriteria)) {\n if (RequestOptionsBuilder.includeParam(caseCriteria[criterion])) {\n const key = RequestOptionsBuilder.FIELD_PREFIX + criterion;\n const value = caseCriteria[criterion].trim ? caseCriteria[criterion].trim() : caseCriteria[criterion];\n params = params.set(key, value.replace(/’/i, `'`));\n }\n }\n }\n\n const options: OptionsType = { params, observe: 'body'};\n return options;\n }\n\n}\n\nexport type SearchView = 'SEARCH' | 'WORKBASKET';\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport abstract class HasLoadingState {\n public get isLoading(): Observable<boolean> {\n return;\n }\n}\n@Injectable()\nexport class LoadingService implements HasLoadingState {\n private readonly registered = new Map<string, string>();\n private readonly loading = new BehaviorSubject<boolean>(false);\n\n public get isLoading(): Observable<boolean> {\n return this.loading.pipe(distinctUntilChanged());\n }\n\n public register(): string {\n const token = this.generateToken();\n this.registered.set(token, token);\n this.loading.next(true);\n return token;\n }\n\n public unregister(token: string): void {\n this.registered.delete(token);\n this.loading.next(this.registered.size > 0);\n }\n\n private generateToken(): string {\n const timestamp = window.performance.now();\n return 'toolkit-loading-' + timestamp; // format: [source-library]-[unique incrementing number]\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { SearchInput } from '../../components/search-filters';\nimport { SearchResultView } from '../../domain/search/search-result-view.model';\nimport { HttpService, OptionsType } from '../http/http.service';\nimport { LoadingService } from '../loading/loading.service';\nimport { RequestOptionsBuilder, SearchView } from '../request/request.options.builder';\n\n@Injectable()\nexport class SearchService {\n public static readonly V2_MEDIATYPE_SEARCH_INPUTS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-search-input-details.v2+json;charset=UTF-8';\n public static readonly VIEW_SEARCH = 'SEARCH';\n public static readonly VIEW_WORKBASKET = 'WORKBASKET';\n public static readonly FIELD_PREFIX = 'case.';\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly appConfig: AbstractAppConfig,\n private readonly httpService: HttpService,\n private readonly requestOptionsBuilder: RequestOptionsBuilder,\n private readonly loadingService: LoadingService) { }\n\n public search(jurisdictionId: string, caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView): Observable<SearchResultView> {\n const url = this.appConfig.getApiUrl() + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types/${caseTypeId}`\n + `/cases`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const loadingToken = this.loadingService.register();\n return this.httpService\n .get(url, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public searchCases(caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView, sort?: {column: string, order: number}): Observable<{}> {\n const url = this.appConfig.getCaseDataUrl() + `/internal/searchCases?ctid=${caseTypeId}&use_case=${view}`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const body: {} = {\n sort,\n size: this.appConfig.getPaginationPageSize()\n };\n const loadingToken = this.loadingService.register();\n return this.httpService\n .post(url, body, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getSearchInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/search-inputs`;\n }\n\n public getSearchInputs(jurisdictionId: string, caseTypeId: string): Observable<SearchInput[]> {\n const url = this.getSearchInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', SearchService.V2_MEDIATYPE_SEARCH_INPUTS)\n .set('Content-Type', 'application/json');\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, { headers, observe: 'body' })\n .pipe(\n map(body => {\n const searchInputs = body.searchInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n searchInputs.forEach(item => {\n item.field.label = item.label;\n item.field.display_context_parameter = item.display_context_parameter;\n });\n } else {\n throw new Error('Response expired');\n }\n return searchInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class RouterHelperService {\n public getUrlSegmentsFromRoot(route: ActivatedRouteSnapshot): string[] {\n return route.pathFromRoot\n .filter(r => r.url && r.url.length)\n .reduce((acc, r) => {\n r.url.forEach(url => {\n acc.push(url.path);\n });\n return acc;\n }, []);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n public locationAssign(url: string): void {\n window.location.assign(url);\n }\n\n public setLocalStorage(key: string, value: string) {\n window.localStorage.setItem(key, value);\n }\n\n public getLocalStorage(key: string) {\n return window.localStorage.getItem(key);\n }\n\n public clearLocalStorage() {\n window.localStorage.clear();\n }\n\n public removeLocalStorage(key: string) {\n window.localStorage.removeItem(key);\n }\n\n public setSessionStorage(key: string, value: string) {\n window.sessionStorage.setItem(key, value);\n }\n\n public getSessionStorage(key: string) {\n return window.sessionStorage.getItem(key);\n }\n\n public openOnNewTab(url: string): void {\n window.open(url, '_blank');\n }\n\n public confirm(message: string): boolean {\n return window.confirm(message);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { WorkbasketInputModel } from '../../domain';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class WorkbasketInputFilterService {\n public static readonly V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-workbasket-input-details.v2+json;charset=UTF-8';\n\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getWorkbasketInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/work-basket-inputs`;\n }\n\n public getWorkbasketInputs(jurisdictionId: string, caseTypeId: string): Observable<WorkbasketInputModel[]> {\n const url = this.getWorkbasketInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', WorkbasketInputFilterService.V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS)\n .set('Content-Type', 'application/json');\n\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => {\n const workbasketInputs = body.workbasketInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n workbasketInputs.forEach(item => {\n item.field.label = item.label;\n if (item.display_context_parameter) {\n item.field.display_context_parameter = item.display_context_parameter;\n }\n });\n } else {\n throw new Error('Response expired');\n }\n return workbasketInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig as AppConfig } from '../../../app.config';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class DefinitionsService {\n\n constructor(private readonly http: HttpService, private readonly appConfig: AppConfig) {}\n\n public getCaseTypes(jurisdictionId: string, access: string): Observable<CaseTypeLite[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types?access=${access}`;\n\n return this.http\n .get(url).pipe(map(response => response));\n }\n\n public getJurisdictions(access: string): Observable<Jurisdiction[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions?access=${access}`;\n\n return this.http\n .get(url)\n .pipe(map(response => response));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DefinitionsService } from './definitions.service';\n\n@NgModule({\n providers: [\n DefinitionsService\n ]\n})\n\nexport class DefinitionsModule {}\n","import { Injectable } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SearchResultViewColumn } from '../../../domain/search/search-result-view-column.model';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SearchResultViewItemComparator } from '../../../domain/search/sorting/search-result-view-item-comparator';\n\n@Injectable()\nexport class SearchResultViewItemComparatorFactory {\n\n public createSearchResultViewItemComparator(column: SearchResultViewColumn): SearchResultViewItemComparator {\n const fieldId = column.case_field_id;\n switch (column.case_field_type.type) {\n case ('MultiSelectList'): {\n return this.textArrayComparator(fieldId);\n }\n case ('Number'):\n case ('MoneyGBP'): {\n return this.numberComparator(fieldId);\n }\n case ('Text'):\n case ('TextArea'):\n case ('Email'):\n case ('Date'):\n case ('DateTime'):\n case ('Label'):\n case ('Postcode'):\n case ('YesOrNo'):\n case ('PhoneUK'):\n case ('FixedList'): {\n return this.stringComparator(fieldId);\n }\n default: {\n return undefined;\n }\n }\n }\n\n private numberComparator(fieldId: string): SearchResultViewItemComparator {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA === null ? 0 : fieldA;\n fieldB = isUndefined(fieldB) || fieldB === null ? 0 : fieldB;\n return fieldA - fieldB;\n }\n } as SearchResultViewItemComparator;\n }\n\n private stringComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n\n private textArrayComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.join().toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.join().toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, timer } from 'rxjs';\nimport { catchError, map, publishReplay, refCount, take } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\n\nexport interface OrganisationSuperUser {\n firstName: string;\n lastName: string;\n email: string;\n}\n\nexport interface OrganisationAddress {\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n dxAddress: any [];\n}\n\nexport interface Organisation {\n organisationIdentifier: string;\n name: string;\n status: string;\n sraId: string;\n sraRegulated: boolean;\n companyNumber: string;\n companyUrl: string;\n superUser: OrganisationSuperUser;\n paymentAccount: string [];\n contactInformation: OrganisationAddress [];\n}\n\nexport interface OrganisationVm {\n organisationIdentifier: string;\n name: string;\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n}\n\n@Injectable()\nexport class OrganisationService {\n\n constructor(private readonly http: HttpClient,\n private readonly appconfig: AbstractAppConfig) {}\n\n private organisations$: Observable<OrganisationVm[]>;\n public static mapOrganisation(organisations: Organisation[]): OrganisationVm [] {\n const organisationsVm = new Array<OrganisationVm>();\n organisations.forEach(org => {\n let contactInformation = null;\n if (org.contactInformation && org.contactInformation[0]) {\n contactInformation = org.contactInformation[0];\n }\n organisationsVm.push({\n organisationIdentifier: org.organisationIdentifier,\n name: org.name,\n addressLine1: contactInformation !== null ? contactInformation.addressLine1 : null,\n addressLine2: contactInformation !== null ? contactInformation.addressLine2 : null,\n addressLine3: contactInformation !== null ? contactInformation.addressLine3 : null,\n townCity: contactInformation !== null ? contactInformation.townCity : null,\n county: contactInformation !== null ? contactInformation.county : null,\n country: contactInformation !== null ? contactInformation.country : null,\n postCode: contactInformation !== null ? contactInformation.postCode : null,\n });\n });\n return organisationsVm;\n }\n\n public getActiveOrganisations(): Observable<OrganisationVm[]> {\n if (!this.organisations$) {\n const url = this.appconfig.getPrdUrl();\n const cacheTimeOut = this.appconfig.getCacheTimeOut();\n this.organisations$ = this.http.get<Organisation[]>(url)\n .pipe(map((orgs) => OrganisationService.mapOrganisation(orgs)),\n publishReplay(1), refCount(), take(1), catchError(e => {\n console.log(e);\n // Handle error and return blank Observable array\n return of([]);\n }));\n timer(cacheTimeOut).subscribe(() => {\n this.organisations$ = null;\n });\n }\n return this.organisations$;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class BrowserService {\n public isFirefox(): boolean {\n return window.navigator.userAgent.indexOf('Firefox') > -1;\n }\n public isSafari(): boolean {\n const isSafariAgent = window.navigator.userAgent.indexOf('Safari') > -1;\n const isChromeAgent = window.navigator.userAgent.indexOf('Chrome') > -1;\n if ((isChromeAgent) && (isSafariAgent)) {\n return false;\n }\n return isSafariAgent;\n }\n public isIEOrEdge(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LoadingService } from './loading.service';\n\n@NgModule({\n imports: [\n ],\n declarations: [\n ],\n exports: [\n ],\n providers: [\n LoadingService\n ]\n})\n\nexport class LoadingModule {}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport class TestRouteSnapshotBuilder {\n private parent: ActivatedRouteSnapshot = null;\n private params: object = {};\n private data: object = {};\n\n public withParent(parent: ActivatedRouteSnapshot): TestRouteSnapshotBuilder {\n this.parent = parent;\n return this;\n }\n\n public withParams(params: object): TestRouteSnapshotBuilder {\n this.params = params;\n return this;\n }\n\n public withData(data: object): TestRouteSnapshotBuilder {\n this.data = data;\n return this;\n }\n\n public build(): ActivatedRouteSnapshot {\n return {\n url: [],\n params: this.params,\n queryParams: [],\n fragment: '',\n data: this.data,\n outlet: null,\n component: null,\n routeConfig: null,\n root: null,\n parent: this.parent,\n firstChild: null,\n children: [],\n pathFromRoot: null,\n paramMap: null,\n queryParamMap: null,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["i0","ctx_r1","email","phone","workhours","FooterComponent","title","ctx_r2","selectors","inputs","isSolicitor","ngContentSelectors","decls","vars","consts","template","rf","ctx","FooterComponent_div_2_Template","FooterComponent_div_3_Template","Component","args","selector","templateUrl","styleUrls","Input","HeaderBarComponent","this","signOutRequest","EventEmitter","prototype","signOut","emit","username","outputs","HeaderBarComponent_div_3_Template","HeaderBarComponent_div_4_Template","HeaderBarComponent_div_9_Template","Output","NavigationComponent","ctx_r0","label","imageLink","NavigationItemComponent","link","NavigationItemComponent_input_3_Template","PhaseComponent","phaseLabel","phaseLink","HeadersModule","CommonModule","RouterModule","ngJitMode","declarations","imports","exports","NgModule","BodyComponent","encapsulation","ViewEncapsulation","None","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","__values","o","s","Symbol","iterator","m","call","next","value","done","TypeError","__read","n","e","ar","push","error","__spread","concat","_r8_1","_r6","hourChange","i0__namespace","inputFocus","ctx_r3","hourId","displayHour","_c0","isInvalid","_r13_1","_r11","minuteChange","ctx_r4","minuteId","displayMinute","_r18_1","_r16","secondChange","ctx_r5","secondId","displaySecond","DateInputComponent","isTouched","displayDay","displayMonth","displayYear","DATE_FORMAT","rawValue","ngOnInit","mandatory","isDateTime","hour","minute","second","writeValue","obj","removeMilliseconds","_a","split","datePart","timePart","dateValues","year","month","day","timeParts","validate","control","viewValue","required","isDateFormat","getValueForValidation","pattern","registerOnChange","fn","propagateChange","registerOnTouched","ngOnDestroy","dayChange","monthChange","yearChange","touch","formControl","markAsTouched","markAsUntouched","dayId","id","monthId","yearId","date","pad","join","val","test","num","padNum","undefined","toString","replace","dateTime","type","features","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","NG_VALIDATORS","_r21_1","_r0","_r1","_r2","DateInputComponent_div_16_Template","DateInputComponent_div_17_Template","DateInputComponent_div_18_Template","providers","AlertMessageType","AlertComponent","showIcon","alertMessageType","TYPE_WARNING","TYPE_SUCCESS","TYPE_ERROR","TYPE_INFORMATION","AlertComponent_ng_container_2_Template","AlertComponent_ng_container_3_Template","AlertComponent_ng_container_4_Template","AlertComponent_ng_container_5_Template","WARNING","ERROR","SUCCESS","INFORMATION","AlertIconClassPipe","transform","CLASS_SUCCESS","CLASS_WARNING","pure","Pipe","name","AlertModule","TabComponent","selected","_r4_1","panel_r1","$implicit","show","_c1","_c2","TabsComponent","route","panelIds","ngAfterContentInit","_this","panels","forEach","panel","snapshot","fragment","toArray","indexOf","i1","ActivatedRoute","contentQueries","dirIndex","TabsComponent_li_2_Template","tabs","ViewChildren","ContentChildren","TabsModule","ActivityBannerComponent","bannerType","description","ActivityIconComponent","DisplayMode","ActivityInfo","Activity","HttpError","timestamp","Date","toISOString","DEFAULT_ERROR","message","DEFAULT_MESSAGE","status","DEFAULT_STATUS","exception","path","details","callbackErrors","callbackWarnings","from","response","keys","AbstractAppConfig","getDocumentManagementUrlV2","getDocumentSecureMode","getRemotePrintServiceUrl","getUserInfoApiUrl","getAccessManagementMode","getAccessManagementBasicViewMock","getAccessManagementRequestReviewMockModel","getLocationRefApiUrl","getCamRoleAssignmentsApiUrl","AuthService","appConfig","document","signIn","loginUrl","getLoginUrl","clientId","getOAuth2ClientId","redirectUri","encodeURIComponent","location","href","origin","PATH_OAUTH2_REDIRECT","t","DOCUMENT","token","factory","Injectable","Inject","HttpErrorService","authService","convertToHttpError","httpError","HttpErrorResponse","headers","get","CONTENT_TYPE","JSON","console","setError","removeError","handle","redirectIfNotAuthorised","throwError","i1.AuthService","HttpService","httpclient","httpErrorService","url","options","errorHandler","setDefaultValue","pipe","catchError","res","post","body","put","delete","observe","withCredentials","HttpHeaders","set","HEADER_ACCEPT","HEADER_CONTENT_TYPE","HttpClient","i2.HttpErrorService","SessionStorageService","getItem","sessionStorage","setItem","removeItem","clear","ActivityService","http","sessionStorageService","userAuthorised","activityUrl","handleHttpError","getOptions","userDetails","parse","getActivities","caseId","_i","map","log","postActivity","activity","verifyUserIsAuthorized","DUMMY_CASE_REFERENCE","subscribe","getActivityUrl","i1.HttpService","i2.AbstractAppConfig","i3.SessionStorageService","ActivityPollingService","activityService","ngZone","config","pendingRequests","Map","pollConfig","interval","getActivityNexPollRequestMs","attempts","getActivityRetry","backgroundPolling","batchCollectionDelayMs","getActivityBatchCollectionDelayMs","maxRequestsPerBatch","getActivityMaxRequestPerBatch","isEnabled","subscribeToActivity","Subject","subject","size","runOutsideAngular","currentTimeoutHandle","setTimeout","run","flushRequests","stopPolling","pollActivitiesSubscription","unsubscribe","clearTimeout","requests","performBatchRequest","pollActivities","caseIds","polling","apply","EMPTY","postViewActivity","ACTIVITY_VIEW","postEditActivity","ACTIVITY_EDIT","activities","err","values","activityType","pollingConfig","assign","viewersPresent","editorsText","viewersText","ActivityComponent_div_0_div_1_Template","ActivityComponent_div_0_div_2_Template","ActivityComponent_div_0_div_3_Template","ActivityComponent_div_0_div_4_Template","displayMode","dspMode","ICON","editorsPresent","BANNER","i1.ActivityService","NgZone","ActivityComponent","activityPollingService","VIEWERS_PREFIX","VIEWERS_SUFFIX","EDITORS_PREFIX","EDITORS_SUFFIX","editors","unknownEditors","viewers","unknownViewers","subscription","newActivity","onActivityChange","generateDescription","isActivityEnabled","isActiveCase","complete","prefix","suffix","namesArray","unknownCount","resultText","activityInfo","forename","surname","replaceLastCommaWithAnd","str","trim","i1.ActivityPollingService","ActivityComponent_div_0_Template","ActivityModule","WizardPageField","FixedListItem","FieldType","Type","CaseField","_list_items","isDynamic","_value","code","list_items","field_type","fixed_list_items","items","isComplexDisplay","display_context_parameter","extractBracketValue","isComplexEntry","isComplex","isCollection","isReadonly","isOptional","isMandatory","_","isEmpty","display_context","toUpperCase","some","isCaseLink","complex_fields","cf","fmt","paramName","leftBracket","rightBracket","find","a","startsWith","substr","Expose","DRAFT_PREFIX","Draft","stripDraftId","draftId","slice","isDraft","String","FormatTranslatorService","translate","javaFormat","result","prev","inQuote","maybePush","flag","javaFormat_1","javaFormat_1_1","showOnlyDates","dateFormat","includes","removeTime","hasDate","toLowerCase","is24Hour","hasNoDay","hasNoDayAndMonth","hasHours","hasMinutes","hasSeconds","DatePipe","formatTrans","zone","format","resultDate","match","DATE_FORMAT_REGEXP","offsetDate","getDate","getOffsetDate","translateDateFormat","moment","MONTHS","getMonth","getFullYear","getHour","getHours","getMinutes","getSeconds","toInt","parsedDate","isNaN","shortISO","toLocaleDateString","reverse","thisMoment","localOffset","getTimezoneOffset","getTime","minutes","seconds","hourStr","hourNum","parseInt","RegExp","i1.FormatTranslatorService","FieldsUtils","convertToCaseField","plainToClassFromExist","toValuesMap","caseFields","valueMap","field","prepareValue","getType","elem","isObject","isNonEmptyObject","isArray","areCollectionValuesSimpleFields","fieldValue","isCollectionOfSimpleTypes","isMultiSelectValue","form","isNonEmptyArray","isCollectionWithValue","pageFormFields","cloneObject","getCaseFields","caseView","caseDataFields","reduce","acc","tab","fields","metadataFields","filter","caseField","findIndex","metadataField","addCaseFieldAndComponentReferences","comp","containsNonEmptyValues","object","objectRefs","hasNonNullPrimitive","x","y","handleNestedDynamicLists","jsonBody","case_fields","setDynamicListDefinition","valueMap_1","complexField","getMoneyGBP","currencyPipe","getLabel","datePipe","textForInvalidField","getFixedListLabelByCodeOrEmpty","relevantItem","item","invalidValue","caseFieldType","rootCaseField","SERVER_RESPONSE_FIELD_TYPE_COMPLEX","SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE","dynamicListValue","getDynamicListValue","complexValue","data","formatted_value","SERVER_RESPONSE_FIELD_TYPE_COLLECTION","collection_field_type","jsonBlock","getNestedFieldValues","jsonData","output","elementKey","buildCanShowPredicate","eventTrigger","currentState","getCurrentEventState","page","parsedShowCondition","mergeCaseFieldsAndFormFields","controls","cloneCaseField","formFields","mergeFields","DEFAULT_MERGE_FUNCTION","mergeLabelCaseFieldsAndFormFields","LABEL_MERGE_FUNCTION","controlIterator","aControl","formArrayFn","formGroupFn","controlFn","FormArray","FormGroup","FormControl","mergeFunction","LABEL_SUFFIX","CurrencyPipe","idx","f","elements","FieldTypeSanitiser","sanitiseLists","FIELD_TYPE_DYNAMIC_RADIO_LIST","FIELD_TYPE_DYNAMIC_LIST","convertStringToDynamicListOutput","FIELD_TYPE_COMPLEX","FIELD_TYPE_COLLECTION","formElement","stringValue","listItems","getListItems","matches","PlaceholderService","PlaceholderSubstitutor","FormValueService","fieldTypeSanitiser","getFieldValue","fieldKey","colIndex","fieldIds","currentFieldId","currentForm","removeMultiSelectLabels","data_1","data_1_1","keys_1","keys_1_1","isReadOnly","isLabel","isEmptyData","allEmpty","_b","_c","clearOptionalEmpty","clearEmpty","sanitise","sanitiseObject","sanitiseCaseReference","reference","filterCurrentPageFields","editForm","cloneForm","stringify","element","sanitiseDynamicLists","clearNonCaseFields","dataKey","removeNullLabels","caseFields_1","caseFields_1_1","collection","collection_1","e_5","collection_1_1","removeEmptyDocuments","caseFields_2","caseFields_2_1","collection_2","e_7","collection_2_1","hidden","removeUnnecessaryFields","clearNonCase","caseFields_3","caseFields_3_1","removeInvalidCollectionData","collection_3","e_9","collection_3_1","objCollection","removeEmptyCollectionsWithMinValidation","caseFields_4","caseFields_4_1","min","rawObject","sanitisedObject","documentFieldKeys","sanitiseValue","sanitiseArray","rawArray","i1.FieldTypeSanitiser","resolvePlaceholders","stringToResolve","resolvedFormValues","originalStringToResolve","wrapPlaceholder","PLACEHOLDER_START","PLACEHOLDER_END","hasUnresolvedPlaceholder","resetPlaceholderSubstitutor","doesPlaceholderContainCollectionItems","isScanningStringToResolve","isStartPlaceholderAndNotCollecting","setStartCollecting","isCollecting","isClosingPlaceholder","substitute","isOpeningPlaceholder","appendCharacter","scanIndex","appendOriginalStringIfCollectionItemAsPlaceholder","numberCollectionItemsAsPlaceholder","PLACEHOLDER_PATTERN","isStartingPlaceholder","charAt","OPENING_PLACEHOLDER","CLOSING_PLACEHOLDER","collectionItemIndex","fieldIdToSubstitute","startSubstitutionIndex","isMatchingPlaceholderPattern","isFieldIdInFormFields","updateNumberOfCollectionItemsAsPlaceholder","isFieldIdToSubstituteReferringItself","substituteWithEmptyString","substituteFromFormFields","NEW_LINE","PLACEHOLDER_CONTENT_PATTERN","getSubstitutionValueOrEmpty","getSubstitutionValueLengthOrZero","getNumberOfCollectionItemsIfAny","pageFormFieldsClone","index","STARTING_PLACEHOLDER","newNumber","Math","max","doSubstitution","resetScanIndexAfterSubstitution","placeholder","replacedString","substring","LabelSubstitutorDirective","fieldsUtils","placeholderService","contextFields","elementsToSubstitute","initialLabel","initialHintText","hint_text","formGroup","getReadOnlyAndFormFields","shouldSubstitute","getFormFieldsValuesIncludingDisabled","uniqueContextFields","removeDuplicates","original","unique","getRawValue","i1.FieldsUtils","i2.PlaceholderService","Directive","CaseReferencePipe","caseReference","g1","g2","g3","g4","MarkdownComponent","content","onMarkdownClick","event","HTMLAnchorElement","hostBindings","$event","markdownUseHrefAsRouterLink","HostListener","LabelFieldComponent","caseDetails","case_id","caseTitle","CaseHeaderComponent","state","title_display","CaseHeaderComponent_h1_0_Template","CaseHeaderComponent_div_1_Template","BannersModule","BodyModule","FootersModule","FormModule","DashPipe","FieldLabelPipe","FirstErrorPipe","IsCompoundPipe","COMPOUND_TYPES","EXCLUDE","CaseFieldService","IsMandatoryPipe","caseFieldService","i1.CaseFieldService","IsReadOnlyPipe","IsReadOnlyAndNotCollectionPipe","PaletteUtilsModule","SortOrder","CcdCaseTitlePipe","caseFieldValues","i1.PlaceholderService","i2.FieldsUtils","SortSearchResultPipe","searchResults","sortParameters","isUndefined","sort","comparator","compare","sortOrder","DESCENDING","PipesModule","PaletteContext","AbstractFormFieldComponent","idPrefix","registerControl","container","parent","existing","setValidators","validator","addValidators","addControlToParent","addControlToFormArray","addControlToFormGroup","setControl","addControl","AbstractFieldReadComponent","_super","context","DEFAULT","topLevelFormGroup","Constants","MANDATORY","REGEX_WHITESPACES","FormValidatorsService","CUSTOM_VALIDATED_TYPES","validators","Validators","regular_expression","emptyValidator","minLength","maxLength","AbstractFieldWriteComponent","isExpanded","isInSearchBlock","fixCaseField","ngOnChanges","changes","change","currentValue","createElementId","elementId","FocusElementDirective","el","renderer","focus","nativeElement","focusElement","selectRootElement","ElementRef","Renderer2","FocusElementModule","AddressModel","AddressLine1","AddressLine2","AddressLine3","PostTown","County","PostCode","Country","AddressOption","addressModel","getDescription","removeInitialCommaIfPresent","prefixWithCommaIfPresent","AddressParser","address","classification","CLASSIFICATION_CODE","parseAddressLine1","parseAddressLine2","parseAddressLine3","POSTCODE","POST_TOWN","AddressesService","UK","addressLine","RD06","SUB_BUILDING_NAME","ORGANISATION_NAME","DEPARTMENT_NAME","PO_BOX_NUMBER","BUILDING_NAME","removeNonAddressValues","BUILDING_NUMBER","THOROUGHFARE_NAME","DEPENDENT_LOCALITY","DOUBLE_DEPENDENT_LOCALITY","DEPENDENT_THOROUGHFARE_NAME","line","removeUndefinedString","removeInitialComma","removeEmptySpaces","getAddressesForPostcode","postcode","getPostcodeLookupUrl","results","addresses","DPA","formatAddressLines","shiftAddressLinesUp","toCapitalCase","sentence","ShowCondition","condition","orConditions","andConditions","search","OR_CONDITION_REGEXP","AND_CONDITION_REGEXP","addPathPrefixToCondition","showCondition","pathPrefix","extractConditions","getInstance","instance","instanceCache","hiddenCannotChange","conditions","allUnchangeable","getField","head","shift","ft","conditions_1","conditions_1_1","conditionsArray","separator","CONTAINS","CONDITION_EQUALS","CONDITION_NOT_EQUALS","matchAndConditions","updatePathName","matchByContextFields","pathName_1","pathTail","pathFinalIndex_1","pop","mappedPathTail","Number","orCondition","matchEqualityCondition","every","andCondition","conditionSeparator","tail","findValueForComplexCondition","expectedValue","unquoted","checkValueContains","checkValueEquals","conditionSeparaor","checkMultiSelectListEquals","endsWith","removeStarChar","checkValueNotEquals","okIfBothEmpty","formatCurrentValue","expectedValues","values_1","getValue","findValueForComplexConditionInArray","findValueForComplexConditionForPathIfAny","arrayIndex","dropNumberPath","isDynamicList","dynamiclist","_score","has","right","FieldsFilterPipe","isValidComplex","keepField","EMPTY_VALUES","isCompound","NESTED_TYPES","isValidCompound","keepEmpty","stripHidden","checkConditionsAgainst","show_condition","clone","buildField","field_r2","complexGroup","buildIdPrefix","WriteComplexFieldComponent_ng_container_4_ccd_field_read_2_Template","WriteComplexFieldComponent_ng_container_4_ccd_field_write_3_Template","Complex","ADDRESS_FIELD_TYPES","WriteComplexFieldComponent","isCompoundPipe","formValidatorsService","renderLabel","ignoreMandatory","isTopLevelWithinCollection","setupFields","updateValueAndValidity","emitEvent","isAddressUK","addressValidatorsRequired","retain_hidden_value","isSmallAddressLine1","parentCaseField","parentComponent","parentComponentCaseField","fieldsFilterPipe","complexFields","i1.IsCompoundPipe","i2.FormValidatorsService","WriteComplexFieldComponent_h2_3_Template","WriteComplexFieldComponent_ng_container_4_Template","WriteAddressFieldComponent_div_1_div_4_span_4_Template","_r7_1","findAddress","missingPostcode","addressOption_r9","_r11_1","addressSelected","WriteAddressFieldComponent_div_1_div_5_option_5_Template","addressList","addressOptions","blankAddress","WriteAddressFieldComponent_div_1_div_4_Template","WriteAddressFieldComponent_div_1_div_5_Template","WriteAddressFieldComponent_div_1_a_6_Template","shouldShowDetailFields","WriteAddressFieldComponent","addressesService","addressFormGroup","isComplexWithHiddenFields","postcode_1","unshift","defaultLabel","setValue","refocusElement","focusElementDirectives","first","setFormValue","writeComplexFieldComponent","hasAddress","numberOfAddresses","CaseReference","i1.AddressesService","i2.IsCompoundPipe","viewQuery","WriteAddressFieldComponent_div_1_Template","ViewChild","static","ReadCaseLinkFieldComponent","hasReference","ReadCaseLinkFieldComponent_a_0_Template","caseReferenceControl","errors","WriteCaseLinkFieldComponent","caseLinkGroup","caseReferenceValidator","validCaseReference","valueString","touched","WriteCaseLinkFieldComponent_span_2_Template","WriteCaseLinkFieldComponent_span_3_Template","WriteCaseLinkFieldComponent_span_4_Template","valid","dirty","i_r5","item_r4","ReadCollectionFieldComponent_table_0_tbody_3_tr_1_Template","ReadCollectionFieldComponent_table_0_tbody_2_Template","ReadCollectionFieldComponent_table_0_tbody_3_Template","isDisplayContextParameterAvailable","ReadCollectionFieldComponent","ReadCollectionFieldComponent_table_0_Template","RemoveDialogComponent","matDialogRef","remove","close","cancel","MatDialogRef","Jurisdiction","hasRoles","profile","user","idam","roles","Profile","isCourtAdmin","ProfileNotifier","profileSource","BehaviorSubject","asObservable","announceProfile","formArray","WriteCollectionFieldComponent_h2_7_span_1_Template","WriteCollectionFieldComponent_h2_7_span_2_Template","_r10_1","i_r7","openModal","item_r6","itemLabel","isNotAuthorisedToDelete","WriteCollectionFieldComponent_div_8_div_1_Template","collItems","_r12_1","addItem","isNotAuthorisedToCreate","isSearchFilter","WriteCollectionFieldComponent","dialog","scrollToService","profileNotifier","profileSubscription","buildCaseField","getContainer","isNew","group","at","isCollectionOfSimpleType","cfid","newCaseField","doScroll","setErrors","scrollTo","duration","offset","finalize","focusLastItem","getCollectionPermission","isNotAuthorisedToUpdate","getControlIdAt","role","hasUpdateAccess","acls","acl","update","dialogConfig","MatDialogConfig","disableClose","autoFocus","ariaLabel","height","width","panelClass","closeOnNavigation","position","top","window","innerHeight","left","innerWidth","open","afterClosed","take","fieldType","last","querySelector","splice","removeAt","field_r1","MatDialog","i2","ScrollToService","i3.ProfileNotifier","WriteCollectionFieldComponent_h2_7_Template","WriteCollectionFieldComponent_div_8_Template","WriteCollectionFieldComponent_button_9_Template","ReadComplexFieldRawComponent","ReadComplexFieldRawComponent_ng_container_1_Template","CaseEvent","CaseState","CaseTypeLite","CaseType","EventCaseField","Banner","heading_r2","sortRowsByColumns","columnsAllLabels","sortWidget","ctx_r10","toCaseField","heading_r9","item_r5","columnsHorizontalLabel","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_2_div_2_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_2_ng_template_3_Template","ctx_r19","vLabel_r16","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_1_td_4_Template","caseField_r24","ctx_r25","ctx_r29","ctx_r30","addCaseReferenceValue","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_ng_template_3_td_4_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_ng_template_3_td_5_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_tr_1_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_ng_template_3_Template","_r26","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_1_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_Template","ctx_r8","addCaseFieldValue","_r41_1","i_r6","ctx_r40","isHidden","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_2_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_Template","columns","getImage","columnsVerticalLabel","keepOriginalOrder","rows","ReadComplexFieldCollectionTableComponent","isSortAscending","column","UNSORTED","labelsVertical","labelsHorizontal","allLabels","populateCaseFieldValuesIntoRows","populateLabels","populateHorizontalLabels","row","isVerticleDataNotEmpty","isNotBlank","shouldSortInAscendingOrder","ASCENDING","trimmedId","ReadComplexFieldCollectionTableComponent_th_9_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_Template","ReadComplexFieldTableComponent_ng_container_8_ng_container_1_Template","ReadComplexFieldTableComponent_ng_container_8_ng_template_3_Template","_r3","ReadComplexFieldTableComponent","ReadComplexFieldTableComponent_ng_container_8_Template","ReadComplexFieldComponent","paletteContext","TABLE_VIEW","CHECK_YOUR_ANSWER","ReadComplexFieldComponent_ccd_read_complex_field_raw_1_Template","ReadComplexFieldComponent_ccd_read_complex_field_collection_table_2_Template","ReadComplexFieldComponent_ccd_read_complex_field_table_3_Template","ReadDateFieldComponent","timeZone","dateTimeDisplayFormat","CUSTOM_MOMENT_FORMATS","dateInput","display","monthYearLabel","dateA11yLabel","monthYearA11yLabel","dateControl","DatetimePickerComponent","formatTranslationService","ngxMatDateFormats","showSpinners","showSeconds","touchUi","enableMeridian","stepHour","stepMinute","stepSecond","color","disableMinute","hideTime","hideMinutes","startView","yearSelection","checkTime","stringEdited","minError","maxError","minimumDate","maximumDate","momentFormat","dateTimeEntryFormat","configureDatePicker","setDateTimeFormat","formatValueAndSetErrors","statusChanges","hasError","valueChanged","focusIn","focusOut","toggleClick","minDate","maxDate","dateTimePickerFormat","yearSelected","patchValue","datetimePicker","monthSelected","inputElement","formValue","keepErrorText","NGX_MAT_DATE_FORMATS","useValue","NgxMatDateAdapter","useClass","NgxMatMomentAdapter","NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS","useUtc","DatetimePickerComponent_span_3_Template","DatetimePickerComponent_span_4_Template","DatetimePickerComponent_span_5_Template","DatetimePickerComponent_span_6_Template","DatetimePickerComponent_span_7_Template","WriteDateFieldComponent","WriteDateFieldComponent_span_3_Template","WriteDateFieldComponent_span_4_Template","WriteDateFieldComponent_span_5_Template","WriteDateContainerFieldComponent","WriteDateContainerFieldComponent_ng_container_0_Template","WriteDateContainerFieldComponent_ng_template_1_Template","WindowService","locationAssign","setLocalStorage","localStorage","getLocalStorage","clearLocalStorage","removeLocalStorage","setSessionStorage","getSessionStorage","openOnNewTab","confirm","DocumentManagementService","uploadFile","formData","getDocStoreUrl","delay","RESPONSE_DELAY","getMediaViewerInfo","documentFieldValue","mediaViewerInfo","document_binary_url","transformDocumentUrl","document_filename","content_type","getContentType","annotation_api_url","getAnnotationApiUrl","case_jurisdiction","jurisdiction","fileExtension","lastIndexOf","isImage","IMAGE","isWord","WORD","isExcel","EXCEL","isPowerpoint","POWERPOINT","TXT","RTF","PDF","imageType","imagesList","wordType","wordList","excelType","excelList","powerpointType","powerpointList","documentBinaryUrl","remoteHrsPattern","getRemoteHrsUrl","getHrsUrl","remoteDocumentManagementPattern","getRemoteDocumentManagementUrl","getDocumentManagementUrl","ConditionalShowRegistrarService","registeredDirectives","register","newDirective","reset","GreyBarService","rendererFactory","fieldsToggledToShow","createRenderer","showGreyBar","addGreyBar","removeGreyBar","divSelector","removeClass","addToggledToShow","fieldId","removeToggledToShow","wasToggledToShow","addClass","RendererFactory2","ConditionalShowFormDirective","handleFormControl","evaluateControl","handleFormArray","handleFormGroup","groupControl","cKey","ngAfterViewInit","evalAllShowHideConditions","subscribeToFormChanges","unsubscribeFromFormChanges","formChangesSubscription","valueChanges","debounceTime","component","evaluateCondition","condResult","allFieldValues","buildPath","disabled","enable","disable","getCurrentPagesReadOnlyAndFormFieldValues","ConditionalShowModule","LabelSubstitutorModule","WizardPage","getCol1Fields","wizardProps","page_column_no","getCol2Fields","isMultiColumn","CaseEventTrigger","hasFields","hasPages","wizard_pages","CaseAccessUtils","getMappedRoleCategory","roleCategories","roleKeywords","roleOrCategoryExists","JUDGE_ROLE","JUDGE_ROLE_CATEGORY","PROFESSIONAL_ROLE","PROFESSIONAL_ROLE_CATEGORY","CITIZEN_ROLE","CITIZEN_ROLE_CATEGORY","ADMIN_ROLE","ADMIN_ROLE_CATEGORY","LEGAL_OPERATIONS_ROLE_CATEGORY","roleKeyword","roleCategory","categoryExists","keywordExists","getAMRoleName","accessType","aMRole","roleName","JUDGE_ROLE_NAME","PROFESSIONAL_ROLE_NAME","CITIZEN_ROLE_NAME","ADMIN_ROLE_NAME","LEGAL_OPERATIONS_ROLE_NAME","getAMPayload","assignerId","actorId","grantType","beginTime","endTime","roleRequest","process","replaceExisting","requestedRoles","actorIdType","roleType","attributes","notes","userId","time","comment","LEGAL_OPERATIONS_ROLE","OrderService","sortAsc","DEFAULT_COMPARE_FUNCTION","array","sortingFunction","aOrdered","order","bOrdered","WizardPageFieldToCaseFieldMapper","mapAll","wizardPageFields","wizardField","wizardPageField","case_field_id","fixShowConditionPath","complex_field_overrides","override","processComplexFieldOverride","hideParentIfAllChildrenHidden","case_field_leaf","caseFieldIds","complex_field_element_id","children","getCaseFieldChildren","getCaseFieldLeaf","collectionCaseField","preparePathPrefix","caseFieldId","caseLeaf","Error","childrenCaseFields","allCaseFieldsHidden","providedIn","AlertService","router","preservedError","preservedWarning","preservedSuccess","preserveAlerts","successes","Observable","observer","successObserver","publish","refCount","errorObserver","warnings","warningObserver","alerts","alertObserver","events","NavigationStart","preserveMessages","alert","level","warning","success","preserve","setPreserveAlerts","urlInfo","currentUrlIncludesInfo","urlInfo_1","urlInfo_1_1","urlSnip","isPreserveAlerts","msgObject","Router","WorkAllocationService","errorService","alertService","searchTasks","searchRequest","getWorkAllocationApiUrl","assignTask","taskId","completeTask","handleTaskCompletionError","assignAndCompleteTask","completion_options","assign_and_complete","userIsCaseworker","userInfo","lowerCaseRoles","iACCaseOfficer","iACAdmOfficer","completeAppropriateTask","ccdId","eventId","caseTypeId","taskSearchParameter","tasks","getTasksByCaseIdAndEventId","caseType","getTask","i3.HttpErrorService","i4.AlertService","HasLoadingState","LoadingService","registered","loading","distinctUntilChanged","generateToken","unregister","performance","now","CasesService","orderService","wizardPageFieldToCaseFieldMapper","workAllocationService","loadingService","getCaseView","jurisdictionId","getApiUrl","loadingToken","getCaseViewV2","getCaseDataUrl","V2_MEDIATYPE_CASE_VIEW","getEventTrigger","eventTriggerId","ignoreWarning","buildEventTriggerUrl","V2_MEDIATYPE_START_DRAFT_TRIGGER","V2_MEDIATYPE_START_EVENT_TRIGGER","V2_MEDIATYPE_START_CASE_TRIGGER","plainToClass","tap","initialiseEventTrigger","createEvent","eventData","V2_MEDIATYPE_CREATE_EVENT","processResponseBody","validateCase","ctid","pageId","pageIdString","V2_MEDIATYPE_CASE_DATA_VALIDATE","createCase","ignore_warning","V2_MEDIATYPE_CREATE_CASE","getPrintDocuments","V2_MEDIATYPE_CASE_DOCUMENTS","documentResources","getCourtOrHearingCentreName","locationId","createChallengedAccessRequest","request","userInfoStr","camUtils","setUTCHours","uid","payload","createSpecificAccessRequest","sar","setDate","readOnly","requestedRole","processTasksOnSuccess","wizardPage","wizard_page_fields","caseData","isPuiCaseManager","case_type","warn","PUI_CASE_MANAGER","_r2_1","showMediaViewer","i3.OrderService","i4.HttpErrorService","i5.WizardPageFieldToCaseFieldMapper","i6.WorkAllocationService","i7.LoadingService","i8.SessionStorageService","MEDIA_VIEWER_INFO","ReadDocumentFieldComponent","windowService","documentManagement","casesService","params","caseViewSubscription","mergedInfo","openMediaViewer","getMediaViewerUrl","routerMediaViewer","createUrlTree","i1.WindowService","i2.DocumentManagementService","i3","i4.CasesService","ReadDocumentFieldComponent_a_0_Template","DocumentDialogComponent","initDialog","Alert","CaseViewEvent","CaseViewTrigger","DELETE","CaseTab","CaseView","CasePrintDocument","HRef","DocumentLinks","Document","Embedded","DocumentData","FormDocument","OrganisationConverter","toSimpleAddress","organisationModel","simpleAddress","addressLine1","addressLine2","addressLine3","townCity","county","country","postCode","toSimpleOrganisationModel","organisationIdentifier","Field","elementPath","SearchResultViewColumn","SearchResultViewItem","SearchResultView","hasDrafts","CaseDetails","CaseEventData","WorkbasketInputModel","WorkbasketInput","PaginationMetadata","SortParameters","CaseNotifier","caseViewSource","announceCase","FileUploadStateService","setUploadInProgress","uploadInProgress","isUploadInProgress","fileUploadMessages","WriteDocumentFieldComponent","caseNotifier","fileUploadStateService","clickout","fileInput","contains","clickInsideTheDocument","fileValidations","secureModeOn","document_url","document_hash","isAMandatoryComponent","createDocumentFormWithValidator","createDocumentForm","subscribeToCaseDetails","fileUploadSubscription","dialogSubscription","caseEventSubscription","cancelUpload","resetUpload","fileValidationsOnTab","validateFormUploadedDocument","displayFileUploadMessages","UPLOAD_ERROR_FILE_REQUIRED","fileChangeEvent","files","selectedFile","UPLOAD_WAITING_FILE_STATUS","documentUpload","buildDocumentUploadData","resultDocument","handleDocumentUploadResult","handleDocumentUploadError","openFileDialog","click","fileSelectEvent","openDialog","triggerReplace","confirmReplaceResult","getUploadedFileName","uploadedDocument","DOCUMENT_FILENAME","updateDocumentForm","isUpLoadingAFile","dialogRef","beforeClosed","fileUploadMessage","validation","DOCUMENT_URL","DOCUMENT_BINARY_URL","DOCUMENT_HASH","binaryUrl","filename","documentHash","documentFormGroup","getErrorMessage","UPLOAD_ERROR_NOT_AVAILABLE","FormData","append","caseTypeJurisdictionId","documents","_embedded","_links","self","binary","originalDocumentName","hashToken","i1.AbstractAppConfig","i2.CaseNotifier","i3.DocumentManagementService","i4","i5.FileUploadStateService","WriteDocumentFieldComponent_span_6_Template","WriteDocumentFieldComponent_span_7_Template","WriteDocumentFieldComponent_ccd_read_document_field_9_Template","DynamicListPipe","ReadDynamicListFieldComponent","dynamicListFormControl","type_r5","WriteDynamicListFieldComponent","WriteDynamicListFieldComponent_span_2_Template","WriteDynamicListFieldComponent_span_3_Template","WriteDynamicListFieldComponent_span_4_Template","WriteDynamicListFieldComponent_span_5_Template","WriteDynamicListFieldComponent_option_9_Template","DynamicRadioListPipe","ReadDynamicRadioListFieldComponent","dynamicRadioListControl","radioButton_r5","buildElementId","WriteDynamicRadioListFieldComponent","WriteDynamicRadioListFieldComponent_span_4_Template","WriteDynamicRadioListFieldComponent_span_5_Template","WriteDynamicRadioListFieldComponent_span_6_Template","WriteDynamicRadioListFieldComponent_span_7_Template","WriteDynamicRadioListFieldComponent_div_9_Template","ReadEmailFieldComponent","isFieldValueEmpty","ReadEmailFieldComponent_a_0_Template","emailControl","WriteEmailFieldComponent","WriteEmailFieldComponent_span_2_Template","WriteEmailFieldComponent_span_3_Template","WriteEmailFieldComponent_span_4_Template","FixedListPipe","ReadFixedListFieldComponent","fixedListFormControl","type_r4","WriteFixedListFieldComponent","WriteFixedListFieldComponent_span_2_Template","WriteFixedListFieldComponent_span_3_Template","WriteFixedListFieldComponent_span_4_Template","WriteFixedListFieldComponent_option_8_Template","FixedRadioListPipe","ReadFixedRadioListFieldComponent","fixedRadioListControl","radioButton_r4","WriteFixedRadioListFieldComponent","notEmpty","WriteFixedRadioListFieldComponent_span_4_Template","WriteFixedRadioListFieldComponent_span_5_Template","WriteFixedRadioListFieldComponent_span_6_Template","WriteFixedRadioListFieldComponent_div_8_Template","_r9_1","event_r1","caseHistoryClicked","ctx_r6","getAriaLabelforLink","event_name","EventLogTableComponent_tr_16_div_3_a_1_Template","state_id","ctx_r12","EventLogTableComponent_tr_16_div_4_a_1_Template","getSignificantItemUrl","getSignificantItemDesc","select","EventLogTableComponent_tr_16_div_3_Template","EventLogTableComponent_tr_16_div_4_Template","EventLogTableComponent_tr_16_span_5_Template","EventLogTableComponent_tr_16_div_6_Template","getAriaLabelforRow","isPartOfCaseTimeline","significantItemExist","getAriaLabelforColumn","user_first_name","user_last_name","EventLogTableComponent","onSelect","onCaseHistory","observers","significant_item","formatDate","EventLogTableComponent_tr_16_Template","EventLogDetailsComponent","state_name","summary","EventLogComponent","EventLogComponent_ccd_event_log_table_3_Template","EventLogComponent_ccd_event_log_table_4_Template","EventLogComponent_ccd_event_log_details_7_Template","CaseHistoryViewerFieldComponent","ReadMoneyGbpFieldComponent","amount","isNumber","ReadMoneyGbpFieldComponent_ng_container_0_Template","MoneyGbpInputComponent","displayValue","onChange","newValue","PATTERN_REGEXP","parts","integerPart","decimalPart","setDisabledState","isDisabled","registerOnValidatorChange","moneyGbpControl","WriteMoneyGbpFieldComponent","WriteMoneyGbpFieldComponent_span_2_Template","WriteMoneyGbpFieldComponent_span_3_Template","WriteMoneyGbpFieldComponent_span_4_Template","value_r2","ReadMultiSelectListFieldComponent_table_0_tr_2_Template","ReadMultiSelectListFieldComponent","ReadMultiSelectListFieldComponent_table_0_Template","checkboxes","_r6_1","onCheckChange","checkbox_r4","isSelected","WriteMultiSelectListFieldComponent","ctrl","WriteMultiSelectListFieldComponent_span_3_Template","WriteMultiSelectListFieldComponent_span_4_Template","WriteMultiSelectListFieldComponent_span_5_Template","WriteMultiSelectListFieldComponent_ng_container_6_Template","ReadNumberFieldComponent","numberControl","WriteNumberFieldComponent","WriteNumberFieldComponent_span_2_Template","WriteNumberFieldComponent_span_3_Template","WriteNumberFieldComponent_span_4_Template","ReadOrderSummaryRowComponent","getFeeAmount","feeValue","FeeAmount","attrs","FeeCode","FeeDescription","feeValue_r1","ReadOrderSummaryFieldComponent","getFees","Fees","getPaymentTotal","PaymentTotal","ReadOrderSummaryFieldComponent_tr_13_Template","WriteOrderSummaryFieldComponent","orderSummaryGroup","paymentReference","PaymentReference","paymentTotal","feesArray","fee","getFeeValue","feeGroup","FeeVersion","feeValueGroup","OrganisationService","appconfig","mapOrganisation","organisations","organisationsVm","org","contactInformation","getActiveOrganisations","organisations$","getPrdUrl","cacheTimeOut","getCacheTimeOut","orgs","publishReplay","of","timer","selectedOrg_r1","ReadOrganisationFieldRawComponent","organisationService","organisationConverter","OrganisationID","selectedOrg$","switchMap","findOrg","i1.OrganisationService","i2.OrganisationConverter","ReadOrganisationFieldRawComponent_table_6_Template","ReadOrganisationFieldTableComponent","ReadOrganisationFieldTableComponent_table_10_Template","ReadOrganisationFieldComponent","ReadOrganisationFieldComponent_ccd_read_organisation_field_raw_1_Template","ReadOrganisationFieldComponent_ccd_read_organisation_field_table_2_Template","ReadOrganisationFieldComponent_ccd_read_organisation_field_table_3_Template","WriteOrganisationComplexFieldComponent","organisation_r7","selectOrg","tmp_0_0","tmp_1_0","WriteOrganisationFieldComponent_fieldset_3_div_14_table_2_Template","WriteOrganisationFieldComponent_fieldset_3_div_14_div_4_Template","simpleOrganisations$","tmp_2_0","searchOrgValue$","deSelectOrg","selectedOrg_r11","WriteOrganisationFieldComponent_fieldset_3_ng_template_16_table_0_Template","WriteOrganisationFieldComponent_fieldset_3_div_14_Template","WriteOrganisationFieldComponent_fieldset_3_ng_template_16_Template","searchOrgTextFormControl","WriteOrganisationFieldComponent","defaultOrg","ORGANISATION_DETAILS","onSearchOrg","organisationFormGroup","PRE_POPULATE_TO_USERS_ORGANISATION","YES","OrganisationName","preSelectDefaultOrg","preSelectEmptyOrg","orgSearchText","lowerOrgSearchText_1","searchOrg","lowerOrgSearchText","partMatchingResultSet","withSpaceMatchingResultSet","MAX_RESULT_COUNT","organisation","searchCriteria","resultSet","hasMatchingOrganisation","searchHasSpace","searchWithSpace","hasResultSetBelowMaxCount","trimAll","oldText","selectedOrg","organisationIDFormControl","organisationNameFormControl","EMPTY_SIMPLE_ORG","instantiateOrganisationFormGroup","orgIDState","orgNameState","addOrganisationValidators","ORGANISATION_ID","organisationIdField","searchTextArray","searchTextArray_1","searchTextArray_1_1","singleSearchText","i3.WindowService","WriteOrganisationFieldComponent_fieldset_1_Template","WriteOrganisationFieldComponent_fieldset_3_Template","PaymentField","getBaseURL","getPaymentsUrl","getPayBulkScanBaseURL","getPayBulkScanBaseUrl","getRefundsUrl","getUserRoles","getUserEmail","sub","CasePaymentHistoryViewerFieldComponent","i2.SessionStorageService","ReadPhoneUKFieldComponent","phoneUkControl","WritePhoneUKFieldComponent","WritePhoneUKFieldComponent_span_2_Template","WritePhoneUKFieldComponent_span_3_Template","WritePhoneUKFieldComponent_span_4_Template","ReadTextAreaFieldComponent","BrowserService","isFirefox","navigator","userAgent","isSafari","isSafariAgent","isIEOrEdge","textareaControl","WriteTextAreaFieldComponent","browserService","autoGrow","style","scrollHeight","scrollTop","i1.BrowserService","WriteTextAreaFieldComponent_span_2_Template","WriteTextAreaFieldComponent_span_3_Template","WriteTextAreaFieldComponent_span_4_Template","ReadTextFieldComponent","textControl","WriteTextFieldComponent","onBlur","WriteTextFieldComponent_span_2_Template","WriteTextFieldComponent_span_3_Template","WriteTextFieldComponent_span_4_Template","UnsupportedFieldComponent","getCardPaymentReturnUrl","WaysToPayFieldComponent","getPaymentReturnUrl","WaysToPayFieldComponent_ccpay_payment_lib_0_Template","YesNoService","isYes","isNo","NO","YES_INPUTS","NO_INPUTS","ReadYesNoFieldComponent","yesNoService","formattedValue","yesNoControl","i1.YesNoService","value_r4","WriteYesNoFieldComponent","yesNoValues","WriteYesNoFieldComponent_span_3_Template","WriteYesNoFieldComponent_span_4_Template","WriteYesNoFieldComponent_span_5_Template","WriteYesNoFieldComponent_div_7_Template","PaletteService","getFieldComponentClass","write","FieldReadLabelComponent_dl_1_ng_container_4_Template","FieldReadLabelComponent","canHaveGreyBar","withLabel","FieldReadLabelComponent_dl_1_Template","FieldReadLabelComponent_ng_template_2_Template","FIX_CASEFIELD_FOR","FieldReadComponent","resolver","paletteService","Promise","resolve","then","componentClass","injector","Injector","fieldContainer","parentInjector","resolveComponentFactory","insert","hostView","ComponentFactoryResolver","i1.PaletteService","ViewContainerRef","read","FieldWriteComponent","injectorOptions","createComponent","CollectionCreateCheckerService","setDisplayContextForChildren","child","hasCreateAccess","case_field","ReadFieldsFilterPipe","evaluateConditionalShow","isValidCollection","isNotEmpty","ignoreLabels","ALWAYS_NULL_FIELDS","formGroupAvaliable","cond","searchRegExp","setupHidden","checkConditionalShowAgainst","formGroupAvailable","Collection","CcdPageFieldsPipe","dataFormGroup","pcf","CcdCollectionTableCaseFieldsFilterPipe","objs","CcdCYAPageLabelFilterPipe","getNonLabelComplexFieldType","CcdTabFieldsPipe","DocumentUrlPipe","FileUploadProgressGuard","canDeactivate","userDecision","CONFIRM_MESSAGE","i1.FileUploadStateService","i2.WindowService","FeeValue","Fee","OrderSummary","PALETTE_COMPONENTS","PaletteModule","MAT_DATE_LOCALE","BrowserModule","FormsModule","ReactiveFormsModule","NgxMdModule","NgxMatDatetimePickerModule","NgxMatTimepickerModule","NgxMatNativeDateModule","MatFormFieldModule","MatInputModule","MatDatepickerModule","PaymentLibModule","ScrollToModule","forRoot","i2__namespace$1","i1__namespace","NgIf","NgSwitch","NgSwitchCase","NgForOf","i3.IsCompoundPipe","KeyValuePipe","i4.LabelSubstitutorDirective","i5","NgControlStatusGroup","FormGroupDirective","i6.FieldLabelPipe","i7.IsReadOnlyPipe","i8.FirstErrorPipe","CaseHeaderModule","previous","previousLabel","screenReaderPageLabel","PaginationComponent_ul_3_li_1_a_1_Template","PaginationComponent_ul_3_li_1_span_2_Template","isFirstPage","getCurrent","_r15_1","page_r10","setCurrent","ctx_r11","screenReaderCurrentLabel","PaginationComponent_ul_3_li_4_a_1_Template","PaginationComponent_ul_3_li_4_ng_container_2_Template","_r23_1","ctx_r20","nextLabel","ctx_r21","PaginationComponent_ul_3_li_5_a_1_Template","PaginationComponent_ul_3_li_5_span_2_Template","isLastPage","PaginationComponent_ul_3_li_1_Template","PaginationComponent_ul_3_li_4_Template","PaginationComponent_ul_3_li_5_Template","responsive","screenReaderPaginationLabel","directionLinks","getLastPage","pages","coerceToBoolean","input","PaginationComponent","maxSize","pageChange","pageBoundsCorrection","_directionLinks","_autoHide","_responsive","_r5_1","selectAll","allOnPageSelected","canAnyBeShared","h_r6","header","c_r7","changeSelection","onKeyUp","tableConfig","idField","canBeShared","col_r16","routerLink","CaseListComponent_ng_container_8_ng_container_3_th_1_ng_container_1_Template","CaseListComponent_ng_container_8_ng_container_3_th_1_ng_container_2_Template","ctx_r31","formatDateAtTime","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_1_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_2_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_3_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_4_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_5_Template","CaseListComponent_ng_container_8_ng_container_3_th_1_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_Template","isFirst_r17","ctx_r9","firstCellIsHeader","CaseListComponent_ng_container_8_th_2_Template","CaseListComponent_ng_container_8_ng_container_3_Template","selectionEnabled","columnConfigs","_r46_1","goToPage","visibilityLabel","autoHide","PaginationComponent_ul_3_Template","DateTimeFormatUtils","formatTime","CaseListComponent","classes","selection","selectedCases","cases","aCase","aSelectedCase","pageNumber","currentPageNo","caption","totalResultsCount","pageSize","CaseListComponent_th_5_Template","CaseListComponent_th_6_Template","CaseListComponent_ng_container_8_Template","CaseListComponent_ccd_pagination_10_Template","TableColumnConfig","TableConfig","DraftService","createDraft","saveDraftEndpoint","getCreateOrUpdateDraftsUrl","V2_MEDIATYPE_DRAFT_CREATE","updateDraft","V2_MEDIATYPE_DRAFT_UPDATE","getDraft","getViewOrDeleteDraftsUrl","V2_MEDIATYPE_DRAFT_READ","deleteDraft","V2_MEDIATYPE_DRAFT_DELETE","createOrUpdateDraft","caseEventData","i1.HttpErrorService","ErrorNotifierService","errorSource","announceError","EventStatusService","isIncomplete","eventStatus","CALLBACK_STATUS_INCOMPLETE","DELETE_DRAFT_STATUS_INCOMPLETE","CALLBACK_STATUS_COMPLETE","DELETE_DRAFT_STATUS_COMPLETE","FieldsPurger","deleteFieldValue","parentField","fieldControl","complexSubField","collectionFieldType_1","complexFieldValues","subFieldId","subCaseField","parentFormGroup","documentFieldValues","clearHiddenFields","wizard","currentPageId","clearHiddenFieldForFieldShowCondition","clearHiddenFieldForPageShowCondition","currentEventState","wp","hasShowConditionPage","resetPage","currentPage","getPage","wpf","findCaseFieldByWizardPageFieldId","hasShowConditionField","resetField","retainHiddenValueByFieldType","fieldGroup","caseRoleFormControl","getShowConditionKey","fieldControls_1","FormErrorService","mapFieldErrors","errorKey","getFormControl","inArray","JurisdictionService","selectedJurisdictionSource","selectedJurisdiction","announceSelectedJurisdiction","NavigationOrigin","BannersService","httpService","getBanners","jurisdictionReferences","getBannersUrl","V2_MEDIATYPE_BANNERS","HttpParams","banners","NavigationNotifierService","navigationSource","navigation","announceNavigation","ProfileService","URL","V2_MEDIATYPE_USER_PROFILE","RequestOptionsBuilder","includeParam","buildOptions","metaCriteria","caseCriteria","view","_d","criterion","_e","_f","FIELD_PREFIX","SearchService","requestOptionsBuilder","searchCases","getPaginationPageSize","getSearchInputUrl","getSearchInputs","V2_MEDIATYPE_SEARCH_INPUTS","currentJurisdiction","currentCaseType","searchInputs","isDataValid","VIEW_SEARCH","VIEW_WORKBASKET","i2.HttpService","i3.RequestOptionsBuilder","i4.LoadingService","RouterHelperService","getUrlSegmentsFromRoot","pathFromRoot","WorkbasketInputFilterService","getWorkbasketInputUrl","getWorkbasketInputs","V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS","workbasketInputs","DefinitionsService","getCaseTypes","access","getJurisdictions","DefinitionsModule","SearchResultViewItemComparatorFactory","createSearchResultViewItemComparator","case_field_type","textArrayComparator","numberComparator","stringComparator","fieldA","fieldB","LoadingModule","PaginationModule","NgxPaginationModule","PaginatePipe","CaseListModule","j_r6","ct_r7","cs_r8","workbasketInput_r10","WorkbasketFiltersComponent_ng_container_22_div_2_Template","FORM_GROUP_VAL_LOC_STORAGE","SAVED_QUERY_PARAM_LOC_STORAGE","REGION_LIST_AND_FRC_FILTER","WorkbasketFiltersComponent","workbasketInputFilterService","jurisdictionService","onApply","onReset","initialised","queryParams","initFilters","init","PARAM_JURISDICTION","PARAM_CASE_TYPE","caseState","PARAM_CASE_STATE","updateFormGroupFilters","getMetadataFields","setFocusToTop","resetFieldsWhenNoDefaults","workbasketInput","onJurisdictionIdChange","selectedJurisdictionCaseTypes","caseTypes","workbasketDefaults","clearWorkbasketInputs","isApplyButtonDisabled","onCaseTypeIdChange","resetCaseType","resetCaseState","selectedCaseTypeStates","sortStates","states","workbasketInputsReady","searchFormValueObject","isCaseTypesDropdownDisabled","isCaseStatesDropdownDisabled","isSearchableAndWorkbasketInputsReady","formGroupLS","savedQueryParams","routeSnapshot","selectedJurisdictionId","defaults","jurisdiction_id","jurisdictions","j","selectCaseType","selectCaseState","selectedCaseStateId_1","selectCaseStateIdFromQueryOrDefaults","ct","defaultCaseStateId","selectedCaseTypeId_1","selectCaseTypeIdFromQueryOrDefaults","case_type_id","defaultCaseTypeId","topContainer","getElementById","i2.WorkbasketInputFilterService","i4.JurisdictionService","i5.AlertService","i6.WindowService","WorkbasketFiltersComponent_option_7_Template","WorkbasketFiltersComponent_option_8_Template","WorkbasketFiltersComponent_option_13_Template","WorkbasketFiltersComponent_option_14_Template","WorkbasketFiltersComponent_option_21_Template","WorkbasketFiltersComponent_ng_container_22_Template","WorkbasketFiltersModule","READ_ACCESS","onWrapperApply","onWrapperReset","CaseListFiltersComponent","definitionsService","isVisible","i1.DefinitionsService","CaseListFiltersComponent_ccd_workbasket_filters_0_Template","CaseListFiltersModule","CallbackErrorsContext","errorMsg_r5","CallbackErrorsComponent_div_0_ng_container_1_li_4_Template","warningMsg_r7","CallbackErrorsComponent_div_0_ng_container_3_li_4_Template","CallbackErrorsComponent_div_0_ng_container_1_Template","CallbackErrorsComponent_div_0_br_2_Template","CallbackErrorsComponent_div_0_ng_container_3_Template","hasErrors","hasWarnings","CallbackErrorsComponent","triggerTextIgnore","TRIGGER_TEXT_IGNORE","triggerTextContinue","TRIGGER_TEXT_SUBMIT","callbackErrorsSubject","callbackErrorsContext","errorEvent","hasInvalidData","buildCallbackErrorsContext","errorContext","trigger_text","field_errors","TRIGGER_TEXT_START","TRIGGER_TEXT_GO","CallbackErrorsComponent_div_0_Template","ErrorsModule","j_r3","ct_r4","e_r5","CreateCaseFiltersComponent","selectionSubmitted","selectionChanged","initControls","selectJurisdiction","filterJurisdictionControl","resetEvent","findJurisdiction","filterCaseTypeControl","findCaseType","selectedCaseTypeEvents","sortEvents","selectEvent","filterEventControl","onEventIdChange","emitChange","findEvent","isCreatable","retainEventsWithCreateRights","retainEventsWithNoPreStates","pre_states","userProfile","caseEvent","i1.OrderService","i2.DefinitionsService","startButtonText","CreateCaseFiltersComponent_option_7_Template","CreateCaseFiltersComponent_option_14_Template","CreateCaseFiltersComponent_option_21_Template","CreateCaseFiltersModule","CreateCaseFiltersSelection","DeleteOrCancelDialogComponent","SaveOrDiscardDialogComponent","save","discard","DialogsModule","ErrorMessageComponent","ErrorMessageComponent_ng_container_0_Template","EventMessageModule","MultipleTasksExistComponent","case","NoTasksAvailableComponent","JudicialworkerService","getJudicialworkers","userIds","serviceId","services","CaseworkerService","getCaseworkers","serviceIds","assignedUserName","TaskAssignedComponent","judicialworkerService","caseworkerService","task","caseworkerSubscription","service","caseworkers","caseworker","idamId","assignee","firstName","lastName","judicialworkerSubscription","judicialworkers","judicialworker","sidam_id","full_name","i2.JudicialworkerService","i3.CaseworkerService","TaskAssignedComponent_div_0_Template","TaskCancelledComponent","TaskConflictComponent","EventStartStates","TaskUnassignedComponent","EventStartStateMachineService","initialiseStateMachine","StateMachine","createStates","stateMachine","stateCheckForMatchingTasks","createState","CHECK_FOR_MATCHING_TASKS","entryActionForStateCheckForMatchingTasks","stateNoTask","NO_TASK","entryActionForStateNoTask","stateOneOrMoreTasks","ONE_OR_MORE_TASKS","entryActionForStateOneOrMoreTasks","stateTaskUnassigned","TASK_UNASSIGNED","entryActionForStateTaskUnAssigned","stateTaskAssignedToUser","TASK_ASSIGNED_TO_USER","entryActionForStateTaskAssignedToUser","stateOneTaskAssignedToUser","ONE_TASK_ASSIGNED_TO_USER","entryActionForStateOneTaskAssignedToUser","stateMultipleTasksAssignedToUser","MULTIPLE_TASKS_ASSIGNED_TO_USER","entryActionForStateMultipleTasksAssignedToUser","stateFinal","FINAL","finalAction","addTransitions","addTransitionsForStateCheckForMatchingTasks","addTransitionsForStateNoTask","addTransitionsForStateOneOrMoreTasks","addTransitionsForStateTaskUnassigned","addTransitionsForStateTaskAssignedToUser","addTransitionsForStateOneTaskAssignedToUser","addTransitionsForStateMultipleTasksAssignedToUser","startStateMachine","start","trigger","navigate","relativeTo","entryActionForStateMultipleTasks","tasksAssignedToUser","task_state","navigationURL","theQueryParams","isComplete","addTransition","EventStartComponent","i1.EventStartStateMachineService","EventStartGuard","canActivate","caseId_1","eventId_1","taskId_1","caseInfoStr","caseInfo","cid","checkForTasks","checkTaskInEventNotRequired","task_required_for_event","i1.WorkAllocationService","i3.AbstractAppConfig","i4.SessionStorageService","EventTasksResolverService","queryParamMap","EventStartModule","LoadingSpinnerComponent","loadingText","SearchInput","searchInput_r6","SearchFiltersComponent_ng_container_13_div_2_Template","JURISDICTION_LOC_STORAGE","META_FIELDS_LOC_STORAGE","FORM_GROUP_VALUE_LOC_STORAGE","CASE_TYPE_LOC_STORAGE","SearchFiltersComponent","searchService","onJurisdiction","localStorageJurisdiction_1","getQueryParams","populateValuesInLocalStorage","searchInput","isSearchable","isSearchableAndSearchInputsReady","searchInputsReady","formValueObject","isJurisdictionSelected","caseTypeObject_1","onWrapperJurisdiction","autoApply","i1.SearchService","i2.OrderService","i3.JurisdictionService","i4.WindowService","SearchFiltersComponent_option_7_Template","SearchFiltersComponent_option_12_Template","SearchFiltersComponent_ng_container_13_Template","SearchFiltersWrapperComponent","SearchFiltersWrapperComponent_ccd_search_filters_0_Template","SearchFiltersModule","ComplexFieldOverride","CaseFieldBuilder","withACLs","withId","withFieldType","withDisplayContext","withDisplayContextParameter","withHidden","withHintText","withOrder","withSecurityLabel","security_label","withShowCondition","withShowSummaryContentOption","option","show_summary_content_option","withValue","withListValue","build","textFieldType","TestRouteSnapshotBuilder","withParent","withParams","withData","outlet","routeConfig","root","firstChild","paramMap","typeComplexFields","_delete","show_summary","can_save_draft","event_token","hint","ACLs","displayContext","complexFieldOverride","typeId","fixedListItems","pageColumnNumber","complexFieldOverrides"],"sources":["../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/headers.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.html","../../../node_modules/tslib/tslib.es6.js","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert-icon-class.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-banner/activity-banner.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-banner/activity-banner.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-icon/activity-icon.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-icon/activity-icon.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/activity/activity.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/http/http-error.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/app.config.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/auth/auth.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/session/session-storage.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.polling.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/fixed-list-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/field-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/draft.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/format-translator.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/date.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.utils.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/field-type-sanitiser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-value.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/services/placeholder.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-reference/case-reference.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/markdown/markdown.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/markdown/markdown.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/label/label-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-header/case-header.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/label/label-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-header/case-header.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/banners.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footers.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/form.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/dash.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/field-label.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/first-error.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-compound.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/case-field.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-mandatory.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-read-only.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-read-only-and-not-collection.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/utils.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-title/ccd-case-title.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/search-result/sorting/sort-search-result.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/pipes.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-form-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/palette-context.enum.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-field-read.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/commons/constants.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-validators.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-field-write.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/addresses/address.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/address/address-option.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/address-parser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/addresses.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/domain/conditional-show.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/fields-filter.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/write-complex-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/write-complex-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/address/write-address-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/address/write-address-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/read-case-link-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/read-case-link-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/write-case-link-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/write-case-link-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/read-collection-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/read-collection-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/remove-dialog/remove-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/remove-dialog/remove-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/jurisdiction.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/profile/profile.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.notifier.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/write-collection-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/write-collection-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-raw.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-raw.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-state.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type-lite.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/event-case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/banner.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-collection-table.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-collection-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-table.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/read-date-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/datetime-picker/datetime-picker-utils.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/datetime-picker/datetime-picker.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/datetime-picker/datetime-picker.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-container-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-container-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/window/window.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/document-management/document-management.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/conditional-show-registrar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/grey-bar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show-form.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-event-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-access-utils/index.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/order/order.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/wizard-page-field-to-case-field.mapper.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/alert/alert.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/work-allocation.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/cases.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/read-document-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/read-document-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/document-dialog/document-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/helpers/init-dialog-helper.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/document-dialog/document-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/alert/alert.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-tab.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-print-document.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/document/document-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/organisation/organisation-converter.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-column.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-details.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-event-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/workbasket/workbasket-input.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/pagination-metadata.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-parameters.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/case.notifier.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/file-upload-state.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/write-document-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/write-document-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/dynamic-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/read-dynamic-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/write-dynamic-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/write-dynamic-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/dynamic-radio-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/read-dynamic-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/write-dynamic-radio-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/write-dynamic-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/email/read-email-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/email/write-email-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/email/write-email-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/fixed-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/read-fixed-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/write-fixed-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/write-fixed-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/fixed-radio-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/read-fixed-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/write-fixed-radio-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/write-fixed-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-table.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-details.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-details.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/case-history-viewer-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/case-history-viewer-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/read-money-gbp-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/money-gbp-input.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/write-money-gbp-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/write-money-gbp-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/read-multi-select-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/read-multi-select-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/write-multi-select-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/write-multi-select-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/number/read-number-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/number/write-number-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/number/write-number-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-row.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-row.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/write-order-summary-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/write-order-summary-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/organisation/organisation.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-raw.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-raw.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-table.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-complex-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-complex-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/payment-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/payment/case-payment-history-viewer-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/payment/case-payment-history-viewer-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/phone-uk/read-phone-uk-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/phone-uk/write-phone-uk-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/phone-uk/write-phone-uk-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text-area/read-text-area-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/browser/browser.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text-area/write-text-area-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text-area/write-text-area-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text/read-text-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text/write-text-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text/write-text-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/unsupported-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/waystopay/waystopay-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/waystopay/waystopay-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/yes-no.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/read-yes-no-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/write-yes-no-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/write-yes-no-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/palette.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read-label.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read-label.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-write.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-write.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/collection-create-checker.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/ccd-read-fields-filter.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/cdd-page-fields.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/ccd-collection-table-value-case-fields.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/ccd-cyapage-label-filter.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/ccd-tab-fields.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/document-url.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/file-upload-progress.guard.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/fee-value.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/fee.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/order-summary.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/palette.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-header/case-header.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/pagination/pagination.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/pagination/pagination.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list/case-list.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list/case-list.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/draft/draft.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/error/error-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/eventStatusService/event-status.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.purger.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/jurisdiction/jurisdiction.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/banners/banners.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-origin.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/request/request.options.builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search/search.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/router/router-helper.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/workbasket/workbasket-input-filter.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search-result/sorting/search-result-view-item-comparator-factory.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/pagination/pagination.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list/case-list.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/workbasket-filters/workbasket-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/workbasket-filters/workbasket-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/workbasket-filters/workbasket-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/access-types.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list-filters/case-list-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list-filters/case-list-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list-filters/case-list-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/domain/error-context.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/callback-errors.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/callback-errors.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/errors.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters-selection.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/dialogs.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error-message/error-message.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error-message/error-message.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error-message/error-message.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/judicial-worker.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/case-worker.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-assigned/task-assigned.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-assigned/task-assigned.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-conflict/task-conflict.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-conflict/task-conflict.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/models/event-start-states-enum.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/services/event-start-state-machine.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/event-start.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/event-guard/event-start.guard.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/event-start.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/loading-spinner/loading-spinner.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/loading-spinner/loading-spinner.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/domain/search-input.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters-wrapper.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters-wrapper.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field-complex-override.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/case-field-builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/shared.test.fixture.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/test/test-route-snapshot-builder.ts"],"sourcesContent":["<footer class=\"group js-footer\" id=\"footer\" role=\"footer\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"footer-wrapper\">\n\n <!-- Condition: Solicitor -->\n <div *ngIf=\"isSolicitor\" class=\"footer-meta\">\n <div class=\"footer-meta-inner\">\n <ng-content select=\"[footerSolsNavLinks]\"></ng-content>\n <div class=\"open-government-licence\">\n <p class=\"logo\"><a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence</a></p>\n <p>All content is available under the <a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence v3.0</a>, except where otherwise stated</p>\n </div>\n </div>\n\n <div class=\"copyright\">\n <a href=\"https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/copyright-and-re-use/crown-copyright/\">© Crown copyright</a>\n </div>\n </div>\n\n <!-- Condition: Case Worker -->\n <div *ngIf=\"!isSolicitor\" class=\"footer-meta\">\n <div class=\"title\">\n <span class=\"footer-text\">Help</span>\n </div>\n <div class=\"email\">\n <span class=\"footer-text\">Email: <a href=\"mailto:{{email}}\">{{email}}</a></span>\n </div>\n <div class=\"phone\">\n <span class=\"footer-text\">Phone: {{phone}}</span>\n </div>\n <div class=\"work-hours\">\n <span class=\"footer-text\">{{workhours}}</span>\n </div>\n <ng-content select=\"[footerCaseWorkerNavLinks]\"></ng-content>\n </div>\n\n </div>\n</footer>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-footer-bar',\n templateUrl: './footer.html',\n styleUrls: ['./footer.scss']\n})\nexport class FooterComponent {\n\n @Input()\n public email: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public phone: string;\n\n @Input()\n public workhours: string;\n\n}\n","<header role=\"banner\" id=\"global-header\" class=\"with-proposition\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"header-wrapper\">\n\n <div class=\"header-global\" [class.header-logo]=\"isSolicitor\">\n <div *ngIf=\"isSolicitor\">\n <a href=\"https://www.gov.uk\" title=\"Go to the GOV.UK homepage\" id=\"logo\" class=\"content\" style=\"margin-left: 0px;\">\n <img src=\"/img/gov.uk_logotype_crown_invert_trans.png?0.23.0\" width=\"36\" height=\"32\" alt=\"\"> GOV.UK\n </a>\n </div>\n <div class=\"global-header\" *ngIf=\"!isSolicitor\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n </div>\n </div>\n\n <div class=\"header-proposition\">\n <div class=\"content\">\n <a href=\"#proposition-links\" class=\"js-header-toggle menu\">Menu</a>\n <div *ngIf=\"isSolicitor\" id=\"proposition-menu\">\n <div class=\"title-solicitor\">\n <span id=\"proposition-name\">{{title}}</span>\n <ng-content select=\"[headerNavigation]\"></ng-content>\n </div>\n </div>\n\n <div class=\"proposition-right\">\n <span id=\"user-name\">{{username}}</span>\n <a (click)=\"signOut()\" id=\"sign-out\" href=\"javascript:void(0)\">Sign Out</a>\n </div>\n </div>\n </div>\n\n </div>\n</header>\n","import { Component, Input, Output } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'cut-header-bar',\n templateUrl: './header-bar.html',\n styleUrls: ['./header-bar.scss']\n})\nexport class HeaderBarComponent {\n\n @Input()\n public title: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public username: string;\n\n @Output()\n private readonly signOutRequest: EventEmitter<any> = new EventEmitter();\n\n public signOut() {\n this.signOutRequest.emit();\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-bar',\n templateUrl: './navigation.html',\n styleUrls: ['./navigation.scss']\n})\nexport class NavigationComponent {\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div>\n <a [routerLinkActive]=\"'item-bold'\" [routerLink]=\"link\">{{label}}</a>\n <input type=\"image\" alt=\"{{label}} button\" *ngIf=\"imageLink\" src=\"{{imageLink}}\"/>\n</div>\n","<div>\n <nav [class.full-screen]=\"!isSolicitor\" class=\"cut-nav-bar\">\n <ng-content select=\"[leftNavLinks]\"></ng-content>\n <ng-content select=\"[rightNavLinks]\"></ng-content>\n </nav>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-item',\n templateUrl: './navigation-item.html',\n styleUrls: ['./navigation-item.scss']\n})\nexport class NavigationItemComponent {\n\n @Input()\n public label: string;\n\n @Input()\n public link: string;\n\n @Input()\n public imageLink: string;\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-phase-bar',\n templateUrl: './phase.html',\n styleUrls: ['./phase.scss']\n})\nexport class PhaseComponent {\n\n @Input()\n public phaseLabel: string;\n\n @Input()\n public phaseLink: string;\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div [class.full-screen]=\"!isSolicitor\" class=\"phase-banner\">\n <p>\n <strong class=\"phase-tag\">{{phaseLabel}}</strong>\n <span class=\"text-16\">This is a new service – your <a href=\"{{phaseLink}}\" target=\"_blank\" rel=\"noopener\">feedback</a> will help us to improve it.</span>\n </p>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { HeaderBarComponent } from './header-bar/header-bar.component';\nimport { NavigationItemComponent } from './navigation/navigation-item.component';\nimport { NavigationComponent } from './navigation/navigation.component';\nimport { PhaseComponent } from './phase/phase.component';\n\n@NgModule({\n imports: [CommonModule, RouterModule],\n declarations: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent],\n exports: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent]\n})\nexport class HeadersModule {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'cut-body',\n templateUrl: './body.html',\n styleUrls: ['./fonts.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BodyComponent {\n\n}\n","<div class=\"global-display\">\n <ng-content select=\"[topBody]\"></ng-content>\n <ng-content select=\"[leftBody]\"></ng-content>\n <ng-content select=\"[rightBody]\"></ng-content>\n</div>\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","<div class=\"form-date\">\n\n <div class=\"form-group form-group-day\">\n <label class=\"form-label\" [for]=\"dayId()\">Day</label>\n <input #dayInput\n class=\"form-control\"\n [id]=\"dayId()\"\n [name]=\"dayId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayDay\"\n (change)=\"dayChange(dayInput.value)\"\n (keyup)=\"dayChange(dayInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-month\">\n <label class=\"form-label\" [for]=\"monthId()\">Month</label>\n <input #monthInput\n class=\"form-control\"\n [id]=\"monthId()\"\n [name]=\"monthId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayMonth\"\n (change)=\"monthChange(monthInput.value)\"\n (keyup)=\"monthChange(monthInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-year\">\n <label class=\"form-label\" [for]=\"yearId()\">Year</label>\n <input #yearInput\n class=\"form-control\"\n [id]=\"yearId()\"\n [name]=\"yearId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayYear\"\n (change)=\"yearChange(yearInput.value)\"\n (keyup)=\"yearChange(yearInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-hour\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"hourId()\">Hour</label>\n <input #hourInput\n class=\"form-control\"\n [id]=\"hourId()\"\n [name]=\"hourId()\"\n type=\"number\"\n [value]=\"displayHour\"\n (input)=\"hourChange(hourInput.value)\"\n (keyup)=\"hourChange(hourInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-minute\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"minuteId()\">Minute</label>\n <input #minuteInput\n class=\"form-control\"\n [id]=\"minuteId()\"\n [name]=\"minuteId()\"\n type=\"number\"\n [value]=\"displayMinute\"\n (input)=\"minuteChange(minuteInput.value)\"\n (keyup)=\"minuteChange(minuteInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-second\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"secondId()\">Second</label>\n <input #secondInput\n class=\"form-control\"\n [id]=\"secondId()\"\n [name]=\"secondId()\"\n type=\"number\"\n [value]=\"displaySecond\"\n (input)=\"secondChange(secondInput.value)\"\n (keyup)=\"secondChange(secondInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n</div>\n","import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n@Component({\n selector: 'cut-date-input',\n templateUrl: './date-input.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n }\n ],\n})\nexport class DateInputComponent implements ControlValueAccessor, Validator, OnInit, OnDestroy {\n @Input()\n public id: string;\n\n @Input()\n public mandatory: boolean;\n\n @Input()\n public isDateTime: boolean;\n\n @Input()\n public formControl: FormControl;\n\n @Input()\n public isInvalid: boolean;\n\n public isTouched = false;\n public displayDay: string = null;\n public displayMonth: string = null;\n public displayYear: string = null;\n\n public displayHour: string = null;\n public displayMinute: string = null;\n public displaySecond: string = null;\n // Works with\n // 2018-04-09T08:02:27.542\n // 2018-04-09T08:02:27.542Z\n // 2018-04-09T08:02:27.542+01:00\n private readonly DATE_FORMAT =\n /^(19|20)\\d{2}-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?|Z)?$/;\n // year - month - day T HH : MM : SS .000 Z or + 01 : 00\n private propagateChange: (_: any) => {};\n private rawValue = '';\n private day: string;\n private month: string;\n private year: string;\n private hour: string;\n private minute: string;\n private second: string;\n\n public ngOnInit() {\n if (this.mandatory && this.isDateTime) {\n this.displayHour = '00';\n this.displayMinute = '00';\n this.displaySecond = '00';\n this.hour = '00';\n this.minute = '00';\n this.second = '00';\n }\n }\n\n public writeValue(obj: string): void { // 2018-04-09T08:02:27.542\n if (obj) {\n this.rawValue = this.removeMilliseconds(obj);\n // needs to handle also partial dates, e.g. -05-2016 (missing day)\n const [datePart, timePart] = this.rawValue.split('T');\n const dateValues = datePart.split('-');\n this.year = this.displayYear = dateValues[0] || '';\n this.month = this.displayMonth = dateValues[1] || '';\n this.day = this.displayDay = dateValues[2] || '';\n if (timePart) {\n const timeParts = timePart.split(':');\n this.hour = this.displayHour = timeParts[0] || '';\n this.minute = this.displayMinute = timeParts[1] || '';\n this.second = this.displaySecond = timeParts[2] || '';\n }\n }\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (this.mandatory && !this.viewValue()) {\n return {\n required: 'This field is required'\n };\n }\n if (control.value && !this.isDateFormat(this.getValueForValidation(control))) {\n return {\n pattern: 'Date is not valid'\n };\n }\n return undefined;\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n // Do nothing.\n }\n\n public ngOnDestroy() {\n this.validate = (control: AbstractControl): ValidationErrors => {\n return undefined;\n };\n }\n\n public dayChange(value: string) {\n // get value from input\n this.day = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public monthChange(value: string) {\n // get value from input\n this.month = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public yearChange(value: string) {\n // get value from input\n this.year = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public hourChange(value: string) {\n // get value from input\n this.hour = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public minuteChange(value: string) {\n // get value from input\n this.minute = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public secondChange(value: string) {\n // get value from input\n this.second = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public inputFocus() {\n this.isTouched = false;\n this.touch();\n }\n\n public touch() {\n if (this.isTouched) {\n this.formControl.markAsTouched();\n this.propagateChange(this.rawValue);\n } else {\n this.formControl.markAsUntouched();\n }\n }\n\n public dayId() {\n return this.id + '-day';\n }\n\n public monthId() {\n return this.id + '-month';\n }\n\n public yearId() {\n return this.id + '-year';\n }\n\n public hourId() {\n return this.id + '-hour';\n }\n\n public minuteId() {\n return this.id + '-minute';\n }\n\n public secondId() {\n return this.id + '-second';\n }\n\n private viewValue(): string {\n if (this.day || this.month || this.year || this.hour || this.minute || this.second) {\n const date = [\n this.year ? this.year : '',\n this.month ? this.pad(this.month) : '',\n this.day ? this.pad(this.day) : ''\n ].join('-');\n if (this.isDateTime) {\n const time = [\n this.hour ? this.pad(this.hour) : '',\n this.minute ? this.pad(this.minute) : '',\n this.second ? this.pad(this.second) : ''\n ].join(':');\n return date + 'T' + time + '.000';\n } else {\n return date;\n }\n }\n return null;\n }\n\n private isDateFormat(val: any): boolean {\n return this.DATE_FORMAT.test(val);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n\n private getValueForValidation(control: any) {\n if (this.isDateTime) {\n return control.value;\n } else {\n return control.value.replace(/Z.*/, 'T00:00:00Z');\n }\n }\n\n private removeMilliseconds(dateTime: string): string {\n return dateTime.replace(/\\..*/, '');\n }\n}\n","<div\n class=\"hmcts-banner\"\n [class.hmcts-banner--warning]=\"type === alertMessageType.WARNING || type === alertMessageType.ERROR\"\n [class.hmcts-banner--success]=\"type === alertMessageType.SUCCESS\"\n>\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"alertMessageType.WARNING\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.ERROR\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.SUCCESS\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.INFORMATION\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">{{type}}</span>\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\nexport enum AlertMessageType {\n WARNING = 'warning',\n SUCCESS = 'success',\n ERROR = 'error',\n INFORMATION = 'information'\n}\n\n@Component({\n selector: 'cut-alert',\n templateUrl: './alert.component.html',\n styleUrls: [\n './alert.component.scss'\n ]\n})\nexport class AlertComponent {\n\n // confirmation type has been removed as per EUI-3232\n public static readonly TYPE_WARNING = 'warning';\n public static readonly TYPE_SUCCESS = 'success';\n public static readonly TYPE_ERROR = 'error';\n public static readonly TYPE_INFORMATION = 'information';\n\n @Input()\n public type: AlertMessageType;\n\n @Input()\n public showIcon = true;\n\n public alertMessageType = AlertMessageType;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AlertComponent } from './alert.component';\n\n@Pipe({\n name: 'cutAlertIconClass'\n})\nexport class AlertIconClassPipe implements PipeTransform {\n private static readonly CLASS_WARNING = 'icon-alert';\n private static readonly CLASS_SUCCESS = 'icon-tick';\n\n public transform(type: string): string {\n switch (type) {\n case AlertComponent.TYPE_SUCCESS:\n return AlertIconClassPipe.CLASS_SUCCESS;\n case AlertComponent.TYPE_WARNING:\n default:\n return AlertIconClassPipe.CLASS_WARNING;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AlertIconClassPipe } from './alert-icon-class.pipe';\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n AlertComponent,\n AlertIconClassPipe\n ],\n exports: [\n AlertComponent\n ]\n})\nexport class AlertModule {}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-tab',\n templateUrl: './tab.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabComponent {\n\n @Input()\n public id: string;\n\n @Input()\n public title: string;\n\n @Input()\n public selected: boolean;\n\n}\n","<div\n class=\"tabs-panel\"\n [id]=\"id\"\n role=\"tabpanel\"\n [ngClass]=\"{\n 'js-hidden': !selected\n }\"\n [attr.aria-hidden]=\"!selected\"\n>\n <ng-content></ng-content>\n</div>\n","<div class=\"tabs\">\n\n <ul class=\"tabs-list\" role=\"list\">\n <li class=\"tabs-list-item\" *ngFor=\"let panel of panels\">\n <a\n class=\"tabs-toggle\"\n [routerLink]=\"['.']\"\n [fragment]=\"panel.id\"\n role=\"tab\"\n (click)=\"show(panel.id)\"\n [attr.aria-controls]=\"panel.id\"\n [attr.aria-selected]=\"panel.selected\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'tabs-toggle-selected': panel.selected\n }\"\n #tab\n >{{panel.title}}</a>\n </li>\n </ul>\n\n <div class=\"tabs-content\">\n <ng-content></ng-content>\n </div>\n\n</div>\n","import { AfterContentInit, Component, ContentChildren, ElementRef, QueryList, ViewChildren } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { TabComponent } from './tab.component';\n\n@Component({\n selector: 'cut-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabsComponent implements AfterContentInit {\n\n @ViewChildren('tab') public tabs!: QueryList<ElementRef>;\n\n @ContentChildren(TabComponent)\n public panels: QueryList<TabComponent>;\n\n private readonly panelIds: string[] = [];\n\n constructor(private readonly route: ActivatedRoute) {}\n\n public ngAfterContentInit(): void {\n this.panels.forEach((panel) => this.panelIds.push(panel.id));\n\n this.show(this.route.snapshot.fragment);\n }\n\n public show(id: string) {\n const panels: TabComponent[] = this.panels.toArray();\n\n id = id || panels[0].id;\n\n if (0 > this.panelIds.indexOf(id)) {\n id = panels[0].id;\n }\n\n panels.forEach((panel) => panel.selected = id === panel.id);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TabComponent } from './tab.component';\nimport { TabsComponent } from './tabs.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n TabsComponent,\n TabComponent,\n ],\n exports: [\n TabsComponent,\n TabComponent,\n ]\n})\nexport class TabsModule {}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ccd-activity-banner',\n templateUrl: './activity-banner.component.html',\n styleUrls: ['./activity-banner.component.css']\n})\nexport class ActivityBannerComponent implements OnInit {\n @Input()\n public bannerType: string;\n\n @Input()\n public description: string;\n\n @Input()\n public imageLink: string;\n\n constructor() { }\n\n public ngOnInit() {\n }\n}\n","<div [ngClass]=\"{caseLocked: bannerType === 'editor', someoneViewing: bannerType === 'viewer'}\">\n <div class=\"bannerIcon\"><img alt=\"{{description}}\" class=\"img-responsive\" src=\"{{imageLink}}\" /></div>\n <div class=\"bannerText\">{{description}}</div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ccd-activity-icon',\n templateUrl: './activity-icon.component.html',\n styleUrls: ['./activity-icon.component.css']\n})\nexport class ActivityIconComponent implements OnInit {\n @Input()\n public description: string;\n\n @Input()\n public imageLink: string;\n\n constructor() { }\n\n public ngOnInit() {\n }\n}\n","<div class=\"tooltip\">\n <img alt=\"{{description}}\" class=\"img-responsive\" src=\"{{imageLink}}\" />\n <span class=\"tooltiptext\">{{description}}</span>\n</div>\n","export class ActivityInfo {\n public forename: string;\n public surname: string;\n}\n\nexport class Activity {\n public caseId: string;\n public viewers: ActivityInfo[];\n public editors: ActivityInfo[];\n public unknownViewers: number;\n public unknownEditors: number;\n}\n\nexport enum DisplayMode {\n BANNER,\n ICON\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nexport class HttpError {\n\n constructor() {\n this.timestamp = new Date().toISOString();\n this.error = HttpError.DEFAULT_ERROR;\n this.message = HttpError.DEFAULT_MESSAGE;\n this.status = HttpError.DEFAULT_STATUS;\n this.exception = null;\n this.path = null;\n this.details = null;\n this.callbackErrors = null;\n this.callbackWarnings = null;\n }\n private static readonly DEFAULT_ERROR = 'Unknown error';\n private static readonly DEFAULT_MESSAGE = 'Something unexpected happened, our technical staff have been automatically notified';\n private static readonly DEFAULT_STATUS = 500;\n\n public timestamp: string;\n public status: number;\n public error: string;\n public exception: string;\n public message: string;\n public path: string;\n public details?: any;\n public callbackErrors?: any;\n public callbackWarnings?: any;\n public static from(response: HttpErrorResponse): HttpError {\n const error = new HttpError();\n\n // Check that the HttpErrorResponse contains an \"error\" object before mapping the error properties\n if (!!(response && response.error)) {\n Object.keys(error).forEach(key => {\n error[key] = response.error.hasOwnProperty(key) && response.error[key] ? response.error[key] : error[key];\n });\n }\n\n return error;\n }\n}\n","export interface AccessManagementBasicViewMockModel {\n active?: boolean;\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n accessProcess?: string;\n}\n\nexport interface AccessManagementRequestReviewMockModel {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n}\n\nexport abstract class AbstractAppConfig {\n public abstract load(): Promise<void>;\n public abstract getLoginUrl(): string;\n public abstract getApiUrl(): string;\n public abstract getCaseDataUrl(): string;\n public abstract getDocumentManagementUrl(): string;\n public getDocumentManagementUrlV2(): string {\n return undefined;\n }\n public getDocumentSecureMode(): boolean {\n return undefined;\n }\n public abstract getRemoteDocumentManagementUrl(): string;\n public abstract getHrsUrl(): string;\n public abstract getRemoteHrsUrl(): string;\n public abstract getAnnotationApiUrl(): string;\n public abstract getPostcodeLookupUrl(): string;\n public abstract getOAuth2ClientId(): string;\n public abstract getPaymentsUrl(): string;\n public abstract getPayBulkScanBaseUrl(): string;\n public abstract getCreateOrUpdateDraftsUrl(ctid: string): string;\n public abstract getViewOrDeleteDraftsUrl(did: string): string;\n public abstract getActivityUrl(): string;\n public abstract getActivityNexPollRequestMs(): number;\n public abstract getActivityRetry(): number;\n public abstract getActivityBatchCollectionDelayMs(): number;\n public abstract getActivityMaxRequestPerBatch(): number;\n public abstract getCaseHistoryUrl(caseId: string, eventId: string): string;\n public abstract getPrintServiceUrl(): string;\n /**\n * Dummy version replacing deprecated `getRemotePrintServiceUrl()`, to be removed in next major release\n * @deprecated\n * @returns `undefined`\n */\n public getRemotePrintServiceUrl(): string {\n return undefined;\n }\n public abstract getPaginationPageSize(): number;\n public abstract getBannersUrl(): string;\n public abstract getPrdUrl(): string;\n public abstract getCacheTimeOut(): number;\n public abstract getWorkAllocationApiUrl(): string;\n public getUserInfoApiUrl(): string {\n return undefined;\n }\n public getAccessManagementMode(): boolean {\n return undefined;\n }\n public getAccessManagementBasicViewMock(): AccessManagementBasicViewMockModel {\n return undefined;\n }\n public getAccessManagementRequestReviewMockModel(): AccessManagementRequestReviewMockModel {\n return undefined;\n }\n public getLocationRefApiUrl(): string {\n return undefined;\n }\n public getCamRoleAssignmentsApiUrl(): string {\n return undefined;\n }\n public abstract getRefundsUrl(): string;\n public abstract getPaymentReturnUrl(): string;\n}\n\nexport class CaseEditorConfig {\n public api_url: string;\n public case_data_url: string;\n public document_management_url: string;\n public document_management_url_v2: string;\n public hrs_url: string;\n public document_management_secure_enabled: boolean;\n public login_url: string;\n public oauth2_client_id: string;\n public postcode_lookup_url: string;\n public remote_document_management_url: string;\n public remote_hrs_url: string;\n public annotation_api_url: string;\n public payments_url: string;\n public pay_bulk_scan_url: string;\n public activity_batch_collection_delay_ms: number;\n public activity_next_poll_request_ms: number;\n public activity_retry: number;\n public activity_url: string;\n public activity_max_request_per_batch: number;\n public print_service_url: string;\n /**\n * remote_print_service_url marked as optional since deprecation, ahead of removal in next major release\n * @deprecated\n */\n public remote_print_service_url?: string;\n public pagination_page_size: number;\n public prd_url: string;\n public cache_time_out: number;\n public work_allocation_api_url: string;\n public user_info_api_url: string;\n public access_management_mode?: boolean;\n public access_management_basic_view_mock?: {\n active?: boolean,\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n },\n accessProcess?: string\n };\n public access_management_request_review_mock?: {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n };\n public location_ref_api_url?: string;\n public cam_role_assignments_api_url?: string;\n public refunds_url: string;\n public payment_return_url: string;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { AbstractAppConfig } from '../../../app.config';\n\n/**\n * `Oauth2Service` and `AuthService` cannot be merged as it creates a cyclic dependency on `AuthService` through `HttpErrorService`.\n */\n@Injectable()\nexport class AuthService {\n\n private static readonly PATH_OAUTH2_REDIRECT = '/oauth2redirect';\n\n constructor(private readonly appConfig: AbstractAppConfig,\n @Inject(DOCUMENT) private readonly document: any) {}\n\n public signIn(): void {\n const loginUrl = this.appConfig.getLoginUrl();\n const clientId = this.appConfig.getOAuth2ClientId();\n const redirectUri = encodeURIComponent(this.redirectUri());\n\n this.document.location.href = `${loginUrl}?response_type=code&client_id=${clientId}&redirect_uri=${redirectUri}`;\n }\n\n public redirectUri(): string {\n return this.document.location.origin + AuthService.PATH_OAUTH2_REDIRECT;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { AuthService } from '../auth/auth.service';\n\n\n@Injectable()\nexport class HttpErrorService {\n\n constructor(private readonly authService: AuthService) {}\n\n private static readonly CONTENT_TYPE = 'Content-Type';\n private static readonly JSON = 'json';\n\n private error: HttpError;\n public static convertToHttpError(error: HttpErrorResponse | any): HttpError {\n if (error instanceof HttpError) {\n return error;\n }\n let httpError = new HttpError();\n if (error instanceof HttpErrorResponse) {\n if (error.headers\n && error.headers.get(HttpErrorService.CONTENT_TYPE)\n && error.headers.get(HttpErrorService.CONTENT_TYPE).indexOf(HttpErrorService.JSON) !== -1) {\n try {\n httpError = HttpError.from(error);\n } catch (e) {\n console.error(e, e.message);\n }\n }\n if (!httpError.status) {\n httpError.status = error.status;\n }\n } else if (error) {\n if (error.message) {\n httpError.message = error.message;\n }\n if (error.status) {\n httpError.status = error.status;\n }\n }\n return httpError;\n }\n\n public setError(error: HttpError) {\n this.error = error;\n }\n\n public removeError(): HttpError {\n const error = this.error;\n this.error = null;\n return error;\n }\n\n public handle(error: HttpErrorResponse | any, redirectIfNotAuthorised = true): Observable<never> {\n const httpError: HttpError = HttpErrorService.convertToHttpError(error);\n if (redirectIfNotAuthorised && (httpError.status === 401 || httpError.status === 403)) {\n this.authService.signIn();\n }\n return throwError(httpError);\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService } from './http-error.service';\n\n@Injectable()\nexport class HttpService {\n\n private static readonly HEADER_ACCEPT = 'Accept';\n private static readonly HEADER_CONTENT_TYPE = 'Content-Type';\n\n constructor(\n private readonly httpclient: HttpClient,\n private readonly httpErrorService: HttpErrorService\n ) {}\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n\n public get(\n url: string,\n options?: OptionsType,\n redirectIfNotAuthorised = true,\n errorHandler?: (error: HttpErrorResponse) => HttpError): Observable<any> {\n return this.httpclient\n .get(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n let error: HttpErrorResponse | HttpError = res;\n if (typeof errorHandler === 'function') {\n error = errorHandler(res);\n }\n return this.httpErrorService.handle(error, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public post(url: string, body: any, options?: OptionsType, redirectIfNotAuthorised = true): Observable<any> {\n return this.httpclient\n .post(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public put(url: string, body: any, options?: OptionsType): Observable<any> {\n return this.httpclient\n .put(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public delete(url: string, options?: OptionsType): Observable<any> {\n return this.httpclient\n .delete(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n public setDefaultValue(options?: OptionsType): OptionsType {\n options = options || {observe: 'body'};\n options.withCredentials = true;\n\n if (!options.headers) {\n options.headers = new HttpHeaders()\n .set(HttpService.HEADER_ACCEPT, 'application/json')\n .set(HttpService.HEADER_CONTENT_TYPE, 'application/json');\n }\n return options;\n }\n}\n\nexport interface OptionsType {\n headers?: HttpHeaders;\n observe: 'body';\n params?: HttpParams | { [param: string]: string | string[]; };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class SessionStorageService {\n\n /**\n * Get an item from the session storage.\n */\n public getItem(key: string): string {\n return sessionStorage.getItem(key);\n }\n\n /**\n * Set an item in the session storage.\n */\n public setItem(key: string, value: string): void {\n sessionStorage.setItem(key, value);\n }\n\n /**\n * Remove an item from the session storage.\n */\n public removeItem(key: string): void {\n sessionStorage.removeItem(key);\n }\n\n /**\n * Clear all the items held in session storage.\n */\n public clear(): void {\n sessionStorage.clear();\n }\n}\n","import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService, HttpService, OptionsType } from '../http';\nimport { SessionStorageService } from '../session';\n\n// @dynamic\n@Injectable()\nexport class ActivityService {\n public static get ACTIVITY_VIEW() { return 'view'; }\n public static get ACTIVITY_EDIT() { return 'edit'; }\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly sessionStorageService: SessionStorageService\n ) {}\n\n public get isEnabled(): boolean {\n return this.activityUrl() && this.userAuthorised;\n }\n public static readonly DUMMY_CASE_REFERENCE = '0';\n\n private userAuthorised: boolean = undefined;\n\n private static handleHttpError(response: HttpErrorResponse): HttpError {\n const error: HttpError = HttpErrorService.convertToHttpError(response);\n if (response.status && response.status !== error.status) {\n error.status = response.status;\n }\n return error;\n }\n\n public getOptions(): OptionsType {\n const userDetails = JSON.parse(this.sessionStorageService.getItem('userDetails'));\n const headers = new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', userDetails.token);\n const options: OptionsType = {\n headers,\n withCredentials: true,\n observe: 'body',\n };\n return options;\n }\n\n public getActivities(...caseId: string[]): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId.join(',')}/activity`;\n return this.http\n .get(url, options, false, ActivityService.handleHttpError)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public postActivity(caseId: string, activity: string): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId}/activity`;\n const body = { activity };\n return this.http\n .post(url, body, options, false)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public verifyUserIsAuthorized(): void {\n if (this.sessionStorageService.getItem('userDetails') === undefined) {\n return;\n }\n if (this.activityUrl() && this.userAuthorised === undefined) {\n this.getActivities(ActivityService.DUMMY_CASE_REFERENCE).subscribe(\n () => this.userAuthorised = true,\n error => {\n if ([401, 403].indexOf(error.status) > -1) {\n this.userAuthorised = false;\n } else {\n this.userAuthorised = true;\n }\n }\n );\n }\n }\n\n private activityUrl(): string {\n return this.appConfig.getActivityUrl();\n }\n\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport polling, { IOptions } from 'rx-polling';\nimport { EMPTY, Observable, Subject, Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { ActivityService } from './activity.service';\n\n// @dynamic\n@Injectable()\nexport class ActivityPollingService {\n\n private readonly pendingRequests = new Map<string, Subject<Activity>>();\n private currentTimeoutHandle: any;\n private pollActivitiesSubscription: Subscription;\n private readonly pollConfig: IOptions;\n private readonly batchCollectionDelayMs: number;\n private readonly maxRequestsPerBatch: number;\n\n constructor(private readonly activityService: ActivityService, private readonly ngZone: NgZone, private readonly config: AbstractAppConfig) {\n this.pollConfig = {\n interval: config.getActivityNexPollRequestMs(),\n attempts: config.getActivityRetry(),\n backgroundPolling: true\n };\n this.batchCollectionDelayMs = config.getActivityBatchCollectionDelayMs();\n this.maxRequestsPerBatch = config.getActivityMaxRequestPerBatch();\n }\n\n public get isEnabled(): boolean {\n return this.activityService.isEnabled;\n }\n\n public subscribeToActivity(caseId: string, done: (activity: Activity) => void): Subject<Activity> {\n if (!this.isEnabled) {\n return new Subject<Activity>();\n }\n\n let subject = this.pendingRequests.get(caseId);\n if (subject) {\n subject.subscribe(done);\n } else {\n subject = new Subject<Activity>();\n subject.subscribe(done);\n this.pendingRequests.set(caseId, subject);\n }\n if (this.pendingRequests.size === 1) {\n this.ngZone.runOutsideAngular(() => {\n this.currentTimeoutHandle = setTimeout(\n () => this.ngZone.run(() => {\n // console.log('timeout: flushing requests')\n this.flushRequests();\n }),\n this.batchCollectionDelayMs);\n });\n }\n\n if (this.pendingRequests.size >= this.maxRequestsPerBatch) {\n // console.log('max pending hit: flushing requests');\n this.flushRequests();\n }\n return subject;\n }\n\n public stopPolling() {\n if (this.pollActivitiesSubscription) {\n this.pollActivitiesSubscription.unsubscribe();\n }\n }\n\n public flushRequests(): void {\n if (this.currentTimeoutHandle) {\n clearTimeout(this.currentTimeoutHandle);\n this.currentTimeoutHandle = undefined;\n }\n\n const requests = new Map(this.pendingRequests);\n this.pendingRequests.clear();\n this.performBatchRequest(requests);\n }\n\n public pollActivities(...caseIds: string[]): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n return polling(this.activityService.getActivities(...caseIds), this.pollConfig);\n }\n\n public postViewActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_VIEW);\n }\n\n public postEditActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_EDIT);\n }\n\n protected performBatchRequest(requests: Map<string, Subject<Activity>>): void {\n const caseIds = Array.from(requests.keys()).join();\n // console.log('issuing batch request for cases: ' + caseIds);\n this.ngZone.runOutsideAngular( () => {\n // run polling outside angular zone so it does not trigger change detection\n this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe(\n // process activity inside zone so it triggers change detection for activity.component.ts\n (activities: Activity[]) => this.ngZone.run( () => {\n activities.forEach((activity) => {\n // console.log('pushing activity: ' + activity.caseId);\n requests.get(activity.caseId).next(activity);\n });\n },\n (err) => {\n console.log('error: ' + err);\n Array.from(requests.values()).forEach((subject) => subject.error(err));\n }\n )\n );\n });\n }\n\n private postActivity(caseId: string, activityType: string): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n const pollingConfig = {\n ...this.pollConfig,\n interval: 5000 // inline with CCD Backend\n };\n\n return polling(this.activityService.postActivity(caseId, activityType), pollingConfig);\n }\n}\n","<div class=\"activityComponent\" *ngIf=\"isActivityEnabled()\">\n <div *ngIf=\"displayMode === dspMode.ICON && editorsPresent()\" [class.activityEditorsAndViewersIcons]=\"viewersPresent()\" [class.activityEditorsIcon]=\"!viewersPresent()\">\n <ccd-activity-icon imageLink=\"/img/editor.png\" [description]=\"editorsText\"></ccd-activity-icon>\n </div>\n <div *ngIf=\"displayMode === dspMode.ICON && viewersPresent()\" class=\"activityViewersIcon\">\n <ccd-activity-icon imageLink=\"/img/viewer.png\" [description]=\"viewersText\"></ccd-activity-icon>\n </div>\n <div *ngIf=\"displayMode === dspMode.BANNER && editorsPresent()\">\n <ccd-activity-banner imageLink=\"/img/editorBanner.png\" [description]=\"editorsText\" bannerType=\"editor\">\n </ccd-activity-banner>\n </div>\n <div *ngIf=\"displayMode === dspMode.BANNER && viewersPresent()\">\n <ccd-activity-banner imageLink=\"/img/viewerBanner.png\" [description]=\"viewersText\" bannerType=\"viewer\">\n </ccd-activity-banner>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Activity, ActivityInfo, DisplayMode } from '../../domain/activity/activity.model';\nimport { ActivityPollingService } from '../../services/activity/activity.polling.service';\n\n@Component({\n selector: 'ccd-activity',\n templateUrl: './activity.component.html',\n styleUrls: ['./activity.component.css']\n})\nexport class ActivityComponent implements OnInit, OnDestroy {\n public activity: Activity;\n public dspMode = DisplayMode;\n\n public viewersText: string;\n public editorsText: string;\n\n public subscription: Subject<Activity>;\n\n @Input()\n public caseId: string;\n\n @Input()\n public displayMode: DisplayMode;\n private readonly VIEWERS_PREFIX = '';\n private readonly VIEWERS_SUFFIX = 'viewing this case';\n private readonly EDITORS_PREFIX = 'This case is being updated by ';\n private readonly EDITORS_SUFFIX = '';\n\n constructor(private readonly activityPollingService: ActivityPollingService) {}\n\n public ngOnInit() {\n this.activity = new Activity();\n this.activity.caseId = this.caseId;\n this.activity.editors = [];\n this.activity.unknownEditors = 0;\n this.activity.viewers = [];\n this.activity.unknownViewers = 0;\n this.viewersText = '';\n this.editorsText = '';\n this.subscription = this.activityPollingService.subscribeToActivity(this.caseId, newActivity => this.onActivityChange(newActivity));\n }\n\n public onActivityChange(newActivity: Activity) {\n this.activity = newActivity;\n this.viewersText = this.generateDescription(this.VIEWERS_PREFIX,\n this.VIEWERS_SUFFIX,\n this.activity.viewers,\n this.activity.unknownViewers);\n this.editorsText = this.generateDescription(this.EDITORS_PREFIX,\n this.EDITORS_SUFFIX,\n this.activity.editors,\n this.activity.unknownEditors);\n }\n\n public isActivityEnabled() {\n return this.activityPollingService.isEnabled;\n }\n\n public isActiveCase() {\n return this.activity.editors.length || this.activity.viewers.length || this.activity.unknownEditors || this.activity.unknownViewers;\n }\n\n public viewersPresent(): boolean {\n return (this.activity.viewers.length > 0 || this.activity.unknownViewers > 0);\n }\n\n public editorsPresent(): boolean {\n return (this.activity.editors.length > 0 || this.activity.unknownEditors > 0);\n }\n\n public ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.complete();\n this.subscription.unsubscribe();\n }\n this.activityPollingService.stopPolling();\n }\n\n public generateDescription(prefix: string, suffix: string, namesArray: ActivityInfo[], unknownCount) {\n let resultText = prefix;\n resultText += namesArray.map(activityInfo => activityInfo.forename + ' ' + activityInfo.surname).join(', ');\n if (unknownCount > 0) {\n resultText += (namesArray.length > 0 ? ' and ' + unknownCount + ' other' : unknownCount + ' user');\n resultText += ( unknownCount > 1 ? 's' : '');\n } else {\n resultText = this.replaceLastCommaWithAnd(resultText);\n }\n if (suffix.length > 0) {\n if (namesArray.length + unknownCount > 1) {\n resultText += ' are ' + suffix;\n } else {\n resultText += ' is ' + suffix;\n }\n }\n return resultText;\n }\n\n private replaceLastCommaWithAnd(str: string): string {\n return str.trim().replace(/,([^,]*)$/, ' and $1').split(' ').join(' ');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ActivityPollingService } from '../../services/activity/activity.polling.service';\nimport { ActivityService } from '../../services/activity/activity.service';\nimport { SessionStorageService } from '../../services/session/session-storage.service';\nimport { ActivityBannerComponent } from './activity-banner';\nimport { ActivityIconComponent } from './activity-icon';\nimport { ActivityComponent } from './activity.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n ActivityComponent,\n ActivityBannerComponent,\n ActivityIconComponent,\n ],\n exports: [\n ActivityComponent,\n ActivityBannerComponent,\n ActivityIconComponent,\n ],\n providers: [\n ActivityService,\n ActivityPollingService,\n SessionStorageService\n ]\n})\nexport class ActivityModule {}\n","import { Orderable } from '../../../domain/order/orderable.model';\nimport { ComplexFieldOverride } from './wizard-page-field-complex-override.model';\n\nexport class WizardPageField implements Orderable {\n public case_field_id: string;\n public order?: number;\n public page_column_no?: number;\n public complex_field_overrides?: ComplexFieldOverride[];\n}\n","import { Orderable } from '../order';\n\nexport class FixedListItem implements Orderable {\n public code: string;\n public label: string;\n public order?: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from './case-field.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FixedListItem } from './fixed-list-item.model';\n\n// @dynamic\nexport class FieldType {\n public id: string;\n public type: FieldTypeEnum;\n public min?: number | Date;\n public max?: number | Date;\n public regular_expression?: string;\n\n @Type(() => FixedListItem)\n public fixed_list_items?: FixedListItem[];\n\n @Type(() => CaseField)\n public complex_fields?: CaseField[];\n\n @Type(() => FieldType)\n public collection_field_type?: FieldType;\n }\n","import { Expose, Type } from 'class-transformer';\nimport * as _ from 'underscore';\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FieldType } from './field-type.model';\n\n// @dynamic\nexport class CaseField implements Orderable {\n public id: string;\n public hidden: boolean;\n public hiddenCannotChange: boolean;\n public label: string;\n public order?: number;\n\n @Type(() => FieldType)\n public field_type: FieldType;\n\n public hint_text?: string;\n public security_label?: string;\n public display_context: string;\n public display_context_parameter?: string;\n public month_format?: string;\n public show_condition?: string;\n public show_summary_change_option?: boolean;\n public show_summary_content_option?: number;\n public acls?: AccessControlList[];\n public metadata?: boolean;\n public formatted_value?: any;\n public retain_hidden_value: boolean;\n\n @Type(() => WizardPageField)\n public wizardProps?: WizardPageField;\n\n public _value: any;\n public _list_items: any = [];\n\n @Expose()\n public get value(): any {\n if (this.isDynamic()) {\n return this._value && this._value.value ? this._value.value.code : this._value;\n } else {\n return this._value;\n }\n }\n\n public set value(value: any) {\n if (this.isDynamic()) {\n if (value && value instanceof Object && value.list_items) {\n this._list_items = value.list_items;\n } else if (!this._list_items || this._list_items.length === 0) {\n // Extract the list items from the current value if that's the only place they exist.\n this._list_items = this.list_items;\n if (!value || !value.value) {\n value = null;\n }\n }\n }\n this._value = value;\n }\n\n @Expose()\n public get list_items(): any {\n if (this.isDynamic()) {\n return this._value && this._value.list_items ? this._value.list_items : this._list_items;\n } else {\n return this.field_type.fixed_list_items;\n }\n }\n\n public set list_items(items: any) {\n this._list_items = items;\n }\n\n @Expose()\n public get dateTimeEntryFormat(): string {\n if (this.isComplexDisplay()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEENTRY');\n }\n return null;\n }\n\n @Expose()\n public get dateTimeDisplayFormat(): string {\n if (this.isComplexEntry()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEDISPLAY');\n }\n return null;\n }\n\n @Expose()\n public isComplexDisplay() {\n return (this.isComplex() || this.isCollection()) && this.isReadonly();\n }\n\n @Expose()\n public isComplexEntry() {\n return (this.isComplex() || this.isCollection()) && (this.isOptional() || this.isMandatory());\n }\n\n @Expose()\n public isReadonly() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'READONLY';\n }\n\n @Expose()\n public isOptional() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n @Expose()\n public isMandatory() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'MANDATORY';\n }\n\n @Expose()\n public isCollection(): boolean {\n return this.field_type && this.field_type.type === 'Collection';\n }\n\n @Expose()\n public isComplex(): boolean {\n return this.field_type && this.field_type.type === 'Complex';\n }\n\n @Expose()\n public isDynamic(): boolean {\n const dynamicFieldTypes: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n if (!this.field_type) {\n return false;\n }\n\n return dynamicFieldTypes.some(t => t === this.field_type.type);\n }\n\n @Expose()\n public isCaseLink(): boolean {\n return this.isComplex()\n && this.field_type.id === 'CaseLink'\n && this.field_type.complex_fields.some(cf => cf.id === 'CaseReference');\n }\n public extractBracketValue(fmt: string, paramName: string, leftBracket= '(', rightBracket= ')' ): string {\n fmt = fmt.split(',')\n .find(a => a.trim().startsWith(paramName));\n if (fmt) {\n const s = fmt.indexOf(leftBracket) + 1;\n const e = fmt.indexOf(rightBracket, s);\n if (e > s && s >= 0) {\n return fmt.substr(s, (e - s));\n }\n }\n return null;\n }\n}\n","import { CaseDetails } from './case-details.model';\n\nexport const DRAFT_PREFIX = 'DRAFT';\nexport const DRAFT_QUERY_PARAM = 'draft';\nexport class Draft {\n\n public id: string;\n public document?: CaseDetails;\n public type?: string;\n public created?: string;\n public updated?: string;\n public static stripDraftId(draftId: string): string {\n return draftId.slice(DRAFT_PREFIX.length);\n }\n\n public static isDraft(id: string): boolean {\n return String(id).startsWith(DRAFT_PREFIX);\n }\n}\n","import { Injectable } from '@angular/core';\n\n/*\nTranslate a date time format string from the Java format provided by CCD to the format supported by Angular formatDate()\nVery simple translator that maps unsupported chars to the nearest equivalent.\nIf there is no equivalent puts ***x*** into the output where x is the unsupported character\n\nJava format\nG era text AD; Anno Domini; A\n u year year 2004; 04\n y year-of-era year 2004; 04\n D day-of-year number 189\n M/L month-of-year number/text 7; 07; Jul; July; J\n d day-of-month number 10\n\n Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter\n Y week-based-year year 1996; 96\n w week-of-week-based-year number 27\n W week-of-month number 4\n E day-of-week text Tue; Tuesday; T\n e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T\n F week-of-month number 3\n\n a am-pm-of-day text PM\n h clock-hour-of-am-pm (1-12) number 12\n K hour-of-am-pm (0-11) number 0\n k clock-hour-of-am-pm (1-24) number 0\n\n H hour-of-day (0-23) number 0\n m minute-of-hour number 30\n s second-of-minute number 55\n S fraction-of-second fraction 978\n A milli-of-day number 1234\n n nano-of-second number 987654321\n N nano-of-day number 1234000000\n\n V time-zone ID zone-id America/Los_Angeles; Z; -08:30\n z time-zone name zone-name Pacific Standard Time; PST\n O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00;\n X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;\n x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;\n Z zone-offset offset-Z +0000; -0800; -08:00;\n\n p pad next pad modifier 1\n\n ' escape for text delimiter\n '' single quote literal '\n [ optional section start\n ] optional section end\n # reserved for future use\n { reserved for future use\n } reserved for future use\n\n Angular dateFormat characters\n Era\tG, GG & GGG\tAbbreviated\tAD\nGGGG\tWide\tAnno Domini\nGGGGG\tNarrow\tA\nYear\ty\tNumeric: minimum digits\t2, 20, 201, 2017, 20173\nyy\tNumeric: 2 digits + zero padded\t02, 20, 01, 17, 73\nyyy\tNumeric: 3 digits + zero padded\t002, 020, 201, 2017, 20173\nyyyy\tNumeric: 4 digits or more + zero padded\t0002, 0020, 0201, 2017, 20173\nMonth\tM\tNumeric: 1 digit\t9, 12\nMM\tNumeric: 2 digits + zero padded\t09, 12\nMMM\tAbbreviated\tSep\nMMMM\tWide\tSeptember\nMMMMM\tNarrow\tS\nMonth standalone\tL\tNumeric: 1 digit\t9, 12\nLL\tNumeric: 2 digits + zero padded\t09, 12\nLLL\tAbbreviated\tSep\nLLLL\tWide\tSeptember\nLLLLL\tNarrow\tS\nWeek of year\tw\tNumeric: minimum digits\t1... 53\nww\tNumeric: 2 digits + zero padded\t01... 53\nWeek of month\tW\tNumeric: 1 digit\t1... 5\nDay of month\td\tNumeric: minimum digits\t1\ndd\tNumeric: 2 digits + zero padded\t01\nWeek day\tE, EE & EEE\tAbbreviated\tTue\nEEEE\tWide\tTuesday\nEEEEE\tNarrow\tT\nEEEEEE\tShort\tTu\nPeriod\ta, aa & aaa\tAbbreviated\tam/pm or AM/PM\naaaa\tWide (fallback to a when missing)\tante meridiem/post meridiem\naaaaa\tNarrow\ta/p\nPeriod*\tB, BB & BBB\tAbbreviated\tmid.\nBBBB\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nBBBBB\tNarrow\tmd\nPeriod standalone*\tb, bb & bbb\tAbbreviated\tmid.\nbbbb\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nbbbbb\tNarrow\tmd\nHour 1-12\th\tNumeric: minimum digits\t1, 12\nhh\tNumeric: 2 digits + zero padded\t01, 12\nHour 0-23\tH\tNumeric: minimum digits\t0, 23\nHH\tNumeric: 2 digits + zero padded\t00, 23\nMinute\tm\tNumeric: minimum digits\t8, 59\nmm\tNumeric: 2 digits + zero padded\t08, 59\nSecond\ts\tNumeric: minimum digits\t0... 59\nss\tNumeric: 2 digits + zero padded\t00... 59\nFractional seconds\tS\tNumeric: 1 digit\t0... 9\nSS\tNumeric: 2 digits + zero padded\t00... 99\nSSS\tNumeric: 3 digits + zero padded (= milliseconds)\t000... 999\nZone\tz, zz & zzz\tShort specific non location format (fallback to O)\tGMT-8\nzzzz\tLong specific non location format (fallback to OOOO)\tGMT-08:00\nZ, ZZ & ZZZ\tISO8601 basic format\t-0800\nZZZZ\tLong localized GMT format\tGMT-8:00\nZZZZZ\tISO8601 extended format + Z indicator for offset 0 (= XXXXX)\t-08:00\nO, OO & OOO\tShort localized GMT format\tGMT-8\nOOOO\tLong localized GMT format\tGMT-08:00\n */\n\n@Injectable()\nexport class FormatTranslatorService {\n public translate(javaFormat: string): string {\n const result = [];\n let prev = '\\0';\n let inQuote = false;\n\n const maybePush = <T>(target: T[], obj: T, flag: boolean) => {\n if (!flag) {\n target.push(obj);\n }\n };\n for (const c of javaFormat) {\n switch (c) {\n case '\\'':\n if (prev === '\\'') {\n // literal single quote - ignore\n inQuote = false;\n } else {\n inQuote = !inQuote;\n }\n break;\n // Due to formatting constraints on the webapp, all 'd' characters should be replaced with 'D' (for Moment library)\n // This is because we want the date, not the day (this format will need to be converted back)\n case 'd':\n maybePush(result, 'D', inQuote);\n break;\n // moment library defines year as capital y\n case 'y':\n maybePush(result, 'Y', inQuote);\n break;\n case 'e':\n case 'c':\n maybePush(result, 'E', inQuote); // no lower case E\n break;\n case 'F':\n maybePush(result, 'W', inQuote);\n break;\n case 'K':\n maybePush(result, 'H', inQuote);\n break;\n case 'k':\n maybePush(result, 'h', inQuote);\n break;\n // commented out A change to '***' due to use in moment library for AM/PM\n // added 'a' specification to stop discrepancy in am/AM pm/PM formatting\n case 'a':\n maybePush(result, 'A', inQuote);\n break;\n case 'n':\n case 'N':\n maybePush(result, '***' + c + '***', inQuote); // No way to support A - millisec of day, n - nano of second, N - nano of Day\n break;\n case 'V':\n case 'O':\n maybePush(result, 'z', inQuote);\n break;\n case 'x':\n case 'X':\n maybePush(result, 'Z', inQuote);\n break;\n default:\n maybePush(result, c, inQuote);\n }\n prev = c;\n }\n return result.join('');\n }\n\n public showOnlyDates(dateFormat: string): string {\n // replace 'd' character with 'D' for the moment library\n // This ensures only dates allowed\n while (dateFormat.includes('d')) {\n dateFormat = dateFormat.replace('d', 'D');\n }\n while (dateFormat.includes('y')) {\n dateFormat = dateFormat.replace('y', 'Y');\n }\n return dateFormat;\n }\n\n public removeTime(dateFormat: string): string {\n // remove hours irrelevant of whether 12 or 24 hour clock\n while (dateFormat.includes('H') || dateFormat.includes('h')) {\n dateFormat = dateFormat.replace('H', '');\n dateFormat = dateFormat.replace('h', '');\n }\n // remove minutes\n while (dateFormat.includes('m')) {\n dateFormat = dateFormat.replace('m', '');\n }\n // remove seconds (s) and micro seconds (S)\n while (dateFormat.includes('S') || dateFormat.includes('s')) {\n dateFormat = dateFormat.replace('S', '');\n dateFormat = dateFormat.replace('s', '');\n }\n // because there is time removal algorithm can make reasonable assumption to remove colons\n while (dateFormat.includes(':')) {\n dateFormat = dateFormat.replace(':', '');\n }\n return dateFormat.trim();\n }\n\n public hasDate(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') >= 0 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public is24Hour(value: string): boolean {\n return this.translate(value).length &&\n value.indexOf('H') >= 0;\n }\n\n public hasNoDay(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasNoDayAndMonth(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') === -1 &&\n value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasHours(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('h') >= 0 && value.indexOf('m') === -1;\n }\n\n public hasMinutes(value: string): boolean {\n return this.translate(value).length && value.indexOf('m') >= 0 && value.toLowerCase().indexOf('h') >= 0;\n }\n\n public hasSeconds(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('s') >= 0;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { FormatTranslatorService } from '../../../services/case-fields/format-translator.service';\n\n@Pipe({\n name: 'ccdDate'\n})\nexport class DatePipe implements PipeTransform {\n\n private static readonly DATE_FORMAT_REGEXP =\n new RegExp('^(\\\\d{4})-?(\\\\d\\\\d)-?(\\\\d\\\\d)(?:T(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?:\\\\.(\\\\d+))?)?)?(Z|([+-])(\\\\d\\\\d):?(\\\\d\\\\d))?|Z)?$');\n // 1 2 3 4 5 6 7 8 9 10 11\n private static readonly MONTHS = [\n ['Jan'], ['Feb'], ['Mar'], ['Apr'], ['May'], ['Jun'], ['Jul'], ['Aug'], ['Sep'], ['Oct'], ['Nov'], ['Dec'],\n ];\n\n /**\n * constructor to allow format translator to be injected\n * @param formatTrans format translator\n */\n constructor(private readonly formatTrans: FormatTranslatorService) {\n }\n\n public transform(value: string, zone?: string, format?: string): string {\n let resultDate = null;\n const ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n if (value) {\n // included to avoid editing the hour twice on second pass through\n // this occurs on case details when datepipe is applied twice\n if (!value.includes('T')) {\n zone = 'utc';\n }\n const match: RegExpMatchArray = value.match(DatePipe.DATE_FORMAT_REGEXP);\n // Make sure we actually have a match.\n if (match) {\n let offsetDate = null;\n const date = this.getDate(match);\n if (zone === 'local') {\n offsetDate = this.getOffsetDate(date);\n } else {\n offsetDate = this.getDate(match);\n }\n // 'short' format is meaningful to formatDate, but not the same meaning as in the unit tests\n if (this.formatTrans && format && format !== 'short') {\n // support for java style formatting strings for dates\n format = this.translateDateFormat(format);\n resultDate = moment(date).format(format);\n } else {\n // RDM-1149 changed the pipe logic so that it doesn't add an hour to 'Summer Time' dates on DateTime field type\n resultDate = `${offsetDate.getDate()} ${DatePipe.MONTHS[offsetDate.getMonth()]} ${offsetDate.getFullYear()}`;\n if (match[4] && match[5] && match[6] && format !== 'short') {\n resultDate += ', ';\n resultDate += this.getHour(offsetDate.getHours().toString()) + ':';\n resultDate += this.pad(offsetDate.getMinutes()) + ':';\n resultDate += this.pad(offsetDate.getSeconds()) + ' ';\n resultDate += (this.toInt(offsetDate.getHours().toString()) >= 12) ? 'PM' : 'AM';\n }\n }\n } else {\n // EUI-2667. See if what we've been given is actually a formatted date that\n // we could attempt to do something with.\n const parsedDate: number = Date.parse(value);\n // We successfully parsed it so let's use it.\n if (!isNaN(parsedDate)) {\n const d: Date = new Date(parsedDate);\n // If what we received didn't include time, don't include it here either.\n if (value.indexOf(':') < 0) {\n const shortDate: string = d.toLocaleDateString('en-GB');\n const shortISO: string = shortDate.split('/').reverse().join('-');\n return this.transform(shortISO, zone, format);\n }\n // If it did include time, we want a full ISO string.\n const thisMoment = moment(d).format(ISO_FORMAT);\n return this.transform(thisMoment, zone, format);\n }\n }\n }\n return resultDate;\n }\n\n private translateDateFormat(format: string) {\n if (this.formatTrans) {\n return this.formatTrans.translate(format);\n } else {\n return format;\n }\n }\n\n private getOffsetDate(date: Date): Date {\n const localOffset = - date.getTimezoneOffset() / 60;\n return new Date(date.getTime() + localOffset * 3600 * 1000);\n }\n\n private getDate(match: RegExpMatchArray): Date {\n const year = this.toInt(match[1]);\n const month = this.toInt(match[2]) - 1;\n const day = this.toInt(match[3]);\n let resultDate;\n if (match[4] && match[5] && match[6]) {\n const hour = this.toInt(match[4]);\n const minutes = this.toInt(match[5]);\n const seconds = this.toInt(match[6]);\n resultDate = new Date(year, month, day, hour, minutes, seconds, 0);\n } else {\n resultDate = new Date(year, month, day);\n }\n return resultDate;\n }\n\n private getHour(hourStr: string): number {\n let hourNum = this.toInt(hourStr);\n if (hourNum > 12) {\n hourNum = hourNum - 12;\n } else if (hourNum === 0) {\n hourNum = 12;\n }\n return hourNum;\n }\n\n private toInt(str: string): number {\n return parseInt(str, 10);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { DatePipe } from '../../components/palette/utils/date.pipe';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseTab } from '../../domain/case-view/case-tab.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldType } from '../../domain/definition/field-type.model';\nimport { FixedListItem } from '../../domain/definition/fixed-list-item.model';\nimport { Predicate } from '../../domain/predicate.model';\nimport { FormatTranslatorService } from '../case-fields/format-translator.service';\n\n// @dynamic\n@Injectable()\nexport class FieldsUtils {\n // EUI-4244. 3 dashes instead of 1 to make this less likely to clash with a real field.\n public static readonly LABEL_SUFFIX = '---LABEL';\n // Handling of Dynamic Lists in Complex Types\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COLLECTION = 'Collection';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COMPLEX = 'Complex';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n private static readonly currencyPipe: CurrencyPipe = new CurrencyPipe('en-GB');\n private static readonly datePipe: DatePipe = new DatePipe(new FormatTranslatorService());\n\n public static convertToCaseField(obj: any): CaseField {\n if (!(obj instanceof CaseField)) {\n return plainToClassFromExist(new CaseField(), obj);\n }\n return obj;\n }\n\n public static toValuesMap(caseFields: CaseField[]): any {\n const valueMap = {};\n caseFields.forEach(field => {\n valueMap[field.id] = FieldsUtils.prepareValue(field);\n });\n return valueMap;\n }\n\n public static getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n public static isObject(elem: any): boolean {\n return typeof elem === 'object' && elem !== null;\n }\n\n public static isNonEmptyObject(elem: any): boolean {\n return this.isObject(elem) && Object.keys(elem).length !== 0;\n }\n\n public static isArray(elem: any): boolean {\n return Array.isArray(elem);\n }\n\n public static areCollectionValuesSimpleFields(fieldValue: any[]): boolean {\n return !this.isObject(fieldValue[0]['value']) && !Array.isArray(fieldValue[0]['value']) && fieldValue[0]['value'] !== undefined;\n }\n\n public static isCollectionOfSimpleTypes(fieldValue: any): boolean {\n return this.isCollection(fieldValue) && this.areCollectionValuesSimpleFields(fieldValue);\n }\n\n public static isMultiSelectValue(form: any): boolean {\n return this.isNonEmptyArray(form) && !this.isCollectionWithValue(form);\n }\n\n public static isNonEmptyArray(pageFormFields: any): boolean {\n return Array.isArray(pageFormFields) && pageFormFields[0] !== undefined;\n }\n\n public static isCollection(pageFormFields: any): boolean {\n return this.isNonEmptyArray(pageFormFields) && this.isCollectionWithValue(pageFormFields);\n }\n\n public static isCollectionWithValue(pageFormFields: any[]): boolean {\n return pageFormFields[0]['value'] !== undefined;\n }\n\n public static cloneObject(obj: any): any {\n return Object.assign({}, obj);\n }\n\n // temporary function until this can be moved to CaseView class (RDM-2681)\n public static getCaseFields(caseView: CaseView): CaseField[] {\n const caseDataFields: CaseField[] = caseView.tabs.reduce((acc: CaseField[], tab: CaseTab) => {\n return acc.concat(tab.fields);\n }, []);\n\n const metadataFields: CaseField[] = caseView.metadataFields;\n return metadataFields.concat(caseDataFields.filter((caseField: CaseField) => {\n return metadataFields.findIndex(metadataField => metadataField.id === caseField.id) < 0;\n }));\n }\n\n public static addCaseFieldAndComponentReferences (c: AbstractControl, cf: CaseField, comp: AbstractFormFieldComponent): void {\n c['caseField'] = cf;\n c['component'] = comp;\n }\n\n /**\n * Recursive check of an array or object and its descendants for the presence of any non-empty values.\n *\n * @param object The array or object to check\n * @returns `true` if the array or object (or a descendant) contains at least one non-empty value; `false` otherwise\n */\n public static containsNonEmptyValues(object: object): boolean {\n if (!object) {\n return false;\n }\n const values = Object.keys(object).map(key => object[key]);\n const objectRefs = [];\n // Also test for numeric values, and length > 0 for non-numeric values because this covers both strings and arrays.\n // Note: Deliberate use of non-equality (!=) operator for null check, to handle both null and undefined values.\n const hasNonNullPrimitive = values.some(x => (x != null &&\n ((typeof x === 'object' && x.constructor === Object) || Array.isArray(x)\n ? !objectRefs.push(x)\n : typeof x === 'number' || x.length > 0)\n ));\n return !hasNonNullPrimitive ? objectRefs.some(y => this.containsNonEmptyValues(y)) : hasNonNullPrimitive;\n }\n\n /**\n * handleNestedDynamicLists()\n * Reassigns list_item and value data to DynamicList children\n * down the tree. Server response returns data only in\n * the `value` object of parent complex type\n *\n * EUI-2530 Dynamic Lists for Elements in a Complex Type\n *\n * @param jsonBody - { case_fields: [ CaseField, CaseField ] }\n */\n public static handleNestedDynamicLists(jsonBody: { case_fields: CaseField[] }): any {\n\n if (jsonBody.case_fields) {\n jsonBody.case_fields.forEach(caseField => {\n if (caseField.field_type) {\n this.setDynamicListDefinition(caseField, caseField.field_type, caseField);\n }\n });\n }\n\n return jsonBody;\n }\n\n private static prepareValue(field: CaseField): any {\n if (field.value) {\n return field.value;\n } else if (field.isComplex()) {\n const valueMap = {};\n field.field_type.complex_fields.forEach(complexField => {\n valueMap[complexField.id] = FieldsUtils.prepareValue(complexField);\n });\n return valueMap;\n }\n }\n\n private static readonly DEFAULT_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n };\n\n private static readonly LABEL_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n switch (field.field_type.type) {\n case 'FixedList':\n case 'FixedRadioList': {\n result[field.id] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, result[field.id] || field.value);\n break;\n }\n case 'MultiSelectList': {\n const fieldValue = result[field.id] || [];\n result[field.id + FieldsUtils.LABEL_SUFFIX] = [];\n fieldValue.forEach((code: any, idx: any) => {\n result[field.id + FieldsUtils.LABEL_SUFFIX][idx] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, code);\n });\n break;\n }\n case 'Label': {\n result[field.id] = FieldsUtils.getLabel(field);\n break;\n }\n case 'MoneyGBP': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getMoneyGBP(fieldValue);\n break;\n }\n case 'Date': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getDate(fieldValue);\n break;\n }\n case 'Complex': {\n if (result[field.id] && field.field_type.complex_fields) {\n field.field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, result[field.id]);\n }\n });\n }\n break;\n }\n case 'Collection': {\n const elements = (result[field.id] || field.value);\n if (elements) {\n elements.forEach((elem: any) => {\n switch (field.field_type.collection_field_type.type) {\n case 'MoneyGBP': {\n elem.value = FieldsUtils.getMoneyGBP(elem.value);\n break;\n }\n case 'Date': {\n elem.value = FieldsUtils.getDate(elem.value);\n break;\n }\n case 'Complex': {\n if (field.field_type.collection_field_type.complex_fields) {\n field.field_type.collection_field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, elem.value);\n }\n });\n }\n break;\n }\n }\n });\n }\n break;\n }\n }\n };\n\n /**\n * Formats a `MoneyGBP` value to include currency units.\n * @param fieldValue The CurrencyPipe expects an `any` parameter so this must also be `any`,\n * but it should be \"number-like\" (e.g., '1234')\n * @returns A formatted string (e.g., £12.34)\n */\n private static getMoneyGBP(fieldValue: any): string {\n return fieldValue ? FieldsUtils.currencyPipe.transform(fieldValue / 100, 'GBP', 'symbol') : fieldValue;\n }\n\n private static getLabel(fieldValue: CaseField): string {\n return fieldValue ? fieldValue.label : '';\n }\n\n private static getDate(fieldValue: string): string {\n try {\n // Format specified here wasn't previously working and lots of tests depend on it not working\n // Now that formats work correctly many test would break - and this could affect services which may depend on\n // the orginal behaviour of returning dates in \"d MMM yyyy\"\n // Note - replaced 'd' with 'D' as datepipe using moment to avoid timezone discrepancies\n return FieldsUtils.datePipe.transform(fieldValue, null, 'D MMM yyyy');\n } catch (e) {\n return this.textForInvalidField('Date', fieldValue);\n }\n }\n\n private static getFixedListLabelByCodeOrEmpty(field: CaseField, code: string): string {\n const relevantItem: FixedListItem = code ? field.field_type.fixed_list_items.find(item => item.code === code) : null;\n return relevantItem ? relevantItem.label : '';\n }\n\n private static textForInvalidField(type: string, invalidValue: string): string {\n return `{ Invalid ${type}: ${invalidValue} }`;\n }\n\n private static setDynamicListDefinition(caseField: CaseField, caseFieldType: FieldType, rootCaseField: CaseField) {\n if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COMPLEX) {\n\n caseFieldType.complex_fields.forEach(field => {\n try {\n const isDynamicField = FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE.indexOf(field.field_type.type) !== -1;\n\n if (isDynamicField) {\n const dynamicListValue = this.getDynamicListValue(rootCaseField.value, field.id);\n if (dynamicListValue) {\n const list_items = dynamicListValue[0].list_items;\n const complexValue = dynamicListValue.map(data => data.value);\n const value = {\n list_items,\n value: complexValue.length > 0 ? complexValue : undefined\n };\n field.value = {\n ...value\n };\n field.formatted_value = {\n ...field.formatted_value,\n ...value\n };\n }\n } else {\n this.setDynamicListDefinition(field, field.field_type, rootCaseField);\n }\n } catch (error) {\n console.log(error);\n }\n });\n } else if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COLLECTION) {\n if (caseFieldType.collection_field_type) {\n this.setDynamicListDefinition(caseField, caseFieldType.collection_field_type, rootCaseField);\n }\n }\n }\n\n private static getDynamicListValue(jsonBlock: any, key: string) {\n\n const data = jsonBlock ? this.getNestedFieldValues(jsonBlock, key, []) : [];\n\n return data.length > 0 ? data : null;\n }\n\n private static getNestedFieldValues(jsonData: any, key: string, output: any[] = []) {\n if (jsonData && jsonData[key]) {\n output.push(jsonData[key]);\n } else {\n for (const elementKey in jsonData) {\n if (typeof jsonData === 'object' && jsonData.hasOwnProperty(elementKey)) {\n this.getNestedFieldValues(jsonData[elementKey], key, output);\n }\n }\n }\n return output;\n }\n\n public buildCanShowPredicate(eventTrigger: CaseEventTrigger, form: any): Predicate<WizardPage> {\n const currentState = this.getCurrentEventState(eventTrigger, form);\n return (page: WizardPage): boolean => {\n return page.parsedShowCondition.match(currentState);\n };\n }\n\n public getCurrentEventState(eventTrigger: { case_fields: CaseField[] }, form: FormGroup): object {\n return this.mergeCaseFieldsAndFormFields(eventTrigger.case_fields, form.controls['data'].value);\n }\n\n public cloneCaseField(obj: any): CaseField {\n return Object.assign(new CaseField(), obj);\n }\n\n public mergeCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.DEFAULT_MERGE_FUNCTION);\n }\n\n public mergeLabelCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.LABEL_MERGE_FUNCTION);\n }\n\n public controlIterator(\n aControl: AbstractControl,\n formArrayFn: (array: FormArray) => void,\n formGroupFn: (group: FormGroup) => void,\n controlFn: (control: FormControl) => void\n ): void {\n if (aControl instanceof FormArray) { // We're in a collection\n formArrayFn(aControl);\n } else if (aControl instanceof FormGroup) { // We're in a complex type.\n formGroupFn(aControl);\n } else if (aControl instanceof FormControl) { // FormControl\n controlFn(aControl);\n }\n }\n\n private mergeFields(caseFields: CaseField[], formFields: object, mergeFunction: (field: CaseField, result: object) => void): object {\n const result: object = FieldsUtils.cloneObject(formFields);\n caseFields.forEach(field => {\n mergeFunction(field, result);\n if (field.field_type && field.field_type.complex_fields && field.field_type.complex_fields.length > 0) {\n result[field.id] = this.mergeFields(field.field_type.complex_fields, result[field.id], mergeFunction);\n }\n });\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FieldTypeSanitiser {\n public static readonly FIELD_TYPE_COMPLEX: FieldTypeEnum = 'Complex';\n public static readonly FIELD_TYPE_COLLECTION: FieldTypeEnum = 'Collection';\n public static readonly FIELD_TYPE_DYNAMIC_LIST: FieldTypeEnum = 'DynamicList';\n public static readonly FIELD_TYPE_DYNAMIC_RADIO_LIST: FieldTypeEnum = 'DynamicRadioList';\n\n /**\n * This method finds dynamiclists in a form and replaces their string\n * values, with a JSON object, as below:\n * From: 'xyz'\n * To : {\n * value: { code:'xyz', label:'XYZ' },\n * list_items: [\n * { code:'xyz', label:'XYZ'},\n * { code:'abc', label:'ABC'}\n * ]\n * }\n * @param caseFields The CaseFields to assess.\n * @param data The data in the form.\n */\n public sanitiseLists(caseFields: CaseField[], data: any) {\n if (!data || !caseFields) {\n return;\n }\n caseFields.forEach(caseField => {\n\n switch (caseField.field_type.type) {\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_RADIO_LIST:\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_LIST:\n this.convertStringToDynamicListOutput(caseField, data);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COMPLEX:\n this.sanitiseLists(caseField.field_type.complex_fields, data[caseField.id]);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COLLECTION:\n if (Array.isArray(data[caseField.id])) {\n data[caseField.id].forEach((formElement: any) => {\n this.sanitiseLists(caseField.field_type.collection_field_type.complex_fields, formElement.value);\n });\n }\n break;\n }\n\n });\n }\n\n private convertStringToDynamicListOutput(field: CaseField, data: any): void {\n const stringValue = data[field.id];\n if (typeof stringValue === 'string') {\n const listItems = this.getListItems(field);\n const matches = listItems.filter(value => value.code === stringValue);\n if (matches && matches.length > 0) {\n data[field.id] = {\n value: matches[0],\n list_items: listItems\n };\n }\n }\n }\n\n private getListItems(field: CaseField): any[] {\n if (field) {\n if (field.list_items) {\n return field.list_items;\n }\n if (field.formatted_value && field.formatted_value.list_items) {\n return field.formatted_value.list_items;\n }\n }\n return [];\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../fields/fields.utils';\nimport { FieldTypeSanitiser } from './field-type-sanitiser';\n\n@Injectable()\nexport class FormValueService {\n /**\n * Gets value of a field based on fieldKey which is a dot separated reference to value and collection index.\n * There are two exceptions:\n * 1) In case of a multiselect being identified as a leaf a '---LABEL' suffix is appended to the key and values of that key are returned\n * form= { 'list': ['code1', 'code2'],\n * 'list---LABEL': ['label1', 'label2'] },\n * fieldKey=list,\n * colIndex=0,\n * value=label1, label2\n * 2) In case of a collection of simple fields is identified as a leaf all values are joined seperated by a comma\n * form= { 'collection': [{ 'value': 'value1' }, { 'value': 'value2' }] }\n * fieldKey=collection\n * colIndex=1\n * value=value1, value2\n *\n * Other examples:\n * 1) simple field reference: form={ 'PersonFirstName': 'John' }, fieldKey=PersonFirstName, value=John\n * 2) complex field reference:\n * form= { complex1': {\n * 'simple11': 'value11',\n * 'simple12': 'value12',\n * 'complex2': {\n * 'simple21': 'value21'\n * }\n * }},\n * fieldKey=complex1.complex2.simple21\n * colIndex=0,\n * value=value21\n * 3) complex field with collection field with complex field reference:\n * form= { 'complex1': {\n * 'collection1': [\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value1',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value12'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value2',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value21'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value3',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value31'\n * }\n * }\n * }\n * }\n * }\n * ]}}\n * fieldKey=complex1.collection1.complex2.complex3.complex4.simple2\n * colIndex=2,\n * value=value21\n * 4) collection of complex types\n * form= { 'collection1': [\n * { 'value': {'complex1': {\n * 'simple1': 'value11',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value12'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value21',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value22'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value31',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value32'\n * }\n * }\n * }}\n * }\n * ]}\n * fieldKey=collection1.complex1.complex2.complex3.simple2\n * colIndex=2\n * value=value32\n *\n * If key is pointing at a complex or collection leaf (not simple, collection of simple or multiselect types) then undefined is returned.\n * Also no key referring a leaf that is contained within collection will contain index number. The index is passed as an argument to the\n * method.\n * @param form form\n * @param fieldKey dot separated reference to value\n * @param colIndex index of collection item being referenced or 0 otherwise\n * @returns string simple or combined value of a field\n */\n public static getFieldValue(form, fieldKey, colIndex) {\n const fieldIds = fieldKey.split('.');\n const currentFieldId = fieldIds[0];\n const currentForm = form[currentFieldId];\n if (FieldsUtils.isMultiSelectValue(currentForm)) {\n return form[currentFieldId + FieldsUtils.LABEL_SUFFIX].join(', ');\n } else if (FieldsUtils.isCollectionOfSimpleTypes(currentForm)) {\n return currentForm.map(fieldValue => fieldValue['value']).join(', ');\n } else if (FieldsUtils.isCollection(currentForm)) {\n return this.getFieldValue(currentForm[colIndex]['value'], fieldIds.slice(1).join('.'), colIndex);\n } else if (FieldsUtils.isNonEmptyObject(currentForm)) {\n return this.getFieldValue(currentForm, fieldIds.slice(1).join('.'), colIndex);\n } else {\n return currentForm;\n }\n }\n\n /**\n * A recursive method to remove anything with a `---LABEL` suffix.\n * @param data The data to recurse through and remove MultiSelect labels.\n */\n public static removeMultiSelectLabels(data: any): void {\n if (data && typeof data === 'object') {\n if (Array.isArray(data)) {\n for (const item of data) {\n FormValueService.removeMultiSelectLabels(item);\n }\n } else {\n const keys: string[] = Object.keys(data);\n for (const key of keys) {\n // Have we found one a MultiSelect label?\n if (key.indexOf(FieldsUtils.LABEL_SUFFIX) > 0) {\n // If so, remove it.\n delete data[key];\n } else {\n FormValueService.removeMultiSelectLabels(data[key]);\n }\n }\n }\n }\n }\n\n private static isReadOnly(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'READONLY' : false;\n }\n\n private static isOptional(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'OPTIONAL' : false;\n }\n\n private static isLabel(field: CaseField): boolean {\n if (field.field_type) {\n return field.field_type.type === 'Label';\n } else {\n return false;\n }\n }\n\n private static isEmptyData(data: object): boolean {\n if (data) {\n let allEmpty = true;\n for (const prop of Object.keys(data)) {\n const value = data[prop];\n if (value) {\n if (typeof(value) === 'object') {\n allEmpty = allEmpty && this.isEmptyData(value);\n } else {\n allEmpty = false;\n }\n }\n }\n return allEmpty;\n }\n return true;\n }\n\n /**\n * Should we clear out optional, empty, complex objects?\n * @param clearEmpty False property if we simply want to skip it.\n * @param data The data to assess for \"emptiness\".\n * @param field The CaseField that will tell us if this is optional.\n */\n private static clearOptionalEmpty(clearEmpty: boolean, data: object, field: CaseField): boolean {\n if (clearEmpty) {\n return FormValueService.isOptional(field) && FormValueService.isEmptyData(data);\n }\n return false;\n }\n\n constructor(private readonly fieldTypeSanitiser: FieldTypeSanitiser) {\n }\n\n public sanitise(rawValue: object): object {\n return this.sanitiseObject(rawValue);\n }\n\n public sanitiseCaseReference(reference: string): string {\n // strip non digits\n const s: string = reference.replace(/[\\D]/g, '');\n if (s.length > 16) {\n return s.substr(s.length - 16, 16);\n }\n return s;\n }\n\n public filterCurrentPageFields(caseFields: CaseField[], editForm: any): any {\n const cloneForm = JSON.parse(JSON.stringify(editForm));\n Object.keys(cloneForm['data']).forEach((key) => {\n if (caseFields.findIndex((element) => element.id === key) < 0) {\n delete cloneForm['data'][key];\n }\n });\n return cloneForm;\n }\n\n public sanitiseDynamicLists(caseFields: CaseField[], editForm: any): any {\n return this.fieldTypeSanitiser.sanitiseLists(caseFields, editForm.data);\n }\n\n public clearNonCaseFields(data: object, caseFields: CaseField[]) {\n for (const dataKey in data) {\n if (!caseFields.find(cf => cf.id === dataKey)) {\n delete data [dataKey];\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeNullLabels(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels that are null\n if ((data[field.id] === null) || (data[field.id] === '')) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n // Recurse and remove anything unnecessary from within a complex field.\n this.removeNullLabels(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeNullLabels(item, field.field_type.collection_field_type.complex_fields);\n this.removeNullLabels(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeEmptyDocuments(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Complex':\n // Recurse and remove any empty documents from within a complex field.\n this.removeEmptyDocuments(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear out empty documents\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any empty documents within.\n for (const item of collection) {\n this.removeEmptyDocuments(item, field.field_type.collection_field_type.complex_fields);\n this.removeEmptyDocuments(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n case 'Document':\n // Ensure this is executed only if the Document field is NOT hidden and is empty of data; hidden Document\n // fields are handled by the filterRawFormValues() function in CaseEditSubmit component\n if (field.hidden !== true && FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n /**\n * Clear out unnecessary fields from a data object, based on an array of CaseFields.\n * This method is recursive and will call itself if it encounters particular field types.\n *\n * @param data The object to be tidied up.\n * @param caseFields The CaseFields that need to be cleaned up.\n * @param clearEmpty Whether or not we should clear out empty, optional, complex objects.\n * @param clearNonCase Whether or not we should clear out non-case fields at the top level.\n */\n public removeUnnecessaryFields(data: object, caseFields: CaseField[], clearEmpty = false, clearNonCase = false): void {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n if (clearNonCase) {\n this.clearNonCaseFields(data, caseFields);\n }\n for (const field of caseFields) {\n if (!FormValueService.isLabel(field) && FormValueService.isReadOnly(field)) {\n // Retain anything that is readonly and not a label.\n continue;\n }\n if (field.hidden === true && field.display_context !== 'HIDDEN') {\n // Delete anything that is hidden (that is NOT readonly), and that\n // hasn't had its display_context overridden to make it hidden.\n delete data[field.id];\n } else if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels.\n delete data[field.id];\n break;\n case 'Document':\n if (FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n this.removeUnnecessaryFields(data[field.id], field.field_type.complex_fields, clearEmpty);\n // Also remove any optional complex objects that are completely empty.\n // EUI-4244: Ritesh's fix, passing true instead of clearEmpty.\n if (FormValueService.clearOptionalEmpty(true, data[field.id], field)) {\n delete data[field.id];\n }\n break;\n case 'Collection':\n // Check for valid collection data\n this.removeInvalidCollectionData(data, field);\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeUnnecessaryFields(item, field.field_type.collection_field_type.complex_fields, clearEmpty);\n this.removeUnnecessaryFields(item.value, field.field_type.collection_field_type.complex_fields, false);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n\n // Clear out any MultiSelect labels.\n FormValueService.removeMultiSelectLabels(data);\n }\n\n /**\n * Remove any empty or invalid arry with only id\n *\n * @param data The object tree of form values on which to perform the removal\n * @param field domain model object for each field\n */\n public removeInvalidCollectionData(data: object, field: CaseField) {\n if (data[field.id] && data[field.id].length > 0) {\n for (const objCollection of data[field.id]) {\n if (Object.keys(objCollection).length === 1 && Object.keys(objCollection).indexOf('id') > -1) {\n data[field.id] = [];\n }\n }\n }\n }\n\n /**\n * Remove any empty collection fields where a value of greater than zero is specified in the field's {@link FieldType}\n * `min` attribute.\n *\n * @param data The object tree of form values on which to perform the removal\n * @param caseFields The list of underlying {@link CaseField} domain model objects for each field\n */\n public removeEmptyCollectionsWithMinValidation(data: object, caseFields: CaseField[]): void {\n if (data && caseFields && caseFields.length > 0) {\n for (const field of caseFields) {\n if (field.field_type.type === 'Collection' && field.field_type.min > 0 && data[field.id] &&\n Array.isArray(data[field.id]) && data[field.id].length === 0) {\n delete data[field.id];\n }\n }\n }\n }\n\n private sanitiseObject(rawObject: object): object {\n if (!rawObject) {\n return rawObject;\n }\n\n let sanitisedObject = {};\n const documentFieldKeys = ['document_url', 'document_binary_url', 'document_filename'];\n for (const key in rawObject) {\n // If the key is one of documentFieldKeys, it means the field is of Document type. If the value of any of these\n // properties is null, the entire sanitised object to be returned should be null\n if (documentFieldKeys.indexOf(key) > -1 && rawObject[key] == null) {\n sanitisedObject = null;\n break;\n } else if ('CaseReference' === key) {\n sanitisedObject[key] = this.sanitiseValue(this.sanitiseCaseReference(String(rawObject[key])));\n } else {\n sanitisedObject[key] = this.sanitiseValue(rawObject[key]);\n if (Array.isArray(sanitisedObject[key])) {\n // If the 'sanitised' array is empty, whereas the original array had 1 or more items\n // delete the property from the sanatised object\n if (sanitisedObject[key].length === 0 && rawObject[key].length > 0) {\n delete sanitisedObject[key];\n }\n }\n }\n }\n return sanitisedObject;\n }\n\n private sanitiseArray(rawArray: any[]): any[] {\n if (!rawArray) {\n return rawArray;\n }\n\n rawArray.forEach(item => {\n if (item && item.hasOwnProperty('value')) {\n item.value = this.sanitiseValue(item.value);\n }\n });\n\n // Filter the array to ensure only truthy values are returned; double-bang operator returns the boolean true/false\n // association of a value. In addition, if the array contains items with a \"value\" object property, return only\n // those whose value object contains non-empty values, including for any descendant objects\n return rawArray\n .filter(item => !!item)\n .filter(item => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);\n }\n\n private sanitiseValue(rawValue: any): any {\n if (Array.isArray(rawValue)) {\n return this.sanitiseArray(rawValue);\n }\n\n switch (typeof rawValue) {\n case 'object':\n return this.sanitiseObject(rawValue);\n case 'string':\n return rawValue.trim();\n case 'number':\n return String(rawValue);\n default:\n return rawValue;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValueService } from '../../../services/form/form-value.service';\n\n// @dynamic\n@Injectable()\nexport class PlaceholderService {\n\n public resolvePlaceholders(pageFormFields: object, stringToResolve: string): string {\n const ps = new PlaceholderService.PlaceholderSubstitutor({pageFormFields, stringToResolve});\n return ps.resolvePlaceholders();\n }\n\n}\n\nexport namespace PlaceholderService {\n export class PlaceholderSubstitutor {\n private static readonly PLACEHOLDER_CONTENT_PATTERN = /^[a-zA-Z0-9_.\\]\\[]+$/;\n private static readonly PLACEHOLDER_PATTERN = /\\$\\{[a-zA-Z0-9_.\\]\\[]+\\}/;\n private static readonly STARTING_PLACEHOLDER = '$';\n private static readonly CLOSING_PLACEHOLDER = '}';\n private static readonly OPENING_PLACEHOLDER = '{';\n private static readonly NEW_LINE = `\n___\n`;\n\n private static readonly PLACEHOLDER_START =\n PlaceholderSubstitutor.STARTING_PLACEHOLDER + PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n private static readonly PLACEHOLDER_END = PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n\n private stringToResolve: string;\n private scanIndex: number;\n private numberCollectionItemsAsPlaceholder: number;\n private collectionItemIndex: number;\n private fieldIdToSubstitute: string;\n private startSubstitutionIndex: number;\n private isCollecting: boolean;\n private readonly resolvedFormValues = [];\n private readonly pageFormFields: object;\n private readonly originalStringToResolve: string;\n\n private static wrapPlaceholder(str: string): string {\n return `${this.PLACEHOLDER_START}${str}${this.PLACEHOLDER_END}`;\n }\n\n constructor(values: { stringToResolve: string, pageFormFields: object }) {\n this.stringToResolve = values.stringToResolve;\n this.originalStringToResolve = values.stringToResolve;\n this.pageFormFields = values.pageFormFields;\n }\n\n public resolvePlaceholders(): string {\n while (this.hasUnresolvedPlaceholder()) {\n this.resetPlaceholderSubstitutor();\n while (this.doesPlaceholderContainCollectionItems()) {\n while (this.isScanningStringToResolve()) {\n if (this.isStartPlaceholderAndNotCollecting()) {\n this.setStartCollecting();\n } else if (this.isCollecting) {\n if (this.isClosingPlaceholder()) {\n this.substitute();\n } else if (!this.isOpeningPlaceholder()) {\n this.appendCharacter();\n }\n }\n this.scanIndex++;\n }\n this.appendOriginalStringIfCollectionItemAsPlaceholder();\n }\n }\n return this.stringToResolve;\n }\n\n private isScanningStringToResolve(): boolean {\n return this.scanIndex < this.stringToResolve.length;\n }\n\n private doesPlaceholderContainCollectionItems(): boolean {\n return this.numberCollectionItemsAsPlaceholder-- > 0;\n }\n\n private hasUnresolvedPlaceholder(): boolean {\n return this.stringToResolve\n && typeof this.stringToResolve === 'string'\n && !!this.stringToResolve.match(PlaceholderSubstitutor.PLACEHOLDER_PATTERN);\n }\n\n private isStartPlaceholderAndNotCollecting(): boolean {\n return this.isStartingPlaceholder() && !this.isCollecting;\n }\n\n private isOpeningPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n }\n\n private isClosingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n }\n\n private resetPlaceholderSubstitutor(): void {\n this.scanIndex = 0;\n this.numberCollectionItemsAsPlaceholder = 1;\n this.collectionItemIndex = 0;\n this.fieldIdToSubstitute = '';\n this.startSubstitutionIndex = -1;\n this.isCollecting = false;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n\n private substitute(): void {\n if (this.isMatchingPlaceholderPattern() && this.isFieldIdInFormFields()) {\n this.updateNumberOfCollectionItemsAsPlaceholder();\n if (this.isFieldIdToSubstituteReferringItself()) {\n this.substituteWithEmptyString();\n } else {\n this.substituteFromFormFields();\n }\n } else {\n this.substituteWithEmptyString();\n }\n this.isCollecting = false;\n this.fieldIdToSubstitute = '';\n }\n\n private appendOriginalStringIfCollectionItemAsPlaceholder(): void {\n if (this.collectionItemIndex < this.numberCollectionItemsAsPlaceholder - 1) {\n this.stringToResolve += PlaceholderSubstitutor.NEW_LINE + this.originalStringToResolve;\n this.collectionItemIndex += 1;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n }\n\n private setStartCollecting(): void {\n this.isCollecting = true;\n this.startSubstitutionIndex = this.scanIndex;\n }\n\n private appendCharacter(): void {\n this.fieldIdToSubstitute += this.stringToResolve.charAt(this.scanIndex);\n }\n\n private isMatchingPlaceholderPattern(): boolean {\n return !!this.fieldIdToSubstitute.match(PlaceholderSubstitutor.PLACEHOLDER_CONTENT_PATTERN);\n }\n\n private isFieldIdInFormFields(): boolean {\n return this.getFieldValue() !== undefined;\n }\n\n private isFieldIdToSubstituteReferringItself(): boolean {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const value = this.getSubstitutionValueOrEmpty();\n return placeholder === value;\n }\n\n private getSubstitutionValueLengthOrZero(): number {\n return this.pageFormFields[this.fieldIdToSubstitute] ? this.getSubstitutionValueOrEmpty().toString().length : 0;\n }\n\n /**\n * Gets the value from `this` field, which could be any of a number of different types:\n * string | number | object | string[] | object[] | maybe others...\n * @returns The value associated with `this` field.\n */\n private getFieldValue(): any {\n if (this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute]) {\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n } else {\n const fieldValue = FormValueService.getFieldValue(this.pageFormFields, this.fieldIdToSubstitute, this.collectionItemIndex);\n this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute] = fieldValue;\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n }\n }\n\n private getSubstitutionValueOrEmpty(): string {\n const fieldValue = this.getFieldValue();\n return fieldValue ? fieldValue : '';\n }\n\n private getNumberOfCollectionItemsIfAny(): number {\n const fieldIds = this.fieldIdToSubstitute.split('.');\n let pageFormFieldsClone = FieldsUtils.cloneObject(this.pageFormFields);\n let numberCollectionItemsAsPlaceholder = 1;\n\n // tslint:disable-next-line\n for (let index = 0; index < fieldIds.length; index++) {\n if (FieldsUtils.isCollection(pageFormFieldsClone)) {\n numberCollectionItemsAsPlaceholder = pageFormFieldsClone.length;\n break;\n } else if (pageFormFieldsClone[fieldIds[index]] === undefined) {\n break;\n } else {\n pageFormFieldsClone = pageFormFieldsClone[fieldIds[index]];\n }\n }\n return numberCollectionItemsAsPlaceholder;\n }\n\n private isStartingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.STARTING_PLACEHOLDER;\n }\n\n private updateNumberOfCollectionItemsAsPlaceholder(): void {\n if (this.fieldIdToSubstitute.split('.').length > 1) {\n const newNumber = this.getNumberOfCollectionItemsIfAny();\n this.numberCollectionItemsAsPlaceholder = Math.max(newNumber, this.numberCollectionItemsAsPlaceholder);\n }\n }\n\n private substituteFromFormFields(): void {\n this.doSubstitution(this.getSubstitutionValueOrEmpty());\n this.resetScanIndexAfterSubstitution();\n }\n\n private substituteWithEmptyString(): void {\n this.doSubstitution('');\n this.scanIndex = this.startSubstitutionIndex;\n }\n\n private doSubstitution(value: string): void {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const replacedString = this.stringToResolve.substring(this.startSubstitutionIndex).replace(placeholder, value);\n this.stringToResolve = this.stringToResolve.substring(0, this.startSubstitutionIndex).concat(replacedString);\n }\n\n private resetScanIndexAfterSubstitution(): void {\n this.scanIndex = this.startSubstitutionIndex + this.getSubstitutionValueLengthOrZero();\n }\n }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { PlaceholderService } from './services/placeholder.service';\n\n@Directive({ selector: '[ccdLabelSubstitutor]' })\n/**\n * Checks all labels and substitutes any placholders that reference other fields values.\n */\nexport class LabelSubstitutorDirective implements OnInit, OnDestroy {\n\n @Input() public caseField: CaseField;\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n @Input() public elementsToSubstitute: string[] = ['label', 'hint_text'];\n\n private initialLabel: string;\n private initialHintText: string;\n\n constructor(\n private readonly fieldsUtils: FieldsUtils,\n private readonly placeholderService: PlaceholderService\n ) {}\n\n public ngOnInit(): void {\n this.initialLabel = this.caseField.label;\n this.initialHintText = this.caseField.hint_text;\n this.formGroup = this.formGroup || new FormGroup({});\n\n const fields: object = this.getReadOnlyAndFormFields();\n\n if (this.shouldSubstitute('label')) {\n this.caseField.label = this.resolvePlaceholders(fields, this.caseField.label);\n }\n if (this.shouldSubstitute('hint_text')) {\n this.caseField.hint_text = this.resolvePlaceholders(fields, this.caseField.hint_text);\n }\n if (this.shouldSubstitute('value')) {\n this.caseField.value = this.resolvePlaceholders(fields, this.caseField.value);\n }\n }\n\n public ngOnDestroy(): void {\n this.caseField.label = this.initialLabel;\n this.caseField.hint_text = this.initialHintText;\n }\n\n private shouldSubstitute(element: string): boolean {\n return this.elementsToSubstitute.find(e => e === element) !== undefined;\n }\n\n private getReadOnlyAndFormFields(): object {\n const formFields: object = this.getFormFieldsValuesIncludingDisabled();\n // TODO: Delete following line when @Input contextFields is fixed - https://tools.hmcts.net/jira/browse/RDM-3504\n const uniqueContextFields: CaseField[] = this.removeDuplicates(this.contextFields);\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(uniqueContextFields, formFields);\n }\n\n private removeDuplicates(original: CaseField[]): CaseField[] {\n const unique: CaseField[] = [];\n original.forEach(caseField => {\n const isUnique = unique.filter(e => e.id === caseField.id).length === 0;\n if (isUnique) {\n unique.push(caseField);\n }\n });\n return unique;\n }\n\n private getFormFieldsValuesIncludingDisabled(): object {\n return this.formGroup.getRawValue();\n }\n\n private resolvePlaceholders(fields: object, stringToResolve: string): string {\n return this.placeholderService.resolvePlaceholders(fields, stringToResolve);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\n\n@Pipe({\n name: 'ccdCaseReference'\n})\nexport class CaseReferencePipe implements PipeTransform {\n\n public transform(caseReference: string): string {\n if (!caseReference) {\n return '';\n }\n if (Draft.isDraft(caseReference)) {\n return DRAFT_PREFIX;\n } else {\n const regex = /(?:\\/)?(\\d{4})(\\d{4})(\\d{4})(\\d{4})/g;\n const result = String(caseReference).replace(regex, (match,\n g1, g2, g3, g4) => {\n const isLink = match[0] === '/';\n if (isLink) {\n return match;\n }\n\n return [g1, g2, g3, g4].join('-');\n });\n\n return result;\n }\n }\n}\n","import { Component, HostListener, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ccd-markdown',\n templateUrl: './markdown.html'\n})\nexport class MarkdownComponent implements OnInit {\n @Input()\n public content: string;\n @Input()\n public markdownUseHrefAsRouterLink!: boolean;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.content = this.content.replace(/ \\n/g, '<br>');\n }\n\n @HostListener('click', ['$event'])\n public onMarkdownClick(event: MouseEvent) {\n // If we don't have an anchor tag, we don't need to do anything.\n if (event.target instanceof HTMLAnchorElement === false) {\n return;\n }\n return true;\n }\n}\n","<div><markdown class=\"markdown\" [innerHTML]=\"content | ccdCaseReference\"></markdown></div>\n","import { Component, Input } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n@Component({\n selector: 'ccd-label-field',\n templateUrl: './label-field.html'\n})\nexport class LabelFieldComponent {\n @Input()\n public caseField: CaseField;\n\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public markdownUseHrefAsRouterLink?: boolean;\n}\n","<h1 *ngIf=\"!caseTitle.label\" class=\"heading-h1\">#{{ caseDetails.case_id | ccdCaseReference}}</h1>\n\n<div *ngIf=\"caseTitle.label\" class=\"case-title\">\n <ccd-label-field [caseField]=\"caseTitle\" [caseFields]=\"caseFields\"></ccd-label-field>\n</div>\n","<dl [hidden]=\"caseField.hidden\" class=\"case-field\" ccdLabelSubstitutor [caseField]=\"caseField\" [contextFields]=\"caseFields\" [id]=\"caseField.id\">\n <dt>\n <ccd-markdown [content]=\"caseField.value || caseField.label\" [markdownUseHrefAsRouterLink]=\"markdownUseHrefAsRouterLink\">\n </ccd-markdown>\n </dt>\n <dd></dd>\n</dl>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { Draft } from '../../domain/draft.model';\n\n@Component({\n selector: 'ccd-case-header',\n templateUrl: './case-header.html',\n styleUrls: ['./case-header.scss']\n})\n\nexport class CaseHeaderComponent implements OnInit {\n\n @Input()\n public caseDetails: CaseView;\n public caseTitle: CaseField;\n public caseFields: CaseField[];\n\n public ngOnInit(): void {\n this.caseTitle = new CaseField();\n if (!this.isDraft() && this.caseDetails.state.title_display) {\n this.caseTitle.label = this.caseDetails.state.title_display;\n this.caseFields = this.getCaseFields();\n }\n }\n\n public isDraft(): boolean {\n return Draft.isDraft(this.caseDetails.case_id);\n }\n\n private getCaseFields(): CaseField[] {\n const caseDataFields = this.caseDetails.tabs.reduce((acc, tab) => {\n return acc.concat(tab.fields);\n }, []);\n\n return caseDataFields.concat(this.caseDetails.metadataFields);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AlertModule } from './alert/alert.module';\n\n@NgModule({\n imports: [\n CommonModule,\n AlertModule\n ],\n exports: [\n AlertModule\n ]\n})\nexport class BannersModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { BodyComponent } from './body.component';\n\n@NgModule({\n imports: [CommonModule, RouterModule],\n declarations: [BodyComponent],\n exports: [BodyComponent]\n})\nexport class BodyModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { FooterComponent } from './footer.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [FooterComponent],\n exports: [FooterComponent]\n})\nexport class FootersModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DateInputComponent } from './date-input/date-input.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n DateInputComponent,\n ],\n exports: [\n DateInputComponent,\n ]\n})\nexport class FormModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ccdDash'\n})\nexport class DashPipe implements PipeTransform {\n\n public transform(value: string): string {\n return value ? value : '-';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n@Pipe({\n name: 'ccdFieldLabel'\n})\nexport class FieldLabelPipe implements PipeTransform {\n\n public transform (field: CaseField): string {\n if (!field || !field.label) {\n return '';\n } else if (!field.display_context) {\n return field.label;\n }\n return field.label + (field.display_context.toUpperCase() === 'OPTIONAL' ? ' (Optional)' : '');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\n@Pipe({\n name: 'ccdFirstError'\n})\nexport class FirstErrorPipe implements PipeTransform {\n\n public transform(value: ValidationErrors, args?: string): string {\n if (!value) {\n return '';\n }\n\n if (!args) {\n args = 'Field';\n }\n\n const keys = Object.keys(value);\n\n if (!keys.length) {\n return '';\n }\n if (keys[0] === 'required') {\n return `${args} is required`;\n } else if (keys[0] === 'pattern') {\n return `The data entered is not valid for ${args}`;\n } else if (keys[0] === 'minlength') {\n return `${args} is below the minimum length`;\n } else if (keys[0] === 'maxlength') {\n return `${args} exceeds the maximum length`;\n } else if (value.hasOwnProperty('matDatetimePickerParse')) {\n return 'The date entered is not valid. Please provide a valid date';\n }\n return value[keys[0]];\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../../domain/definition/field-type-enum.model';\n\n@Pipe({\n name: 'ccdIsCompound'\n})\nexport class IsCompoundPipe implements PipeTransform {\n\n private static readonly COMPOUND_TYPES: FieldTypeEnum[] = [\n 'Complex', 'Label', 'AddressGlobal', 'AddressUK', 'AddressGlobalUK', 'CasePaymentHistoryViewer', 'CaseHistoryViewer', 'Organisation', 'WaysToPay'\n ];\n\n private static readonly EXCLUDE: string[] = [\n 'CaseLink'\n ];\n\n public transform(field: CaseField): boolean {\n if (!field || !field.field_type || !field.field_type.type) {\n return false;\n }\n\n if (IsCompoundPipe.COMPOUND_TYPES.indexOf(field.field_type.type) !== -1) {\n if (IsCompoundPipe.EXCLUDE.indexOf(field.field_type.id) !== -1) {\n return false;\n }\n return true;\n }\n\n return false;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\n\n@Injectable()\nexport class CaseFieldService {\n\n public isOptional (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n public isReadOnly (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'READONLY';\n }\n\n public isMandatory (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'MANDATORY';\n }\n\n public isLabel (field: CaseField) {\n if (!field || !field.field_type) {\n return false;\n }\n return field.field_type.type === 'Label';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { CaseFieldService } from '../../../services/case-fields/case-field.service';\n\n@Pipe({\n name: 'ccdIsMandatory'\n})\nexport class IsMandatoryPipe implements PipeTransform {\n\n constructor(private readonly caseFieldService: CaseFieldService) {}\n\n public transform(field: CaseField): boolean {\n return this.caseFieldService.isMandatory(field);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { CaseFieldService } from '../../../services/case-fields/case-field.service';\n\n@Pipe({\n name: 'ccdIsReadOnly'\n})\nexport class IsReadOnlyPipe implements PipeTransform {\n\n constructor(private readonly caseFieldService: CaseFieldService) {}\n\n public transform(field: CaseField): boolean {\n return this.caseFieldService.isReadOnly(field);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { CaseFieldService } from '../../../services/case-fields';\n\n@Pipe({\n name: 'ccdIsReadOnlyAndNotCollection'\n})\nexport class IsReadOnlyAndNotCollectionPipe implements PipeTransform {\n\n constructor(private readonly caseFieldService: CaseFieldService) {}\n\n public transform(field: CaseField): boolean {\n if (!field || !field.field_type || !field.field_type.type) {\n return false;\n }\n if (this.isCollection(field)) {\n return false;\n }\n return this.caseFieldService.isReadOnly(field);\n }\n\n // CaseField @Expose() doesn't work with the pipe in here, so leaving the manual check\n private isCollection(field: CaseField): boolean {\n return field.field_type && field.field_type.type === 'Collection';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DashPipe } from './dash.pipe';\nimport { DatePipe } from './date.pipe';\nimport { FieldLabelPipe } from './field-label.pipe';\nimport { FirstErrorPipe } from './first-error.pipe';\nimport { IsCompoundPipe } from './is-compound.pipe';\nimport { IsMandatoryPipe } from './is-mandatory.pipe';\nimport { IsReadOnlyAndNotCollectionPipe } from './is-read-only-and-not-collection.pipe';\nimport { IsReadOnlyPipe } from './is-read-only.pipe';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n DatePipe,\n FieldLabelPipe,\n FirstErrorPipe,\n IsCompoundPipe,\n IsMandatoryPipe,\n IsReadOnlyPipe,\n IsReadOnlyAndNotCollectionPipe,\n DashPipe\n ],\n exports: [\n DatePipe,\n FieldLabelPipe,\n FirstErrorPipe,\n IsCompoundPipe,\n IsMandatoryPipe,\n IsReadOnlyPipe,\n IsReadOnlyAndNotCollectionPipe,\n DashPipe\n ]\n})\nexport class PaletteUtilsModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PlaceholderService } from '../../directives/substitutor/services/placeholder.service';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdCaseTitle'\n})\nexport class CcdCaseTitlePipe implements PipeTransform {\n constructor(private readonly placeholderService: PlaceholderService, private readonly fieldsUtils: FieldsUtils) {\n }\n public transform(caseTitle: string, caseFields: CaseField[], values: any): any {\n const caseFieldValues = this.getReadOnlyAndFormFields(values, caseFields);\n const result = this.placeholderService.resolvePlaceholders(caseFieldValues, caseTitle);\n return result;\n }\n\n private getReadOnlyAndFormFields(formGroup, caseFields: CaseField[]): any {\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(caseFields, formGroup.getRawValue());\n }\n\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SortOrder } from '../../../components/palette/complex/sort-order';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SortParameters } from '../../../domain/search/sorting/sort-parameters';\n\n@Pipe({\n name: 'ccdSortSearchResult'\n})\nexport class SortSearchResultPipe implements PipeTransform {\n\n public transform(searchResults: SearchResultViewItem[], sortParameters: SortParameters) {\n\n if (isUndefined(searchResults) || isUndefined(sortParameters)) {\n return searchResults;\n }\n return searchResults.sort(\n (a, b) => {\n return sortParameters.comparator.compare(a, b)\n * (sortParameters.sortOrder === SortOrder.DESCENDING ? 1 : -1);\n }\n );\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CaseReferencePipe } from './case-reference';\nimport { CcdCaseTitlePipe } from './case-title';\nimport { SortSearchResultPipe } from './search-result/sorting/sort-search-result.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n CaseReferencePipe,\n SortSearchResultPipe,\n CcdCaseTitlePipe\n ],\n exports: [\n CaseReferencePipe,\n SortSearchResultPipe,\n CcdCaseTitlePipe\n ]\n})\nexport class PipesModule {}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\n\ntype FormContainer = FormGroup | FormArray;\n\n@Directive()\nexport abstract class AbstractFormFieldComponent {\n @Input()\n public caseField: CaseField;\n\n @Input()\n public formGroup: FormGroup;\n\n @Input()\n public parent?: FormContainer;\n\n @Input()\n public idPrefix = '';\n\n public id() {\n return this.idPrefix + this.caseField.id;\n }\n\n protected registerControl<T extends AbstractControl>(control: T, replace = false): AbstractControl {\n const container: FormContainer = this.parent || this.formGroup;\n if (!container) {\n return control;\n }\n const existing = container.controls[this.caseField.id];\n if (existing) {\n if (replace) {\n // Set the validators on the replacement with what already exists.\n control.setValidators(existing.validator);\n } else {\n return existing;\n }\n }\n this.addValidators(this.caseField, control);\n FieldsUtils.addCaseFieldAndComponentReferences(control, this.caseField, this);\n return this.addControlToParent(control, container, replace);\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n // No validators by default, override this method to add validators to the form control\n }\n\n private addControlToParent(control: AbstractControl, parent: FormContainer, replace: boolean): AbstractControl {\n if (parent instanceof FormArray) {\n return this.addControlToFormArray(control, parent, replace);\n }\n return this.addControlToFormGroup(control, parent, replace);\n }\n\n private addControlToFormArray(control: AbstractControl, parent: FormArray, replace: boolean): AbstractControl {\n const index = parseInt(this.caseField.id, 10);\n if (replace && !isNaN(index)) {\n parent.setControl(index, control);\n } else {\n parent.push(control);\n }\n return control;\n }\n\n private addControlToFormGroup(control: AbstractControl, parent: FormGroup, replace: boolean): AbstractControl {\n if (replace) {\n if (this.caseField.field_type && this.caseField.field_type.id === 'CaseLink' && this.caseField.field_type.type === 'Complex' && /^-?\\d+$/.test(this.caseField.id)) {\n parent.setControl('CaseReference', control['controls']['CaseReference']);\n } else {\n parent.setControl(this.caseField.id, control);\n }\n } else {\n parent.addControl(this.caseField.id, control);\n }\n return control;\n }\n}\n","export enum PaletteContext {\n DEFAULT = 'DEFAULT',\n CHECK_YOUR_ANSWER = 'CHECK_YOUR_ANSWER',\n TABLE_VIEW = 'TABLE_VIEW',\n}\n","import { Directive, Input, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\n\nimport { AbstractFormFieldComponent } from './abstract-form-field.component';\nimport { PaletteContext } from './palette-context.enum';\n\n@Directive()\nexport abstract class AbstractFieldReadComponent extends AbstractFormFieldComponent implements OnInit {\n\n @Input()\n public caseReference: string;\n\n @Input()\n public topLevelFormGroup: FormGroup | AbstractControl;\n\n /**\n * Optional. Enable context-aware rendering of fields.\n */\n @Input()\n public context: PaletteContext = PaletteContext.DEFAULT;\n\n public ngOnInit(): void {\n if (!this.caseField.metadata) {\n this.registerControl(new FormControl(this.caseField.value));\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class Constants {\n public static readonly MANDATORY: string = 'MANDATORY';\n public static readonly REGEX_WHITESPACES: string = '^[^ ]+(?:\\\\s+[^ ]+)*$';\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\n\nimport { Constants } from '../../commons/constants';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FormValidatorsService {\n\n private static readonly CUSTOM_VALIDATED_TYPES: FieldTypeEnum[] = [\n 'Date', 'MoneyGBP', 'Label'\n ];\n public static addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n if (\n caseField.display_context === Constants.MANDATORY &&\n FormValidatorsService.CUSTOM_VALIDATED_TYPES.indexOf(caseField.field_type.type) === -1\n ) {\n const validators = [Validators.required];\n if (caseField.field_type.type === 'Text') {\n if (caseField.field_type.regular_expression) {\n validators.push(Validators.pattern(caseField.field_type.regular_expression));\n } else {\n validators.push(this.emptyValidator());\n }\n if (caseField.field_type.min && (typeof caseField.field_type.min === 'number')) {\n validators.push(Validators.minLength(caseField.field_type.min));\n }\n if (caseField.field_type.max && (typeof caseField.field_type.max === 'number')) {\n validators.push(Validators.maxLength(caseField.field_type.max));\n }\n }\n if (control.validator) {\n validators.push(control.validator);\n }\n control.setValidators(validators);\n }\n return control;\n }\n\n public static emptyValidator(): ValidatorFn {\n const validator = (control: AbstractControl):ValidationErrors | null => {\n if (control && control.value && control.value.toString().trim().length === 0) {\n return { required: {} };\n }\n return null;\n };\n return validator;\n }\n\n // TODO: Strip this out as it's only here for the moment because\n // the service is being injected all over the place but it doesn't\n // need to be as FormValidatorsService.addValidators is perfectly\n // happy being static.\n public addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n return FormValidatorsService.addValidators(caseField, control);\n }\n}\n","import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { AbstractFormFieldComponent } from './abstract-form-field.component';\n\n@Directive()\nexport abstract class AbstractFieldWriteComponent extends AbstractFormFieldComponent implements OnChanges {\n\n @Input()\n public isExpanded = false;\n\n @Input()\n public isInSearchBlock = false;\n\n public constructor() {\n super();\n this.fixCaseField();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n const change = changes['caseField'];\n if (change) {\n const cfNew = change.currentValue;\n if (!(cfNew instanceof CaseField)) {\n this.fixCaseField();\n }\n }\n }\n\n public createElementId(elementId: string): string {\n return `${this.id()}_${elementId}`;\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n FormValidatorsService.addValidators(caseField, control);\n }\n\n private fixCaseField() {\n if (this.caseField && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n }\n}\n","import { AfterContentInit, Directive, ElementRef, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[focusElement]'\n})\n/**\n * Focuses the host element after the content of the view has been initialised. Works on writable fields. If the\n * directive is used on more than one element, the last element to be initialised will be in focus.\n * NOTE:\n * The directive focuses on the element only for the very first time when the content into the component's view, the\n * view that the directive is in is initialised. Refocusing the element will require explicit focusing for e.g. by\n * calling this directives focus() method from the host component.\n */\nexport class FocusElementDirective implements AfterContentInit {\n\n constructor(private readonly el: ElementRef, private readonly renderer: Renderer2) {\n }\n\n public ngAfterContentInit(): void {\n this.focus();\n }\n\n public focus(): void {\n if (this.el.nativeElement) {\n const focusElement = this.renderer.selectRootElement(this.el.nativeElement, true);\n if (focusElement) {\n focusElement.focus();\n }\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FocusElementDirective } from './focus-element.directive';\n\n@NgModule({\n declarations: [\n FocusElementDirective\n ],\n exports: [\n FocusElementDirective\n ]\n})\nexport class FocusElementModule {\n}\n","export class AddressModel {\n public AddressLine1 = '';\n public AddressLine2 = '';\n public AddressLine3 = '';\n public PostTown = '';\n public County = '';\n public PostCode = '';\n public Country = '';\n}\n","import { AddressModel } from '../../../domain/addresses/address.model';\nexport class AddressOption {\n\n public description: string;\n\n public value: AddressModel;\n\n constructor (addressModel: AddressModel, description: string) {\n if (description == null) {\n this.value = addressModel;\n this.description = this.getDescription();\n } else {\n this.description = description;\n }\n }\n\n private getDescription() {\n return this.removeInitialCommaIfPresent(\n (this.value.AddressLine1 === undefined ? '' : this.value.AddressLine1)\n + this.prefixWithCommaIfPresent(this.value.AddressLine2)\n + this.prefixWithCommaIfPresent(this.value.AddressLine3)\n + ', ' + this.value.PostTown\n );\n }\n\n private prefixWithCommaIfPresent(value: string) {\n return value ? ', ' + value : value;\n }\n\n private removeInitialCommaIfPresent(value: string) {\n return value.replace(new RegExp('^,', 'gi'), '');\n }\n\n}\n","import { AddressModel } from '../../domain/addresses/address.model';\nimport { AddressesService } from './addresses.service';\n\n/**\n * Moving all this logic here into Address Parser class, so that it\n * will be easier for us when we move this parsing logic to into\n * `Shim` java service.\n */\n export class AddressParser {\n public parse(address: any) {\n const classification = `${address.CLASSIFICATION_CODE}`;\n const addressModel = new AddressModel();\n addressModel.AddressLine1 = this.parseAddressLine1(classification, address);\n addressModel.AddressLine2 = this.parseAddressLine2(classification, address);\n addressModel.AddressLine3 = this.parseAddressLine3(classification, address);\n addressModel.PostCode = address.POSTCODE;\n addressModel.PostTown = address.POST_TOWN;\n addressModel.Country = AddressesService.UK;\n return addressModel;\n }\n\n private parseAddressLine1(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.ORGANISATION_NAME} ${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n } else {\n addressLine =\n `${address.ORGANISATION_NAME}${this.prefixWithCommaIfPresent(address.BUILDING_NAME)}` +\n `${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine2(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine = `${address.BUILDING_NAME} `;\n } else {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine3(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n } else {\n addressLine =\n `${address.DEPENDENT_LOCALITY} ${address.DOUBLE_DEPENDENT_LOCALITY} ${address.DEPENDENT_THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private removeNonAddressValues(line: string) {\n line = line.replace(' null', ' ').replace('null ', ' ');\n line = this.removeUndefinedString(line);\n line = this.removeInitialComma(line);\n line = this.removeEmptySpaces(line);\n return line;\n }\n\n private removeUndefinedString(value: string) {\n return value.replace(new RegExp('undefined', 'gi'), '');\n }\n\n private removeEmptySpaces(value: string) {\n return value.replace(new RegExp(' +', 'gi'), ' ').trim();\n }\n\n private removeInitialComma(value: string) {\n return value.replace(new RegExp('^,', 'gi'), '');\n }\n\n private prefixWithCommaIfPresent(value: string) {\n return value ? ', ' + value : value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { AddressModel } from '../../domain/addresses';\nimport { HttpService } from '../http';\nimport { AddressParser } from './address-parser';\n\n@Injectable()\nexport class AddressesService {\n\n public static readonly DPA = 'DPA';\n\n public static readonly UK = 'United Kingdom';\n\n public static readonly RD06 = 'RD06';\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getAddressesForPostcode(postcode: string): Observable<AddressModel[]> {\n return this.http\n .get(this.appConfig.getPostcodeLookupUrl()\n .replace('${postcode}', postcode), undefined, false)\n .pipe(\n map(res => res.results))\n .pipe(\n map(output => output.map(addresses =>\n this.format(new AddressParser().parse(addresses[AddressesService.DPA]))\n ))\n );\n }\n\n private format(addressModel: AddressModel) {\n return this.formatAddressLines(this.shiftAddressLinesUp(addressModel));\n }\n\n private formatAddressLines(addressModel: AddressModel) {\n ['AddressLine1', 'AddressLine2', 'AddressLine3', 'PostTown'].forEach(value => {\n addressModel[value] = this.toCapitalCase(addressModel[value]);\n });\n return addressModel;\n }\n\n private shiftAddressLinesUp(addressModel: AddressModel) {\n if (addressModel.AddressLine2 === '') {\n addressModel.AddressLine2 = addressModel.AddressLine3;\n addressModel.AddressLine3 = '';\n }\n if (addressModel.AddressLine1 === '') {\n addressModel.AddressLine1 = addressModel.AddressLine2;\n addressModel.AddressLine2 = '';\n }\n return addressModel;\n }\n\n private toCapitalCase(sentence: string) {\n sentence = sentence.toLowerCase();\n sentence.split(' ').forEach((value, index) => {\n sentence = sentence.replace(value, value.charAt(0).toUpperCase() + value.substr(1));\n }\n );\n return sentence;\n }\n}\n","import * as _score from 'underscore';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\nexport class ShowCondition {\n\n // Expects a show condition of the form: <fieldName>=\"string\"\n constructor(public condition: string) {\n if (!!condition) {\n if (condition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n this.orConditions = condition.split(ShowCondition.OR_CONDITION_REGEXP);\n } else {\n this.andConditions = condition.split(ShowCondition.AND_CONDITION_REGEXP);\n }\n }\n }\n\n private static readonly AND_CONDITION_REGEXP = new RegExp('\\\\sAND\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly OR_CONDITION_REGEXP = new RegExp('\\\\sOR\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly CONDITION_NOT_EQUALS = '!=';\n private static readonly CONDITION_EQUALS = '=';\n private static readonly CONTAINS = 'CONTAINS';\n private static readonly instanceCache = new Map<string, ShowCondition>();\n\n private readonly orConditions: string[] = null;\n private readonly andConditions: string[] = null;\n public static addPathPrefixToCondition(showCondition: string, pathPrefix: string): string {\n if (!pathPrefix || pathPrefix === '') {\n return showCondition;\n }\n if (showCondition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n let orConditions = showCondition.split(ShowCondition.OR_CONDITION_REGEXP);\n orConditions = this.extractConditions(orConditions, pathPrefix);\n return orConditions.join(' OR ');\n } else {\n let andConditions = showCondition.split(ShowCondition.AND_CONDITION_REGEXP);\n andConditions = this.extractConditions(andConditions, pathPrefix);\n return andConditions.join(' AND ');\n }\n }\n\n // Cache instances so that we can cache results more effectively\n public static getInstance(condition: string): ShowCondition {\n let instance = this.instanceCache.get(condition);\n if (!instance) {\n instance = new ShowCondition(condition);\n this.instanceCache.set(condition, instance);\n }\n return instance;\n }\n\n /**\n * Determine whether a ShowCondition model is affected by fields that have\n * a display_context of HIDDEN or READONLY, which means they aren't able to\n * be changed by the user's actions.\n *\n * @param showCondition The ShowCondition model to evaluate.\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public static hiddenCannotChange(showCondition: ShowCondition, caseFields: CaseField[]): boolean {\n if (showCondition && caseFields) {\n const conditions: string[] = showCondition.andConditions || showCondition.orConditions;\n if (conditions && conditions.length > 0) {\n let allUnchangeable = true;\n for (const condition of conditions) {\n const [field] = ShowCondition.getField(condition);\n const path: string[] = field.split('.');\n let head = path.shift();\n let caseField: CaseField = caseFields.find(cf => cf.id === head);\n while (path.length > 0) {\n head = path.shift();\n if (caseField) {\n // Jump out if this is HIDDEN or READONLY, regardless of whether or not it's\n // complex or a collection - nested fields will \"inherit\" the display_context.\n if (['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1) {\n break;\n }\n\n // Consider what type of field this is.\n const ft = caseField.field_type;\n switch (ft.type) {\n case 'Collection':\n if (ft.collection_field_type.type === 'Complex' && ft.collection_field_type.complex_fields) {\n caseField = ft.collection_field_type.complex_fields.find(cf => cf.id === head);\n }\n break;\n case 'Complex':\n if (ft.complex_fields) {\n caseField = ft.complex_fields.find(cf => cf.id === head);\n }\n break;\n }\n }\n }\n if (caseField) {\n allUnchangeable = allUnchangeable && ['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1;\n }\n }\n return allUnchangeable;\n }\n }\n return false;\n }\n\n private static extractConditions(conditionsArray: string[], pathPrefix: string): string[] {\n const extracted = conditionsArray.map(condition => {\n if (condition.startsWith(pathPrefix)) {\n return condition;\n }\n return `${pathPrefix}.${condition}`;\n });\n return extracted;\n }\n\n private static getField(condition: string): [string, string?] {\n let separator: string = ShowCondition.CONTAINS;\n if (condition.indexOf(ShowCondition.CONTAINS) < 0) {\n separator = ShowCondition.CONDITION_EQUALS;\n if (condition.indexOf(ShowCondition.CONDITION_NOT_EQUALS) > -1) {\n separator = ShowCondition.CONDITION_NOT_EQUALS;\n }\n }\n return [ condition.split(separator)[0], separator ];\n }\n\n public match(fields: object, path?: string): boolean {\n if (!this.condition) {\n return true;\n }\n return this.matchAndConditions(fields, this.updatePathName(path));\n }\n\n public matchByContextFields(contextFields: CaseField[]): boolean {\n return this.match(FieldsUtils.toValuesMap(contextFields));\n }\n\n /**\n * Determine whether this is affected by fields that have a display_context\n * of HIDDEN or READONLY, which means they aren't able to be changed by the\n * user's actions.\n *\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public hiddenCannotChange(caseFields: CaseField[]): boolean {\n return ShowCondition.hiddenCannotChange(this, caseFields);\n }\n\n /**\n * Path Name gets updated for complex sub fields\n * @param path Path name.\n */\n private updatePathName(path: string): string {\n if (path && path.split(/[_]+/g).length > 0) {\n const [pathName, ...pathTail] = path.split(/[_]+/g);\n const pathFinalIndex = pathTail.pop();\n const pathTailString = pathTail.toString();\n let mappedPathTail;\n\n mappedPathTail = pathTail.map((value) => {\n return Number(pathFinalIndex) === Number(value) ? pathName : value;\n });\n\n return pathTailString !== mappedPathTail.toString()\n ? `${pathName}_${mappedPathTail.join('_')}_${pathFinalIndex}`\n : path;\n } else {\n return path;\n }\n }\n\n private matchAndConditions(fields: object, path?: string): boolean {\n if (!!this.orConditions) {\n return this.orConditions.some(orCondition => this.matchEqualityCondition(fields, orCondition, path));\n } else if (!!this.andConditions) {\n return this.andConditions.every(andCondition => this.matchEqualityCondition(fields, andCondition, path));\n } else {\n return false;\n }\n }\n\n private matchEqualityCondition(fields: object, condition: string, path?: string): boolean {\n const [field, conditionSeparator] = ShowCondition.getField(condition);\n const [head, ...tail] = field.split('.');\n const currentValue = this.findValueForComplexCondition(fields, head, tail, path);\n const expectedValue = this.unquoted(condition.split(conditionSeparator)[1]);\n if (conditionSeparator === ShowCondition.CONTAINS) {\n return this.checkValueContains(expectedValue, currentValue);\n } else {\n return this.checkValueEquals(expectedValue, currentValue, conditionSeparator);\n }\n }\n\n private checkValueEquals(expectedValue: string, currentValue: any, conditionSeparaor: string): boolean {\n if (expectedValue.search('[,]') > -1) { // for multi-select list\n return this.checkMultiSelectListEquals(expectedValue, currentValue, conditionSeparaor);\n } else if (expectedValue.endsWith('*') && currentValue && conditionSeparaor !== ShowCondition.CONDITION_NOT_EQUALS) {\n if (typeof currentValue === 'string') {\n return currentValue.startsWith(this.removeStarChar(expectedValue));\n }\n return expectedValue === '*';\n } else {\n // changed from '===' to '==' to cover number field conditions\n if (conditionSeparaor === ShowCondition.CONDITION_NOT_EQUALS) {\n return this.checkValueNotEquals(expectedValue, currentValue);\n } else {\n return currentValue == expectedValue || this.okIfBothEmpty(expectedValue, currentValue); // tslint:disable-line\n }\n }\n }\n\n private checkValueNotEquals(expectedValue: string, currentValue: any): boolean {\n const formatCurrentValue = currentValue ? currentValue.toString().trim() : '';\n if ('*' === expectedValue && formatCurrentValue !== '') {\n return false;\n }\n const formatExpectedValue = expectedValue ? expectedValue.toString().trim() : '';\n return formatCurrentValue != formatExpectedValue; // tslint:disable-line\n }\n\n private checkMultiSelectListEquals(expectedValue: string, currentValue: any, conditionSeparator: string): boolean {\n const expectedValues = expectedValue.split(',').sort().toString();\n const values = currentValue ? currentValue.sort().toString() : '';\n if (conditionSeparator === ShowCondition.CONDITION_NOT_EQUALS) {\n return expectedValues !== values;\n } else {\n return expectedValues === values;\n }\n }\n\n private checkValueContains(expectedValue: string, currentValue: any): boolean {\n if (expectedValue.search(',') > -1) {\n const expectedValues = expectedValue.split(',').sort();\n const values = currentValue ? currentValue.sort().toString() : '';\n return expectedValues.every(item => values.search(item) >= 0);\n } else {\n const values = currentValue && Array.isArray(currentValue) ? currentValue.toString() : '';\n return values.search(expectedValue) >= 0;\n }\n }\n\n private findValueForComplexCondition(fields: object, head: string, tail: string[], path?: string): any {\n if (!fields) {\n return undefined;\n }\n if (tail.length === 0) {\n return this.getValue(fields, head);\n } else {\n if (FieldsUtils.isArray(fields[head])) {\n return this.findValueForComplexConditionInArray(fields, head, tail, path);\n } else {\n return this.findValueForComplexConditionForPathIfAny(fields, head, tail, path);\n }\n }\n }\n\n private findValueForComplexConditionForPathIfAny(fields: object, head: string, tail: string[], path?: string): any {\n if (path) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), pathTail.join('_'));\n } else {\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), path);\n }\n }\n\n private findValueForComplexConditionInArray(fields: object, head: string, tail: string[], path?: string): any {\n // use the path to resolve which array element we refer to\n if (path && path.startsWith(head)) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n if (pathTail.length > 0) {\n try {\n const arrayIndex = Number.parseInt(pathTail[0], 10);\n const [__, ...dropNumberPath] = pathTail;\n return (fields[head][arrayIndex] !== undefined) ? this.findValueForComplexCondition(\n fields[head][arrayIndex]['value'], tail[0], tail.slice(1), dropNumberPath.join('_')) : null;\n } catch (e) {\n console.log('Error while parsing number', pathTail[0], e);\n }\n }\n } else {\n console.log('Path in formArray should start with ', head, ', full path: ', path);\n }\n }\n\n private getValue(fields: object, head: string): any {\n if (this.isDynamicList(fields[head])) {\n return fields[head].value.code;\n } else {\n return fields[head];\n }\n }\n\n private isDynamicList(dynamiclist: object): boolean {\n return !_score.isEmpty(dynamiclist) &&\n (_score.has(dynamiclist, 'value') && _score.has(dynamiclist, 'list_items'));\n }\n\n private unquoted(str: string): string {\n return str.replace(/(?:^\")|(?:\"$)/g, '');\n }\n\n private removeStarChar(str: string): string {\n return str.substring(0, str.length - 1);\n }\n\n private okIfBothEmpty(right: string, value: any): boolean {\n return value === null && (right === '');\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdFieldsFilter'\n})\nexport class FieldsFilterPipe implements PipeTransform {\n\n private static readonly EMPTY_VALUES = [\n undefined,\n null,\n '',\n {}\n ];\n\n private static readonly NESTED_TYPES = {\n Complex: FieldsFilterPipe.isValidComplex\n };\n\n /**\n * Complex type should have at least on simple field descendant with a value.\n */\n private static isValidComplex(field: CaseField, values?: object): boolean {\n values = values || {};\n const type = field.field_type;\n const value = FieldsFilterPipe.getValue(field, values);\n\n const hasChildrenWithValue = type.complex_fields.find(f => {\n return FieldsFilterPipe.keepField(f, value);\n });\n\n return !!hasChildrenWithValue;\n }\n\n private static isEmpty(value: any): boolean {\n return FieldsFilterPipe.EMPTY_VALUES.indexOf(value) !== -1\n || value.length === 0;\n }\n\n private static isCompound(field: CaseField): boolean {\n return FieldsFilterPipe.NESTED_TYPES[field.field_type.type];\n }\n\n private static isValidCompound(field: CaseField, value?: object): boolean {\n return FieldsFilterPipe.isCompound(field)\n && FieldsFilterPipe.NESTED_TYPES[field.field_type.type](field, value);\n }\n\n private static keepField(field: CaseField, value?: object): boolean {\n // We shouldn't ditch labels.\n if (field.field_type.type === 'Label' && (field.label || '').length > 0) {\n return true;\n }\n\n value = value || {};\n\n if (FieldsFilterPipe.isCompound(field)) {\n return FieldsFilterPipe.isValidCompound(field, value);\n }\n\n return !FieldsFilterPipe.isEmpty(field.value)\n || !FieldsFilterPipe.isEmpty(value[field.id]);\n }\n\n private static getValue(field: CaseField, values: any, index?: number): any {\n let value: any;\n if (index >= 0 ) {\n value = values[index].value[field.id];\n } else {\n value = values[field.id];\n }\n return FieldsFilterPipe.isEmpty(field.value) ? value : field.value;\n }\n\n /**\n * Filter out fields having no data to display and harmonise field values coming parent's value.\n */\n public transform(complexField: CaseField, keepEmpty?: boolean, index?: number, stripHidden= false): CaseField[] {\n if (!complexField || !complexField.field_type) {\n return [];\n }\n\n const fields = complexField.field_type.complex_fields || [];\n const values = complexField.value || {};\n const checkConditionsAgainst = { [complexField.id]: values };\n\n return fields\n .filter( f => {\n if (stripHidden && f.show_condition) {\n const cond = ShowCondition.getInstance(f.show_condition);\n return cond.match(checkConditionsAgainst);\n }\n return true;\n })\n .map(f => {\n const clone = FieldsUtils.cloneObject(f);\n const value = FieldsFilterPipe.getValue(f, values, index);\n if (!FieldsFilterPipe.isEmpty(value)) {\n clone.value = value;\n }\n return clone;\n })\n .filter(f => keepEmpty || FieldsFilterPipe.keepField(f))\n .map(f => {\n if (!f.display_context) {\n f.display_context = complexField.display_context;\n }\n return f;\n });\n }\n}\n","<div class=\"form-group\" [id]=\"id()\">\n <fieldset>\n <legend><h2 *ngIf=\"renderLabel\" class=\"heading-h2\">{{caseField | ccdFieldLabel}}</h2></legend>\n <ng-container [ngSwitch]=\"field | ccdIsReadOnly\" *ngFor=\"let field of complexFields\">\n <ccd-field-read *ngSwitchCase=\"true\"\n ccdLabelSubstitutor\n [caseField]=\"buildField(field)\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [withLabel]=\"true\">\n </ccd-field-read>\n <ccd-field-write *ngSwitchCase=\"false\"\n ccdLabelSubstitutor\n [caseField]=\"field\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [parent]=\"complexGroup\"\n [idPrefix]=\"buildIdPrefix(field)\"\n [hidden]=\"field.hidden\"\n [isExpanded]=\"isExpanded\"\n [isInSearchBlock]=\"isInSearchBlock\">\n </ccd-field-write>\n </ng-container>\n </fieldset>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { Constants } from '../../../commons/constants';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\nimport { IsCompoundPipe } from '../utils/is-compound.pipe';\nimport { FieldsFilterPipe } from './fields-filter.pipe';\n\nconst ADDRESS_FIELD_TYPES = [ 'AddressUK', 'AddressGlobalUK', 'AddressGlobal' ];\n\n@Component({\n selector: 'ccd-write-complex-type-field',\n templateUrl: './write-complex-field.html',\n styleUrls: ['./read-complex-field-table.scss']\n})\nexport class WriteComplexFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public formGroup: FormGroup;\n\n public complexGroup: FormGroup;\n\n @Input()\n public renderLabel = true;\n\n @Input()\n public ignoreMandatory = false;\n\n public complexFields: CaseField[];\n\n constructor(private readonly isCompoundPipe: IsCompoundPipe, private readonly formValidatorsService: FormValidatorsService) {\n super();\n this.complexGroup = new FormGroup({});\n }\n\n public ngOnInit(): void {\n // Are we inside of a collection? If so, the parent is the complexGroup we want.\n if (this.isTopLevelWithinCollection()) {\n this.complexGroup = this.parent as FormGroup;\n FieldsUtils.addCaseFieldAndComponentReferences(this.complexGroup, this.caseField, this);\n } else {\n this.complexGroup = this.registerControl(this.complexGroup, true) as FormGroup;\n }\n // Add validators for the complex field.\n this.formValidatorsService.addValidators(this.caseField, this.complexGroup);\n this.setupFields();\n this.complexGroup.updateValueAndValidity({ emitEvent: true });\n }\n\n public buildField(caseField: CaseField): CaseField {\n let control: AbstractControl = this.complexGroup.get(caseField.id);\n if (!control) {\n control = new FormControl(caseField.value);\n this.complexGroup.addControl(caseField.id, control);\n }\n\n // Add validators for addresses, if appropriate.\n if (this.isAddressUK()) {\n if (this.addressValidatorsRequired(caseField)) {\n this.formValidatorsService.addValidators(caseField, control);\n }\n } else {\n // It's not an address so set it up according to its own display_context.\n this.formValidatorsService.addValidators(caseField, control);\n }\n\n // For Address-type fields, ensure that all sub-fields inherit the same value for retain_hidden_value as this\n // parent; although address fields use the Complex type, each of them is meant to be treated as one field\n if (this.isAddressUK() && this.caseField) {\n for (const addressSubField of this.caseField.field_type.complex_fields) {\n addressSubField.retain_hidden_value = this.caseField.retain_hidden_value;\n }\n }\n\n FieldsUtils.addCaseFieldAndComponentReferences(control, caseField, this);\n return caseField;\n }\n\n public buildIdPrefix(field: CaseField): string {\n return this.isCompoundPipe.transform(field) ? `${this.idPrefix}${field.id}_` : `${this.idPrefix}`;\n }\n\n private addressValidatorsRequired(caseField: CaseField): boolean {\n return this.isSmallAddressLine1(caseField) && this.isMandatory(caseField);\n }\n\n private isSmallAddressLine1(caseField: CaseField): boolean {\n return caseField.id === 'AddressLine1' && caseField.field_type.id === 'TextMax150';\n }\n\n private isMandatory(caseField: CaseField): boolean {\n return (Constants.MANDATORY === caseField.display_context || !this.ignoreMandatory);\n }\n\n private isAddressUK(): boolean {\n return ADDRESS_FIELD_TYPES.indexOf(this.caseField.field_type.id) > -1;\n }\n\n private isTopLevelWithinCollection(): boolean {\n if (this.parent) {\n const parentCaseField: CaseField = this.parent['caseField'];\n if (parentCaseField && parentCaseField.id === this.caseField.id) {\n const parentComponent = this.parent['component'] as AbstractFormFieldComponent;\n if (parentComponent) {\n const parentComponentCaseField = parentComponent.caseField;\n if (parentComponentCaseField.field_type) {\n return parentComponentCaseField.field_type.type === 'Collection';\n }\n }\n }\n }\n return false;\n }\n\n private setupFields(): void {\n const fieldsFilterPipe: FieldsFilterPipe = new FieldsFilterPipe();\n this.complexFields = fieldsFilterPipe.transform(this.caseField, true).map(field => {\n if (field && field.id) {\n if (!(field instanceof CaseField)) {\n return this.buildField(plainToClassFromExist(new CaseField(), field));\n }\n }\n return this.buildField(field);\n });\n }\n}\n","<div class=\"form-group\" [id]=\"id()\">\n\n <div *ngIf=\"!isComplexWithHiddenFields()\">\n <h2 class=\"heading-h2\">{{caseField | ccdFieldLabel }}</h2>\n\n <div class=\"form-group bottom-30 postcodeLookup\" [id]=\"createElementId('postcodeLookup')\" [ngClass]=\"{'form-group-error': missingPostcode}\" *ngIf=\"!isExpanded\">\n <label [for]=\"createElementId('postcodeInput')\">\n <span class=\"form-label\">Enter a UK postcode</span>\n </label>\n <span class=\"error-message\" *ngIf=\"missingPostcode\">Enter the Postcode</span>\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\"\n [id]=\"createElementId('postcodeInput')\" name=\"postcode\" class=\"form-control postcodeinput inline-block\" [formControl]=\"postcode\">\n <button type=\"button\" class=\"button button-30\" (click)=\"findAddress()\">Find address</button>\n </div>\n\n <div class=\"form-group\" *ngIf=\"addressOptions\" id=\"selectAddress\">\n <label [for]=\"createElementId('addressList')\">\n <span class=\"form-label\">Select an address</span>\n </label>\n\n <select class=\"form-control ccd-dropdown addressList\" [id]=\"createElementId('addressList')\" name=\"address\" [formControl]=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description}}\n </option>\n </select>\n </div>\n\n <a class=\"manual-link bottom-30\" *ngIf=\"!shouldShowDetailFields()\" (click)=\"blankAddress()\" href=\"javascript:void(0)\">I can't enter a UK postcode</a>\n </div>\n\n <ccd-write-complex-type-field\n [hidden]=\"!shouldShowDetailFields()\"\n [caseField]=\"caseField\"\n [renderLabel]=\"false\"\n [parent]=\"parent\"\n [formGroup]=\"formGroup\"\n [ignoreMandatory]=\"true\"\n [idPrefix]=\"buildIdPrefix('detail')\"\n #writeComplexFieldComponent>\n </ccd-write-complex-type-field>\n</div>\n","import { Component, Input, OnChanges, OnInit, QueryList, SimpleChanges, ViewChild, ViewChildren } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { FocusElementDirective } from '../../../directives/focus-element';\nimport { AddressModel } from '../../../domain/addresses/address.model';\nimport { AddressesService } from '../../../services/addresses/addresses.service';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { WriteComplexFieldComponent } from '../complex/write-complex-field.component';\nimport { IsCompoundPipe } from '../utils/is-compound.pipe';\nimport { AddressOption } from './address-option.model';\n\n@Component({\n selector: 'ccd-write-address-field',\n templateUrl: 'write-address-field.html',\n styleUrls: ['write-address-field.scss']\n})\nexport class WriteAddressFieldComponent extends AbstractFieldWriteComponent implements OnInit, OnChanges {\n\n @ViewChild('writeComplexFieldComponent', { static: false })\n public writeComplexFieldComponent: WriteComplexFieldComponent;\n\n @ViewChildren(FocusElementDirective)\n public focusElementDirectives: QueryList<FocusElementDirective>;\n\n public addressesService: AddressesService;\n\n @Input()\n public formGroup: FormGroup;\n\n public addressFormGroup = new FormGroup({});\n public postcode: FormControl;\n public addressList: FormControl;\n\n public addressOptions: AddressOption[];\n\n public missingPostcode = false;\n\n constructor(addressesService: AddressesService, private readonly isCompoundPipe: IsCompoundPipe) {\n super();\n this.addressesService = addressesService;\n }\n\n public ngOnInit(): void {\n if (!this.isComplexWithHiddenFields()) {\n this.postcode = new FormControl('');\n this.addressFormGroup.addControl('postcode', this.postcode);\n this.addressList = new FormControl('');\n this.addressFormGroup.addControl('address', this.addressList);\n }\n }\n\n public findAddress() {\n if (!this.postcode.value) {\n this.missingPostcode = true;\n } else {\n this.missingPostcode = false;\n const postcode = this.postcode.value;\n this.caseField.value = null;\n this.addressOptions = new Array();\n this.addressesService.getAddressesForPostcode(postcode.replace(' ', '').toUpperCase()).subscribe(\n result => {\n result.forEach(\n address => {\n this.addressOptions.push(new AddressOption(address, null));\n }\n );\n this.addressOptions.unshift(\n new AddressOption(undefined, this.defaultLabel(this.addressOptions.length))\n );\n }, (error) => {\n console.log(`An error occurred retrieving addresses for postcode ${postcode}. ${error}`);\n this.addressOptions.unshift(\n new AddressOption(undefined, this.defaultLabel(this.addressOptions.length))\n );\n });\n this.addressList.setValue(undefined);\n this.refocusElement();\n }\n }\n\n public refocusElement(): void {\n if (this.focusElementDirectives && this.focusElementDirectives.length > 0) {\n this.focusElementDirectives.first.focus();\n }\n }\n\n public blankAddress() {\n this.caseField.value = new AddressModel();\n this.setFormValue();\n }\n\n public isComplexWithHiddenFields() {\n if (this.caseField.isComplex() && this.caseField.field_type.complex_fields\n && this.caseField.field_type.complex_fields.some(cf => cf.hidden === true)) {\n return true;\n }\n }\n\n public shouldShowDetailFields() {\n if (this.isComplexWithHiddenFields()) {\n return true;\n }\n if (this.isExpanded) {\n return true;\n }\n if (!this.writeComplexFieldComponent || !this.writeComplexFieldComponent.complexGroup) {\n return false;\n }\n const address = this.writeComplexFieldComponent.complexGroup.value;\n let hasAddress = false;\n if (address) {\n Object.keys(address).forEach((key) => {\n if (address[key] != null) {\n hasAddress = true;\n }\n });\n }\n return hasAddress;\n }\n\n public addressSelected() {\n this.caseField.value = this.addressList.value;\n this.setFormValue();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n super.ngOnChanges(changes);\n const change = changes['caseField'];\n if (change) {\n this.setFormValue();\n }\n }\n\n public buildIdPrefix(elementId: string): string {\n return `${this.idPrefix}_${elementId}`;\n }\n\n private defaultLabel(numberOfAddresses) {\n return numberOfAddresses === 0 ? 'No address found'\n : numberOfAddresses + (numberOfAddresses === 1 ? ' address ' : ' addresses ') + 'found';\n }\n\n private setFormValue() {\n if (this.writeComplexFieldComponent.complexGroup) {\n this.writeComplexFieldComponent.complexGroup.setValue(\n this.caseField.value\n );\n }\n }\n}\n","<a *ngIf=\"hasReference()\" href=\"/v2/case/{{caseField.value.CaseReference}}\" target=\"_blank\">\n <span class=\"text-16\">{{caseField.value.CaseReference ? (caseField.value.CaseReference | ccdCaseReference) : ''}}</span>\n</a>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-case-link-field',\n templateUrl: 'read-case-link-field.html'\n})\nexport class ReadCaseLinkFieldComponent extends AbstractFieldReadComponent {\n\n public hasReference(): boolean {\n return this.caseField.value && this.caseField.value.CaseReference;\n }\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !caseReferenceControl.valid && (caseReferenceControl.dirty || caseReferenceControl.touched)}\">\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"caseReferenceControl.errors && (caseReferenceControl.dirty || caseReferenceControl.touched)\">{{caseReferenceControl.errors | ccdFirstError:caseField.label}}</span>\n <input class=\"form-control bottom-30\" [id]=\"id()\" type=\"text\" [formControl]=\"caseReferenceControl\">\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { WriteComplexFieldComponent } from '../complex/write-complex-field.component';\n\n@Component({\n selector: 'ccd-write-case-link-field',\n templateUrl: 'write-case-link-field.html'\n})\nexport class WriteCaseLinkFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public caseReferenceControl: AbstractControl;\n public caseLinkGroup: FormGroup;\n\n @ViewChild('writeComplexFieldComponent', /* TODO: add static flag */ {})\n public writeComplexFieldComponent: WriteComplexFieldComponent;\n\n public ngOnInit(): void {\n if (this.caseField.value) {\n this.caseLinkGroup = this.registerControl(new FormGroup({\n CaseReference: new FormControl(this.caseField.value.CaseReference, Validators.required),\n }), true) as FormGroup;\n } else {\n this.caseLinkGroup = this.registerControl(new FormGroup({\n CaseReference: new FormControl(null, Validators.required),\n }), true) as FormGroup;\n }\n this.caseReferenceControl = this.caseLinkGroup.controls['CaseReference'];\n this.caseReferenceControl.setValidators(this.caseReferenceValidator());\n\n // Ensure that all sub-fields inherit the same value for retain_hidden_value as this parent; although a CaseLink\n // field uses the Complex type, it is meant to be treated as one field\n if (this.caseField && this.caseField.field_type.type === 'Complex') {\n for (const caseLinkSubField of this.caseField.field_type.complex_fields) {\n caseLinkSubField.retain_hidden_value = this.caseField.retain_hidden_value;\n }\n }\n }\n\n public validCaseReference(valueString: string): boolean {\n if (!valueString ) {\n return false;\n }\n return new RegExp('^\\\\b\\\\d{4}[ -]?\\\\d{4}[ -]?\\\\d{4}[ -]?\\\\d{4}\\\\b$').test(valueString.trim());\n }\n\n private caseReferenceValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } => {\n if (control.value) {\n if ( this.validCaseReference(control.value) ) {\n return null;\n }\n return {error: 'Please use a valid 16 Digit Case Reference'};\n } else {\n if (control.touched) {\n return {error: 'Please use a valid 16 Digit Case Reference'};\n }\n }\n return null;\n };\n }\n}\n","<table *ngIf=\"caseField.value && caseField.value.length \" class=\"collection-field-table\" aria-describedby=\"collection table\">\n <ng-container [ngSwitch]=\"isDisplayContextParameterAvailable\">\n <tbody *ngSwitchCase=\"true\">\n <tr>\n <th id=\"hiddenHeader\" style=\"display: none;\"></th>\n <td>\n <ccd-field-read\n [caseField]=\"{\n id: caseField.label,\n label: caseField.label,\n field_type: caseField.field_type.collection_field_type,\n display_context_parameter: caseField.display_context_parameter,\n value: caseField.value,\n hidden: caseField.hidden\n }\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\">\n </ccd-field-read>\n </td>\n </tr>\n </tbody>\n <tbody *ngSwitchCase=\"false\">\n <tr *ngFor=\"let item of caseField.value; let i = index\">\n <td>\n <ccd-field-read\n [caseField]=\"{\n id: i,\n label: caseField.label + ' ' + (i + 1),\n field_type: caseField.field_type.collection_field_type,\n value: item.value,\n hidden: caseField.hidden\n }\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"buildIdPrefix(i)\">\n </ccd-field-read>\n </td>\n </tr>\n </tbody>\n </ng-container>\n</table>\n","import { Component, OnInit } from '@angular/core';\n\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-collection-field',\n templateUrl: './read-collection-field.html',\n styleUrls: ['./collection-field.scss']\n})\nexport class ReadCollectionFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public isDisplayContextParameterAvailable = false;\n\n public ngOnInit(): void {\n if (this.caseField.display_context_parameter && this.caseField.display_context_parameter.trim().startsWith('#TABLE(')) {\n this.isDisplayContextParameterAvailable = true;\n }\n }\n\n public buildIdPrefix(index: number): string {\n const prefix = `${this.idPrefix}${this.caseField.id}_`;\n if (this.caseField.field_type.collection_field_type.type === 'Complex') {\n return `${prefix}${index}_`;\n }\n return prefix;\n }\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-remove-dialog',\n templateUrl: './remove-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class RemoveDialogComponent {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<RemoveDialogComponent>) {}\n\n public remove() {\n this.result = 'Remove';\n this.matDialogRef.close(this.result);\n }\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n}\n","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Are you sure you want to remove the item</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You are about to permanently remove an item, are you sure you want to\n remove this item?</span>\n </div>\n <div>\n <button type=\"button\" title=\"Remove\" class=\"button action-button\" (click)=\"remove()\">Remove</button>\n <button type=\"button\" title=\"Cancel\" class=\"button button-secondary\" (click)=\"cancel()\">Cancel</button>\n </div>\n</div>\n","import { Banner } from './banner.model';\nimport { CaseTypeLite } from './case-type-lite.model';\n\nexport class Jurisdiction {\n public id: string;\n public name: string;\n public description: string;\n public caseTypes: CaseTypeLite[];\n}\n","import { Type } from 'class-transformer';\nimport { Jurisdiction } from '../definition/jurisdiction.model';\n\nfunction hasRoles(profile: Profile): boolean {\n if (profile.user && profile.user.idam && Array.isArray(profile.user.idam.roles)) {\n return profile.user.idam.roles.length > 0;\n }\n return false;\n}\n\n// @dynamic\nexport class Profile {\n public user: {\n idam: {\n id: string,\n email: string,\n forename: string,\n surname: string,\n roles: string[]\n }\n };\n\n public channels: string[];\n\n @Type(() => Jurisdiction)\n public jurisdictions: Jurisdiction[];\n\n public default: {\n workbasket: {\n jurisdiction_id: string,\n case_type_id: string,\n state_id: string\n }\n };\n\n public isSolicitor(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-solicitor')) !== undefined;\n }\n return false;\n }\n\n public isCourtAdmin(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-courtadmin')) !== undefined;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Profile } from '../../domain/profile/profile.model';\n\n@Injectable()\nexport class ProfileNotifier {\n public readonly profileSource: BehaviorSubject<Profile> = new BehaviorSubject<Profile>(new Profile());\n public profile = this.profileSource.asObservable();\n\n public announceProfile(profile: Profile) {\n this.profileSource.next(profile);\n }\n\n}\n","<div class=\"form-group\" [id]=\"id()\">\n\n <div class=\"panel collection-indicator\">\n\n <h2 class=\"heading-h2 error-spacing\">\n {{caseField | ccdFieldLabel}}\n </h2>\n <button class=\"button write-collection-add-item__top\" type=\"button\" (click)=\"addItem(true)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\">Add new</button>\n <h2 class=\"heading-h2 error-spacing\" *ngIf=\"caseField.hint_text || formArray.errors\">\n <span *ngIf=\"caseField.hint_text\" class=\"form-hint\">{{caseField.hint_text}}</span>\n <span *ngIf=\"formArray.errors\" class=\"error-message\">{{formArray.errors | ccdFirstError:caseField.label}}</span>\n </h2>\n\n <div class=\"form-group\" [hidden]=\"caseField.hidden\" *ngIf=\"caseField.value && caseField.value.length\">\n\n <div class=\"form-group\" *ngFor=\"let item of collItems; let i = index\" #collectionItem>\n <div class=\"collection-title\">\n <div class=\"float-left\">\n <label [for]=\"item.prefix + i\"><h3 class=\"heading-h3\">{{itemLabel(i)}}</h3></label>\n </div>\n <div class=\"float-right\">\n <button class=\"button button-secondary\" type=\"button\" (click)=\"openModal(i)\"\n [disabled]=\"isNotAuthorisedToDelete(i)\"\n attr.aria-label=\"Remove {{ itemLabel(i) }}\">Remove</button>\n </div>\n </div>\n <ccd-field-write [caseField]=\"item.caseField\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [parent]=\"item.container\"\n [idPrefix]=\"item.prefix\"\n [hidden]=\"item.caseField.hidden\"\n [isExpanded]=\"isExpanded\"\n [isInSearchBlock]=\"isInSearchBlock\">\n </ccd-field-write>\n </div>\n\n </div>\n\n <button class=\"button write-collection-add-item__bottom\" type=\"button\" (click)=\"addItem(false)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\" *ngIf=\"caseField.value && caseField.value.length\">Add new</button>\n\n </div>\n\n</div>","import { Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { ScrollToService } from '@nicky-lenaers/ngx-scroll-to';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { Subscription } from 'rxjs';\nimport { finalize, take } from 'rxjs/operators';\nimport { FieldType } from '../../../domain/definition/field-type.model';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Profile } from '../../../domain/profile/profile.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { ProfileNotifier } from '../../../services/profile/profile.notifier';\nimport { RemoveDialogComponent } from '../../dialogs/remove-dialog/remove-dialog.component';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\ntype CollectionItem = {\n caseField: CaseField;\n item: any;\n prefix: string;\n index: number;\n container: FormGroup;\n};\n\n@Component({\n selector: 'ccd-write-collection-field',\n templateUrl: './write-collection-field.html',\n styleUrls: ['./collection-field.scss']\n})\nexport class WriteCollectionFieldComponent extends AbstractFieldWriteComponent implements OnInit, OnDestroy {\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public formGroup: FormGroup;\n\n public formArray: FormArray;\n\n public profile: Profile;\n public profileSubscription: Subscription;\n\n @ViewChildren('collectionItem')\n private readonly items: QueryList<ElementRef>;\n public readonly collItems: CollectionItem[] = [];\n\n constructor(private readonly dialog: MatDialog,\n private readonly scrollToService: ScrollToService,\n private readonly profileNotifier: ProfileNotifier\n ) {\n super();\n }\n\n public ngOnInit(): void {\n if (!this.isExpanded) { // meaning I am not rendered on the search/workbasket input filter\n this.profileSubscription = this.profileNotifier.profile.subscribe(_ => this.profile = _);\n }\n this.caseField.value = this.caseField.value || [];\n this.formArray = this.registerControl(new FormArray([]), true) as FormArray;\n this.formArray['caseField'] = this.caseField;\n this.caseField.value.forEach((item: any, index: number) => {\n const prefix: string = this.buildIdPrefix(index);\n const caseField = this.buildCaseField(item, index);\n const container = this.getContainer(index);\n if (this.collItems.length <= index) {\n this.collItems.length = index + 1;\n }\n this.collItems[index] = { caseField, item, prefix, index, container };\n });\n }\n\n public ngOnDestroy(): void {\n if (this.profileSubscription) {\n this.profileSubscription.unsubscribe();\n }\n }\n\n public buildCaseField(item, index: number, isNew = false): CaseField {\n /**\n * What follow is code that makes me want to go jump in the shower!\n * Basically, we land in here repeatedly because of the binding, and\n * this is what appears to be happening:\n * 1. this.formArray contains no controls at all.\n * this.formArray.value = [];\n * 2. this.formArray contains a FormGroup, which contains a single\n * FormControl with the id 'code'.\n * this.formArray.value = [{ code: null }]\n * 3. this.formArray contains what is being set up below.\n * this.formArray.value = [{ code: null, id: null, value: { code: null } }]\n * 4, 5, 6, etc - the same as 3.\n */\n let group: FormGroup;\n if (this.formArray && (index < this.formArray.length)) {\n group = this.formArray.at(index) as FormGroup;\n } else {\n group = new FormGroup({});\n }\n\n let value;\n if (this.isCollectionOfSimpleType(this.caseField)) {\n value = group.get('value') as FormControl;\n if (!value) {\n value = new FormControl(item.value);\n // Now add the value FormControl to the outer group.\n group.addControl('value', value);\n }\n } else {\n value = group.get('value') as FormGroup;\n if (!value) {\n value = new FormGroup({});\n for (const key of Object.keys(group.controls)) {\n value.addControl(key, group.get(key));\n // DON'T remove the control for this key from the outer group or it\n // goes awry. So DON'T uncomment the below line!\n // group.removeControl(key);\n }\n // Now add the value FormGroup to the outer group.\n group.addControl('value', value);\n }\n }\n let id = group.get('id') as FormControl;\n // If we're not in scenario 3, above, we need to do some jiggery pokery\n // and set up the id and value controls.\n // Also set up an id control if it doesn't yet exist.\n if (!id) {\n id = new FormControl(item.id);\n group.addControl('id', id);\n }\n\n /**\n * Again, very sorry. I've not found a better way to produce the\n * output needed for what needs to be sent to the server yet.\n */\n\n // Now, add the outer group to the array (or replace it).\n if (index < this.formArray.length) {\n this.formArray.setControl(index, group);\n } else {\n this.formArray.push(group);\n }\n\n // Now set up the CaseField and validation.\n let cfid: string;\n if (value instanceof FormControl) {\n cfid = 'value';\n } else {\n cfid = index.toString();\n }\n\n // isNew:\n const cf: CaseField = this.newCaseField(cfid, item, index, isNew);\n FormValidatorsService.addValidators(cf, value);\n FieldsUtils.addCaseFieldAndComponentReferences(value, cf, this);\n return cf;\n }\n\n public buildIdPrefix(index: number): string {\n const prefix = `${this.idPrefix}${this.caseField.id}_`;\n if (this.caseField.field_type.collection_field_type.type === 'Complex') {\n return `${prefix}${index}_`;\n }\n return prefix;\n }\n\n public isSearchFilter(): boolean {\n return this.isInSearchBlock && this.collItems.length > 0;\n }\n\n public addItem(doScroll: boolean): void {\n // Manually resetting errors is required to prevent `ExpressionChangedAfterItHasBeenCheckedError`\n this.formArray.setErrors(null);\n const item = { value: null };\n this.caseField.value.push(item);\n const index = this.caseField.value.length - 1;\n const caseField: CaseField = this.buildCaseField(item, index, true);\n const prefix = this.buildIdPrefix(index);\n const container = this.getContainer(index);\n this.collItems.push({ caseField, item, index, prefix, container });\n\n // Timeout is required for the collection item to be rendered before it can be scrolled to or focused.\n if (doScroll) {\n setTimeout(() => {\n this.scrollToService.scrollTo({\n target: `${this.buildIdPrefix(index)}${index}`,\n duration: 1000,\n offset: -150,\n })\n .pipe(finalize(() => this.focusLastItem()))\n .subscribe(() => {}, console.error);\n });\n } else {\n setTimeout(() => this.focusLastItem());\n }\n }\n\n public itemLabel(index: number) {\n if (index) {\n return `${this.caseField.label} ${index + 1}`;\n }\n return this.caseField.label;\n }\n\n public isNotAuthorisedToCreate() {\n if (this.isExpanded) {\n return false;\n }\n return !this.getCollectionPermission(this.caseField, 'allowInsert');\n }\n\n public getCollectionPermission(field: CaseField, type: string) {\n return field.display_context_parameter &&\n field.display_context_parameter.split('#')\n .filter(item => item.startsWith('COLLECTION('))[0]\n .includes(type);\n }\n\n public isNotAuthorisedToUpdate(index) {\n if (this.isExpanded) {\n return false;\n }\n // Was reassesed as part of EUI-3505. There is still a caveat around CRD, but that was deemed an unlikely scenario\n const id = this.getControlIdAt(index);\n if (id) {\n if (!!this.profile.user && !!this.profile.user.idam) {\n const updateRole = this.profile.user.idam.roles.find(role => this.hasUpdateAccess(role));\n return !updateRole;\n }\n }\n return false;\n }\n\n public hasUpdateAccess(role: any): boolean {\n return !!this.caseField.acls.find( acl => acl.role === role && acl.update === true);\n }\n\n public isNotAuthorisedToDelete(index: number) {\n if (this.isExpanded) {\n return false;\n }\n // Should be able to delete if creating a case even if \"D\" is absent, hence:\n const id = this.getControlIdAt(index);\n return !!id && !this.getCollectionPermission(this.caseField, 'allowDelete');\n }\n\n public openModal(i: number) {\n const dialogConfig = new MatDialogConfig();\n dialogConfig.disableClose = true;\n dialogConfig.autoFocus = true;\n dialogConfig.ariaLabel = 'Label';\n dialogConfig.height = '220px';\n dialogConfig.width = '550px';\n dialogConfig.panelClass = 'dialog';\n\n dialogConfig.closeOnNavigation = false;\n dialogConfig.position = {\n top: window.innerHeight / 2 - 110 + 'px', left: window.innerWidth / 2 - 275 + 'px'\n };\n\n const dialogRef = this.dialog.open(RemoveDialogComponent, dialogConfig);\n\n dialogRef.afterClosed().pipe(take(1)).subscribe(result => {\n if (result === 'Remove') {\n this.removeItem(i);\n }\n });\n }\n\n private newCaseField(id: string, item, index, isNew = false) {\n const isNotAuthorisedToUpdate = !isNew && this.isNotAuthorisedToUpdate(index);\n\n const fieldType = plainToClassFromExist(new FieldType(), this.caseField.field_type.collection_field_type);\n if (fieldType.complex_fields) {\n fieldType.complex_fields\n .filter((cf: CaseField) => !!cf.show_condition)\n .map((cf: CaseField) => cf.hidden = true);\n }\n\n // Remove the bit setting the hidden flag here as it's an item in the array and\n // its hidden state isn't independently re-evaluated when the form is changed.\n return plainToClassFromExist(new CaseField(), {\n id,\n field_type: fieldType,\n display_context: isNotAuthorisedToUpdate ? 'READONLY' : this.caseField.display_context,\n value: item.value,\n label: null,\n acls: this.caseField.acls\n });\n }\n\n private getContainer(index: number): FormGroup {\n const value = this.formArray.at(index).get('value');\n if (value instanceof FormGroup) {\n return value;\n } else {\n return this.formArray.at(index) as FormGroup;\n }\n }\n\n private focusLastItem() {\n const item: any = this.items.last.nativeElement.querySelector('.form-control');\n if (item) {\n item.focus();\n }\n }\n\n private removeItem(index: number): void {\n this.collItems.splice(index, 1);\n this.caseField.value.splice(index, 1);\n this.formArray.removeAt(index);\n }\n\n /**\n * Applied full solution as part of EUI-3505\n */\n private getControlIdAt(index: number): string {\n\n // this.formArray contains [ FormGroup( id: FormControl, value: FormGroup ), ... ].\n // Here, we need to get the value of the id FormControl.\n const group: FormGroup = this.formArray.at(index) as FormGroup;\n const control: FormControl = group.get('id') as FormControl;\n return control ? control.value : undefined;\n }\n\n private isCollectionOfSimpleType(caseField: CaseField) {\n const notSimple = ['Collection', 'Complex'];\n return notSimple.indexOf( caseField.field_type.collection_field_type.type ) < 0;\n }\n}\n","<dl class=\"complex-raw\">\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true :topLevelFormGroup :id()\">\n <dt [hidden]=\"field.hidden || field.field_type.type === 'Label'\"><span class=\"text-16\">{{field.label}}</span></dt>\n <dd [hidden]=\"field.hidden\">\n <ccd-field-read [caseField]=\"field\" [context]=\"context\" [caseFields]=\"caseFields\" [topLevelFormGroup]=\"topLevelFormGroup\" [idPrefix]=\"idPrefix\"></ccd-field-read>\n </dd>\n </ng-container>\n</dl>\n","import { Component, Input } from '@angular/core';\nimport { CaseField } from '../../../domain';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n/**\n * Display a complex type fields as a list of values without labels.\n * This is intended for rendering of Check Your Answer page.\n */\n@Component({\n selector: 'ccd-read-complex-field-raw',\n templateUrl: './read-complex-field-raw.html',\n styleUrls: [\n './read-complex-field-raw.scss'\n ],\n})\nexport class ReadComplexFieldRawComponent extends AbstractFieldReadComponent {\n\n @Input()\n public caseFields: CaseField[] = [];\n}\n","import { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { EventCaseField } from './event-case-field.model';\n\nexport class CaseEvent implements Orderable {\n public id: string;\n public name: string;\n public post_state: string;\n public pre_states: string[];\n public case_fields: EventCaseField[];\n public description: string;\n public order?: number;\n public acls?: AccessControlList[];\n}\n","import { Orderable } from '../order';\n\nexport class CaseState implements Orderable {\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { CaseEvent } from './case-event.model';\nimport { CaseState } from './case-state.model';\n\n// Light clone of CaseType to be used in Jurisdiction class\n// to avoid cyclic dependency\nexport class CaseTypeLite {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n public description: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseEvent } from './case-event.model';\nimport { CaseField } from './case-field.model';\nimport { CaseState } from './case-state.model';\nimport { Jurisdiction } from './jurisdiction.model';\n\n// @dynamics\nexport class CaseType {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public description: string;\n public jurisdiction: Jurisdiction;\n public printEnabled?: boolean;\n}\n","export class EventCaseField {\n public case_field_id: string;\n public showCondition: string;\n}\n","export class Banner {\n public bannerDescription: string;\n public bannerUrlText: string;\n public bannerUrl: string;\n public bannerViewed: boolean;\n public bannerEnabled: boolean;\n}\n","<div class=\"complex-panel\" [hidden]=\"caseField.hidden\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label}}</span></dt>\n <dd></dd>\n </dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table\">\n <tbody>\n <!-- <COMPLEX table field header>-->\n <tr>\n <th *ngFor=\"let heading of columns\" scope=\"col\">\n <span class=\"text-16\">{{columnsAllLabels[heading].label}}</span>\n <a href=\"javascript:void(0)\"\n (click)=\"sortRowsByColumns(heading)\"\n class=\"sort-widget\"\n [innerHTML]=\"sortWidget(columnsAllLabels[heading])\"></a>\n </th>\n <th></th>\n </tr>\n <!-- </COMPLEX table field header>-->\n <ng-container *ngFor=\"let item of rows; let i = index;\">\n <!-- <COMPLEX table collapsed view>-->\n <tr class=\"new-table-row accordion-heading\" (click)=\"isHidden[i] = !isHidden[i]\"\n [class.last-accordion]=\"isHidden[i]\">\n <ng-container *ngFor=\"let heading of columns\">\n <td class=\"text-16\">\n <div *ngIf=\"item[heading]; else showEmptyTd\">\n <ccd-field-read\n [caseField]=\"toCaseField(heading, item[heading].label, columnsHorizontalLabel[heading].type, item[heading])\"\n [context]=\"context\"></ccd-field-read>\n </div>\n <ng-template #showEmptyTd>\n <div>&nbsp;</div>\n </ng-template>\n </td>\n </ng-container>\n <td>\n <div style=\"float: right;\">\n <a href=\"javascript:void(0)\"> <img src=\"{{ getImage(i) }}\" alt=\"image\" class=\"accordion-image\"/></a>\n </div>\n </td>\n </tr>\n <!-- </COMPLEX table collapsed view>-->\n <!-- <COMPLEX table expanded view>-->\n <tr [hidden]=\"isHidden[i]\">\n <td [colSpan]=\"columns.length + 1\">\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table expanded\">\n <tbody>\n <ng-container\n *ngFor=\"let vLabel of columnsVerticalLabel | keyvalue: keepOriginalOrder | ccdCollectionTableCaseFieldsFilter: caseField: rows[i] | ccdReadFieldsFilter:true :undefined :true\">\n <!-- <COMPLEX table expandable body simple field>-->\n <tr class=\"complex-panel-simple-field accordion-body\" *ngIf=\"item[vLabel.id]\" [hidden]=\"vLabel.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{vLabel.label}}</span></th>\n <td *ngIf=\"vLabel['type'] !== 'Complex'\" class=\"text-16\">\n <ccd-field-read [caseField]=\"toCaseField('', vLabel.label, vLabel.field_type, item[vLabel.id])\"\n [context]=\"context\"></ccd-field-read>\n </td>\n </tr>\n <!-- </COMPLEX table expandable body simple field>-->\n\n <!-- <COMPLEX table expandable body complex field>-->\n <tr *ngIf=\"vLabel['type'] === 'Complex' && addCaseFieldValue(vLabel, item[vLabel.id])\" [hidden]=\"vLabel.hidden\">\n <td colspan=\"2\">\n <ng-container *ngFor=\"let caseField of vLabel | ccdReadFieldsFilter:true :undefined :true\">\n <tr class=\"complex-panel-compound-field\" *ngIf=\"(caseField | ccdIsCompound); else SimpleRow\" [hidden]=\"caseField\">\n <td colspan=\"2\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n </tr>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-nested-field\" [hidden]=\"caseField.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{caseField.label}}</span></th>\n <td *ngIf=\"!item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n <td *ngIf=\"item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <ccd-read-case-link-field [caseField]=\"addCaseReferenceValue(caseField, item[vLabel.id].CaseReference)\" [context]=\"context\"></ccd-read-case-link-field>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </td>\n </tr>\n <!-- <COMPLEX table expandable body complex field>-->\n </ng-container>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- </COMPLEX table expanded view>-->\n </ng-container>\n </tbody>\n </table>\n</div>\n","import { Component, OnInit } from '@angular/core';\n\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { SortOrder } from './sort-order';\n\n@Component({\n selector: 'ccd-read-complex-field-collection-table',\n templateUrl: './read-complex-field-collection-table.html',\n styleUrls: ['./read-complex-field-collection-table.scss']\n})\nexport class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponent implements OnInit {\n\n public columns: string[];\n public columnsVerticalLabel: any;\n public columnsHorizontalLabel: any;\n public columnsAllLabels: any;\n public rows: any[] = [];\n public isHidden: boolean[] = [];\n private static isSortAscending(column: any): boolean {\n return !(column.sortOrder === SortOrder.UNSORTED || column.sortOrder === SortOrder.DESCENDING);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.display_context_parameter\n && this.caseField.display_context_parameter.trim().startsWith('#TABLE(')) {\n\n const displayContextParameter = this.caseField.display_context_parameter.trim();\n const result: string = displayContextParameter.replace('#TABLE(', '');\n this.columns = result.replace(')', '').split(',').map((c: string) => c.trim());\n\n const labelsVertical: { [k: string]: any } = {};\n const labelsHorizontal: { [k: string]: any } = {};\n const allLabels: { [k: string]: any } = {};\n this.populateCaseFieldValuesIntoRows();\n this.populateLabels(labelsVertical, allLabels);\n this.populateHorizontalLabels(labelsHorizontal, allLabels, labelsVertical);\n\n this.columnsVerticalLabel = labelsVertical;\n this.columnsHorizontalLabel = labelsHorizontal;\n this.columnsAllLabels = allLabels;\n\n }\n }\n\n public getImage(row): string {\n if (this.isHidden[row]) {\n return 'img/accordion-plus.png';\n } else {\n if (this.isVerticleDataNotEmpty(row)) {\n return 'img/accordion-minus.png';\n } else {\n this.isHidden[row] = true;\n return 'img/accordion-plus.png';\n }\n }\n }\n\n /**\n * Needs to be called before 'ccdFieldsFilter' pipe is used, as it needs a caseField value.\n */\n public addCaseFieldValue(field, value): boolean {\n field.value = value;\n return true;\n }\n\n public isNotBlank(value: string) {\n return value !== null && value !== '';\n }\n\n public addCaseReferenceValue(field, value: any): any {\n field.value = { CaseReference: value};\n return field;\n }\n\n public toCaseField(id: string, label: string, field_type: any, value: any): CaseField {\n return plainToClassFromExist(new CaseField(), {\n id,\n label,\n display_context: 'READONLY',\n value,\n field_type\n });\n }\n\n public keepOriginalOrder = (a, b) => a.key;\n\n public sortRowsByColumns(column): void {\n const shouldSortInAscendingOrder = this.columnsHorizontalLabel[column].sortOrder === SortOrder.UNSORTED\n || this.columnsHorizontalLabel[column].sortOrder === SortOrder.DESCENDING;\n\n switch (this.columnsHorizontalLabel[column].type.type) {\n case 'Number':\n case 'MoneyGBP': {\n if (shouldSortInAscendingOrder) {\n this.rows.sort((a, b) => a[column] - b[column]);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.ASCENDING;\n } else {\n this.rows.sort((a, b) => b[column] - a[column]);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.DESCENDING;\n }\n break;\n }\n case 'Text':\n case 'TextArea':\n case 'Email':\n case 'Date':\n case 'DateTime':\n case 'Label':\n case 'Postcode':\n case 'YesOrNo':\n case 'PhoneUK':\n case 'FixedList': {\n if (shouldSortInAscendingOrder) {\n this.rows.sort((a, b) => a[column] < b[column] ? -1 : a[column] > b[column] ? 1 : 0);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.ASCENDING;\n } else {\n this.rows.sort((a, b) => a[column] < b[column] ? 1 : a[column] > b[column] ? -1 : 0);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.DESCENDING;\n }\n }\n break;\n }\n }\n\n public sortWidget(column: any): string {\n return ReadComplexFieldCollectionTableComponent.isSortAscending(column) ? '&#9660;' : '&#9650;';\n }\n\n private populateHorizontalLabels(labelsHorizontal: { [p: string]: any },\n allLabels: { [p: string]: any },\n labelsVertical: { [p: string]: any }): void {\n for (const id of this.columns) {\n const trimmedId = id.trim();\n labelsHorizontal[trimmedId] = allLabels[trimmedId];\n labelsHorizontal[trimmedId].sortOrder = SortOrder.UNSORTED;\n delete labelsVertical[trimmedId];\n }\n }\n\n private populateLabels(labelsVertical: { [p: string]: any }, allLabels: { [p: string]: any }): void {\n for (const obj of this.caseField.field_type.complex_fields) {\n if (obj.field_type.type === 'FixedList' ||\n obj.field_type.type === 'MultiSelectList' ||\n obj.field_type.type === 'FixedRadioList') {\n labelsVertical[obj.id] = {label: obj.label, type: obj.field_type, caseField: obj};\n allLabels[obj.id] = {label: obj.label, type: obj.field_type};\n } else if (obj.isComplex()) {\n labelsVertical[obj.id] = {label: obj.label, type: obj.field_type.type, caseField: obj};\n allLabels[obj.id] = {label: obj.label, type: obj.field_type.type, caseField: obj};\n } else {\n labelsVertical[obj.id] = {label: obj.label, type: {type: obj.field_type.type}, caseField: obj};\n allLabels[obj.id] = {label: obj.label, type: {type: obj.field_type.type}, caseField: obj};\n }\n }\n }\n\n private populateCaseFieldValuesIntoRows(): void {\n for (const obj of this.caseField.value) {\n this.rows.push(obj.value);\n this.isHidden.push(true);\n }\n }\n\n private isVerticleDataNotEmpty(row): boolean {\n let result = false;\n for (const key in this.columnsVerticalLabel) {\n if (this.rows[row][key]) {\n result = true;\n }\n }\n return result;\n }\n}\n","<div class=\"complex-panel\">\n <dl class=\"complex-panel-title\"><dt><span class=\"text-16\">{{caseField.label}}</span></dt><dd></dd></dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex field table\">\n <tbody>\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true\">\n <ng-container *ngIf=\"(field | ccdIsCompound); else SimpleRow\">\n <tr class=\"complex-panel-compound-field\" [hidden]=\"field.hidden\">\n <td colspan=\"2\">\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-container>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-simple-field\" [hidden]=\"field.hidden\">\n <th id=\"complex-panel-simple-field-label\"><span class=\"text-16\">{{field.label}}</span></th>\n <td>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </tbody>\n </table>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-complex-field-table',\n templateUrl: './read-complex-field-table.html',\n styleUrls: ['./read-complex-field-table.scss']\n})\nexport class ReadComplexFieldTableComponent extends AbstractFieldReadComponent {\n @Input()\n public caseFields: CaseField[] = [];\n}\n","<ng-container [ngSwitch]=\"context\">\n <ccd-read-complex-field-raw\n *ngSwitchCase=\"paletteContext.CHECK_YOUR_ANSWER\"\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"idPrefix\"\n ></ccd-read-complex-field-raw>\n <ccd-read-complex-field-collection-table\n *ngSwitchCase=\"paletteContext.TABLE_VIEW\"\n [caseField]=\"caseField\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"idPrefix\"\n ></ccd-read-complex-field-collection-table>\n <ccd-read-complex-field-table\n *ngSwitchDefault\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"idPrefix\"\n ></ccd-read-complex-field-table>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { PaletteContext } from '../base-field/palette-context.enum';\n\n@Component({\n selector: 'ccd-read-complex-field',\n templateUrl: './read-complex-field.html',\n})\nexport class ReadComplexFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public caseFields: CaseField[] = [];\n\n public paletteContext = PaletteContext;\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.display_context_parameter) {\n this.context = PaletteContext.TABLE_VIEW;\n } else if (!this.caseField.display_context_parameter && this.context && this.context !== PaletteContext.CHECK_YOUR_ANSWER) {\n // default to default views\n this.context = PaletteContext.DEFAULT;\n }\n if (this.caseField.field_type) {\n this.caseField.field_type.complex_fields.forEach(field => {\n if (field.isDynamic()) {\n field.list_items = this.caseField.value[field.id].list_items;\n field.value = {\n list_items: field.list_items,\n value: this.caseField.value[field.id].value && this.caseField.value[field.id].value.code ?\n this.caseField.value[field.id].value.code :\n this.caseField.value[field.id].value\n };\n }\n });\n }\n }\n\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-date-field',\n template: `<span class=\"text-16\">{{caseField.value | ccdDate:'utc':caseField.dateTimeDisplayFormat}}</span>`\n})\nexport class ReadDateFieldComponent extends AbstractFieldReadComponent {\n public timeZone = 'utc';\n}\n","import { NgxMatDateFormats } from '@angular-material-components/datetime-picker';\n\nexport const CUSTOM_MOMENT_FORMATS: NgxMatDateFormats = {\n parse: {\n dateInput: 'YYYY MM DD HH:mm:ss'\n },\n display: {\n dateInput: 'YYYY MM DD HH:mm:ss',\n monthYearLabel: 'MMMM YYYY',\n dateA11yLabel: 'EEE/MMM/YYYY',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n","<div class=\"govuk-form-group bottom-30\" [id]=\"caseField.id\"\n [ngClass]=\"{'form-group-error': dateControl && !dateControl.valid && dateControl.dirty}\">\n <fieldset>\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel }}</span>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\"\n *ngIf=\"dateControl && dateControl.errors && dateControl.dirty && !(minError || maxError)\">{{dateControl.errors | ccdFirstError:caseField.label}}</span>\n <span class=\"error-message\"\n *ngIf=\"dateControl && dateControl.dirty && minError\">This date is older than the minimum date allowed</span>\n <span class=\"error-message\"\n *ngIf=\"dateControl && dateControl.dirty && maxError\">This date is later than the maximum date allowed</span>\n </legend>\n <div class=\"datepicker-container\">\n <input class=\"govuk-input\"\n #input\n attr.aria-label=\"Please enter a date and time in the format {{dateTimeEntryFormat}}\"\n [min]=\"minDate(caseField)\"\n [max]=\"maxDate(caseField)\"\n [formControl]=\"dateControl\"\n [ngxMatDatetimePicker]=\"picker\"\n (focusin)=\"focusIn()\"\n (focusout)=\"focusOut()\"\n (dateChange)=\"valueChanged()\"\n ng-model-options=\"{timezone:'utc'}\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\" id=\"pickerOpener\"></mat-datepicker-toggle>\n <ngx-mat-datetime-picker #picker\n [color]=\"color\"\n [touchUi]=\"touchUi\"\n [hideTime]=\"hideTime\"\n [startView]=\"startView\"\n [stepHour]=\"stepHour\"\n [stepSecond]=\"stepSecond\"\n [stepMinute]=\"stepMinute\"\n [showSeconds]=\"showSeconds\"\n [showSpinners]=\"showSpinners\"\n [disableMinute]=\"disableMinute\"\n [enableMeridian]=\"enableMeridian\"\n (yearSelected)=\"yearSelected($event)\"\n (monthSelected)=\"monthSelected($event)\"\n (opened)=\"toggleClick()\"\n >\n </ngx-mat-datetime-picker>\n </div>\n </fieldset>\n</div>\n","import {\n NgxMatDateAdapter,\n NgxMatDateFormats,\n NgxMatDatetimePicker, NGX_MAT_DATE_FORMATS\n} from '@angular-material-components/datetime-picker';\nimport { NgxMatMomentAdapter, NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular-material-components/moment-adapter';\nimport { Component, ElementRef, Inject, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { Moment } from 'moment/moment';\n\nimport * as moment from 'moment';\nimport { FormatTranslatorService } from '../../../services/case-fields/format-translator.service';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\nimport { CUSTOM_MOMENT_FORMATS } from './datetime-picker-utils';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n@Component({\n selector: 'ccd-datetime-picker',\n templateUrl: './datetime-picker.component.html',\n styleUrls: ['./datetime-picker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_MOMENT_FORMATS },\n { provide: NgxMatDateAdapter, useClass: NgxMatMomentAdapter },\n { provide: NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }\n ]\n})\n\nexport class DatetimePickerComponent extends AbstractFormFieldComponent implements OnInit {\n\n public showSpinners = true;\n public showSeconds = false;\n public touchUi = false;\n public enableMeridian = false;\n public stepHour = 1;\n public stepMinute = 1;\n public stepSecond = 1;\n public color: ThemePalette = 'primary';\n public disableMinute = true;\n public hideTime = true;\n public hideMinutes = true;\n public startView = 'month';\n public yearSelection = false;\n public checkTime = true;\n public stringEdited = false;\n public minError = false;\n public maxError = false;\n public dateTimeEntryFormat: string;\n\n @ViewChild('picker', { static: false }) public datetimePicker: NgxMatDatetimePicker<any>;\n @ViewChild('input', { static: false }) public inputElement: ElementRef<HTMLInputElement>;\n\n @Input() public dateControl: FormControl = new FormControl(new Date());\n\n private minimumDate = new Date('01/01/1800');\n private maximumDate = null;\n private momentFormat = 'YYYY-MM-DDTHH:mm:ss.SSS';\n\n constructor(private readonly formatTranslationService: FormatTranslatorService,\n @Inject(NGX_MAT_DATE_FORMATS) private readonly ngxMatDateFormats: NgxMatDateFormats) {\n super();\n }\n\n public ngOnInit(): void {\n this.dateTimeEntryFormat = this.formatTranslationService.showOnlyDates(this.caseField.dateTimeEntryFormat);\n this.configureDatePicker(this.dateTimeEntryFormat);\n // set date control based on mandatory field\n this.dateControl = (this.caseField.isMandatory ?\n this.registerControl(new FormControl(this.caseField.value || '', [Validators.required]))\n : this.registerControl(new FormControl(this.caseField.value))) as FormControl;\n // in resetting the format just after the page initialises, the input can be reformatted\n // otherwise the last format given will be how the text shown will be displayed\n setTimeout(() => {\n this.setDateTimeFormat();\n this.formatValueAndSetErrors();\n }, 1000);\n // when the status changes check that the maximum/minimum date has not been exceeded\n this.dateControl.statusChanges.subscribe(() => {\n this.minError = this.dateControl.hasError('matDatetimePickerMin');\n this.maxError = this.dateControl.hasError('matDatetimePickerMax');\n });\n }\n\n public setDateTimeFormat(): void {\n this.ngxMatDateFormats.parse.dateInput = this.dateTimeEntryFormat;\n this.ngxMatDateFormats.display.dateInput = this.dateTimeEntryFormat;\n }\n\n /*\n When the value changes, update the form control\n */\n public valueChanged(): void {\n this.formatValueAndSetErrors();\n }\n\n public focusIn(): void {\n this.setDateTimeFormat();\n }\n\n public focusOut(): void {\n // focus out needed to obtain errors (relevant to formatting)\n this.formatValueAndSetErrors();\n }\n\n public toggleClick(): void {\n this.setDateTimeFormat();\n }\n\n public minDate(caseField: CaseField): Date {\n // set minimum date\n if (caseField.field_type.min instanceof Date) {\n this.minimumDate = caseField.field_type.min ? new Date(caseField.field_type.min) : this.minimumDate;\n }\n return this.minimumDate;\n }\n\n public maxDate(caseField: CaseField): Date {\n // set maximum date\n if (caseField.field_type.max instanceof Date) {\n this.maximumDate = caseField.field_type.max ? new Date(caseField.field_type.max) : this.maximumDate;\n }\n return this.maximumDate;\n }\n\n public configureDatePicker(dateTimePickerFormat: string): void {\n if (this.caseField.field_type.type === 'Date') {\n this.hideTime = true;\n this.checkTime = false;\n this.dateTimeEntryFormat = this.formatTranslationService.removeTime(this.dateTimeEntryFormat);\n this.momentFormat = 'YYYY-MM-DD';\n }\n\n if (this.checkTime) {\n\n if (this.formatTranslationService.hasSeconds(dateTimePickerFormat)) {\n this.showSeconds = true;\n this.hideMinutes = false;\n this.disableMinute = false;\n this.hideTime = false;\n if (!this.formatTranslationService.is24Hour(dateTimePickerFormat)) {\n this.enableMeridian = true;\n }\n }\n if (this.formatTranslationService.hasHours(dateTimePickerFormat)) {\n this.hideTime = false;\n if (!this.formatTranslationService.is24Hour(dateTimePickerFormat)) {\n this.enableMeridian = true;\n }\n return;\n }\n\n if (this.formatTranslationService.hasMinutes(dateTimePickerFormat)) {\n this.hideMinutes = false;\n this.disableMinute = false;\n this.hideTime = false;\n if (!this.formatTranslationService.is24Hour(dateTimePickerFormat)) {\n this.enableMeridian = true;\n }\n return;\n }\n }\n\n if (this.formatTranslationService.hasDate(dateTimePickerFormat)) {\n return;\n }\n\n if (this.formatTranslationService.hasNoDay(dateTimePickerFormat)) {\n this.startView = 'multi-year';\n }\n\n if (this.formatTranslationService.hasNoDayAndMonth(dateTimePickerFormat)) {\n this.startView = 'multi-year';\n this.yearSelection = true;\n }\n }\n\n public yearSelected(event: Moment): void {\n if (this.startView === 'multi-year' && this.yearSelection) {\n this.dateControl.patchValue(event.toISOString());\n this.datetimePicker.close();\n this.valueChanged();\n }\n }\n\n public monthSelected(event: Moment): void {\n if (this.startView === 'multi-year') {\n this.dateControl.patchValue(event.toISOString());\n this.dateControl.patchValue(event.toISOString());\n this.datetimePicker.close();\n this.valueChanged();\n }\n }\n\n private formatValueAndSetErrors(): void {\n if (this.inputElement.nativeElement.value) {\n let formValue = this.inputElement.nativeElement.value;\n formValue = moment(formValue, this.dateTimeEntryFormat).format(this.momentFormat);\n if (formValue !== 'Invalid date') {\n // if not invalid set the value as the formatted value\n this.dateControl.setValue(formValue);\n } else {\n // ensure that the datepicker picks up the invalid error\n const keepErrorText = this.inputElement.nativeElement.value;\n this.dateControl.setValue(keepErrorText);\n this.inputElement.nativeElement.value = keepErrorText;\n }\n } else {\n // ensure required errors are picked up if relevant\n this.dateControl.setValue('');\n }\n }\n}\n","<div class=\"form-group bottom-30\" [id]=\"id()\" [ngClass]=\"{'form-group-error': dateControl && !dateControl.valid && (dateControl.dirty || dateControl.touched)}\">\n\n <fieldset>\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel }}</span>\n </legend>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"dateControl && dateControl.errors && (dateControl.dirty || dateControl.touched)\">{{dateControl.errors | ccdFirstError:caseField.label}}</span>\n <cut-date-input [id]=\"id()\"\n [isDateTime]=\"isDateTime()\"\n [mandatory]=\"caseField | ccdIsMandatory\"\n [isInvalid]=\"dateControl.errors && (dateControl.dirty || dateControl.touched)\"\n [formControl]=\"dateControl\"></cut-date-input>\n\n </fieldset>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-date-field',\n templateUrl: './write-date-field.html'\n})\nexport class WriteDateFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n public dateControl: FormControl;\n\n public ngOnInit() {\n this.dateControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n\n public isDateTime(): boolean {\n return this.caseField.field_type.id === 'DateTime';\n }\n\n}\n","<ng-container *ngIf=\"caseField.dateTimeEntryFormat; else nativeDatepicker\">\n <ccd-datetime-picker\n [caseField]=\"caseField\"\n [formGroup]=\"formGroup\"\n [parent]=\"parent\">\n </ccd-datetime-picker>\n</ng-container>\n<ng-template #nativeDatepicker>\n <ccd-write-date-field\n [caseField]=\"caseField\"\n [formGroup]=\"formGroup\"\n [parent]=\"parent\"\n ></ccd-write-date-field>\n</ng-template>\n\n","import { Component } from '@angular/core';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\n\n@Component({\n selector: 'ccd-write-date-container-field',\n templateUrl: './write-date-container-field.html'\n})\nexport class WriteDateContainerFieldComponent extends AbstractFormFieldComponent {}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n public locationAssign(url: string): void {\n window.location.assign(url);\n }\n\n public setLocalStorage(key: string, value: string) {\n window.localStorage.setItem(key, value);\n }\n\n public getLocalStorage(key: string) {\n return window.localStorage.getItem(key);\n }\n\n public clearLocalStorage() {\n window.localStorage.clear();\n }\n\n public removeLocalStorage(key: string) {\n window.localStorage.removeItem(key);\n }\n\n public setSessionStorage(key: string, value: string) {\n window.sessionStorage.setItem(key, value);\n }\n\n public getSessionStorage(key: string) {\n return window.sessionStorage.getItem(key);\n }\n\n public openOnNewTab(url: string): void {\n window.open(url, '_blank');\n }\n\n public confirm(message: string): boolean {\n return window.confirm(message);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { DocumentData } from '../../domain/document/document-data.model';\nimport { HttpService } from '../http';\n\n@Injectable()\nexport class DocumentManagementService {\n private static readonly PDF = 'pdf';\n private static readonly IMAGE = 'image';\n private static readonly WORD = 'word';\n private static readonly EXCEL = 'excel';\n private static readonly POWERPOINT = 'powerpoint';\n private static readonly TXT = 'txt';\n private static readonly RTF = 'rtf';\n\n // This delay has been added to give enough time to the user on the UI to see the info messages on the document upload\n // field for cases when uploads are very fast.\n private static readonly RESPONSE_DELAY = 1000;\n\n private static readonly imagesList: string[] = ['GIF', 'JPG', 'JPEG', 'PNG', 'gif', 'jpg', 'jpeg', 'png'];\n private static readonly wordList: string[] = ['DOC', 'DOCX', 'doc', 'docx'];\n private static readonly excelList: string[] = ['XLS', 'XLSX', 'xls', 'xlsx'];\n private static readonly powerpointList: string[] = ['PPT', 'PPTX', 'ppt', 'pptx'];\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public uploadFile(formData: FormData): Observable<DocumentData> {\n const url = this.getDocStoreUrl();\n // Do not set any headers, such as \"Accept\" or \"Content-Type\", with null values; this is not permitted with the\n // Angular HttpClient in @angular/common/http. Just create and pass a new HttpHeaders object. Angular will add the\n // correct headers and values automatically\n const headers = new HttpHeaders();\n return this.http\n .post(url, formData, {headers, observe: 'body'})\n .pipe(delay(DocumentManagementService.RESPONSE_DELAY));\n }\n\n public getMediaViewerInfo(documentFieldValue: any): string {\n const mediaViewerInfo = {\n document_binary_url: this.transformDocumentUrl(documentFieldValue.document_binary_url),\n document_filename: documentFieldValue.document_filename,\n content_type: this.getContentType(documentFieldValue),\n annotation_api_url: this.appConfig.getAnnotationApiUrl(),\n case_id: documentFieldValue.id,\n case_jurisdiction: documentFieldValue.jurisdiction\n };\n return JSON.stringify(mediaViewerInfo);\n }\n\n public getContentType(documentFieldValue: any): string {\n let fileExtension = '<unknown>';\n if (documentFieldValue.document_filename) {\n const position = documentFieldValue.document_filename.lastIndexOf('.');\n if (position === documentFieldValue.document_filename.length) {\n fileExtension = '';\n } else if (position >= 0) {\n fileExtension = documentFieldValue.document_filename.slice(position + 1);\n }\n }\n if (this.isImage(fileExtension)) {\n return DocumentManagementService.IMAGE;\n } else if (this.isWord(fileExtension)) {\n return DocumentManagementService.WORD;\n } else if (this.isExcel(fileExtension)) {\n return DocumentManagementService.EXCEL;\n } else if (this.isPowerpoint(fileExtension)) {\n return DocumentManagementService.POWERPOINT;\n } else if (fileExtension.toLowerCase() === 'txt') {\n return DocumentManagementService.TXT;\n } else if (fileExtension.toLowerCase() === 'rtf') {\n return DocumentManagementService.RTF;\n } else if (fileExtension.toLowerCase() === 'pdf') {\n return DocumentManagementService.PDF;\n } else {\n return fileExtension;\n }\n }\n\n public isImage(imageType: string): boolean {\n return DocumentManagementService.imagesList.find(e => e === imageType) !== undefined;\n }\n\n public isWord(wordType: string): boolean {\n return DocumentManagementService.wordList.find(e => e === wordType) !== undefined;\n }\n\n public isExcel(excelType: string): boolean {\n return DocumentManagementService.excelList.find(e => e === excelType) !== undefined;\n }\n\n public isPowerpoint(powerpointType: string): boolean {\n return DocumentManagementService.powerpointList.find(e => e === powerpointType) !== undefined;\n }\n\n private transformDocumentUrl(documentBinaryUrl: string): string {\n const remoteHrsPattern = new RegExp(this.appConfig.getRemoteHrsUrl());\n documentBinaryUrl = documentBinaryUrl.replace(remoteHrsPattern, this.appConfig.getHrsUrl());\n const remoteDocumentManagementPattern = new RegExp(this.appConfig.getRemoteDocumentManagementUrl());\n return documentBinaryUrl.replace(remoteDocumentManagementPattern, this.getDocStoreUrl());\n }\n\n private getDocStoreUrl(): string {\n return this.appConfig.getDocumentSecureMode() ? this.appConfig.getDocumentManagementUrlV2() : this.appConfig.getDocumentManagementUrl();\n }\n}\n","import { Injectable } from '@angular/core';\nimport type { ConditionalShowFormDirective } from '../conditional-show-form.directive';\n\n@Injectable()\nexport class ConditionalShowRegistrarService {\n public registeredDirectives: ConditionalShowFormDirective[] = [];\n\n public register(newDirective: ConditionalShowFormDirective): void {\n this.registeredDirectives.push(newDirective);\n }\n\n public reset(): void {\n this.registeredDirectives = [];\n }\n}\n","import { ElementRef, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n/** Keeps track of initially hidden fields that toggle to show on the page (parent page).\n * Used to decide whether to redisplay the grey bar when returning to the page during\n * navigation between pages.\n */\n@Injectable()\nexport class GreyBarService {\n\n private fieldsToggledToShow: string[] = [];\n private readonly renderer: Renderer2;\n\n constructor(rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n }\n\n public showGreyBar(field: CaseField, el: ElementRef) {\n if (!field.isCollection()) {\n this.addGreyBar(el);\n }\n }\n\n public removeGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.removeClass(divSelector, 'show-condition-grey-bar');\n }\n }\n\n public addToggledToShow(fieldId: string) {\n this.fieldsToggledToShow.push(fieldId);\n }\n\n public removeToggledToShow(fieldId: string) {\n this.fieldsToggledToShow = this.fieldsToggledToShow.filter(id => id !== fieldId);\n }\n\n public wasToggledToShow(fieldId: string): boolean {\n return this.fieldsToggledToShow.find(id => id === fieldId) !== undefined;\n }\n\n public reset() {\n this.fieldsToggledToShow = [];\n }\n\n private addGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.addClass(divSelector, 'show-condition-grey-bar');\n }\n }\n}\n","import { AfterViewInit, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { AbstractFieldWriteComponent } from '../../components/palette/base-field/abstract-field-write.component';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ShowCondition } from './domain/conditional-show.model';\n\n@Directive({ selector: '[ccdConditionalShowForm]' })\n/** Hides and shows all fields in a form. Works on read only fields and form fields.\n * The show condition is evaluated on all the fields of the page. i.e. read only and form fields.\n * Evaluation of the show condition includes disabled fields, which can be on their initial value or empty. Executes on the\n * host field initialization and when any field of the form changes.\n * Collaborates with the GreyBarService to show a vertical grey bar when a field initially hidden on the page is shown. When returning\n * to the page after the page has been left, the grey bar has to be redisplayed. If instead on initial page load the field renders as\n * initially shown, the grey bar is not displayed.\n */\nexport class ConditionalShowFormDirective implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() public caseFields: CaseField[];\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n\n private allFieldValues: any;\n private formChangesSubscription: Subscription;\n\n constructor(private readonly fieldsUtils: FieldsUtils) {\n }\n\n public ngOnInit() {\n if (!this.formGroup) {\n this.formGroup = new FormGroup({});\n }\n }\n\n /**\n * Moved the evaluation of show/hide conditions and subscription\n * to form changes until after the form has been fully created.\n *\n * Prior to this change, I traced more than 5,100,000 firings of\n * the evaluateCondition INSIDE the show_condition check on page\n * load for an event with a lot of content. After this change,\n * that number dropped to fewer than 2,500 - that's a.\n */\n public ngAfterViewInit() {\n this.evalAllShowHideConditions();\n this.subscribeToFormChanges();\n }\n\n public ngOnDestroy() {\n this.unsubscribeFromFormChanges();\n }\n\n /*\n * Delay the execution of evalShowHideConditions for 100ms\n * Evaluating showHideConditions on input is inefficient as all forms are evaluated\n * whilst the user is still typing. We are better off allowing the user to finish typing\n * then evaluate the show hide conditions.\n */\n private subscribeToFormChanges() {\n this.unsubscribeFromFormChanges();\n this.formChangesSubscription = this.formGroup.valueChanges\n .pipe(\n debounceTime(100)\n )\n .subscribe(_ => {\n this.evalAllShowHideConditions();\n });\n }\n\n private evaluateControl(control: AbstractControl) {\n const cf = control['caseField'] as CaseField;\n const component = control['component'] as AbstractFormFieldComponent;\n this.evaluateCondition(cf, component, control);\n }\n\n private evaluateCondition(cf: CaseField, component: AbstractFormFieldComponent, control: AbstractControl) {\n if (cf) {\n if (cf.display_context === 'HIDDEN') {\n cf.hidden = true; // display_context === 'HIDDEN' means always hide\n } else if (cf.show_condition) {\n const showCondition: ShowCondition = ShowCondition.getInstance(cf.show_condition);\n const condResult = showCondition.match(this.allFieldValues, this.buildPath(component, cf));\n if (cf.hidden === null || cf.hidden === undefined) {\n cf.hidden = false;\n }\n if (condResult === cf.hidden) {\n cf.hidden = !condResult;\n }\n // EUI-3267. If this field is showing, set the hiddenCannotChange flag.\n // This is used in the display of the grey bar.\n if (!cf.hidden) {\n cf.hiddenCannotChange = showCondition.hiddenCannotChange(this.caseFields);\n }\n // Disable the control if it's hidden so that it doesn't count towards the\n // validation state of the form, but only if it's actually being validated.\n if (control.validator) {\n if (cf.hidden === true && !control.disabled) {\n control.disable({ emitEvent: false });\n } else if (cf.hidden !== true && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n }\n }\n }\n\n // make sure for the 3 callbacks that we are bound to this via an arrow function\n private readonly handleFormControl = (formControl: FormControl): void => {\n this.evaluateControl(formControl);\n }\n\n private readonly handleFormArray = (formArray: FormArray): void => {\n this.evaluateControl(formArray);\n formArray.controls.forEach(formControl => {\n this.fieldsUtils.controlIterator(formControl, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n\n private readonly handleFormGroup = (formGroup: FormGroup): void => {\n this.evaluateControl(formGroup);\n let groupControl = formGroup;\n if (formGroup.get('value') && formGroup.get('value') instanceof FormGroup) { // Complex Field\n groupControl = formGroup.get('value') as FormGroup;\n } else if (formGroup.controls) {\n // Special Fields like AddressUK, AddressGlobal\n groupControl = formGroup;\n }\n if (groupControl.controls) {\n Object.keys(groupControl.controls).forEach(cKey => {\n // EUI-3359.\n // Get the control from groupControl.controls[cKey] rather than\n // groupControl.get(cKey) as the latter does pathing and will interpret\n // full stops in cKey as delimeters for being nested within an array,\n // which makes no sense in this situation.\n const control = groupControl.controls[cKey];\n this.fieldsUtils.controlIterator(control, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n }\n\n private evalAllShowHideConditions(): void {\n this.getCurrentPagesReadOnlyAndFormFieldValues();\n this.fieldsUtils.controlIterator(this.formGroup, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n }\n\n private buildPath(c: AbstractFormFieldComponent, field: CaseField): string {\n if (c && c instanceof AbstractFieldWriteComponent) {\n if (c.idPrefix) {\n return c.idPrefix + field.id;\n }\n }\n return field.id;\n }\n\n private getCurrentPagesReadOnlyAndFormFieldValues(): any {\n const formFields = this.getFormFieldsValuesIncludingDisabled();\n this.allFieldValues = this.fieldsUtils.mergeCaseFieldsAndFormFields(this.contextFields, formFields);\n return this.allFieldValues;\n }\n\n private getFormFieldsValuesIncludingDisabled(): any {\n return this.formGroup.getRawValue();\n }\n\n private unsubscribeFromFormChanges(): void {\n if (this.formChangesSubscription) {\n this.formChangesSubscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ConditionalShowFormDirective } from './conditional-show-form.directive';\nimport { ConditionalShowRegistrarService } from './services/conditional-show-registrar.service';\nimport { GreyBarService } from './services/grey-bar.service';\n\n@NgModule({\n declarations: [\n ConditionalShowFormDirective\n ],\n exports: [\n ConditionalShowFormDirective\n ],\n providers: [\n FieldsUtils,\n ConditionalShowRegistrarService,\n GreyBarService\n ]\n})\nexport class ConditionalShowModule {}\n","import { CurrencyPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { LabelSubstitutorDirective } from './label-substitutor.directive';\n\n@NgModule({\n declarations: [\n LabelSubstitutorDirective\n ],\n exports: [\n LabelSubstitutorDirective\n ],\n providers: [\n FieldsUtils,\n CurrencyPipe,\n ]\n})\nexport class LabelSubstitutorModule {}\n","import { Type } from 'class-transformer';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Orderable } from '../../../domain/order/orderable.model';\nimport { WizardPageField } from './wizard-page-field.model';\n\n// @dynamic\nexport class WizardPage implements Orderable {\n\n public id: string;\n public label: string;\n public order?: number;\n\n @Type(() => WizardPageField)\n public wizard_page_fields: WizardPageField[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public show_condition?: string;\n\n public parsedShowCondition: ShowCondition;\n\n public getCol1Fields(): CaseField[] {\n return this.case_fields?.filter(f =>\n !f.wizardProps.page_column_no || f.wizardProps.page_column_no === 1);\n }\n public getCol2Fields(): CaseField[] {\n return this.case_fields?.filter(f => f.wizardProps.page_column_no === 2);\n }\n\n public isMultiColumn(): boolean {\n return this.getCol2Fields()?.length > 0;\n }\n}\n","import { Type } from 'class-transformer';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { CaseField } from '../definition/case-field.model';\n\n// @dynamic\nexport class CaseEventTrigger {\n\n public id: string;\n public name: string;\n public description?: string;\n public case_id?: string;\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public event_token: string;\n\n @Type(() => WizardPage)\n public wizard_pages: WizardPage[];\n\n public show_summary?: boolean;\n public show_event_notes?: boolean;\n public end_button_label?: string;\n public can_save_draft?: boolean;\n\n public hasFields(): boolean {\n return this.case_fields && this.case_fields.length !== 0;\n }\n\n public hasPages(): boolean {\n return this.wizard_pages && this.wizard_pages.length !== 0;\n }\n}\n","import { ChallengedAccessRequest } from '../../../domain/case-view/challenged-access-request.model';\nimport { RoleCategory, RoleGrantTypeCategory, RoleRequestPayload } from '../../../domain/case-view/role-request.model';\nimport { SpecificAccessRequest } from '../../../domain/case-view/specific-access-request.model';\n\nexport class CaseAccessUtils {\n // User role mapping\n public static readonly JUDGE_ROLE = 'judge';\n public static readonly JUDGE_ROLE_CATEGORY = 'JUDICIAL';\n public static readonly JUDGE_ROLE_NAME = 'judicial';\n public static readonly ADMIN_ROLE = 'admin';\n public static readonly ADMIN_ROLE_CATEGORY = 'ADMIN';\n public static readonly ADMIN_ROLE_NAME = 'admin';\n public static readonly PROFESSIONAL_ROLE = 'solicitor';\n public static readonly PROFESSIONAL_ROLE_CATEGORY = 'PROFESSIONAL';\n public static readonly PROFESSIONAL_ROLE_NAME = 'professional';\n public static readonly LEGAL_OPERATIONS_ROLE = 'caseworker';\n public static readonly LEGAL_OPERATIONS_ROLE_CATEGORY = 'LEGAL_OPERATIONS';\n public static readonly LEGAL_OPERATIONS_ROLE_NAME = 'legal-ops';\n public static readonly CITIZEN_ROLE = 'citizen';\n public static readonly CITIZEN_ROLE_CATEGORY = 'CITIZEN';\n public static readonly CITIZEN_ROLE_NAME = 'citizen';\n\n public getMappedRoleCategory(roles: string[] = [], roleCategories: string[] = []): RoleCategory {\n\n const roleKeywords: string[] = roles.join().split('-').join().split(',');\n\n if (this.roleOrCategoryExists(CaseAccessUtils.JUDGE_ROLE, CaseAccessUtils.JUDGE_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.JUDGE_ROLE_CATEGORY;\n } else if (this.roleOrCategoryExists(CaseAccessUtils.PROFESSIONAL_ROLE,\n CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY;\n } else if (this.roleOrCategoryExists(CaseAccessUtils.CITIZEN_ROLE,\n CaseAccessUtils.CITIZEN_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.CITIZEN_ROLE_CATEGORY;\n } else if (this.roleOrCategoryExists(CaseAccessUtils.ADMIN_ROLE,\n CaseAccessUtils.ADMIN_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.ADMIN_ROLE_CATEGORY;\n } else {\n return CaseAccessUtils.LEGAL_OPERATIONS_ROLE_CATEGORY;\n }\n\n }\n\n public roleOrCategoryExists(roleKeyword: string, roleCategory: string, roleKeywords: string[], roleCategories: string[]): boolean {\n const categoryExists = roleCategories.indexOf(roleCategory) > -1;\n const keywordExists = roleKeywords.indexOf(roleKeyword) > -1;\n return categoryExists ? categoryExists : keywordExists;\n }\n\n public getAMRoleName(accessType: string, aMRole: RoleCategory): string {\n\n let roleName = '';\n\n switch (aMRole) {\n case CaseAccessUtils.JUDGE_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.JUDGE_ROLE_NAME}`;\n break;\n case CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.PROFESSIONAL_ROLE_NAME}`;\n break;\n case CaseAccessUtils.CITIZEN_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.CITIZEN_ROLE_NAME}`;\n break;\n case CaseAccessUtils.ADMIN_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.ADMIN_ROLE_NAME}`;\n break;\n default:\n roleName = `${accessType}-access-${CaseAccessUtils.LEGAL_OPERATIONS_ROLE_NAME}`;\n break;\n }\n\n return roleName;\n\n }\n\n public getAMPayload(\n assignerId: string,\n actorId: string,\n roleName: string,\n roleCategory: RoleCategory,\n grantType: RoleGrantTypeCategory,\n caseId: string,\n details: ChallengedAccessRequest | SpecificAccessRequest,\n beginTime: Date = null,\n endTime: Date = null\n ): RoleRequestPayload {\n const process = (details as ChallengedAccessRequest).caseReference !== undefined ? 'challenged-access' : 'specific-access';\n const payload: RoleRequestPayload = {\n roleRequest: {\n assignerId,\n process,\n reference: `${caseId}/${roleName}/${actorId}`,\n replaceExisting: true\n },\n requestedRoles: [{\n actorIdType: 'IDAM',\n actorId,\n roleType: 'CASE',\n roleName,\n classification: 'PUBLIC',\n roleCategory,\n grantType,\n beginTime,\n endTime,\n attributes: {\n caseId\n },\n notes: [{\n userId: assignerId,\n time: new Date(),\n comment: JSON.stringify(details)\n }]\n }]\n };\n\n return payload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Orderable } from '../../domain/order/orderable.model';\n\n// @dynamic\n@Injectable()\nexport class OrderService {\n\n /**\n * @deprecated Use `sort` function instead or `compareAsc`\n */\n public sortAsc: (a:Orderable, b:Orderable)=> number = OrderService.DEFAULT_COMPARE_FUNCTION;\n private static readonly DEFAULT_COMPARE_FUNCTION = (a: Orderable, b: Orderable) => {\n const aOrdered = a.order === 0 || a.order;\n const bOrdered = b.order === 0 || b.order;\n\n if (!aOrdered) {\n return !bOrdered ? 0 : 1;\n }\n\n if (!bOrdered) {\n return -1;\n }\n\n return a.order - b.order;\n }\n\n /**\n * Clone and sort array. Ascending order used by default.\n *\n * @param array Array to sort\n * @returns Orderable[] Sorted clone array.\n */\n public sort<T extends Orderable>(array: T[], sortingFunction = this.sortAsc): T[] {\n return array\n .slice()\n .sort(sortingFunction);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { ComplexFieldOverride } from '../domain/wizard-page-field-complex-override.model';\nimport { WizardPageField } from '../domain/wizard-page-field.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WizardPageFieldToCaseFieldMapper {\n\n public mapAll(wizardPageFields: WizardPageField[], caseFields: CaseField[]): CaseField[] {\n return wizardPageFields.map(wizardField => {\n return this.map(wizardField, caseFields);\n });\n }\n\n private map(wizardPageField: WizardPageField, caseFields: CaseField[]): CaseField {\n\n const caseField: CaseField = caseFields.find(e => e.id === wizardPageField.case_field_id);\n caseField.wizardProps = wizardPageField;\n caseField.order = wizardPageField.order;\n\n this.fixShowConditionPath(caseField, '');\n\n if (wizardPageField.complex_field_overrides && wizardPageField.complex_field_overrides.length > 0) {\n wizardPageField.complex_field_overrides.forEach((override: ComplexFieldOverride) => {\n this.processComplexFieldOverride(override, caseField, caseFields);\n });\n }\n\n // this will fix the CaseLink type as we exclude it in ccdFieldsFilter directive\n this.hideParentIfAllChildrenHidden(caseField);\n\n return caseField;\n }\n\n private processComplexFieldOverride(override: ComplexFieldOverride, caseField: CaseField, caseFields: CaseField[]) {\n const caseFieldIds = override.complex_field_element_id.split('.');\n let case_field_leaf: CaseField;\n\n const children = this.getCaseFieldChildren(caseField);\n\n if (children.length > 0) {\n const [_, ...tail] = caseFieldIds;\n case_field_leaf = this.getCaseFieldLeaf(tail, children);\n } else {\n case_field_leaf = this.getCaseFieldLeaf(caseFieldIds, caseFields);\n }\n\n if (override.display_context !== 'HIDDEN') {\n case_field_leaf.hidden = false;\n case_field_leaf.display_context = override.display_context;\n if (override.label && override.label.length > 0) {\n case_field_leaf.label = override.label;\n }\n if (override.hint_text && override.hint_text.length > 0) {\n case_field_leaf.hint_text = override.hint_text;\n }\n if (override.show_condition && override.show_condition.length > 0) {\n case_field_leaf.show_condition = override.show_condition;\n }\n } else {\n case_field_leaf.hidden = true;\n case_field_leaf.display_context = override.display_context;\n }\n }\n\n private fixShowConditionPath(caseField: CaseField, pathPrefix: string) {\n if (caseField.show_condition) {\n caseField.show_condition = ShowCondition.addPathPrefixToCondition(caseField.show_condition, pathPrefix);\n }\n\n const childrenCaseFields = this.getCaseFieldChildren(caseField);\n\n childrenCaseFields.forEach(collectionCaseField => {\n this.fixShowConditionPath(collectionCaseField, this.preparePathPrefix(pathPrefix, caseField.id));\n });\n }\n\n private preparePathPrefix(pathPrefix: string, caseField: string) {\n return pathPrefix.length === 0 ? caseField : pathPrefix + '.' + caseField;\n }\n\n private getCaseFieldLeaf(caseFieldId: string[], caseFields: CaseField[]): CaseField {\n const [head, ...tail] = caseFieldId;\n if (caseFieldId.length === 1) {\n const caseLeaf = caseFields.find(e => e.id === head);\n if (!caseLeaf) {\n throw new Error(`Cannot find leaf for caseFieldId ${caseFieldId.join('.')}`);\n }\n return caseLeaf;\n } else if (caseFieldId.length > 1) {\n const caseField = caseFields.find(e => e.id === head);\n const children = this.getCaseFieldChildren(caseField);\n\n if (children.length === 0) {\n throw new Error(`field_type or complex_fields missing for ${caseFieldId.join('.')}`);\n }\n return this.getCaseFieldLeaf(tail, children);\n } else {\n throw new Error(`Cannot find leaf for caseFieldId ${caseFieldId.join('.')}`);\n }\n }\n\n private hideParentIfAllChildrenHidden(caseField: CaseField) {\n\n const childrenCaseFields = this.getCaseFieldChildren(caseField);\n\n childrenCaseFields.forEach(e => this.hideParentIfAllChildrenHidden(e));\n\n if (childrenCaseFields.length > 0 && this.allCaseFieldsHidden(childrenCaseFields)) {\n caseField.hidden = true;\n }\n }\n\n private getCaseFieldChildren(caseField: CaseField) {\n let childrenCaseFields = [];\n if (caseField.isCollection()) {\n childrenCaseFields = caseField.field_type.collection_field_type.complex_fields || [];\n } else if (caseField.isComplex()) {\n childrenCaseFields = caseField.field_type.complex_fields || [];\n }\n return childrenCaseFields;\n }\n\n private allCaseFieldsHidden(children: CaseField[]): boolean {\n return !children.some(e => e.hidden !== true);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { ConnectableObservable, Observable, Observer } from 'rxjs';\nimport { publish, refCount } from 'rxjs/operators';\nimport { AlertLevel } from '../../domain/alert/alert-level.model';\nimport { Alert } from '../../domain/alert/alert.model';\n\n@Injectable()\nexport class AlertService {\n // the preserved messages\n public preservedError = '';\n public preservedWarning = '';\n public preservedSuccess = '';\n\n // TODO: Remove\n public message: string;\n public level: AlertLevel;\n\n public successes: ConnectableObservable<Alert>;\n public errors: ConnectableObservable<Alert>;\n public warnings: ConnectableObservable<Alert>;\n // TODO: Remove\n public alerts: ConnectableObservable<Alert>;\n\n private successObserver: Observer<Alert>;\n private errorObserver: Observer<Alert>;\n private warningObserver: Observer<Alert>;\n // TODO: Remove\n private alertObserver: Observer<Alert>;\n\n private preserveAlerts = false;\n\n constructor(private readonly router: Router) {\n\n this.successes = Observable\n .create(observer => this.successObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.successes.subscribe();\n\n this.errors = Observable\n .create(observer => this.errorObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.errors.subscribe();\n\n this.warnings = Observable\n .create(observer => this.warningObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.warnings.subscribe();\n\n // TODO: Remove\n this.alerts = Observable\n .create(observer => this.alertObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.alerts.subscribe();\n\n this.router\n .events\n .subscribe(event => {\n if (event instanceof NavigationStart) {\n // if there is no longer a preserve alerts setting for the page then clear all observers and preserved messages\n if (!this.preserveAlerts) {\n this.clear();\n }\n // if not, then set the preserving of alerts to false so rendering to a new page\n this.preserveAlerts = false;\n }\n });\n }\n\n public clear(): void {\n this.successObserver.next(null);\n this.errorObserver.next(null);\n this.warningObserver.next(null);\n this.preservedError = '';\n this.preservedWarning = '';\n this.preservedSuccess = '';\n\n // EUI-3381.\n this.alertObserver.next(null);\n this.message = '';\n }\n\n public error(message: string): void {\n this.preservedError = this.preserveMessages(message);\n const alert: Alert = { level: 'error', message };\n this.errorObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public warning(message: string): void {\n this.preservedWarning = this.preserveMessages(message);\n const alert: Alert = { level: 'warning', message };\n this.warningObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public success(message: string, preserve = false): void {\n this.preservedSuccess = this.preserveMessages(message);\n this.preserveAlerts = preserve || this.preserveAlerts;\n const alert: Alert = { level: 'success', message };\n this.successObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public setPreserveAlerts(preserve: boolean, urlInfo?: string[]) {\n // if there is no url setting then just preserve the messages\n if (!urlInfo) {\n this.preserveAlerts = preserve;\n } else {\n // check if the url includes the sting given\n this.preserveAlerts = this.currentUrlIncludesInfo(preserve, urlInfo);\n }\n }\n\n public currentUrlIncludesInfo(preserve: boolean, urlInfo: string[]): boolean {\n // loop through the list of strings and check the router includes all of them\n for (const urlSnip of urlInfo) {\n if (!this.router.url.includes(urlSnip)) {\n // return the opposite boolean value if the router does not include one of the strings\n return !preserve;\n }\n }\n // return the boolean value if all strings are in the url\n return preserve;\n }\n\n public isPreserveAlerts(): boolean {\n return this.preserveAlerts;\n }\n\n public preserveMessages(message: string): string {\n // preserve the messages if set to preserve them\n if (this.isPreserveAlerts()) {\n return message;\n } else {\n return '';\n }\n }\n\n // TODO: Remove\n public push(msgObject) {\n this.message = msgObject.message;\n this.level = msgObject.level;\n\n this.alertObserver.next({\n level: this.level,\n message: this.message\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { UserDetails } from '../../../domain/user/user-details.model';\nimport { TaskRespone } from '../../../domain/work-allocation/task-response.model';\nimport { TaskSearchParameter } from '../../../domain/work-allocation/task-search-parameter.model';\nimport { TaskPayload } from '../../../domain/work-allocation/TaskPayload';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\n\nexport const MULTIPLE_TASKS_FOUND = 'More than one task found!';\n\n@Injectable()\nexport class WorkAllocationService {\n\n public static iACCaseOfficer = 'caseworker-ia-caseofficer';\n public static iACAdmOfficer = 'caseworker-ia-admofficer';\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService,\n private readonly alertService: AlertService\n ) {\n }\n\n /**\n * Call the API to get tasks matching the search criteria.\n * @param searchRequest The search parameters that specify which tasks to match.\n */\n public searchTasks(searchRequest: TaskSearchParameter): Observable<object> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/searchForCompletable`;\n return this.http\n .post(url, {searchRequest}, null, false)\n .pipe(\n map(response => response),\n catchError(error => {\n this.errorService.setError(error);\n // explicitly eat away 401 error and 400 error\n if (error && error.status && (error.status === 401 || error.status === 400)) {\n // do nothing\n console.log('error status 401 or 400', error);\n } else {\n return throwError(error);\n }\n })\n );\n }\n\n /**\n * Call the API to assign a task.\n * @param taskId specifies which task should be assigned.\n * @param userId specifies the user the task should be assigned to.\n */\n public assignTask(taskId: string, userId: string): Observable<any> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/assign`;\n return this.http\n .post(url, {userId})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n /**\n * Call the API to complete a task.\n * @param taskId specifies which task should be completed.\n */\n public completeTask(taskId: string): Observable<any> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/complete`;\n return this.http\n .post(url, {})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n // this will subscribe to get the user details and decide whether to display an error message\n this.http.get(this.appConfig.getUserInfoApiUrl()).pipe(map(response => response)).subscribe((response) => {\n this.handleTaskCompletionError(response);\n });\n return throwError(error);\n })\n );\n }\n\n /**\n * Call the API to assign and complete a task.\n * @param taskId specifies which task should be completed.\n */\n public assignAndCompleteTask(taskId: string): Observable<any> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/complete`;\n return this.http\n .post(url, {\n completion_options: {\n assign_and_complete: true\n }\n })\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n // this will subscribe to get the user details and decide whether to display an error message\n this.http.get(this.appConfig.getUserInfoApiUrl()).pipe(map(response => response)).subscribe((response) => {\n this.handleTaskCompletionError(response);\n });\n return throwError(error);\n })\n );\n }\n\n /**\n * Handles the response from the observable to get the user details when task is completed.\n * @param response is the response given from the observable which contains the user detaild.\n */\n public handleTaskCompletionError(response: any): void {\n const userDetails = response as UserDetails;\n if (this.userIsCaseworker(userDetails.userInfo.roles)) {\n // when submitting the completion of task if not yet rendered cases/case confirm then preserve the alert for re-rendering\n this.alertService.setPreserveAlerts(true, ['cases/case', 'submit']);\n this.alertService.warning('A task could not be completed successfully. Please complete the task associated with the case manually.');\n }\n }\n\n /**\n * Returns true if the user's role is equivalent to a caseworker.\n * @param roles is the list of roles found from the current user.\n */\n public userIsCaseworker(roles: string[]): boolean {\n const lowerCaseRoles = roles.map(role => role.toLowerCase());\n // When/if lib & target permanently change to es2016, replace indexOf with includes\n return (lowerCaseRoles.indexOf(WorkAllocationService.iACCaseOfficer) !== -1)\n || (lowerCaseRoles.indexOf(WorkAllocationService.iACAdmOfficer) !== -1);\n }\n\n /**\n * Look for open tasks for a case and event combination. There are 5 possible scenarios:\n * 1. No tasks found => Success.\n * 2. One task found => Mark as done => Success.\n * 3. One task found => Mark as done throws error => Failure.\n * 4. More than one task found => Failure.\n * 5. Search call throws an error => Failure.\n * @param ccdId The ID of the case to find tasks for.\n * @param eventId The ID of the event to find tasks for.\n */\n public completeAppropriateTask(ccdId: string, eventId: string, jurisdiction: string, caseTypeId: string): Observable<any> {\n const taskSearchParameter: TaskSearchParameter = {\n ccdId,\n eventId,\n jurisdiction,\n caseTypeId\n };\n return this.searchTasks(taskSearchParameter)\n .pipe(\n map((response: any) => {\n const tasks: any[] = response.tasks;\n if (tasks && tasks.length > 0) {\n if (tasks.length === 1) {\n this.completeTask(tasks[0].id).subscribe();\n } else {\n // This is a problem. Throw an appropriate error.\n throw new Error(MULTIPLE_TASKS_FOUND);\n }\n }\n return true; // All good. Nothing to see here.\n }),\n catchError(error => {\n // Simply rethrow it.\n return throwError(error);\n })\n );\n }\n\n /**\n * Return tasks for case and event.\n */\n public getTasksByCaseIdAndEventId(eventId: string, caseId: string, caseType: string, jurisdiction: string): Observable<TaskPayload> {\n return this.http.get(`${this.appConfig.getWorkAllocationApiUrl()}/case/tasks/${caseId}/event/${eventId}/caseType/${caseType}/jurisdiction/${jurisdiction}`);\n }\n\n /**\n * Call the API to get a task\n */\n public getTask(taskId: string): Observable<TaskRespone> {\n return this.http.get(`${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport abstract class HasLoadingState {\n public get isLoading(): Observable<boolean> {\n return;\n }\n}\n@Injectable()\nexport class LoadingService implements HasLoadingState {\n private readonly registered = new Map<string, string>();\n private readonly loading = new BehaviorSubject<boolean>(false);\n\n public get isLoading(): Observable<boolean> {\n return this.loading.pipe(distinctUntilChanged());\n }\n\n public register(): string {\n const token = this.generateToken();\n this.registered.set(token, token);\n this.loading.next(true);\n return token;\n }\n\n public unregister(token: string): void {\n this.registered.delete(token);\n this.loading.next(this.registered.size > 0);\n }\n\n private generateToken(): string {\n const timestamp = window.performance.now();\n return 'toolkit-loading-' + timestamp; // format: [source-library]-[unique incrementing number]\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map, tap } from 'rxjs/operators';\n\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { ShowCondition } from '../../../directives';\nimport { CaseEventData } from '../../../domain/case-event-data.model';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CasePrintDocument } from '../../../domain/case-view/case-print-document.model';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { ChallengedAccessRequest } from '../../../domain/case-view/challenged-access-request.model';\nimport { RoleAssignmentResponse } from '../../../domain/case-view/role-assignment-response.model';\nimport { RoleCategory, RoleRequestPayload } from '../../../domain/case-view/role-request.model';\nimport { SpecificAccessRequest } from '../../../domain/case-view/specific-access-request.model';\nimport { Draft } from '../../../domain/draft.model';\nimport { UserInfo } from '../../../domain/user/user-info.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\nimport { LoadingService } from '../../../services/loading/loading.service';\nimport { OrderService } from '../../../services/order/order.service';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { CaseAccessUtils } from '../case-access-utils';\nimport { WizardPage } from '../domain/wizard-page.model';\nimport { WizardPageFieldToCaseFieldMapper } from './wizard-page-field-to-case-field.mapper';\nimport { WorkAllocationService } from './work-allocation.service';\n\n@Injectable()\nexport class CasesService {\n // Internal (UI) API\n public static readonly V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';\n public static readonly V2_MEDIATYPE_START_CASE_TRIGGER =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-start-case-trigger.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_START_EVENT_TRIGGER =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-start-event-trigger.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_START_DRAFT_TRIGGER =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-start-draft-trigger.v2+json;charset=UTF-8';\n\n // External (Data Store) API\n\n public static readonly V2_MEDIATYPE_CASE_DOCUMENTS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.case-documents.v2+json;charset=UTF-8';\n\n public static readonly V2_MEDIATYPE_CASE_DATA_VALIDATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.case-data-validate.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_CREATE_EVENT =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-event.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_CREATE_CASE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-case.v2+json;charset=UTF-8';\n\n public static readonly PUI_CASE_MANAGER = 'pui-case-manager';\n\n /**\n * @deprecated Use `CasesService::getCaseView` instead\n */\n public get = this.getCaseView;\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly orderService: OrderService,\n private readonly errorService: HttpErrorService,\n private readonly wizardPageFieldToCaseFieldMapper: WizardPageFieldToCaseFieldMapper,\n private readonly workAllocationService: WorkAllocationService,\n private readonly loadingService: LoadingService,\n private readonly sessionStorageService: SessionStorageService\n ) {\n }\n\n public getCaseView(jurisdictionId: string,\n caseTypeId: string,\n caseId: string): Observable<CaseView> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types/${caseTypeId}`\n + `/cases/${caseId}`;\n\n const loadingToken = this.loadingService.register();\n return this.http\n .get(url)\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n }),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getCaseViewV2(caseId: string): Observable<CaseView> {\n const url = `${this.appConfig.getCaseDataUrl()}/internal/cases/${caseId}`;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CASE_VIEW)\n .set('Content-Type', 'application/json');\n\n const loadingToken = this.loadingService.register();\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n }),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getEventTrigger(caseTypeId: string,\n eventTriggerId: string,\n caseId?: string,\n ignoreWarning?: string): Observable<CaseEventTrigger> {\n ignoreWarning = undefined !== ignoreWarning ? ignoreWarning : 'false';\n\n const url = this.buildEventTriggerUrl(caseTypeId, eventTriggerId, caseId, ignoreWarning);\n\n let headers = new HttpHeaders();\n headers = headers.set('experimental', 'true');\n headers = headers.set('Content-Type', 'application/json');\n\n if (Draft.isDraft(caseId)) {\n headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_DRAFT_TRIGGER);\n } else if (caseId !== undefined && caseId !== null) {\n headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_EVENT_TRIGGER);\n } else {\n headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_CASE_TRIGGER);\n }\n\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => {\n return FieldsUtils.handleNestedDynamicLists(body);\n }),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n }),\n map((p: object) => plainToClass(CaseEventTrigger, p)),\n tap(eventTrigger => this.initialiseEventTrigger(eventTrigger))\n );\n }\n\n public createEvent(caseDetails: CaseView, eventData: CaseEventData): Observable<object> {\n const caseId = caseDetails.case_id;\n const url = this.appConfig.getCaseDataUrl() + `/cases/${caseId}/events`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CREATE_EVENT)\n .set('Content-Type', 'application/json');\n\n return this.http\n .post(url, eventData, {headers, observe: 'body'})\n .pipe(\n map(body => this.processResponseBody(body, eventData)),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public validateCase(ctid: string, eventData: CaseEventData, pageId: string): Observable<object> {\n const pageIdString = pageId ? '?pageId=' + pageId : '';\n const url = this.appConfig.getCaseDataUrl()\n + `/case-types/${ctid}/validate${pageIdString}`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE)\n .set('Content-Type', 'application/json');\n\n return this.http\n .post(url, eventData, {headers, observe: 'body'})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public createCase(ctid: string, eventData: CaseEventData): Observable<object> {\n let ignoreWarning = 'false';\n\n if (eventData.ignore_warning) {\n ignoreWarning = 'true';\n }\n const url = this.appConfig.getCaseDataUrl()\n + `/case-types/${ctid}/cases?ignore-warning=${ignoreWarning}`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CREATE_CASE)\n .set('Content-Type', 'application/json');\n\n return this.http\n .post(url, eventData, {headers, observe: 'body'})\n .pipe(\n map(body => this.processResponseBody(body, eventData)),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public getPrintDocuments(caseId: string): Observable<CasePrintDocument[]> {\n const url = this.appConfig.getCaseDataUrl()\n + `/cases/${caseId}`\n + `/documents`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CASE_DOCUMENTS)\n .set('Content-Type', 'application/json');\n\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => body.documentResources),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public getCourtOrHearingCentreName(locationId: number): Observable<any> {\n return this.http.get(`${this.appConfig.getLocationRefApiUrl()}/building-locations?epimms_id=${locationId}`);\n }\n\n public createChallengedAccessRequest(caseId: string, request: ChallengedAccessRequest): Observable<RoleAssignmentResponse> {\n // Assignment API endpoint\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n\n const camUtils = new CaseAccessUtils();\n let userInfo: UserInfo;\n if (userInfoStr) {\n userInfo = JSON.parse(userInfoStr);\n }\n\n const roleCategory: RoleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);\n const roleName = camUtils.getAMRoleName('challenged', roleCategory);\n const beginTime = new Date();\n const endTime = new Date(new Date().setUTCHours(23, 59, 59, 999));\n const id = userInfo.id ? userInfo.id : userInfo.uid;\n const payload: RoleRequestPayload = camUtils.getAMPayload(id,\n id,\n roleName,\n roleCategory,\n 'CHALLENGED',\n caseId,\n request,\n beginTime,\n endTime);\n\n return this.http.post(`/api/challenged-access-request`, payload);\n }\n\n public createSpecificAccessRequest(caseId: string, sar: SpecificAccessRequest): Observable<RoleAssignmentResponse> {\n // Assignment API endpoint\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n\n const camUtils = new CaseAccessUtils();\n let userInfo: UserInfo;\n if (userInfoStr) {\n userInfo = JSON.parse(userInfoStr);\n }\n\n const roleCategory: RoleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);\n const roleName = camUtils.getAMRoleName('specific', roleCategory);\n const id = userInfo.id ? userInfo.id : userInfo.uid;\n const payload: RoleRequestPayload = camUtils.getAMPayload(null, id,\n roleName, roleCategory, 'SPECIFIC', caseId, sar);\n\n payload.roleRequest = {\n ...payload.roleRequest,\n process: 'specific-access',\n replaceExisting: true,\n assignerId: payload.requestedRoles[0].actorId,\n reference: `${caseId}/${roleName}/${payload.requestedRoles[0].actorId}`\n };\n\n payload.requestedRoles[0] = {\n ...payload.requestedRoles[0],\n roleName: 'specific-access-requested',\n roleCategory,\n classification: 'PRIVATE',\n endTime: new Date(new Date().setDate(new Date().getDate() + 30)),\n beginTime: null,\n grantType: 'BASIC',\n readOnly: true\n };\n\n payload.requestedRoles[0].attributes = {\n ...payload.requestedRoles[0].attributes,\n requestedRole: roleName\n };\n\n payload.requestedRoles[0].notes[0] = {\n ...payload.requestedRoles[0].notes[0],\n userId: payload.requestedRoles[0].actorId\n };\n return this.http.post(\n `/api/specific-access-request`,\n payload\n );\n }\n\n private buildEventTriggerUrl(caseTypeId: string,\n eventTriggerId: string,\n caseId?: string,\n ignoreWarning?: string): string {\n let url = this.appConfig.getCaseDataUrl() + `/internal`;\n\n if (Draft.isDraft(caseId)) {\n url += `/drafts/${caseId}`\n + `/event-trigger`\n + `?ignore-warning=${ignoreWarning}`;\n } else if (caseTypeId === undefined || caseTypeId === null) {\n url += `/cases/${caseId}`\n + `/event-triggers/${eventTriggerId}`\n + `?ignore-warning=${ignoreWarning}`;\n } else {\n url += `/case-types/${caseTypeId}`\n + `/event-triggers/${eventTriggerId}`\n + `?ignore-warning=${ignoreWarning}`;\n }\n\n return url;\n }\n\n private processResponseBody(body: any, eventData: CaseEventData): any {\n this.processTasksOnSuccess(body, eventData.event);\n return body;\n }\n\n private initialiseEventTrigger(eventTrigger: CaseEventTrigger) {\n if (!eventTrigger.wizard_pages) {\n eventTrigger.wizard_pages = [];\n }\n\n eventTrigger.wizard_pages.forEach((wizardPage: WizardPage) => {\n wizardPage.parsedShowCondition = ShowCondition.getInstance(wizardPage.show_condition);\n wizardPage.case_fields = this.orderService.sort(\n this.wizardPageFieldToCaseFieldMapper.mapAll(wizardPage.wizard_page_fields, eventTrigger.case_fields));\n });\n }\n\n private processTasksOnSuccess(caseData: any, eventData: any): void {\n // The following code is work allocation 1 related\n if (this.appConfig.getWorkAllocationApiUrl().toLowerCase() === 'workallocation') {\n // This is used a feature toggle to\n // control the work allocation\n if (!this.isPuiCaseManager()) {\n this.workAllocationService.completeAppropriateTask(caseData.id, eventData.id, caseData.jurisdiction, caseData.case_type)\n .subscribe(() => {\n // Success. Do nothing.\n }, error => {\n // Show an appropriate warning about something that went wrong.\n console.warn('Could not process tasks for this case event', error);\n });\n }\n }\n }\n\n /*\n Checks if the user has role of pui-case-manager and returns true or false\n */\n private isPuiCaseManager(): boolean {\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n if (userInfoStr) {\n const userInfo: UserInfo = JSON.parse(userInfoStr);\n return userInfo && userInfo.roles && (userInfo.roles.indexOf(CasesService.PUI_CASE_MANAGER) !== -1);\n }\n return false;\n }\n}\n","<a *ngIf=\"caseField.value\" href=\"javascript:void(0)\"\n (click)=\"showMediaViewer()\">\n {{ caseField.value.document_filename }}\n</a>\n","import { Component, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { DocumentManagementService } from '../../../services/document-management';\nimport { WindowService } from '../../../services/window';\nimport { CasesService } from '../../case-editor/services/cases.service';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\nconst MEDIA_VIEWER_INFO = 'media-viewer-info';\n\n@Component({\n selector: 'ccd-read-document-field',\n templateUrl: './read-document-field.html'\n})\nexport class ReadDocumentFieldComponent extends AbstractFieldReadComponent implements OnDestroy {\n\n public caseViewSubscription: Subscription;\n\n constructor(\n private readonly windowService: WindowService,\n private readonly documentManagement: DocumentManagementService,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly casesService: CasesService\n ) {\n super();\n }\n\n public showMediaViewer(): void {\n const caseId = this.route.snapshot.params['cid'];\n this.windowService.removeLocalStorage(MEDIA_VIEWER_INFO);\n if (caseId) {\n this.caseViewSubscription = this.casesService.getCaseViewV2(caseId).subscribe(caseView => {\n if (this.caseField && this.caseField.value) {\n const mergedInfo = {\n ...this.caseField.value,\n id: caseView.case_id,\n jurisdiction: caseView.case_type.jurisdiction.id\n };\n this.openMediaViewer(mergedInfo);\n }\n });\n } else {\n if (this.caseField && this.caseField.value) {\n this.openMediaViewer(this.caseField.value);\n }\n }\n }\n\n public openMediaViewer(documentFieldValue): void {\n this.windowService.setLocalStorage(MEDIA_VIEWER_INFO, this.documentManagement.getMediaViewerInfo(documentFieldValue));\n this.windowService.openOnNewTab(this.getMediaViewerUrl());\n }\n\n public getMediaViewerUrl(): string {\n const routerMediaViewer = this.router.createUrlTree(['/media-viewer']);\n if (routerMediaViewer) {\n return routerMediaViewer.toString();\n }\n }\n\n public ngOnDestroy(): void {\n if (this.caseViewSubscription) {\n this.caseViewSubscription.unsubscribe();\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-document-dialog',\n templateUrl: './document-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class DocumentDialogComponent implements OnInit {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<DocumentDialogComponent>) {}\n\n public ngOnInit() {\n }\n\n public replace() {\n this.result = 'Replace';\n this.matDialogRef.close(this.result);\n }\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n}\n","import { MatDialogConfig } from '@angular/material/dialog';\n\nexport function initDialog(): MatDialogConfig {\n const dialogConfig = new MatDialogConfig();\n\n dialogConfig.disableClose = true;\n dialogConfig.autoFocus = true;\n dialogConfig.ariaLabel = 'Label';\n dialogConfig.height = '245px';\n dialogConfig.width = '550px';\n dialogConfig.panelClass = 'dialog';\n dialogConfig.closeOnNavigation = false;\n dialogConfig.position = {\n top: `${window.innerHeight / 2 - 120}px`, left: `${window.innerWidth / 2 - 275}px`\n };\n\n return dialogConfig;\n}\n","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Are you sure you want to replace the existing file?</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You are about to delete the original file uploaded. Are you sure you want to proceed?</span>\n </div>\n <div>\n <button type=\"button\" title=\"Replace\" class=\"button action-button\" (click)=\"replace()\">Replace file</button>\n <button type=\"button\" title=\"Cancel\" class=\"button button-secondary\" (click)=\"cancel()\">Cancel</button>\n </div>\n</div>\n","import { AlertLevel } from './alert-level.model';\n\nexport class Alert {\n public level: AlertLevel;\n public message: string;\n}\n","export class CaseViewEvent {\n public id: number;\n public timestamp: string;\n public summary: string;\n public comment: string;\n public event_id: string;\n public event_name: string;\n public state_id: string;\n public state_name: string;\n public user_id: number;\n public user_last_name: string;\n public user_first_name: string;\n public significant_item: {\n type: string,\n description: string,\n url: string\n };\n}\n","import { Orderable } from '../order';\n\nexport class CaseViewTrigger implements Orderable {\n public static readonly DELETE = 'DELETE';\n\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { Orderable } from '../order';\n\n// @dynamic\nexport class CaseTab implements Orderable {\n public id: string;\n public label: string;\n public order?: number;\n @Type(() => CaseField)\n public fields: CaseField[];\n public show_condition?: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { CaseTab } from './case-tab.model';\nimport { CaseViewEvent } from './case-view-event.model';\nimport { CaseViewTrigger } from './case-view-trigger.model';\n\n// @dynamic\nexport class CaseView {\n public case_id?: string;\n public case_type: {\n id: string,\n name: string,\n description?: string,\n jurisdiction: {\n id: string,\n name: string,\n description?: string\n },\n printEnabled?: boolean\n };\n public state: {\n id: string,\n name: string,\n description?: string\n title_display?: string\n };\n public channels: string[];\n @Type(() => CaseTab)\n public tabs: CaseTab[];\n public triggers: CaseViewTrigger[];\n public events: CaseViewEvent[];\n @Type(() => CaseField)\n public metadataFields?: CaseField[];\n public basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n}\n","export class CasePrintDocument {\n public name: string;\n public type: string;\n public url: string;\n}\n","export class HRef {\n public href: string;\n}\n\nexport class DocumentLinks {\n public self: HRef;\n public binary: HRef;\n}\n\nexport class Document {\n public _links: DocumentLinks;\n public originalDocumentName: string;\n public hashToken?: string;\n}\n\nexport class Embedded {\n public documents: Document[];\n}\n\nexport class DocumentData {\n public _embedded: Embedded;\n public documents: Document[];\n}\n\nexport class FormDocument {\n public document_url: string;\n public document_binary_url: string;\n public document_filename: string;\n public document_hash?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { OrganisationVm } from '../../services/organisation';\nimport { SimpleOrganisationModel } from './simple-organisation.model';\n\n@Injectable()\nexport class OrganisationConverter {\n\n private static toSimpleAddress(organisationModel: OrganisationVm): string {\n let simpleAddress = '';\n if (organisationModel.addressLine1) { simpleAddress += organisationModel.addressLine1 + '<br>'; }\n if (organisationModel.addressLine2) { simpleAddress += organisationModel.addressLine2 + '<br>'; }\n if (organisationModel.addressLine3) { simpleAddress += organisationModel.addressLine3 + '<br>'; }\n if (organisationModel.townCity) { simpleAddress += organisationModel.townCity + '<br>'; }\n if (organisationModel.county) { simpleAddress += organisationModel.county + '<br>'; }\n if (organisationModel.country) { simpleAddress += organisationModel.country + '<br>'; }\n if (organisationModel.postCode) { simpleAddress += organisationModel.postCode + '<br>'; }\n return simpleAddress;\n }\n\n public toSimpleOrganisationModel(organisationModel: OrganisationVm): SimpleOrganisationModel {\n return {\n organisationIdentifier: organisationModel.organisationIdentifier,\n name: organisationModel.name,\n address: OrganisationConverter.toSimpleAddress(organisationModel)\n };\n }\n}\n","import { FieldType } from '../definition';\n\nexport class Field {\n constructor(\n public id: string,\n public field_type: FieldType,\n public elementPath?: string,\n public value?: string,\n public label?: string,\n public metadata?: boolean\n ) { }\n}\n","import { FieldType } from '../definition';\n\nexport class SearchResultViewColumn {\n public case_field_id: string;\n public case_field_type: FieldType;\n public display_context?: string;\n public display_context_parameter?: string;\n public label: string;\n public order: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\n\n// @dynamic\nexport class SearchResultViewItem {\n public case_id: string;\n public case_fields: object;\n @Type(() => CaseField)\n public hydrated_case_fields?: CaseField[];\n public columns?: object;\n public supplementary_data?: any;\n public display_context_parameter?: any;\n}\n","import { Type } from 'class-transformer';\nimport { Draft } from '../draft.model';\nimport { SearchResultViewColumn } from './search-result-view-column.model';\nimport { SearchResultViewItem } from './search-result-view-item.model';\n\n// @dynamic\nexport class SearchResultView {\n @Type(() => SearchResultViewColumn)\n public columns: SearchResultViewColumn[];\n\n @Type(() => SearchResultViewItem)\n public results: SearchResultViewItem[];\n public result_error?: string;\n\n public hasDrafts() {\n return this.results[0]\n && this.results[0].case_id\n && Draft.isDraft(this.results[0].case_id);\n }\n}\n","export class CaseDetails {\n public id: string;\n public jurisdiction: string;\n public case_type_id: string;\n public state: string;\n public created_date?: string;\n public last_modified?: string;\n public locked_by_user_id?: string;\n public security_level?: string;\n public case_data?: object;\n}\n","export class CaseEventData {\n public event: {\n id: string;\n summary: string;\n description: string;\n };\n public data?: object;\n public event_data?: object; // full event data\n public event_token: string;\n public ignore_warning: boolean;\n public draft_id?: string;\n public case_reference?: string;\n}\n","import { Orderable } from '../order/orderable.model';\nimport { Field } from '../search/field.model';\n\nexport class WorkbasketInputModel implements Orderable {\n constructor(\n public label: string,\n public order: number,\n public field: Field,\n public metadata?: boolean,\n public display_context_parameter?: string) {\n }\n}\n\nexport class WorkbasketInput {\n public workbasketInputs: WorkbasketInputModel[];\n}\n","export class PaginationMetadata {\n public total_results_count: number;\n public total_pages_count: number;\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","import { SearchResultViewItemComparator } from './search-result-view-item-comparator';\nimport { SortOrder } from './sort-order';\n\nexport class SortParameters {\n\n public comparator: SearchResultViewItemComparator;\n public sortOrder: SortOrder;\n\n constructor(comparator: SearchResultViewItemComparator, sortOrder: SortOrder) {\n this.comparator = comparator;\n this.sortOrder = sortOrder;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { CaseView } from '../../../domain';\n\n@Injectable()\nexport class CaseNotifier {\n public readonly caseViewSource: BehaviorSubject<CaseView> = new BehaviorSubject<CaseView>(new CaseView());\n\n public caseView = this.caseViewSource.asObservable();\n public cachedCaseView: CaseView;\n public announceCase(c: CaseView) {\n this.caseViewSource.next(c);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class FileUploadStateService {\n public uploadInProgress: boolean;\n\n public setUploadInProgress(value: boolean): void {\n this.uploadInProgress = value;\n }\n\n public isUploadInProgress(): boolean {\n return this.uploadInProgress;\n }\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error bottom-30': !valid}\">\n <label [for]=\"id()\">\n <span class=\"form-label\" attr.aria-label=\"{{caseField | ccdFieldLabel}}\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"fileUploadMessages && !valid\">{{fileUploadMessages}}</span>\n\n <div>\n <!--<span *ngIf=\"getUploadedFileName()\" class=\"text-16\">File name: {{getUploadedFileName()}}</span>-->\n <ccd-read-document-field *ngIf=\"caseField\" [caseField]=\"caseField\"></ccd-read-document-field>\n </div>\n\n <div style='position:relative'>\n\n <div [id]=\"createElementId('fileInputWrapper')\" (click)=\"fileSelectEvent()\"></div>\n <input class=\"form-control bottom-30\" [id]=\"id()\" type=\"file\" (keydown.Tab)=\"fileValidationsOnTab()\" (change)=\"fileChangeEvent($event)\"\n accept=\"{{caseField.field_type.regular_expression}}\" #fileInput/>\n </div>\n</div>\n<div class=\"form-group bottom-30\">\n <button class=\"button button-secondary\" type=\"button\" aria-label=\"Cancel upload\" (click)=\"cancelUpload()\" [disabled]=\"!isUploadInProgress()\">Cancel upload</button>\n</div>\n","import { Component, ElementRef, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { Constants } from '../../../commons/constants';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { DocumentData, FormDocument } from '../../../domain/document/document-data.model';\nimport { HttpError } from '../../../domain/http/http-error.model';\nimport { DocumentManagementService } from '../../../services/document-management/document-management.service';\nimport { CaseNotifier } from '../../case-editor/services/case.notifier';\nimport { DocumentDialogComponent } from '../../dialogs/document-dialog/document-dialog.component';\nimport { initDialog } from '../../helpers';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { FileUploadStateService } from './file-upload-state.service';\n\n@Component({\n selector: 'ccd-write-document-field',\n templateUrl: './write-document-field.html'\n})\nexport class WriteDocumentFieldComponent extends AbstractFieldWriteComponent implements OnInit, OnDestroy {\n public static readonly DOCUMENT_URL = 'document_url';\n public static readonly DOCUMENT_BINARY_URL = 'document_binary_url';\n public static readonly DOCUMENT_FILENAME = 'document_filename';\n public static readonly DOCUMENT_HASH = 'document_hash';\n public static readonly UPLOAD_ERROR_FILE_REQUIRED = 'File required';\n public static readonly UPLOAD_ERROR_NOT_AVAILABLE = 'Document upload facility is not available at the moment';\n public static readonly UPLOAD_WAITING_FILE_STATUS = 'Uploading...';\n\n @ViewChild('fileInput', { static: false }) public fileInput: ElementRef;\n\n public selectedFile: File;\n public valid = true;\n public fileUploadMessages: string;\n public confirmReplaceResult: string;\n public clickInsideTheDocument: boolean;\n\n public fileUploadSubscription: Subscription;\n public dialogSubscription: Subscription;\n public caseEventSubscription: Subscription;\n\n private caseDetails: CaseView;\n private uploadedDocument: FormGroup;\n private dialogConfig: MatDialogConfig;\n private secureModeOn: boolean;\n\n constructor(\n private readonly appConfig: AbstractAppConfig,\n private readonly caseNotifier: CaseNotifier,\n private readonly documentManagement: DocumentManagementService,\n public dialog: MatDialog,\n private readonly fileUploadStateService: FileUploadStateService,\n ) {\n super();\n }\n\n @HostListener('document:click', ['$event'])\n public clickout(event) {\n // Capturing the event of of the associated ElementRef <input type=\"file\" #fileInpu\n\n if (this.fileInput.nativeElement.contains(event.target)) {\n this.clickInsideTheDocument = true;\n } else {\n this.fileValidations();\n }\n }\n\n public ngOnInit(): void {\n this.secureModeOn = this.appConfig.getDocumentSecureMode();\n this.dialogConfig = initDialog();\n // EUI-3403. The field was not being registered when there was no value and the field\n // itself was not mandatory, which meant that show_conditions would not be evaluated.\n // I've cleaned up the logic and it's now always registered.\n let document = this.caseField.value || { document_url: null, document_binary_url: null, document_filename: null };\n document = this.secureModeOn && !document.document_hash ? { ...document, document_hash: null } : document;\n if (this.isAMandatoryComponent()) {\n this.createDocumentFormWithValidator(document);\n } else {\n this.createDocumentForm(document);\n }\n\n if (this.appConfig.getDocumentSecureMode()) {\n this.subscribeToCaseDetails();\n }\n }\n\n public ngOnDestroy(): void {\n if (this.fileUploadSubscription) {\n this.fileUploadSubscription.unsubscribe();\n }\n if (this.dialogSubscription) {\n this.dialogSubscription.unsubscribe();\n }\n if (this.caseEventSubscription) {\n this.caseEventSubscription.unsubscribe();\n }\n }\n\n public isUploadInProgress(): boolean {\n return this.fileUploadStateService.isUploadInProgress();\n }\n\n public cancelUpload(): void {\n if (this.fileUploadSubscription) {\n this.fileUploadSubscription.unsubscribe();\n }\n\n this.fileUploadStateService.setUploadInProgress(false);\n this.fileInput.nativeElement.value = '';\n this.resetUpload();\n }\n\n public fileValidationsOnTab(): void {\n if (this.isAMandatoryComponent()) {\n if (this.validateFormUploadedDocument()) {\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_ERROR_FILE_REQUIRED);\n }\n }\n }\n\n public fileChangeEvent(fileInput: any): void {\n\n if (fileInput.target.files[0]) {\n this.selectedFile = fileInput.target.files[0];\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_WAITING_FILE_STATUS);\n const documentUpload: FormData = this.buildDocumentUploadData(this.selectedFile);\n this.fileUploadStateService.setUploadInProgress(true);\n\n this.fileUploadSubscription = this.documentManagement.uploadFile(documentUpload).subscribe({\n next: (resultDocument: DocumentData) => this.handleDocumentUploadResult(resultDocument),\n error: (error: HttpError) => this.handleDocumentUploadError(error)\n });\n } else {\n this.resetUpload();\n }\n }\n\n public openFileDialog(): void {\n this.fileInput.nativeElement.click();\n }\n\n public fileSelectEvent(): void {\n if ((this.caseField.value && this.caseField.value.document_filename) ||\n (this.selectedFile && this.selectedFile.name)) {\n this.openDialog(this.dialogConfig);\n } else {\n this.openFileDialog();\n }\n }\n\n public triggerReplace(): void {\n if (this.confirmReplaceResult === 'Replace') {\n this.openFileDialog();\n }\n }\n\n public getUploadedFileName(): any {\n if (this.uploadedDocument) {\n return this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_FILENAME).value;\n } else {\n return undefined;\n }\n }\n\n private resetUpload(): void {\n this.selectedFile = null;\n if (this.isAMandatoryComponent()) {\n this.updateDocumentForm(null, null, null);\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_ERROR_FILE_REQUIRED);\n } else {\n this.valid = true;\n }\n }\n\n private fileValidations(): void {\n if (this.isAMandatoryComponent()) {\n if (this.clickInsideTheDocument && this.validateFormUploadedDocument() && !this.isUpLoadingAFile()) {\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_ERROR_FILE_REQUIRED);\n }\n }\n }\n\n private openDialog(dialogConfig): void {\n const dialogRef = this.dialog.open(DocumentDialogComponent, dialogConfig);\n this.dialogSubscription = dialogRef.beforeClosed().subscribe(result => {\n this.confirmReplaceResult = result;\n this.triggerReplace();\n });\n }\n\n private subscribeToCaseDetails(): void {\n this.caseEventSubscription = this.caseNotifier.caseView.subscribe({\n next: (caseDetails) => {\n this.caseDetails = caseDetails;\n }\n });\n }\n\n private isAMandatoryComponent(): boolean {\n return this.caseField.display_context && this.caseField.display_context === Constants.MANDATORY;\n }\n\n private displayFileUploadMessages(fileUploadMessage: string): void {\n this.valid = false;\n this.fileUploadMessages = fileUploadMessage;\n }\n\n private isUpLoadingAFile(): boolean {\n return this.fileUploadMessages === WriteDocumentFieldComponent.UPLOAD_WAITING_FILE_STATUS;\n }\n private validateFormUploadedDocument(): boolean {\n if (!this.uploadedDocument) {\n return true;\n }\n\n let validation = !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_URL).valid &&\n !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_BINARY_URL).valid &&\n !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_FILENAME).valid;\n\n if (this.secureModeOn) {\n validation = validation && !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_HASH).valid;\n }\n\n return validation;\n }\n\n private updateDocumentForm(url: string, binaryUrl: string, filename: string, documentHash?: string): void {\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_URL).setValue(url);\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_BINARY_URL).setValue(binaryUrl);\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_FILENAME).setValue(filename);\n if (documentHash) {\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_HASH).setValue(documentHash);\n }\n }\n\n private createDocumentFormWithValidator(document: FormDocument): void {\n let documentFormGroup = {\n document_url: new FormControl(document.document_url, Validators.required),\n document_binary_url: new FormControl(document.document_binary_url, Validators.required),\n document_filename: new FormControl(document.document_filename, Validators.required)\n };\n\n documentFormGroup = this.secureModeOn ? {\n ...documentFormGroup,\n ...{ document_hash: new FormControl(document.document_hash) }\n } : documentFormGroup;\n\n this.uploadedDocument = this.registerControl(new FormGroup(documentFormGroup), true) as FormGroup;\n }\n\n private createDocumentForm(document: FormDocument): void {\n let documentFormGroup = {\n document_url: new FormControl(document.document_url),\n document_binary_url: new FormControl(document.document_binary_url),\n document_filename: new FormControl(document.document_filename)\n };\n\n documentFormGroup = this.secureModeOn ? {\n ...documentFormGroup,\n ...{ document_hash: new FormControl(document.document_hash) }\n } : documentFormGroup;\n\n this.uploadedDocument = this.registerControl(new FormGroup(documentFormGroup), true) as FormGroup;\n }\n\n private getErrorMessage(error: HttpError): string {\n // Document Management unavailable\n if (0 === error.status || 502 === error.status) {\n return WriteDocumentFieldComponent.UPLOAD_ERROR_NOT_AVAILABLE;\n }\n return error.error;\n }\n\n private buildDocumentUploadData(selectedFile: File): FormData {\n const documentUpload: FormData = new FormData();\n documentUpload.append('files', selectedFile, selectedFile.name);\n documentUpload.append('classification', 'PUBLIC');\n\n if (this.appConfig.getDocumentSecureMode()) {\n const caseTypeId = this.caseDetails &&\n this.caseDetails.case_type &&\n this.caseDetails.case_type.id ? this.caseDetails.case_type.id : null;\n const caseTypeJurisdictionId = this.caseDetails &&\n this.caseDetails.case_type &&\n this.caseDetails.case_type.jurisdiction &&\n this.caseDetails.case_type.jurisdiction.id ? this.caseDetails.case_type.jurisdiction.id : null;\n documentUpload.append('caseTypeId', caseTypeId);\n documentUpload.append('jurisdictionId', caseTypeJurisdictionId);\n }\n\n return documentUpload;\n }\n\n private handleDocumentUploadResult(result: DocumentData): void {\n if (!this.uploadedDocument) {\n if (this.secureModeOn) {\n this.createDocumentForm({document_url: null, document_binary_url: null, document_filename: null, document_hash: null});\n } else {\n this.createDocumentForm({document_url: null, document_binary_url: null, document_filename: null});\n }\n }\n\n const document = this.secureModeOn ? result.documents[0] : result._embedded.documents[0];\n\n if (this.secureModeOn) {\n this.updateDocumentForm(\n document._links.self.href,\n document._links.binary.href,\n document.originalDocumentName,\n document.hashToken\n );\n } else {\n this.updateDocumentForm(\n document._links.self.href,\n document._links.binary.href,\n document.originalDocumentName,\n );\n }\n\n this.valid = true;\n this.fileUploadStateService.setUploadInProgress(false);\n\n // refresh replaced document info\n if (this.caseField.value) {\n this.caseField.value.document_binary_url = document._links.binary.href;\n this.caseField.value.document_filename = document.originalDocumentName;\n this.caseField.value.document_url = document._links.self.href;\n\n if (this.secureModeOn) {\n this.caseField.value.document_hash = document.hashToken;\n }\n }\n }\n\n private handleDocumentUploadError(error: HttpError): void {\n this.fileUploadMessages = this.getErrorMessage(error);\n this.valid = false;\n this.fileUploadStateService.setUploadInProgress(false);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdDynamicList'\n})\nexport class DynamicListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: string, items: FixedListItem[]): any {\n const item = items.find(i => i.code === value);\n return item ? item.label : DynamicListPipe.EMPTY;\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-dynamic-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdDynamicList:caseField.list_items}}</span>',\n})\nexport class ReadDynamicListFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public ngOnInit(): void {\n /**\n *\n * Reassigning list_items from formatted_list when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n super.ngOnInit();\n }\n}\n","<div class=\"form-group\"\n [ngClass]=\"{'form-group-error': !dynamicListFormControl.valid && (dynamicListFormControl.dirty || dynamicListFormControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"form-label\" *ngIf=\"!caseField.label && !caseField.hint_text\">Select an option from the\n dropdown</span>\n <span class=\"error-message\"\n *ngIf=\"dynamicListFormControl.errors && dynamicListFormControl.dirty\">{{dynamicListFormControl.errors |\n ccdFirstError:caseField.label}}</span>\n\n <select class=\"form-control ccd-dropdown bottom-30\" [id]=\"id()\"\n [formControl]=\"dynamicListFormControl\">\n <option [ngValue]=null>--Select a value--</option>\n <option [ngValue]=\"type.code\" *ngFor=\"let type of caseField.list_items\" role=\"option\">{{type.label}}</option>\n </select>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-dynamic-list-field',\n templateUrl: './write-dynamic-list-field.html'\n})\nexport class WriteDynamicListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public dynamicListFormControl: FormControl;\n\n public ngOnInit() {\n /**\n * Reassigning list_items from formatted_value when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n\n /**\n * Reassigning value from formatted_value when value is empty\n */\n if (!this.caseField.value) {\n if (this.caseField.formatted_value && this.caseField.formatted_value.value && this.caseField.formatted_value.value.code) {\n this.caseField.value = this.caseField.formatted_value.value.code;\n }\n }\n\n const isNull = this.caseField.value === undefined || this.caseField.value === '';\n\n if (isNull || typeof this.caseField.value === 'object') {\n this.caseField.value = null;\n }\n\n this.dynamicListFormControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n this.dynamicListFormControl.setValue(this.caseField.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdDynamicRadioList'\n})\nexport class DynamicRadioListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: any, items: FixedListItem[]): any {\n /**\n *\n * If value is object with element `value.code`, use code instead.\n */\n if (value && value.value && value.value.code) {\n value = value.value.code;\n }\n const item = items.find(i => i.code === value);\n return item ? item.label : DynamicRadioListPipe.EMPTY;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-dynamic-radio-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdDynamicRadioList:caseField.list_items}}</span>',\n})\nexport class ReadDynamicRadioListFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public ngOnInit(): void {\n /**\n *\n * Reassigning list_items from formatted_list when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n\n /**\n *\n * Seems formatted_value can also be empty for DynamicRadioList's. Reassigning list_items from value.list_items in that case\n */\n if (!this.caseField.list_items && this.caseField.value && this.caseField.value.list_items) {\n this.caseField.list_items = this.caseField.value.list_items;\n }\n }\n}\n","<div class=\"form-group bottom-30\"\n [ngClass]=\"{'form-group-error': !dynamicRadioListControl.valid && dynamicRadioListControl.dirty}\" [id]=\"id()\">\n <fieldset>\n <legend style=\"display: none;\"></legend>\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"form-label\" *ngIf=\"!caseField.label && !caseField.hint_text\">Select an option below</span>\n <span class=\"error-message\"\n *ngIf=\"dynamicRadioListControl.errors && dynamicRadioListControl.dirty\">{{dynamicRadioListControl.errors |\n ccdFirstError}}</span>\n </label>\n\n <ng-container>\n <div class=\"multiple-choice\" *ngFor=\"let radioButton of caseField.list_items\" [ngClass]=\"{selected: dynamicRadioListControl.value === radioButton.code}\">\n <input class=\"form-control\" [id]=\"buildElementId(radioButton.code)\" name=\"{{id()}}\" type=\"radio\" [formControl]=\"dynamicRadioListControl\" [value]=\"radioButton.code\">\n <label class=\"form-label\" [for]=\"buildElementId(radioButton.code)\">{{radioButton.label}}</label>\n </div>\n </ng-container>\n </fieldset>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-dynamic-radio-list-field',\n templateUrl: './write-dynamic-radio-list-field.html'\n})\nexport class WriteDynamicRadioListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public dynamicRadioListControl: FormControl;\n\n public ngOnInit(): void {\n /**\n *\n * Reassigning list_items from formatted_list when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n\n if (!this.caseField.value && this.caseField.formatted_value && this.caseField.formatted_value.value) {\n this.caseField.value = this.caseField.formatted_value.value.code;\n }\n\n const isNull: boolean = this.caseField.value === undefined || this.caseField.value === '';\n\n if (isNull || typeof this.caseField.value === 'object') {\n this.caseField.value = [];\n }\n\n this.dynamicRadioListControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n this.dynamicRadioListControl.setValue(this.caseField.value);\n }\n\n public buildElementId(name: string): string {\n return `${this.id()}-${name}`;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-email-field',\n template: `\n <a *ngIf=\"!isFieldValueEmpty()\" href=\\\"mailto:{{caseField.value}}\\\">{{caseField.value}}</a>\n `\n})\nexport class ReadEmailFieldComponent extends AbstractFieldReadComponent {\n\n public isFieldValueEmpty(): boolean {\n return (!this.caseField.value);\n }\n\n}\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !emailControl.valid && (emailControl.dirty || emailControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"emailControl.errors && (emailControl.dirty || emailControl.touched)\">{{emailControl.errors | ccdFirstError:caseField.label}}</span>\n\n <input class=\"form-control\" [ngClass]=\"{'govuk-input--error': emailControl.errors && (emailControl.dirty || emailControl.touched)}\"\n [id]=\"id()\" type=\"email\" [formControl]=\"emailControl\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-email-field',\n templateUrl: 'write-email-field.html'\n})\nexport class WriteEmailFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public emailControl: FormControl;\n\n public ngOnInit() {\n this.emailControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdFixedList'\n})\nexport class FixedListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: string, items: FixedListItem[]): any {\n if (!!items) {\n const item = items.find(i => i.code === value);\n return item ? item.label : FixedListPipe.EMPTY;\n } else {\n return FixedListPipe.EMPTY;\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-fixed-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdFixedList:caseField.list_items}}</span>',\n})\nexport class ReadFixedListFieldComponent extends AbstractFieldReadComponent {\n\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !fixedListFormControl.valid && (fixedListFormControl.dirty || fixedListFormControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"fixedListFormControl.errors && (fixedListFormControl.dirty || fixedListFormControl.touched)\">{{fixedListFormControl.errors | ccdFirstError:caseField.label}}</span>\n\n <select class=\"form-control ccd-dropdown bottom-30\" [id]=\"id()\" [formControl]=\"fixedListFormControl\">\n <option [ngValue]=null>--Select a value--</option>\n <option [ngValue]=\"type.code\" *ngFor=\"let type of listItems\">{{type.label}}</option>\n </select>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-fixed-list-field',\n templateUrl: './write-fixed-list-field.html'\n})\nexport class WriteFixedListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public fixedListFormControl: FormControl;\n\n public get listItems(): any[] {\n if (this.caseField) {\n if (this.caseField.list_items) {\n return this.caseField.list_items;\n }\n if (this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n return this.caseField.formatted_value.list_items;\n }\n }\n return [];\n }\n\n public ngOnInit() {\n const isNull = this.caseField.value === undefined || this.caseField.value === '';\n\n if (isNull) {\n this.caseField.value = null;\n }\n\n this.fixedListFormControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n this.fixedListFormControl.setValue(this.caseField.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdFixedRadioList'\n})\nexport class FixedRadioListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: string, items: FixedListItem[]): any {\n const item = items.find(i => i.code === value);\n return item ? item.label : FixedRadioListPipe.EMPTY;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-fixed-radio-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdFixedRadioList:caseField.field_type.fixed_list_items}}</span>',\n})\nexport class ReadFixedRadioListFieldComponent extends AbstractFieldReadComponent { }\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !fixedRadioListControl.valid && (fixedRadioListControl.dirty || fixedRadioListControl.touched)}\" [id]=\"id()\">\n <fieldset>\n <legend>\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"fixedRadioListControl.errors && (fixedRadioListControl.dirty || fixedRadioListControl.touched)\">{{fixedRadioListControl.errors | ccdFirstError:caseField.label}}</span>\n </legend>\n <ng-container>\n <div class=\"multiple-choice\" *ngFor=\"let radioButton of caseField.field_type.fixed_list_items\" [ngClass]=\"{selected: fixedRadioListControl.value === radioButton.code}\">\n <input class=\"form-control\" [id]=\"id()+'-'+radioButton.code\" [name]=\"id()\" type=\"radio\" [formControl]=\"fixedRadioListControl\" [value]=\"radioButton.code\">\n <label class=\"form-label\" [for]=\"id()+'-'+radioButton.code\">{{radioButton.label}}</label>\n </div>\n </ng-container>\n </fieldset>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-fixed-radio-list-field',\n templateUrl: './write-fixed-radio-list-field.html'\n})\nexport class WriteFixedRadioListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public fixedRadioListControl: FormControl;\n\n public ngOnInit() {\n const notEmpty = this.caseField.value !== null && this.caseField.value !== undefined;\n this.fixedRadioListControl = this.registerControl(new FormControl(notEmpty ? this.caseField.value : null)) as FormControl;\n }\n}\n","<table class=\"EventLogTable\">\n <caption><h2 class=\"heading-h2\">History</h2></caption>\n <thead>\n <tr>\n <th><span class=\"text-16\">Event</span></th>\n <th><span class=\"text-16\">Date</span></th>\n <th><span class=\"text-16\">Author</span></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let event of events\" (click)=\"select(event)\" [ngClass]=\"{'EventLogTable-Selected': selected === event}\" tabindex=\"0\" attr.aria-label=\"{{getAriaLabelforRow(event)}}\">\n <td>\n <ng-container [ngSwitch]=\"isPartOfCaseTimeline\">\n <div id=\"case-timeline\" *ngSwitchCase=\"true\">\n <a (click)=\"caseHistoryClicked(event.id)\"\n *ngIf=\"event.state_id !== 'Draft'\" class=\"text-16 event-link\" attr.aria-label=\"{{getAriaLabelforLink(event)}}\">{{event.event_name}}</a>\n </div>\n <div *ngSwitchCase=\"false\">\n <a [routerLink]=\"['./', 'event', event.id, 'history']\"\n [target]=\"'_blank'\"\n *ngIf=\"event.state_id !== 'Draft'\" class=\"text-16 event-link\" attr.aria-label=\"{{getAriaLabelforLink(event)}}\">{{event.event_name}}</a>\n </div>\n </ng-container>\n <span *ngIf=\"event.state_id === 'Draft'\">{{event.event_name}}</span>\n <div class=\"tooltip\" *ngIf=\"significantItemExist(event)\">\n <a href=\"{{getSignificantItemUrl(event)}}\" target=\"_blank\" rel=\"noopener\" attr.aria-label=\"{{getAriaLabelforLink(event)}}\">\n <img class=\"doc-img\" alt=\"document image\" src=\"data:image/png;base64,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\"/>\n </a>\n <span class=\"tooltiptext doc-tooltip\">{{getSignificantItemDesc(event)}}</span>\n </div>\n </td>\n <td tabindex=\"0\" attr.aria-label=\"{{getAriaLabelforColumn(event)}}\" (keydown.enter)=\"select(event)\"><div class=\"tooltip text-16\">{{event.timestamp | ccdDate : 'local'}}\n <span class=\"tooltiptext\">Local: {{event.timestamp | ccdDate : 'local'}}</span>\n </div></td>\n <td tabindex=\"0\"><span class=\"text-16\">{{event.user_first_name | titlecase}} {{event.user_last_name | uppercase}}</span></td>\n </tr>\n </tbody>\n</table>\n","import { formatDate } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CaseViewEvent } from '../../../../domain';\n\n@Component({\n selector: 'ccd-event-log-table',\n templateUrl: './event-log-table.component.html',\n styleUrls: ['./event-log-table.scss']\n})\nexport class EventLogTableComponent implements OnInit {\n\n @Input()\n public events: CaseViewEvent[];\n\n @Input()\n public selected: CaseViewEvent;\n\n @Output()\n public onSelect = new EventEmitter<CaseViewEvent>();\n\n @Output()\n public onCaseHistory = new EventEmitter<string>();\n\n public isPartOfCaseTimeline = false;\n\n public ngOnInit(): void {\n this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;\n }\n\n public select(event: CaseViewEvent): void {\n this.selected = event;\n this.onSelect.emit(event);\n }\n\n public significantItemExist(event: CaseViewEvent): boolean {\n return (event.significant_item &&\n event.significant_item.type === 'DOCUMENT' &&\n event.significant_item.url !== undefined &&\n event.significant_item.description !== undefined);\n }\n\n public getSignificantItemUrl(event: CaseViewEvent): string {\n if (event.significant_item) {\n return event.significant_item.url;\n }\n }\n\n public getSignificantItemDesc(event: CaseViewEvent): string {\n if (event.significant_item) {\n return event.significant_item.description;\n }\n }\n\n public caseHistoryClicked(eventId: string) {\n this.onCaseHistory.emit(eventId);\n }\n\n public getAriaLabelforColumn(event: CaseViewEvent): string {\n if (this.selected !== event) {\n return `date ${formatDate(event.timestamp, 'dd MMM yyyy hh:mm:ss a', 'en-GB')},\n press enter key for event ${event.event_name} details`;\n } else {\n return '';\n }\n }\n\n public getAriaLabelforRow(event: CaseViewEvent): string {\n return `you are on event ${event.event_name} row, press tab key to navigate to columns`;\n }\n\n public getAriaLabelforLink(event: CaseViewEvent): string {\n return `press enter key to open event ${event.event_name} link in separate window`;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CaseViewEvent } from '../../../../domain';\n\n@Component({\n selector: 'ccd-event-log-details',\n templateUrl: './event-log-details.component.html',\n styleUrls: ['./event-log-details.scss']\n})\nexport class EventLogDetailsComponent {\n @Input()\n public event: CaseViewEvent;\n}\n","<div class=\"grid-row\">\n <div class=\"column-one-half\">\n <ng-container [ngSwitch]=\"isPartOfCaseTimeline\">\n <ccd-event-log-table *ngSwitchCase=\"true\" [events]=\"events\" [selected]=\"selected\" (onSelect)=\"select($event)\" (onCaseHistory)=\"caseHistoryClicked($event)\"></ccd-event-log-table>\n <ccd-event-log-table *ngSwitchCase=\"false\" [events]=\"events\" [selected]=\"selected\" (onSelect)=\"select($event)\"></ccd-event-log-table>\n </ng-container>\n </div>\n <div class=\"column-one-half\">\n <div class=\"EventLog-DetailsPanel\">\n <ccd-event-log-details *ngIf=\"selected\" [event]=\"selected\"></ccd-event-log-details>\n </div>\n </div>\n</div>\n","<table tabindex=\"0\" class=\"EventLogDetails\">\n <caption><h2 class=\"heading-h2\">Details</h2></caption>\n <tbody tabindex=\"0\" aria-live=\"polite\">\n <tr>\n <th><span class=\"text-16\">Date</span></th>\n <td>\n <div class=\"tooltip text-16\">{{event.timestamp | ccdDate : 'local'}}\n <span class=\"tooltiptext text-16\">Local: {{event.timestamp | ccdDate : 'local'}}</span>\n </div>\n </td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Author</span></th>\n <td><span class=\"text-16\">{{event.user_first_name | titlecase}} {{event.user_last_name | uppercase}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">End state</span></th>\n <td><span class=\"text-16\">{{event.state_name}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Event</span></th>\n <td><span class=\"text-16\">{{event.event_name}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Summary</span></th>\n <td><span class=\"text-16\">{{event.summary | ccdDash}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Comment</span></th>\n <td><span class=\"text-16\">{{event.comment | ccdDash}}</span></td>\n </tr>\n </tbody>\n</table>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CaseViewEvent } from '../../../../domain';\n\n@Component({\n selector: 'ccd-event-log',\n templateUrl: './event-log.component.html',\n styleUrls: ['./event-log.scss']\n})\nexport class EventLogComponent implements OnInit {\n\n @Input()\n public events: CaseViewEvent[];\n\n @Output()\n public onCaseHistory = new EventEmitter<string>();\n\n public selected: CaseViewEvent;\n\n public isPartOfCaseTimeline = false;\n\n public ngOnInit(): void {\n this.selected = this.events[0];\n this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;\n }\n\n public select(event: CaseViewEvent): void {\n this.selected = event;\n }\n\n public caseHistoryClicked(eventId: string) {\n this.onCaseHistory.emit(eventId);\n }\n\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-case-history-viewer-field',\n templateUrl: 'case-history-viewer-field.component.html',\n})\nexport class CaseHistoryViewerFieldComponent extends AbstractFieldReadComponent {}\n","<ccd-event-log [events]=\"caseField.value\"></ccd-event-log>","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-money-gbp-field',\n template: `<ng-container *ngIf=\"isNumber()\"><span class=\"text-16\">{{value / 100 | currency:'GBP':'symbol'}}</span></ng-container>`\n})\nexport class ReadMoneyGbpFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public amount: any;\n public value: any;\n\n public ngOnInit(): void {\n if (this.amount) {\n this.value = this.amount;\n } else if (this.caseField) {\n this.registerControl(new FormControl(this.caseField.value));\n this.value = this.caseField.value;\n }\n }\n\n public isNumber(): boolean {\n return null !== this.value && !isNaN(this.value);\n }\n\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n@Component({\n selector: 'ccd-money-gbp-input',\n template: `<input class=\"form-control form-control-1-8\"\n type=\"text\"\n [id]=\"id\"\n [name]=\"name\"\n [value]=\"displayValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n [disabled]=\"disabled\"/>`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MoneyGbpInputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MoneyGbpInputComponent),\n multi: true,\n }\n ]\n})\nexport class MoneyGbpInputComponent implements ControlValueAccessor, Validator {\n\n private static readonly PATTERN_REGEXP = new RegExp('^-?\\\\d*(\\\\.\\\\d{0,2})?$');\n\n @Input()\n public id: string;\n\n @Input()\n public name: string;\n\n @Input()\n public mandatory: boolean;\n\n @Input()\n public formControl: FormControl;\n\n public displayValue: string = null;\n public disabled: boolean;\n\n private rawValue: number;\n\n // change events from the textarea\n public onChange(event) {\n\n // get value from input\n const newValue = event.target.value;\n\n if (newValue && MoneyGbpInputComponent.PATTERN_REGEXP.test(newValue)) {\n const parts = newValue.split('.');\n\n if (!parts[1]) {\n parts[1] = '00';\n } else {\n while (2 > parts[1].length) {\n parts[1] += '0';\n }\n }\n\n this.rawValue = parts.join('');\n } else {\n // When pattern not matched, value is passed as is so that it fails validation.\n this.rawValue = newValue;\n }\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public writeValue(obj: any): void {\n if (obj) {\n this.rawValue = obj;\n\n const integerPart = obj.slice(0, -2) || '0';\n let decimalPart = obj.slice(-2);\n\n while (2 > decimalPart.length) {\n decimalPart += '0';\n }\n\n this.displayValue = [integerPart, decimalPart].join('.');\n }\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n public registerOnTouched(_: any): void {\n // Not used.\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public validate(control: FormControl): ValidationErrors {\n if (this.mandatory && !control.value) {\n return {\n pattern: 'This field is required'\n };\n }\n if (control.value && !MoneyGbpInputComponent.PATTERN_REGEXP.test(control.value)) {\n return {\n pattern: 'Should only contain numbers with up to 2 decimal places'\n };\n }\n return undefined;\n }\n\n public registerOnValidatorChange(_: () => void): void {\n // Not used.\n }\n\n private propagateChange = (_: any) => { };\n\n}\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !moneyGbpControl.valid && (moneyGbpControl.dirty || moneyGbpControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"moneyGbpControl.errors && (moneyGbpControl.dirty || moneyGbpControl.touched)\">{{moneyGbpControl.errors | ccdFirstError:caseField.label}}</span>\n\n <div class=\"form-money\">\n <span class=\"form-currency\">&#163;</span>\n <ccd-money-gbp-input [id]=\"id()\"\n [name]=\"id()\"\n [mandatory]=\"caseField | ccdIsMandatory\"\n [formControl]=\"moneyGbpControl\"></ccd-money-gbp-input>\n </div>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-money-gbp-field',\n templateUrl: './write-money-gbp-field.html'\n})\nexport class WriteMoneyGbpFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public moneyGbpControl: FormControl;\n\n public ngOnInit() {\n this.moneyGbpControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","<table *ngIf=\"caseField.value && caseField.value.length\" class=\"multi-select-list-field-table\" aria-describedby=\"multi selection table\">\n <tbody>\n <tr *ngFor=\"let value of caseField.value\">\n <th style=\"display: none;\"></th>\n <td><span class=\"text-16\">{{ value | ccdFixedList:caseField.field_type.fixed_list_items }}</span></td>\n </tr>\n </tbody>\n</table>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-multi-select-list-field',\n templateUrl: './read-multi-select-list-field.html',\n styleUrls: ['./multi-select-list.scss']\n})\nexport class ReadMultiSelectListFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'error': !checkboxes.valid && (checkboxes.dirty || checkboxes.touched)}\" [id]=\"id()\">\n\n <fieldset>\n\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </legend>\n <span *ngIf=\"caseField.hint_text\" class=\"form-hint\">{{caseField.hint_text}}</span>\n <span *ngIf=\"checkboxes.errors && (checkboxes.dirty || checkboxes.touched)\" class=\"error-message\">{{checkboxes.errors | ccdFirstError:caseField.label}}</span>\n\n <ng-container *ngFor=\"let checkbox of caseField.field_type.fixed_list_items\">\n\n <div class=\"multiple-choice\">\n <input class=\"form-control\" [id]=\"id()+'-'+checkbox.code\" [name]=\"id()\" type=\"checkbox\" [value]=\"checkbox.code\" [checked]=\"isSelected(checkbox.code)\" (change)=\"onCheckChange($event)\">\n <label class=\"form-label\" [for]=\"id()+'-'+checkbox.code\">{{checkbox.label}}</label>\n </div>\n\n </ng-container>\n\n </fieldset>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl } from '@angular/forms';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-multi-select-list-field',\n templateUrl: './write-multi-select-list-field.html'\n})\nexport class WriteMultiSelectListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public checkboxes: FormArray;\n\n public ngOnInit(): void {\n this.checkboxes = new FormArray([]);\n\n // Initialise array with existing values\n if (this.caseField.value && Array.isArray(this.caseField.value)) {\n const values: string[] = this.caseField.value;\n values.forEach(value => {\n this.checkboxes.push(new FormControl(value));\n });\n }\n this.registerControl(this.checkboxes, true);\n if (this.caseField.display_context && this.caseField.display_context === 'MANDATORY' && this.caseField.field_type\n && this.caseField.field_type.type === 'MultiSelectList' && this.caseField.field_type.fixed_list_items.length > 0\n && this.checkboxes.controls.length === 0) {\n if (this.caseField.field_type.fixed_list_items[0].code) {\n this.checkboxes.push(new FormControl(this.caseField.field_type.fixed_list_items[0].code));\n this.checkboxes.removeAt(0);\n }\n }\n }\n\n public onCheckChange(event) {\n if (!this.isSelected(event.target.value)) {\n // Add a new control in the FormArray\n this.checkboxes.push(new FormControl(event.target.value));\n } else {\n // Remove the control form the FormArray\n this.checkboxes.controls.forEach((ctrl: FormControl, i) => {\n if (ctrl.value === event.target.value) {\n this.checkboxes.removeAt(i);\n return;\n }\n });\n }\n }\n\n public isSelected(code): AbstractControl {\n if (this.checkboxes && this.checkboxes.controls) {\n return this.checkboxes.controls.find(control => control.value === code);\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-number-field',\n template: `<span class=\"text-16\">{{caseField.value | ccdCaseReference}}</span>`\n})\nexport class ReadNumberFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !numberControl.valid && numberControl.dirty}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"numberControl.errors && numberControl.dirty\">{{numberControl.errors | ccdFirstError:caseField.label}}</span>\n\n <input class=\"form-control bottom-30\" [ngClass]=\"{'govuk-input--error': numberControl.errors && numberControl.dirty}\"\n [id]=\"id()\" type=\"number\" [formControl]=\"numberControl\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-number-field',\n templateUrl: './write-number-field.html'\n})\nexport class WriteNumberFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public numberControl: FormControl;\n\n public ngOnInit() {\n this.numberControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { FeeValue } from './fee-value.model';\n\n@Component({\n // tslint:disable-next-line\n selector: '[ccdReadOrderSummaryRow]',\n templateUrl: './read-order-summary-row.html',\n styleUrls: [\n './read-order-summary-row.scss'\n ],\n})\nexport class ReadOrderSummaryRowComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public feeValue: FeeValue;\n\n public ngOnInit() {\n // We don't want to register this if we don't have a caseField\n if (this.caseField) {\n super.ngOnInit();\n }\n }\n\n public getFeeAmount(): string {\n return this.feeValue.value ? this.feeValue.value.FeeAmount : '';\n }\n}\n","<td>{{feeValue.value.FeeCode}}</td>\n<td>{{feeValue.value.FeeDescription}}</td>\n<td><ccd-read-money-gbp-field [amount]=\"getFeeAmount()\"></ccd-read-money-gbp-field></td>","<div class=\"order-summary-title\">Order Summary</div>\n<table aria-describedby=\"order summary table\">\n <thead>\n <tr><th id=\"hiddenHeader\" style=\"display: none;\"></th><td>Code</td><td>Description</td><td>Amount</td></tr>\n </thead>\n <tbody>\n <tr ccdReadOrderSummaryRow *ngFor=\"let feeValue of getFees()\" [feeValue]=\"feeValue\"></tr>\n <tr>\n <td></td>\n <td class=\"payment-total\">Total</td>\n <td><ccd-read-money-gbp-field [amount]=\"getPaymentTotal()\"></ccd-read-money-gbp-field></td>\n </tr>\n </tbody>\n</table>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { FeeValue } from './fee-value.model';\n\n@Component({\n selector: 'ccd-read-order-summary-field',\n templateUrl: './read-order-summary-field.html',\n styleUrls: [\n './read-order-summary-field.scss'\n ],\n})\nexport class ReadOrderSummaryFieldComponent extends AbstractFieldReadComponent {\n\n public getFees(): FeeValue[] {\n return this.caseField.value ? this.caseField.value.Fees : [];\n }\n\n public getPaymentTotal(): string {\n return this.caseField.value ? this.caseField.value.PaymentTotal : '';\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-order-summary-field',\n templateUrl: './write-order-summary-field.html'\n})\nexport class WriteOrderSummaryFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n /*\n These are implemented manually rather than using WriteComplexFieldComponent. The reason\n is because the view is readonly the tree of form controls is not being built automatically\n and has to be built manually.\n */\n public ngOnInit(): void {\n const orderSummaryGroup: FormGroup = this.registerControl(new FormGroup({}), true) as FormGroup;\n const paymentReference: FormControl = new FormControl(this.caseField.value.PaymentReference);\n orderSummaryGroup.addControl('PaymentReference', paymentReference);\n const paymentTotal: FormControl = new FormControl(this.caseField.value.PaymentTotal);\n orderSummaryGroup.addControl('PaymentTotal', paymentTotal);\n const feesArray: FormArray = new FormArray([]);\n this.caseField.value.Fees.forEach((fee) => {\n feesArray.push(this.getFeeValue(fee.value));\n });\n orderSummaryGroup.addControl('Fees', feesArray);\n }\n\n private getFeeValue(feeValue): FormGroup {\n const feeGroup = new FormGroup({});\n feeGroup.addControl('FeeCode', new FormControl(feeValue.FeeCode));\n feeGroup.addControl('FeeAmount', new FormControl(feeValue.FeeAmount));\n feeGroup.addControl('FeeDescription', new FormControl(feeValue.FeeDescription));\n feeGroup.addControl('FeeVersion', new FormControl(feeValue.FeeVersion));\n const feeValueGroup = new FormGroup({});\n feeValueGroup.addControl('value', feeGroup);\n return feeValueGroup;\n }\n\n}\n","<ccd-read-order-summary-field [caseField]=\"caseField\"></ccd-read-order-summary-field>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, timer } from 'rxjs';\nimport { catchError, map, publishReplay, refCount, take } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\n\nexport interface OrganisationSuperUser {\n firstName: string;\n lastName: string;\n email: string;\n}\n\nexport interface OrganisationAddress {\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n dxAddress: any [];\n}\n\nexport interface Organisation {\n organisationIdentifier: string;\n name: string;\n status: string;\n sraId: string;\n sraRegulated: boolean;\n companyNumber: string;\n companyUrl: string;\n superUser: OrganisationSuperUser;\n paymentAccount: string [];\n contactInformation: OrganisationAddress [];\n}\n\nexport interface OrganisationVm {\n organisationIdentifier: string;\n name: string;\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n}\n\n@Injectable()\nexport class OrganisationService {\n\n constructor(private readonly http: HttpClient,\n private readonly appconfig: AbstractAppConfig) {}\n\n private organisations$: Observable<OrganisationVm[]>;\n public static mapOrganisation(organisations: Organisation[]): OrganisationVm [] {\n const organisationsVm = new Array<OrganisationVm>();\n organisations.forEach(org => {\n let contactInformation = null;\n if (org.contactInformation && org.contactInformation[0]) {\n contactInformation = org.contactInformation[0];\n }\n organisationsVm.push({\n organisationIdentifier: org.organisationIdentifier,\n name: org.name,\n addressLine1: contactInformation !== null ? contactInformation.addressLine1 : null,\n addressLine2: contactInformation !== null ? contactInformation.addressLine2 : null,\n addressLine3: contactInformation !== null ? contactInformation.addressLine3 : null,\n townCity: contactInformation !== null ? contactInformation.townCity : null,\n county: contactInformation !== null ? contactInformation.county : null,\n country: contactInformation !== null ? contactInformation.country : null,\n postCode: contactInformation !== null ? contactInformation.postCode : null,\n });\n });\n return organisationsVm;\n }\n\n public getActiveOrganisations(): Observable<OrganisationVm[]> {\n if (!this.organisations$) {\n const url = this.appconfig.getPrdUrl();\n const cacheTimeOut = this.appconfig.getCacheTimeOut();\n this.organisations$ = this.http.get<Organisation[]>(url)\n .pipe(map((orgs) => OrganisationService.mapOrganisation(orgs)),\n publishReplay(1), refCount(), take(1), catchError(e => {\n console.log(e);\n // Handle error and return blank Observable array\n return of([]);\n }));\n timer(cacheTimeOut).subscribe(() => {\n this.organisations$ = null;\n });\n }\n return this.organisations$;\n }\n}\n","<div class=\"complex-panel\">\n <table class=\"complex-field-table\" aria-describedby=\"complex organisation field table\">\n <tbody>\n <tr>\n <th style=\"display: none;\"></th>\n <td>\n <table class=\"complex-field-table\" *ngIf=\"(selectedOrg$ | async) as selectedOrg\" aria-describedby=\"complex selected organisation field table\">\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-small\"><span class=\"text-16\">Name:</span></td>\n <td><span class=\"text-16\">{{selectedOrg.name}}</span></td>\n </tr>\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-small\"><span class=\"text-16\">Address:</span></td>\n <td>\n <ccd-markdown [content]=\"selectedOrg.address\"></ccd-markdown>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { CaseField } from '../../../domain/definition';\nimport { OrganisationConverter } from '../../../domain/organisation/organisation-converter';\nimport { SimpleOrganisationModel } from '../../../domain/organisation/simple-organisation.model';\nimport { OrganisationService, OrganisationVm } from '../../../services/organisation/organisation.service';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-organisation-field-raw',\n templateUrl: './read-organisation-field-raw.component.html',\n styleUrls: ['./organisation-field.scss']\n})\nexport class ReadOrganisationFieldRawComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public caseFields: CaseField[] = [];\n\n public organisations$: Observable<OrganisationVm[]>;\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor(private readonly organisationService: OrganisationService, private readonly organisationConverter: OrganisationConverter) {\n super();\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.value && this.caseField.value.OrganisationID) {\n this.organisations$ = this.organisationService.getActiveOrganisations();\n this.selectedOrg$ = this.organisations$.pipe(\n switchMap((organisations: OrganisationVm[]) => of(\n this.organisationConverter.toSimpleOrganisationModel(\n organisations.find(findOrg => findOrg.organisationIdentifier === this.caseField.value.OrganisationID)\n )\n )\n )\n );\n }\n }\n}\n","<div class=\"complex-panel\">\n <table class=\"complex-field-table\" aria-describedby=\"complex organisation field table\">\n <tbody>\n <tr>\n <th class=\"complex-field-title\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label}}</span></dt>\n </dl>\n </th>\n <td>\n <table class=\"complex-field-table\" *ngIf=\"(selectedOrg$ | async) as selectedOrg\" aria-describedby=\"complex selected organisation field table\">\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-medium\"><span class=\"text-16\">Name:</span></td>\n <td><span class=\"text-16\">{{selectedOrg.name}}</span></td>\n </tr>\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-medium\"><span class=\"text-16\">Address:</span></td>\n <td>\n <ccd-markdown [content]=\"selectedOrg.address\"></ccd-markdown>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { OrganisationConverter } from '../../../domain/organisation/organisation-converter';\nimport { SimpleOrganisationModel } from '../../../domain/organisation/simple-organisation.model';\nimport { OrganisationService, OrganisationVm } from '../../../services/organisation/organisation.service';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-organisation-field-table',\n templateUrl: './read-organisation-field-table.component.html',\n styleUrls: ['./organisation-field.scss']\n})\n\nexport class ReadOrganisationFieldTableComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public caseFields: CaseField[] = [];\n\n public organisations$: Observable<OrganisationVm[]>;\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor(private readonly organisationService: OrganisationService, private readonly organisationConverter: OrganisationConverter) {\n super();\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.value && this.caseField.value.OrganisationID) {\n this.organisations$ = this.organisationService.getActiveOrganisations();\n this.selectedOrg$ = this.organisations$.pipe(\n switchMap((organisations: OrganisationVm[]) => of(\n this.organisationConverter.toSimpleOrganisationModel(\n organisations.find(findOrg => findOrg.organisationIdentifier === this.caseField.value.OrganisationID)\n )\n )\n )\n );\n }\n }\n}\n","<ng-container [ngSwitch]=\"context\">\n <ccd-read-organisation-field-raw\n *ngSwitchCase=\"paletteContext.CHECK_YOUR_ANSWER\"\n [caseField]=\"caseField\"\n [context]=\"context\"\n ></ccd-read-organisation-field-raw>\n <ccd-read-organisation-field-table\n *ngSwitchCase=\"paletteContext.TABLE_VIEW\"\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n ></ccd-read-organisation-field-table>\n <ccd-read-organisation-field-table\n *ngSwitchDefault\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n ></ccd-read-organisation-field-table>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { PaletteContext } from '../base-field/palette-context.enum';\n\n@Component({\n selector: 'ccd-read-organisation-field',\n templateUrl: './read-organisation-field.html',\n})\nexport class ReadOrganisationFieldComponent extends AbstractFieldReadComponent implements OnInit {\n @Input()\n public caseFields: CaseField[] = [];\n\n public paletteContext = PaletteContext;\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.display_context_parameter) {\n this.context = PaletteContext.TABLE_VIEW;\n }\n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SimpleOrganisationModel } from '../../../domain/organisation';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\n\n@Component({\n selector: 'ccd-write-organisation-complex-field',\n templateUrl: './write-organisation-complex-field.component.html',\n styleUrls: ['./organisation-field.scss']\n})\nexport class WriteOrganisationComplexFieldComponent extends AbstractFormFieldComponent {\n\n @Input()\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor() {\n super();\n }\n\n}\n","<div class=\"form-group\" [formGroup]=\"organisationFormGroup\">\n <fieldset *ngIf=\"(organisations$ | async)?.length === 0\" class=\"govuk-fieldset\">\n <legend style=\"display: none;\"></legend>\n <div class=\"hmcts-banner\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\" /></svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n <p class=\"warning-message\">Organisation search is currently unavailable.</p>\n </div>\n </div>\n <div class=\"warning-panel\">\n <div class=\"warning-message\">\n We are working to fix the issue. You can try again later.\n </div>\n </div>\n </fieldset>\n <fieldset *ngIf=\"(organisations$ | async)?.length > 0\" class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h2 class=\"heading-h2\">\n Search for an organisation\n </h2>\n </legend>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"search-org-text\">\n <span id=\"search-org-hint\" class=\"govuk-hint\">\n You can only search for organisations already registered with MyHMCTS. For example, you can search by organisation name or address.\n </span>\n </label>\n <input id=\"search-org-text\" class=\"form-control\" type=\"text\" [formControl]=\"searchOrgTextFormControl\" />\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"organisation-table\">\n <h2 class=\"heading-h2\">Organisation name and address</h2>\n </label>\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <div *ngIf=\"!(selectedOrg$ | async)?.organisationIdentifier; else selectedOrganisation\" [ngClass]=\"{'scroll-container ': (simpleOrganisations$ | async)?.length > 10}\">\n <table id=\"organisation-table\" *ngFor=\"let organisation of (simpleOrganisations$ | async)\">\n <caption><h3 class=\"name-header\">{{organisation.name}}</h3></caption>\n <tbody>\n <tr>\n <th style=\"display: none;\"></th>\n <td class=\"td-address\">\n <ccd-markdown [content]=\"organisation.address\"></ccd-markdown>\n </td>\n <td class=\"td-select\">\n <a href=\"javascript:void(0);\" (click)=\"selectOrg(organisation)\" title=\"Select the organisation {{organisation.name}}\">Select</a>\n </td>\n </tr>\n </tbody>\n </table>\n <div *ngIf=\"(simpleOrganisations$ | async)?.length === 0 && (searchOrgValue$ | async)?.length > 2\">\n <div class=\"no-result-message\">\n No results found.\n </div>\n </div>\n </div>\n <ng-template #selectedOrganisation>\n <table id=\"organisation-selected-table\" *ngIf=\"(selectedOrg$ | async) as selectedOrg\">\n <caption><h3 class=\"name-header\">{{selectedOrg.name}}</h3></caption>\n <tbody>\n <tr>\n <th style=\"display: none;\"></th>\n <td class=\"td-address\">\n <ccd-markdown [content]=\"selectedOrg.address\"></ccd-markdown>\n </td>\n <td class=\"td-select\">\n <a href=\"javascript:void(0);\" (click)=\"deSelectOrg()\" title=\"Clear organisation selection for {{selectedOrg.name}}\">Clear</a>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-template>\n </div>\n <ccd-write-organisation-complex-field [caseField]=\"caseField\"\n [formGroup]=\"formGroup\"\n [selectedOrg$]=\"selectedOrg$\">\n </ccd-write-organisation-complex-field>\n <details id=\"find-organisation-help\" class=\"govuk-details\" data-module=\"govuk-details\">\n <summary class=\"govuk-details__summary\">\n <span id=\"content-why-can-not-find-organisation\" class=\"govuk-details__summary-text\">\n Can’t find the organisation you are looking for?\n </span>\n </summary>\n <div id=\"content-reason-can-not-find-organisation\" class=\"govuk-details__text\">\n If you know that the solicitor is already registered with MyHMCTS, check that you have entered their details correctly.\n Remember that organisations can only register one office address. This means that the details could be slightly different from what you're expecting. Contact the solicitor directly if you have any concerns.\n </div>\n </details>\n </fieldset>\n</div>\n","<div>\n <input type=\"hidden\" name=\"organisationID\" [value]=\"(selectedOrg$ | async)?.organisationIdentifier\">\n <input type=\"hidden\" name=\"organisationName\" [value]=\"(selectedOrg$ | async)?.name\">\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { OrganisationConverter } from '../../../domain/organisation/organisation-converter';\nimport { SimpleOrganisationModel } from '../../../domain/organisation/simple-organisation.model';\nimport { OrganisationService, OrganisationVm } from '../../../services/organisation/organisation.service';\nimport { WindowService } from '../../../services/window/window.service';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-organisation-field',\n templateUrl: './write-organisation-field.component.html',\n styleUrls: ['./organisation-field.scss']\n})\nexport class WriteOrganisationFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n private static readonly EMPTY_SIMPLE_ORG: SimpleOrganisationModel = {organisationIdentifier: '', name: '', address: ''};\n private static readonly MAX_RESULT_COUNT: number = 100;\n private static readonly ORGANISATION_ID: string = 'OrganisationID';\n private static readonly ORGANISATION_NAME: string = 'OrganisationName';\n private static readonly PRE_POPULATE_TO_USERS_ORGANISATION: string = 'PrepopulateToUsersOrganisation';\n private static readonly ORGANISATION_DETAILS: string = 'organisationDetails';\n private static readonly YES: string = 'YES';\n private static readonly MANDATORY: string = 'MANDATORY';\n public defaultOrg: any;\n\n public organisationFormGroup: FormGroup;\n public searchOrgTextFormControl: FormControl;\n public organisationIDFormControl: FormControl;\n public organisationNameFormControl: FormControl;\n\n public organisations$: Observable<OrganisationVm[]>;\n public searchOrgValue$: Observable<string>;\n public simpleOrganisations$: Observable<SimpleOrganisationModel[]>;\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor(private readonly organisationService: OrganisationService,\n private readonly organisationConverter: OrganisationConverter,\n private readonly windowService: WindowService) {\n super();\n this.defaultOrg = JSON.parse(this.windowService.getSessionStorage(WriteOrganisationFieldComponent.ORGANISATION_DETAILS));\n }\n\n public ngOnInit(): void {\n this.organisations$ = this.organisationService.getActiveOrganisations();\n\n this.searchOrgTextFormControl = new FormControl('');\n this.searchOrgValue$ = this.searchOrgTextFormControl.valueChanges;\n this.searchOrgValue$.subscribe(value => this.onSearchOrg(value));\n\n this.organisationFormGroup = this.registerControl(new FormGroup({}), true) as FormGroup;\n if (this.parent && this.parent.controls && this.parent.controls.hasOwnProperty(WriteOrganisationFieldComponent.PRE_POPULATE_TO_USERS_ORGANISATION)\n && this.parent.controls[WriteOrganisationFieldComponent.PRE_POPULATE_TO_USERS_ORGANISATION].value\n && this.parent.controls[WriteOrganisationFieldComponent.PRE_POPULATE_TO_USERS_ORGANISATION].value.toUpperCase()\n === WriteOrganisationFieldComponent.YES) {\n if (this.caseField && !this.caseField.value) {\n this.caseField.value = {\n OrganisationID: this.defaultOrg ? this.defaultOrg.organisationIdentifier : null,\n OrganisationName: this.defaultOrg ? this.defaultOrg.name : null\n };\n }\n this.preSelectDefaultOrg();\n } else {\n if (this.caseField && this.caseField.value && this.caseField.value.OrganisationID) {\n this.preSelectDefaultOrg();\n } else {\n this.preSelectEmptyOrg();\n }\n }\n\n // Ensure that all sub-fields inherit the same value for retain_hidden_value as this parent; although an\n // Organisation field uses the Complex type, it is meant to be treated as one field\n if (this.caseField && this.caseField.field_type.type === 'Complex') {\n for (const organisationSubField of this.caseField.field_type.complex_fields) {\n organisationSubField.retain_hidden_value = this.caseField.retain_hidden_value;\n }\n }\n }\n\n public onSearchOrg(orgSearchText: string): void {\n if (orgSearchText && orgSearchText.length >= 2) {\n const lowerOrgSearchText = orgSearchText.toLowerCase();\n this.simpleOrganisations$ = this.organisations$.pipe(\n switchMap(organisations => of(\n this.searchOrg(organisations, lowerOrgSearchText)\n )\n )\n );\n } else {\n this.simpleOrganisations$ = of([]);\n }\n }\n\n // The way the search works divide into two phases\n // 1. go through collection of org items one by one by doing the comparsion of search string using includes to all the address fields\n // 2. split the search string into arrays and apply the each array item into the address fields\n // 3. both step 1, 2 will go until max count result reaches, and finally combine both result sets into final collection\n public searchOrg(organisations: OrganisationVm[], lowerOrgSearchText: string): SimpleOrganisationModel[] {\n const partMatchingResultSet = [];\n const withSpaceMatchingResultSet = [];\n const MAX_RESULT_COUNT = WriteOrganisationFieldComponent.MAX_RESULT_COUNT;\n organisations.forEach((organisation) => {\n if ( partMatchingResultSet.length < MAX_RESULT_COUNT && this.searchCriteria(organisation, lowerOrgSearchText)) {\n partMatchingResultSet.push(organisation);\n }\n });\n\n organisations.forEach((org) => {\n const resultSet = [...partMatchingResultSet, ...withSpaceMatchingResultSet];\n const hasMatchingOrganisation = resultSet.find(item => item.organisationIdentifier === org.organisationIdentifier);\n const searchHasSpace = this.searchWithSpace(org, lowerOrgSearchText);\n const hasResultSetBelowMaxCount = resultSet.length < MAX_RESULT_COUNT;\n\n if (!hasMatchingOrganisation && partMatchingResultSet.length === 0 && hasResultSetBelowMaxCount && searchHasSpace) {\n withSpaceMatchingResultSet.push(org);\n }\n });\n return [...partMatchingResultSet, ...withSpaceMatchingResultSet].map((organisation) =>\n this.organisationConverter.toSimpleOrganisationModel(organisation)\n );\n }\n\n public trimAll(oldText: string): string {\n return oldText.replace(/\\s+/g, '');\n }\n\n public selectOrg(selectedOrg: SimpleOrganisationModel): void {\n this.organisationIDFormControl.setValue(selectedOrg.organisationIdentifier);\n this.organisationNameFormControl.setValue(selectedOrg.name);\n this.selectedOrg$ = of(selectedOrg);\n this.simpleOrganisations$ = of([...[], selectedOrg]);\n this.searchOrgTextFormControl.setValue('');\n this.searchOrgTextFormControl.disable();\n this.caseField.value = {\n OrganisationID: selectedOrg.organisationIdentifier,\n OrganisationName: selectedOrg.name\n };\n this.organisationFormGroup.setValue(this.caseField.value);\n }\n\n public deSelectOrg(): void {\n this.organisationIDFormControl.reset();\n this.organisationNameFormControl.reset();\n this.selectedOrg$ = of(WriteOrganisationFieldComponent.EMPTY_SIMPLE_ORG);\n this.simpleOrganisations$ = of([]);\n this.searchOrgTextFormControl.setValue('');\n this.searchOrgTextFormControl.enable();\n this.caseField.value = {OrganisationID: null, OrganisationName: null};\n this.organisationFormGroup.setValue(this.caseField.value);\n }\n\n private preSelectDefaultOrg(): void {\n this.instantiateOrganisationFormGroup(this.caseField.value.OrganisationID, this.caseField.value.OrganisationName);\n this.selectedOrg$ = this.organisations$.pipe(\n map(organisations =>\n organisations.filter(findOrg => {\n return findOrg.organisationIdentifier === this.caseField.value.OrganisationID;\n })\n .map(organisation => this.organisationConverter.toSimpleOrganisationModel(organisation))[0]),\n );\n if (this.caseField.value && this.caseField.value.OrganisationID) {\n this.searchOrgTextFormControl.disable();\n }\n }\n\n private preSelectEmptyOrg(): void {\n this.instantiateOrganisationFormGroup(null, null);\n this.selectedOrg$ = of(WriteOrganisationFieldComponent.EMPTY_SIMPLE_ORG);\n }\n\n private instantiateOrganisationFormGroup(orgIDState: any, orgNameState: any): void {\n this.organisationIDFormControl = new FormControl(orgIDState);\n this.addOrganisationValidators(this.caseField, this.organisationIDFormControl);\n this.organisationFormGroup.addControl(WriteOrganisationFieldComponent.ORGANISATION_ID, this.organisationIDFormControl);\n this.organisationNameFormControl = new FormControl(orgNameState);\n this.organisationFormGroup.addControl(WriteOrganisationFieldComponent.ORGANISATION_NAME, this.organisationNameFormControl);\n }\n\n private addOrganisationValidators(caseField: CaseField, control: AbstractControl): void {\n if (caseField.field_type && caseField.field_type.complex_fields) {\n const organisationIdField = caseField.field_type.complex_fields\n .find(field => field.id === WriteOrganisationFieldComponent.ORGANISATION_ID);\n this.addValidators(organisationIdField, control);\n }\n }\n\n private searchCriteria(organisation: OrganisationVm, lowerOrgSearchText: string): boolean {\n if (organisation.postCode && organisation.postCode.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.postCode && this.trimAll(organisation.postCode).toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.postCode && organisation.postCode.toLowerCase().includes(this.trimAll(lowerOrgSearchText))) {\n return true;\n }\n if (organisation.name && organisation.name.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.addressLine1 && organisation.addressLine1.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.addressLine2 && organisation.addressLine2.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.addressLine3 && organisation.addressLine3.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.townCity && organisation.townCity.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.county && organisation.county.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n // noinspection RedundantIfStatementJS\n if (organisation.country && organisation.country.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n return false;\n }\n\n private searchWithSpace(organisation: OrganisationVm, lowerOrgSearchText: string): boolean {\n const searchTextArray: string[] = lowerOrgSearchText.split(/\\s+/g);\n for (const singleSearchText of searchTextArray) {\n if (singleSearchText && this.searchCriteria(organisation, singleSearchText)) {\n return true;\n }\n }\n }\n}\n","import { AbstractAppConfig } from '../../../../app.config';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { AbstractFieldReadComponent } from './abstract-field-read.component';\n\nexport abstract class PaymentField extends AbstractFieldReadComponent {\n constructor(\n protected readonly appConfig: AbstractAppConfig,\n protected readonly sessionStorage: SessionStorageService\n ) {\n super();\n }\n\n public getBaseURL() {\n return this.appConfig.getPaymentsUrl();\n }\n\n public getPayBulkScanBaseURL() {\n return this.appConfig.getPayBulkScanBaseUrl();\n }\n\n public getRefundsUrl() {\n return this.appConfig.getRefundsUrl();\n }\n\n public getUserRoles() {\n const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);\n if (!userDetails || !userDetails.hasOwnProperty('roles')) {\n return [];\n }\n return userDetails.roles;\n }\n\n public getUserEmail() {\n const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);\n if (!userDetails || !userDetails.hasOwnProperty('sub')) {\n return '';\n }\n return userDetails.sub;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { PaymentField } from '../base-field/payment-field.component';\n\n@Component({\n selector: 'ccd-case-payment-history-viewer-field',\n templateUrl: 'case-payment-history-viewer-field.html',\n})\nexport class CasePaymentHistoryViewerFieldComponent extends PaymentField {\n constructor(\n appConfig: AbstractAppConfig,\n sessionStorage: SessionStorageService\n ) {\n super(appConfig, sessionStorage);\n }\n}\n","<ccpay-payment-lib\n [API_ROOT]=\"getBaseURL()\"\n [CCD_CASE_NUMBER]=\"caseReference\"\n [BULKSCAN_API_ROOT]=\"getPayBulkScanBaseURL()\"\n [SELECTED_OPTION]=\"'CCDorException'\"\n [ISBSENABLE]=\"'true'\"\n [LOGGEDINUSEREMAIL]=\"getUserEmail()\"\n [LOGGEDINUSERROLES]=\"getUserRoles()\"\n [REFUNDS_API_ROOT]=\"getRefundsUrl()\"\n [VIEW]=\"'case-transactions'\"\n [REFUNDS_API_ROOT]=\"getRefundsUrl()\"\n [TAKEPAYMENT]=\"false\"\n [SERVICEREQUEST]=\"false\"\n [PAYMENT_GROUP_REF]=\"null\"\n [EXC_REFERENCE]=\"caseReference\"\n [DCN_NUMBER]=\"null\"\n [LOGGEDINUSERROLES]=\"getUserRoles()\"\n></ccpay-payment-lib>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-phone-uk-field',\n template: `<span class=\"text-16\">{{caseField.value}}</span>`\n})\nexport class ReadPhoneUKFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !phoneUkControl.valid && (phoneUkControl.dirty || phoneUkControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"phoneUkControl.errors && (phoneUkControl.dirty || phoneUkControl.touched)\">{{phoneUkControl.errors | ccdFirstError:caseField.label}}</span>\n <input class=\"form-control bottom-30\" [ngClass]=\"{'govuk-input--error': phoneUkControl.errors && phoneUkControl.dirty}\"\n [id]=\"id()\" type=\"tel\" [formControl]=\"phoneUkControl\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-phone-uk-field',\n templateUrl: './write-phone-uk-field.html'\n})\nexport class WritePhoneUKFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public phoneUkControl: FormControl;\n\n public ngOnInit() {\n this.phoneUkControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-text-area-field',\n template: `<span style=\"white-space: pre-wrap\">{{caseField.value}}</span>`\n})\nexport class ReadTextAreaFieldComponent extends AbstractFieldReadComponent {}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class BrowserService {\n public isFirefox(): boolean {\n return window.navigator.userAgent.indexOf('Firefox') > -1;\n }\n public isSafari(): boolean {\n const isSafariAgent = window.navigator.userAgent.indexOf('Safari') > -1;\n const isChromeAgent = window.navigator.userAgent.indexOf('Chrome') > -1;\n if ((isChromeAgent) && (isSafariAgent)) {\n return false;\n }\n return isSafariAgent;\n }\n public isIEOrEdge(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !textareaControl.valid && textareaControl.dirty}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"textareaControl.errors && (textareaControl.dirty || textareaControl.touched)\">{{textareaControl.errors | ccdFirstError:caseField.label}}</span>\n\n <textarea (input)=\"autoGrow($event)\" class=\"form-control bottom-30\" [ngClass]=\"{'govuk-textarea--error': textareaControl.errors && (textareaControl.dirty || textareaControl.touched)}\"\n [id]=\"id()\" rows=\"3\" [formControl]=\"textareaControl\"></textarea>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { BrowserService } from '../../../services/browser/browser.service';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-text-area-field',\n templateUrl: './write-text-area-field.html',\n providers: [BrowserService]\n})\nexport class WriteTextAreaFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public textareaControl: FormControl;\n constructor(private readonly browserService: BrowserService) {\n super();\n }\n\n public ngOnInit() {\n this.textareaControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n\n public autoGrow(event) {\n if (this.browserService.isIEOrEdge()) {\n event.target.style.height = 'auto';\n event.target.style.height = event.target.scrollHeight + 'px';\n event.target.scrollTop = event.target.scrollHeight;\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-text-field',\n template: `<span class=\"text-16\">{{caseField.value}}</span>`\n})\nexport class ReadTextFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !!textControl && !textControl.valid && (textControl.dirty || textControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"textControl?.errors && (textControl.dirty || textControl.touched)\">{{textControl.errors | ccdFirstError:caseField.label}}</span>\n <input class=\"form-control bottom-30\" [ngClass]=\"{'govuk-input--error': textControl?.errors && (textControl.dirty || textControl.touched)}\"\n [id]=\"id()\" type=\"text\" [formControl]=\"textControl\" (blur)=\"onBlur($event)\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-text-field',\n templateUrl: './write-text-field.html'\n})\nexport class WriteTextFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public textControl: FormControl;\n\n public ngOnInit() {\n this.textControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n\n public onBlur($event) {\n $event.target.value = $event.target.value.trim();\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n template: `<em>Field type not supported</em>`\n})\nexport class UnsupportedFieldComponent {}\n","<ccpay-payment-lib *ngIf=\"getUserRoles().length > 0\"\n [API_ROOT]=\"getBaseURL()\"\n [BULKSCAN_API_ROOT]=\"getPayBulkScanBaseURL()\"\n [REFUNDS_API_ROOT]=\"getRefundsUrl()\"\n [CCD_CASE_NUMBER]=\"caseReference\"\n [VIEW]=\"'case-transactions'\"\n [TAKEPAYMENT]=\"false\"\n [SERVICEREQUEST]=\"true\"\n [PAYMENT_GROUP_REF]=\"null\"\n [EXC_REFERENCE]=\"caseReference\"\n [DCN_NUMBER]=\"null\"\n [SELECTED_OPTION]=\"'CCDorException'\"\n [LOGGEDINUSERROLES]=\"getUserRoles()\"\n [CARDPAYMENTRETURNURL]=\"getCardPaymentReturnUrl()\"\n></ccpay-payment-lib>","import { Component } from '@angular/core';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { PaymentField } from '../base-field/payment-field.component';\n\n@Component({\n selector: 'ccd-ways-to-pay-field',\n templateUrl: './waystopay-field.component.html'\n})\nexport class WaysToPayFieldComponent extends PaymentField {\n constructor(\n appConfig: AbstractAppConfig,\n sessionStorage: SessionStorageService\n ) {\n super(appConfig, sessionStorage);\n }\n\n public getCardPaymentReturnUrl(): string {\n return this.appConfig.getPaymentReturnUrl();\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class YesNoService {\n private static readonly YES_INPUTS: string[] = [\n 'Y',\n 'YES'\n ];\n private static readonly NO_INPUTS: string[] = [\n 'N',\n 'NO'\n ];\n private static readonly YES = 'Yes';\n private static readonly NO = 'No';\n private static readonly EMPTY = null;\n\n public format(value: any): string {\n\n if (this.isYes(value)) {\n return YesNoService.YES;\n } else if (this.isNo(value)) {\n return YesNoService.NO;\n }\n\n return YesNoService.EMPTY;\n }\n\n private isYes(value: any): boolean {\n switch (typeof(value)) {\n case 'boolean':\n return value;\n case 'string':\n return YesNoService.YES_INPUTS.indexOf(value.toUpperCase()) !== -1;\n }\n\n return false;\n }\n\n private isNo(value: any): boolean {\n switch (typeof(value)) {\n case 'boolean':\n return !value;\n case 'string':\n return YesNoService.NO_INPUTS.indexOf(value.toUpperCase()) !== -1;\n }\n\n return false;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { YesNoService } from './yes-no.service';\n\n@Component({\n selector: 'ccd-read-yes-no-field',\n template: `<span class=\"text-16\">{{formattedValue}}</span>`\n})\nexport class ReadYesNoFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public formattedValue: string;\n\n constructor(private readonly yesNoService: YesNoService) {\n super();\n }\n\n public ngOnInit() {\n super.ngOnInit();\n this.formattedValue = this.yesNoService.format(this.caseField.value);\n }\n\n}\n","<div [id]=\"id()\" class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !yesNoControl.valid && (yesNoControl.dirty || yesNoControl.touched)}\">\n\n\t<fieldset class=\"inline\">\n\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </legend>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"yesNoControl.errors && (yesNoControl.dirty || yesNoControl.touched)\">{{yesNoControl.errors | ccdFirstError:caseField.label}}</span>\n\n <div [id]=\"createElementId('radio')\">\n\n \t <div class=\"multiple-choice\" *ngFor=\"let value of yesNoValues\" [ngClass]=\"{selected: yesNoControl.value === value}\">\n \t <input class=\"form-control\" [id]=\"createElementId(value)\" [attr.name]=\"id()\" [name]=\"id()\" type=\"radio\" [formControl]=\"yesNoControl\" [value]=\"value\">\n \t <label class=\"form-label\" [for]=\"createElementId(value)\">{{value}}</label>\n \t </div>\n\n </div>\n\n\t</fieldset>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { YesNoService } from './yes-no.service';\n\n@Component({\n selector: 'ccd-write-yes-no-field',\n templateUrl: './write-yes-no-field.html'\n})\nexport class WriteYesNoFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public yesNoValues = [ 'Yes', 'No' ];\n public yesNoControl: FormControl;\n\n constructor(private readonly yesNoService: YesNoService) {\n super();\n }\n\n public ngOnInit() {\n this.yesNoControl = this.registerControl(new FormControl(this.yesNoService.format(this.caseField.value))) as FormControl;\n }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { WriteAddressFieldComponent } from './address/write-address-field.component';\nimport { ReadCaseLinkFieldComponent } from './case-link/read-case-link-field.component';\nimport { WriteCaseLinkFieldComponent } from './case-link/write-case-link-field.component';\nimport { ReadCollectionFieldComponent } from './collection/read-collection-field.component';\nimport { WriteCollectionFieldComponent } from './collection/write-collection-field.component';\nimport { ReadComplexFieldComponent } from './complex/read-complex-field.component';\nimport { WriteComplexFieldComponent } from './complex/write-complex-field.component';\nimport { ReadDateFieldComponent } from './date/read-date-field.component';\nimport { WriteDateContainerFieldComponent } from './date/write-date-container-field.component';\nimport { ReadDocumentFieldComponent } from './document/read-document-field.component';\nimport { WriteDocumentFieldComponent } from './document/write-document-field.component';\nimport { ReadDynamicListFieldComponent } from './dynamic-list/read-dynamic-list-field.component';\nimport { WriteDynamicListFieldComponent } from './dynamic-list/write-dynamic-list-field.component';\nimport { ReadDynamicRadioListFieldComponent } from './dynamic-radio-list/read-dynamic-radio-list-field.component';\nimport { WriteDynamicRadioListFieldComponent } from './dynamic-radio-list/write-dynamic-radio-list-field.component';\nimport { ReadEmailFieldComponent } from './email/read-email-field.component';\nimport { WriteEmailFieldComponent } from './email/write-email-field.component';\nimport { ReadFixedListFieldComponent } from './fixed-list/read-fixed-list-field.component';\nimport { WriteFixedListFieldComponent } from './fixed-list/write-fixed-list-field.component';\nimport { ReadFixedRadioListFieldComponent } from './fixed-radio-list/read-fixed-radio-list-field.component';\nimport { WriteFixedRadioListFieldComponent } from './fixed-radio-list/write-fixed-radio-list-field.component';\nimport { CaseHistoryViewerFieldComponent } from './history/case-history-viewer-field.component';\nimport { LabelFieldComponent } from './label/label-field.component';\nimport { ReadMoneyGbpFieldComponent } from './money-gbp/read-money-gbp-field.component';\nimport { WriteMoneyGbpFieldComponent } from './money-gbp/write-money-gbp-field.component';\nimport { ReadMultiSelectListFieldComponent } from './multi-select-list/read-multi-select-list-field.component';\nimport { WriteMultiSelectListFieldComponent } from './multi-select-list/write-multi-select-list-field.component';\nimport { ReadNumberFieldComponent } from './number/read-number-field.component';\nimport { WriteNumberFieldComponent } from './number/write-number-field.component';\nimport { ReadOrderSummaryFieldComponent } from './order-summary/read-order-summary-field.component';\nimport { WriteOrderSummaryFieldComponent } from './order-summary/write-order-summary-field.component';\nimport { ReadOrganisationFieldComponent } from './organisation/read-organisation-field.component';\nimport { WriteOrganisationFieldComponent } from './organisation/write-organisation-field.component';\nimport { CasePaymentHistoryViewerFieldComponent } from './payment/case-payment-history-viewer-field.component';\nimport { ReadPhoneUKFieldComponent } from './phone-uk/read-phone-uk-field.component';\nimport { WritePhoneUKFieldComponent } from './phone-uk/write-phone-uk-field.component';\nimport { ReadTextAreaFieldComponent } from './text-area/read-text-area-field.component';\nimport { WriteTextAreaFieldComponent } from './text-area/write-text-area-field.component';\nimport { ReadTextFieldComponent } from './text/read-text-field.component';\nimport { WriteTextFieldComponent } from './text/write-text-field.component';\nimport { UnsupportedFieldComponent } from './unsupported-field.component';\nimport { WaysToPayFieldComponent } from './waystopay/waystopay-field.component';\nimport { ReadYesNoFieldComponent } from './yes-no/read-yes-no-field.component';\nimport { WriteYesNoFieldComponent } from './yes-no/write-yes-no-field.component';\n\n@Injectable()\nexport class PaletteService {\n\n public getFieldComponentClass(caseField: CaseField, write: boolean): Type<{}> {\n switch (caseField.field_type.type) {\n case 'Text':\n case 'Postcode':\n return write ? WriteTextFieldComponent : ReadTextFieldComponent;\n case 'TextArea':\n return write ? WriteTextAreaFieldComponent : ReadTextAreaFieldComponent;\n case 'Number':\n return write ? WriteNumberFieldComponent : ReadNumberFieldComponent;\n case 'YesOrNo':\n return write ? WriteYesNoFieldComponent : ReadYesNoFieldComponent;\n case 'Email':\n return write ? WriteEmailFieldComponent : ReadEmailFieldComponent;\n case 'PhoneUK':\n return write ? WritePhoneUKFieldComponent : ReadPhoneUKFieldComponent;\n case 'Date':\n case 'DateTime':\n return write ? WriteDateContainerFieldComponent : ReadDateFieldComponent;\n case 'MoneyGBP':\n return write ? WriteMoneyGbpFieldComponent : ReadMoneyGbpFieldComponent;\n case 'DynamicList':\n return write ? WriteDynamicListFieldComponent : ReadDynamicListFieldComponent;\n case 'FixedList':\n return write ? WriteFixedListFieldComponent : ReadFixedListFieldComponent;\n case 'DynamicRadioList':\n return write ? WriteDynamicRadioListFieldComponent : ReadDynamicRadioListFieldComponent;\n case 'FixedRadioList':\n return write ? WriteFixedRadioListFieldComponent : ReadFixedRadioListFieldComponent;\n case 'Complex':\n switch (caseField.field_type.id) {\n case 'AddressGlobalUK':\n case 'AddressUK':\n return write ? WriteAddressFieldComponent : ReadComplexFieldComponent;\n case 'OrderSummary':\n return write ? WriteOrderSummaryFieldComponent : ReadOrderSummaryFieldComponent;\n case 'CaseLink':\n return write ? WriteCaseLinkFieldComponent : ReadCaseLinkFieldComponent;\n case 'Organisation':\n return write ? WriteOrganisationFieldComponent : ReadOrganisationFieldComponent;\n default:\n return write ? WriteComplexFieldComponent : ReadComplexFieldComponent;\n }\n case 'Collection':\n return write ? WriteCollectionFieldComponent : ReadCollectionFieldComponent;\n case 'MultiSelectList':\n return write ? WriteMultiSelectListFieldComponent : ReadMultiSelectListFieldComponent;\n case 'Document':\n return write ? WriteDocumentFieldComponent : ReadDocumentFieldComponent;\n case 'Label':\n return LabelFieldComponent;\n case 'CasePaymentHistoryViewer':\n return CasePaymentHistoryViewerFieldComponent;\n case 'CaseHistoryViewer':\n return CaseHistoryViewerFieldComponent;\n case 'WaysToPay':\n return WaysToPayFieldComponent;\n default:\n return UnsupportedFieldComponent;\n }\n }\n}\n","<div [hidden]=\"caseField.hidden\" [class.grey-bar]=\"canHaveGreyBar && !caseField.hiddenCannotChange\">\n <dl class=\"case-field\" *ngIf=\"withLabel && !isLabel() && (!isComplex() || isCaseLink()); else caseFieldValue\">\n <dt class=\"case-field__label\">{{caseField.label}}</dt>\n <dd class=\"case-field__value\">\n <ng-container *ngTemplateOutlet=\"caseFieldValue\"></ng-container>\n </dd>\n </dl>\n <ng-template #caseFieldValue>\n <ng-content></ng-content>\n </ng-template>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { AbstractFieldReadComponent } from './abstract-field-read.component';\n\n@Component({\n selector: 'ccd-field-read-label',\n templateUrl: './field-read-label.html',\n styleUrls: [\n './field-read-label.scss'\n ]\n})\nexport class FieldReadLabelComponent extends AbstractFieldReadComponent implements OnChanges {\n\n // EUI-3267. Flag for whether or not this can have a grey bar.\n public canHaveGreyBar = false;\n\n @Input()\n public withLabel: boolean;\n\n @Input()\n public markdownUseHrefAsRouterLink?: boolean;\n\n public isLabel(): boolean {\n return this.caseField.field_type && this.caseField.field_type.type === 'Label';\n }\n\n public isComplex(): boolean {\n return this.caseField.isComplex();\n }\n\n public isCaseLink(): boolean {\n return this.caseField.isCaseLink();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n const change = changes['caseField'];\n if (change) {\n const cfNew = change.currentValue;\n if (!(cfNew instanceof CaseField)) {\n this.fixCaseField();\n }\n\n // EUI-3267.\n // Set up the flag for whether this can have a grey bar.\n this.canHaveGreyBar = !!this.caseField.show_condition;\n }\n }\n\n private fixCaseField() {\n if (this.caseField && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n }\n}\n","import { Component, ComponentFactoryResolver, Injector, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { PaletteService } from '../palette.service';\nimport { AbstractFieldReadComponent } from './abstract-field-read.component';\n\nconst FIX_CASEFIELD_FOR = [ 'FixedList', 'DynamicList' ];\n\n@Component({\n selector: 'ccd-field-read',\n templateUrl: './field-read.html'\n})\nexport class FieldReadComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public withLabel = false;\n\n @Input()\n public formGroup: FormGroup = new FormGroup({});\n\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public markdownUseHrefAsRouterLink?: boolean;\n\n @ViewChild('fieldContainer', { static: false, read: ViewContainerRef })\n public fieldContainer: ViewContainerRef;\n\n constructor(private readonly resolver: ComponentFactoryResolver, private readonly paletteService: PaletteService) {\n super();\n }\n\n public ngOnInit(): void {\n // Ensure all field values are resolved by label interpolation before the component is fully initialised.\n Promise.resolve(null).then(() => {\n const componentClass = this.paletteService.getFieldComponentClass(this.caseField, false);\n const injector = Injector.create([], this.fieldContainer.parentInjector);\n const component = this.resolver.resolveComponentFactory(componentClass).create(injector);\n\n // Provide component @Inputs\n // Only Fixed list use plainToClassFromExist\n // Better performance\n // TODO AW 30/12/20 figure out why FixedLists need plainToClassFromExist\n // Added a check to make sure it's NOT already a CaseField and then\n // assigning it back to this.caseField so we don't create separation.\n if (FIX_CASEFIELD_FOR.indexOf(this.caseField.field_type.type) > -1 && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n component.instance['caseField'] = this.caseField;\n component.instance['caseFields'] = this.caseFields;\n component.instance['formGroup'] = this.formGroup;\n component.instance['topLevelFormGroup'] = this.topLevelFormGroup;\n component.instance['idPrefix'] = this.idPrefix;\n component.instance['parent'] = this.parent;\n component.instance['caseReference'] = this.caseReference;\n component.instance['context'] = this.context;\n component.instance['markdownUseHrefAsRouterLink'] = this.markdownUseHrefAsRouterLink;\n\n this.fieldContainer.insert(component.hostView);\n });\n }\n}\n","<div [hidden]=\"caseField.hidden\">\n <ccd-field-read-label [formGroup]=\"formGroup\" [topLevelFormGroup]=\"topLevelFormGroup\" [caseField]=\"caseField\" [withLabel]=\"withLabel\" [markdownUseHrefAsRouterLink]=\"markdownUseHrefAsRouterLink\">\n <ng-container #fieldContainer></ng-container>\n </ccd-field-read-label>\n</div>\n","import { Component, ComponentFactoryResolver, Injector, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { PaletteService } from '../palette.service';\nimport { AbstractFieldWriteComponent } from './abstract-field-write.component';\n\nconst FIX_CASEFIELD_FOR = [ 'FixedList', 'DynamicList' ];\n\n@Component({\n selector: 'ccd-field-write',\n templateUrl: './field-write.component.html',\n styleUrls: [ './field-write.component.scss' ]\n})\nexport class FieldWriteComponent extends AbstractFieldWriteComponent implements OnInit {\n\n // EUI-3267. Flag for whether or not this can have a grey bar.\n public canHaveGreyBar = false;\n\n @Input()\n public caseFields: CaseField[] = [];\n\n @ViewChild('fieldContainer', { static: true, read: ViewContainerRef })\n public fieldContainer: ViewContainerRef;\n\n constructor(private readonly resolver: ComponentFactoryResolver,\n private readonly paletteService: PaletteService) {\n super();\n }\n\n public ngOnInit(): void {\n const componentClass = this.paletteService.getFieldComponentClass(this.caseField, true);\n const injectorOptions = {\n providers: [],\n parent: this.fieldContainer?.injector\n };\n\n const injector = Injector.create(injectorOptions);\n\n const factory = this.resolver.resolveComponentFactory(componentClass);\n const component = this.fieldContainer.createComponent(factory, 0, injector);\n\n // Only Fixed list use plainToClassFromExist\n // Better performance\n // TODO AW 30/12/20 figure out why FixedLists need plainToClassFromExist\n // Added a check to make sure it's NOT already a CaseField and then\n // assigning it back to this.caseField so we don't create separation.\n if (FIX_CASEFIELD_FOR.indexOf(this.caseField.field_type.type) > -1 && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n component.instance['caseField'] = this.caseField;\n component.instance['caseFields'] = this.caseFields;\n component.instance['formGroup'] = this.formGroup;\n component.instance['parent'] = this.parent;\n component.instance['idPrefix'] = this.idPrefix;\n if (this.caseField.field_type.id === 'AddressGlobal') {\n component.instance['ignoreMandatory'] = true;\n }\n component.instance['isExpanded'] = this.isExpanded;\n component.instance['isInSearchBlock'] = this.isInSearchBlock;\n this.fieldContainer.insert(component.hostView);\n\n // EUI-3267.\n // Set up the flag for whether this can have a grey bar.\n this.canHaveGreyBar = this.caseField.show_condition && this.caseField.field_type.type !== 'Collection';\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n FormValidatorsService.addValidators(caseField, control);\n }\n}\n","<div [hidden]=\"caseField.hidden\" [class.grey-bar]=\"canHaveGreyBar && !caseField.hiddenCannotChange\">\n <ng-container #fieldContainer></ng-container>\n</div>\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { Profile } from '../../../domain/profile';\n\n@Injectable()\nexport class CollectionCreateCheckerService {\n\n public setDisplayContextForChildren(caseField: CaseField, profile: Profile) {\n const children = this.getCaseFieldChildren(caseField);\n\n if (children && children.length > 0) {\n children.forEach(child => {\n if (!!profile.user.idam.roles.find(role => this.hasCreateAccess(child, role))) {\n child.display_context = caseField.display_context;\n }\n if (this.isCollection(child) || this.isComplex(child)) {\n this.setDisplayContextForChildren(child, profile);\n }\n });\n }\n }\n\n private getCaseFieldChildren(caseField: CaseField): CaseField[] {\n let childrenCaseFields = [];\n if (this.isCollection(caseField)) {\n childrenCaseFields = caseField.field_type.collection_field_type.complex_fields || [];\n } else if (this.isComplex(caseField)) {\n childrenCaseFields = caseField.field_type.complex_fields || [];\n }\n return childrenCaseFields;\n }\n\n private isComplex(case_field: CaseField) {\n return case_field.field_type.type === 'Complex';\n }\n\n private isCollection(case_field: CaseField) {\n return case_field.field_type.type === 'Collection';\n }\n\n private hasCreateAccess(caseField: CaseField, role: any) {\n return !!caseField.acls.find( acl => acl.role === role && acl.create === true);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\n\nimport { plainToClassFromExist } from 'class-transformer';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdReadFieldsFilter'\n})\nexport class ReadFieldsFilterPipe implements PipeTransform {\n\n private static readonly EMPTY_VALUES = [\n undefined,\n null,\n '',\n {}\n ];\n\n private static readonly ALWAYS_NULL_FIELDS = ['CasePaymentHistoryViewer', 'WaysToPay'];\n\n private static readonly NESTED_TYPES = {\n Complex: ReadFieldsFilterPipe.isValidComplex,\n Collection: ReadFieldsFilterPipe.isValidCollection\n };\n\n /**\n * Complex type should have at least on simple field descendant with a value.\n */\n private static isValidComplex(field: CaseField, values?: object): boolean {\n values = values || {};\n const type = field.field_type;\n const value = ReadFieldsFilterPipe.getValue(field, values);\n\n const hasChildrenWithValue = type.complex_fields.find(f => {\n const willKeep = ReadFieldsFilterPipe.keepField(f, value, true);\n return willKeep && ReadFieldsFilterPipe.evaluateConditionalShow(f, value).hidden !== true;\n });\n\n return !!hasChildrenWithValue;\n }\n\n private static isValidCollection(field: CaseField, values?: object): boolean {\n // if field is collection and it has complex/collection child field; parent field doesnt have value defined\n if (!Array.isArray(field.value) && values && values.hasOwnProperty(field.id)) {\n return true;\n }\n const isNotEmpty = Array.isArray(field.value) && field.value.length > 0;\n if (isNotEmpty && field.field_type.collection_field_type.type === 'Complex') {\n return !!field.value.find(item => {\n const complexField = plainToClassFromExist(new CaseField(), {\n id: field.field_type.collection_field_type.id,\n field_type: field.field_type.collection_field_type,\n value: item.value,\n label: null,\n });\n return ReadFieldsFilterPipe.isValidComplex(complexField);\n });\n }\n return isNotEmpty;\n }\n\n private static isEmpty(value: any): boolean {\n return ReadFieldsFilterPipe.EMPTY_VALUES.indexOf(value) !== -1\n || value.length === 0;\n }\n\n private static isCompound(field: CaseField): boolean {\n return ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type];\n }\n\n private static isValidCompound(field: CaseField, value?: object): boolean {\n return ReadFieldsFilterPipe.isCompound(field)\n && ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type](field, value);\n }\n\n private static keepField(field: CaseField, value?: object, ignoreLabels = false): boolean {\n // We shouldn't ditch labels.\n if (!ignoreLabels && field.field_type.type === 'Label' && (field.label || '').length > 0) {\n return true;\n }\n // We also shouldn't ditch fields that will always come back with a null value.\n if (this.ALWAYS_NULL_FIELDS.indexOf(field.field_type.type) !== -1) {\n return true;\n }\n\n value = value || {};\n\n if (ReadFieldsFilterPipe.isCompound(field)) {\n return ReadFieldsFilterPipe.isValidCompound(field, value);\n }\n\n return !ReadFieldsFilterPipe.isEmpty(field.value)\n || !ReadFieldsFilterPipe.isEmpty(value[field.id]);\n }\n\n private static getValue(field: CaseField, values: any, index?: number): any {\n let value: any;\n if (index >= 0 ) {\n value = values[index].value[field.id];\n } else {\n value = values[field.id];\n }\n return ReadFieldsFilterPipe.isEmpty(field.value) ? value : field.value;\n }\n\n private static evaluateConditionalShow(field: CaseField, formValue: any, path?: string,\n formGroupAvaliable?: boolean, fieldId?: string): CaseField {\n if (field.display_context === 'HIDDEN') {\n field.hidden = true;\n } else if (field.show_condition) {\n let cond: ShowCondition;\n if (fieldId && field.show_condition.indexOf(fieldId) > -1 && !formGroupAvaliable && !!Object.keys(formValue).length) {\n const search = fieldId + '.';\n const searchRegExp = new RegExp(search, 'g');\n const replaceWith = '';\n cond = ShowCondition.getInstance(field.show_condition.replace(searchRegExp, replaceWith));\n } else {\n cond = ShowCondition.getInstance(field.show_condition);\n }\n field.hidden = !cond.match(formValue, path);\n } else {\n field.hidden = false;\n }\n return field;\n }\n\n /**\n * Filter out fields having no data to display and harmonise field values coming parent's value.\n */\n public transform(\n complexField: CaseField, keepEmpty?: boolean, index?: number,\n setupHidden = false, formGroup?: FormGroup | AbstractControl, path?: string): CaseField[] {\n if (!complexField || !complexField.field_type) {\n return [];\n }\n\n const fields = complexField.field_type.complex_fields || [];\n const values = complexField.value || {};\n let checkConditionalShowAgainst: any = values;\n let formGroupAvailable = false;\n if (formGroup) {\n checkConditionalShowAgainst = formGroup.value;\n formGroupAvailable = true;\n }\n\n return fields\n .map(f => {\n const clone = FieldsUtils.cloneObject(f);\n const value = ReadFieldsFilterPipe.getValue(f, values, index);\n if (!ReadFieldsFilterPipe.isEmpty(value)) {\n clone.value = value;\n }\n return clone;\n })\n .map(f => {\n if (!f.display_context) {\n f.display_context = complexField.display_context;\n }\n if (setupHidden) {\n ReadFieldsFilterPipe.evaluateConditionalShow(f, checkConditionalShowAgainst, path, formGroupAvailable, complexField.id);\n }\n return f;\n })\n .filter(f => keepEmpty || ReadFieldsFilterPipe.keepField(f));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseField } from '../../../domain/definition';\nimport { WizardPage } from '../../case-editor/domain';\n\n@Pipe({\n name: 'ccdPageFields'\n})\nexport class CcdPageFieldsPipe implements PipeTransform {\n\n public transform(page: WizardPage, dataFormGroup: FormGroup): CaseField {\n const complex_fields: CaseField[] = Object.keys(dataFormGroup.controls).map(key => {\n const control: AbstractControl = dataFormGroup.controls[key];\n return control['caseField'] as CaseField;\n }).filter(field => {\n return !!page.case_fields.find(pcf => pcf.id === field.id);\n }).sort((a, b) => a.order - b.order);\n const rawValue: any = dataFormGroup.value;\n const value: any = page.case_fields.reduce((acc: any, field: CaseField) => {\n const fieldValue: any = rawValue[field.id] || field.value;\n return {...acc, [field.id]: fieldValue};\n }, {});\n return plainToClassFromExist(new CaseField(), {\n id: page.id,\n label: page.label,\n display_context: 'READONLY',\n value,\n field_type: {\n id: page.id,\n type: 'Complex',\n complex_fields\n }\n });\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../../domain/definition';\n\n@Pipe({\n name: 'ccdCollectionTableCaseFieldsFilter'\n})\nexport class CcdCollectionTableCaseFieldsFilterPipe implements PipeTransform {\n\n public transform(objs: { [key: string]: any }[], caseField: CaseField, value: {}): CaseField {\n const fields: CaseField[] = objs.map((obj) => ({\n ...obj.value.caseField,\n type: obj.value.type.type ? obj.value.type.type : obj.value.type\n }));\n return plainToClassFromExist(new CaseField(), {\n id: caseField ? caseField.id : '',\n label: caseField ? caseField.label : '',\n display_context: 'READONLY',\n value,\n field_type: {\n id: caseField ? caseField.id : '',\n type: 'Complex',\n complex_fields: fields,\n }\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain';\n\n@Pipe({\n name: 'ccdCYAPageLabelFilter'\n})\nexport class CcdCYAPageLabelFilterPipe implements PipeTransform {\n\n public transform(caseFields: CaseField[]): CaseField[] {\n return caseFields.map((caseField: CaseField) => {\n if (caseField.field_type.collection_field_type &&\n caseField.field_type.collection_field_type.complex_fields &&\n caseField.field_type.collection_field_type.complex_fields.length) {\n caseField.field_type.collection_field_type.complex_fields = this.transform(\n caseField.field_type.collection_field_type.complex_fields\n );\n }\n if (caseField.field_type.complex_fields && caseField.field_type.complex_fields.length) {\n caseField.field_type.complex_fields = this.getNonLabelComplexFieldType(caseField.field_type.complex_fields);\n }\n\n return caseField;\n });\n }\n\n private readonly getNonLabelComplexFieldType = (complexFields: CaseField[]): CaseField[] =>\n complexFields.filter((caseField: CaseField) => caseField.field_type.type !== 'Label')\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseTab } from '../../../domain/case-view';\nimport { CaseField } from '../../../domain/definition';\n\n@Pipe({\n name: 'ccdTabFields'\n})\nexport class CcdTabFieldsPipe implements PipeTransform {\n\n public transform(tab: CaseTab): CaseField {\n const value: any = tab.fields.reduce((acc: any, field: CaseField) => {\n return {...acc, [field.id]: field.value};\n }, {});\n return plainToClassFromExist(new CaseField(), {\n id: tab.id,\n label: tab.label,\n display_context: 'READONLY',\n value,\n field_type: {\n id: tab.id,\n type: 'Complex',\n complex_fields: tab.fields\n }\n });\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractAppConfig } from '../../../../app.config';\n\n@Pipe({\n name: 'ccdDocumentUrl'\n})\nexport class DocumentUrlPipe implements PipeTransform {\n\n constructor(private readonly appConfig: AbstractAppConfig) {}\n\n public transform(value: string): string {\n const remoteHrsPattern = new RegExp(this.appConfig.getRemoteHrsUrl());\n value = value.replace(remoteHrsPattern, this.appConfig.getHrsUrl());\n const remoteDocumentManagementPattern = new RegExp(this.appConfig.getRemoteDocumentManagementUrl());\n return value.replace(remoteDocumentManagementPattern, this.appConfig.getDocumentManagementUrl());\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { WindowService } from '../../../services/window/window.service';\nimport { FileUploadStateService } from './file-upload-state.service';\n\n@Injectable()\nexport class FileUploadProgressGuard implements CanDeactivate<any> {\n\n public static readonly CONFIRM_MESSAGE = 'File upload in progress. Press “Cancel” to cancel the upload. Press “Ok” to continue the document upload.';\n\n constructor(\n private readonly fileUploadStateService: FileUploadStateService,\n private readonly windowService: WindowService\n ) {}\n\n public canDeactivate() {\n if (this.fileUploadStateService.isUploadInProgress()) {\n const userDecision = !this.windowService.confirm(FileUploadProgressGuard.CONFIRM_MESSAGE);\n if (userDecision) {\n this.fileUploadStateService.setUploadInProgress(false);\n }\n return userDecision;\n }\n return true;\n }\n\n}\n","import { Fee } from './fee.model';\n\nexport class FeeValue {\n public value: Fee;\n}\n","export class Fee {\n public FeeCode: string;\n public FeeAmount: string;\n public FeeDescription?: string;\n public FeeVersion: string;\n}\n","import { FeeValue } from './fee-value.model';\n\nexport class OrderSummary {\n public PaymentReference: string;\n public Fees: FeeValue[];\n public PaymentTotal: string;\n}\n","import { NgxMatDatetimePickerModule, NgxMatNativeDateModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { PaymentLibModule } from '@hmcts/ccpay-web-component';\nimport { NgxMdModule } from 'ngx-md';\n\nimport { HeadersModule, TabsModule } from '../../../components';\nimport { BannersModule } from '../../../components/banners/banners.module';\nimport { BodyModule } from '../../../components/body/body.module';\nimport { FootersModule } from '../../../components/footer/footers.module';\nimport { FormModule } from '../../../components/form/form.module';\n\nimport { PaletteUtilsModule } from './utils';\n\nimport { PipesModule } from '../../pipes/pipes.module';\nimport { FieldReadComponent, FieldReadLabelComponent, FieldWriteComponent } from './base-field';\n\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RouterModule } from '@angular/router';\nimport { LabelSubstitutorModule } from '../../directives/substitutor';\nimport { FormValidatorsService } from '../../services/form/form-validators.service';\nimport { WindowService } from '../../services/window';\nimport { ReadCaseLinkFieldComponent } from './case-link/read-case-link-field.component';\nimport { WriteCaseLinkFieldComponent } from './case-link/write-case-link-field.component';\nimport { ReadCollectionFieldComponent, WriteCollectionFieldComponent } from './collection';\nimport { CollectionCreateCheckerService } from './collection/collection-create-checker.service';\nimport { CcdCollectionTableCaseFieldsFilterPipe, CcdCYAPageLabelFilterPipe, CcdPageFieldsPipe, CcdTabFieldsPipe, FieldsFilterPipe, ReadComplexFieldCollectionTableComponent, ReadComplexFieldComponent, ReadComplexFieldRawComponent, ReadComplexFieldTableComponent, ReadFieldsFilterPipe, WriteComplexFieldComponent } from './complex';\nimport { ReadDateFieldComponent, WriteDateContainerFieldComponent, WriteDateFieldComponent } from './date';\nimport { DatetimePickerComponent } from './datetime-picker';\nimport { DocumentUrlPipe } from './document';\nimport { FileUploadProgressGuard } from './document/file-upload-progress.guard';\nimport { FileUploadStateService } from './document/file-upload-state.service';\nimport { DynamicListPipe, ReadDynamicListFieldComponent } from './dynamic-list';\nimport { DynamicRadioListPipe, ReadDynamicRadioListFieldComponent } from './dynamic-radio-list';\nimport { ReadEmailFieldComponent, WriteEmailFieldComponent } from './email';\nimport { FixedListPipe, ReadFixedListFieldComponent, WriteFixedListFieldComponent } from './fixed-list';\nimport { FixedRadioListPipe, ReadFixedRadioListFieldComponent, WriteFixedRadioListFieldComponent } from './fixed-radio-list';\nimport { CaseHistoryViewerFieldComponent, EventLogComponent, EventLogDetailsComponent, EventLogTableComponent } from './history';\nimport { LabelFieldComponent } from './label';\nimport { MarkdownComponent } from './markdown';\nimport { MoneyGbpInputComponent, ReadMoneyGbpFieldComponent, WriteMoneyGbpFieldComponent } from './money-gbp';\nimport { ReadMultiSelectListFieldComponent, WriteMultiSelectListFieldComponent } from './multi-select-list';\nimport { ReadNumberFieldComponent, WriteNumberFieldComponent } from './number';\nimport { ReadOrderSummaryFieldComponent, ReadOrderSummaryRowComponent, WriteOrderSummaryFieldComponent } from './order-summary';\nimport { ReadOrganisationFieldComponent, ReadOrganisationFieldRawComponent, ReadOrganisationFieldTableComponent, WriteOrganisationComplexFieldComponent, WriteOrganisationFieldComponent } from './organisation';\nimport { PaletteService } from './palette.service';\nimport { CasePaymentHistoryViewerFieldComponent } from './payment';\nimport { ReadPhoneUKFieldComponent, WritePhoneUKFieldComponent } from './phone-uk';\nimport { ReadTextFieldComponent, WriteTextFieldComponent } from './text';\nimport { ReadTextAreaFieldComponent, WriteTextAreaFieldComponent } from './text-area';\nimport { UnsupportedFieldComponent } from './unsupported-field.component';\nimport { WaysToPayFieldComponent } from './waystopay';\nimport { ReadYesNoFieldComponent, WriteYesNoFieldComponent, YesNoService } from './yes-no';\nimport { WriteAddressFieldComponent } from './address/write-address-field.component';\nimport { WriteDocumentFieldComponent } from './document/write-document-field.component'\nimport { WriteDynamicRadioListFieldComponent } from './dynamic-radio-list/write-dynamic-radio-list-field.component';\nimport { WriteDynamicListFieldComponent } from './dynamic-list/write-dynamic-list-field.component';\nimport { ReadDocumentFieldComponent } from './document/read-document-field.component';\nimport { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to';\n\nconst PALETTE_COMPONENTS = [\n UnsupportedFieldComponent,\n DatetimePickerComponent,\n WaysToPayFieldComponent,\n MarkdownComponent,\n FieldReadComponent,\n FieldWriteComponent,\n FieldReadLabelComponent,\n LabelFieldComponent,\n CasePaymentHistoryViewerFieldComponent,\n MoneyGbpInputComponent,\n CaseHistoryViewerFieldComponent,\n EventLogComponent,\n EventLogDetailsComponent,\n EventLogTableComponent,\n\n // // Read\n ReadTextFieldComponent,\n ReadTextAreaFieldComponent,\n ReadNumberFieldComponent,\n ReadEmailFieldComponent,\n ReadPhoneUKFieldComponent,\n ReadDateFieldComponent,\n ReadCollectionFieldComponent,\n ReadDocumentFieldComponent,\n\n // new\n ReadYesNoFieldComponent,\n ReadOrganisationFieldComponent,\n ReadOrganisationFieldTableComponent,\n ReadOrganisationFieldRawComponent,\n ReadOrderSummaryFieldComponent,\n ReadOrderSummaryRowComponent,\n ReadMoneyGbpFieldComponent,\n ReadMultiSelectListFieldComponent,\n ReadDynamicListFieldComponent,\n ReadFixedListFieldComponent,\n ReadFixedRadioListFieldComponent,\n ReadDynamicRadioListFieldComponent,\n ReadCaseLinkFieldComponent,\n ReadComplexFieldComponent,\n ReadComplexFieldRawComponent,\n ReadComplexFieldTableComponent,\n ReadComplexFieldCollectionTableComponent,\n\n // Write\n WriteAddressFieldComponent,\n WriteComplexFieldComponent,\n WriteOrganisationComplexFieldComponent,\n WriteDocumentFieldComponent,\n WriteDynamicListFieldComponent,\n WriteDynamicRadioListFieldComponent,\n WriteTextFieldComponent,\n WriteDateContainerFieldComponent,\n WriteTextAreaFieldComponent,\n WritePhoneUKFieldComponent,\n WriteNumberFieldComponent,\n WriteEmailFieldComponent,\n WriteDateFieldComponent,\n\n // new\n WriteYesNoFieldComponent,\n WriteOrganisationFieldComponent,\n WriteOrganisationComplexFieldComponent,\n WriteOrderSummaryFieldComponent,\n WriteMoneyGbpFieldComponent,\n WriteDateContainerFieldComponent,\n WriteMultiSelectListFieldComponent,\n WriteFixedListFieldComponent,\n WriteFixedRadioListFieldComponent,\n WriteCaseLinkFieldComponent,\n WriteCollectionFieldComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n BrowserModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteUtilsModule,\n PipesModule,\n BannersModule,\n HeadersModule,\n FootersModule,\n BodyModule,\n FormModule,\n TabsModule,\n LabelSubstitutorModule,\n NgxMdModule,\n NgxMatDatetimePickerModule,\n NgxMatTimepickerModule,\n NgxMatNativeDateModule,\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n PaymentLibModule,\n ScrollToModule.forRoot()\n ],\n declarations: [\n CcdCollectionTableCaseFieldsFilterPipe,\n CcdCYAPageLabelFilterPipe,\n CcdTabFieldsPipe,\n ReadFieldsFilterPipe,\n FieldsFilterPipe,\n CcdPageFieldsPipe,\n FixedListPipe,\n FixedRadioListPipe,\n DynamicListPipe,\n DynamicRadioListPipe,\n DocumentUrlPipe,\n\n ...PALETTE_COMPONENTS\n ],\n exports: [\n TabsModule,\n PaletteUtilsModule,\n PipesModule,\n\n ...PALETTE_COMPONENTS\n ],\n providers: [\n YesNoService,\n CollectionCreateCheckerService,\n PaletteService,\n FormValidatorsService,\n FileUploadStateService,\n FileUploadProgressGuard,\n WindowService,\n {provide: MAT_DATE_LOCALE, useValue: 'en-GB'}\n ]\n})\nexport class PaletteModule {\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PaletteModule } from '../palette';\nimport { CaseHeaderComponent } from './case-header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n PaletteModule\n ],\n declarations: [\n CaseHeaderComponent,\n ],\n exports: [\n CaseHeaderComponent,\n ]\n})\nexport class CaseHeaderModule {}\n","<pagination-template #p=\"paginationApi\" [id]=\"id\" [maxSize]=\"maxSize\" (pageChange)=\"pageChange.emit($event)\"\n (pageBoundsCorrection)=\"pageBoundsCorrection.emit($event)\">\n <nav role=\"navigation\" aria-label=\"Pagination\">\n <ul class=\"ngx-pagination\" role=\"navigation\" [attr.aria-label]=\"screenReaderPaginationLabel\"\n [class.responsive]=\"responsive\" *ngIf=\"!(autoHide && p.pages.length <= 1)\">\n <li class=\"pagination-previous\" [class.disabled]=\"p.isFirstPage()\" *ngIf=\"directionLinks\">\n <a tabindex=\"0\" *ngIf=\"1 < p.getCurrent()\" (keyup.enter)=\"p.previous()\" (click)=\"p.previous()\"\n [attr.aria-label]=\"previousLabel + ' ' + screenReaderPageLabel\">\n {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </a>\n <span *ngIf=\"p.isFirstPage()\">\n {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </span>\n </li>\n <li class=\"small-screen\">\n {{ p.getCurrent() }} / {{ p.getLastPage() }}\n </li>\n <li [class.current]=\"p.getCurrent() === page.value\" [class.ellipsis]=\"page.label === '...'\"\n *ngFor=\"let page of p.pages\">\n <a tabindex=\"0\" (keyup.enter)=\"p.setCurrent(page.value)\" (click)=\"p.setCurrent(page.value)\"\n *ngIf=\"p.getCurrent() !== page.value\">\n <span class=\"show-for-sr\">{{ screenReaderPageLabel }} </span>\n <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span>\n </a>\n <ng-container *ngIf=\"p.getCurrent() === page.value\">\n <span class=\"show-for-sr\">{{ screenReaderCurrentLabel }} </span>\n <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span>\n </ng-container>\n </li>\n <li class=\"pagination-next\" [class.disabled]=\"p.isLastPage()\" *ngIf=\"directionLinks\">\n <a tabindex=\"0\" *ngIf=\"!p.isLastPage()\" (keyup.enter)=\"p.next()\" (click)=\"p.next()\"\n [attr.aria-label]=\"nextLabel + ' ' + screenReaderPageLabel\">\n {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </a>\n <span *ngIf=\"p.isLastPage()\">\n {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </span>\n </li>\n </ul>\n </nav>\n</pagination-template>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nfunction coerceToBoolean(input: string | boolean): boolean {\n return !!input && input !== 'false';\n}\n\n@Component({\n selector: 'ccd-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss']\n})\nexport class PaginationComponent {\n @Input()\n public visibilityLabel: string;\n @Input() public id: string;\n @Input() public maxSize = 7;\n @Input() public previousLabel = 'Previous';\n @Input() public nextLabel = 'Next';\n @Input() public screenReaderPaginationLabel = 'Pagination';\n @Input() public screenReaderPageLabel = 'page';\n @Input() public screenReaderCurrentLabel = `You're on page`;\n @Output() public pageChange: EventEmitter<number> = new EventEmitter<number>();\n @Output() public pageBoundsCorrection: EventEmitter<number> = new EventEmitter<number>();\n\n private _directionLinks = true;\n private _autoHide = false;\n private _responsive = false;\n\n @Input()\n public get directionLinks(): boolean {\n return this._directionLinks;\n }\n\n public set directionLinks(value: boolean) {\n this._directionLinks = coerceToBoolean(value);\n }\n\n @Input()\n public get autoHide(): boolean {\n return this._autoHide;\n }\n\n public set autoHide(value: boolean) {\n this._autoHide = coerceToBoolean(value);\n }\n\n @Input()\n public get responsive(): boolean {\n return this._responsive;\n }\n\n public set responsive(value: boolean) {\n this._responsive = coerceToBoolean(value);\n }\n}\n","<table class=\"{{'govuk-table ' + classes}}\">\n <caption class=\"govuk-table__caption\">{{caption}}</caption>\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header\" scope=\"col\" *ngIf=\"selectionEnabled\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-all\" name=\"select-all\" type=\"checkbox\" (change)=\"selectAll()\"\n [checked]=\"allOnPageSelected()\" [disabled]=\"!canAnyBeShared()\" />\n <!-- This label element is used to hide the standard checkbox with a govuk-styled one -->\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-all\">\n </label>\n </div>\n </th>\n <th class=\"govuk-table__header\" scope=\"col\" *ngFor=\"let h of tableConfig.columnConfigs\">{{h.header}}</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <ng-container *ngFor=\"let c of cases | paginate: { itemsPerPage: pageSize, currentPage: currentPageNo, totalItems: totalResultsCount }\">\n <tr data-selector=\"table-row\" class=\"govuk-table__row\">\n <th data-selector=\"table-header\" class=\"govuk-table__header\" scope=\"row\" *ngIf=\"selectionEnabled\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ c[tableConfig.idField] }}\" name=\"select-{{ c[tableConfig.idField] }}\"\n type=\"checkbox\" (change)=\"changeSelection(c)\" [checked]=\"isSelected(c)\" [disabled]=\"!canBeShared(c)\" (keyup)=\"onKeyUp($event, c)\" />\n <!-- This label element is used to hide the standard checkbox with a govuk-styled one -->\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ c[tableConfig.idField] }}\">\n </label>\n </div>\n </th>\n <ng-container *ngFor=\"let col of tableConfig.columnConfigs; first as isFirst\">\n <th data-selector=\"table-header\" class=\"govuk-table__header\" scope=\"row\" *ngIf=\"isFirst && firstCellIsHeader\">\n <ng-container *ngIf=\"!col.type || col.type === 'text'\">{{c[col.key]}}</ng-container>\n <ng-container *ngIf=\"col.type === 'link' && c.routerLink\">\n <a class=\"govuk-link\" [routerLink]=\"c.routerLink\">{{c[col.key]}}</a>\n </ng-container>\n </th>\n <td data-selector=\"table-cell\" class=\"govuk-table__cell\" *ngIf=\"!(isFirst && firstCellIsHeader)\" [ngSwitch]=\"col?.type\">\n <ng-container *ngIf=\"col.type === 'link' && c.routerLink\">\n <a class=\"govuk-link\" [routerLink]=\"c.routerLink\">{{c[col.key]}}</a>\n </ng-container>\n <ng-container *ngSwitchCase=\"'money'\">-{{ c[col.key] | currency:'GBP' }}</ng-container>\n <ng-container *ngSwitchCase=\"'date'\">{{formatDate(c[col.key])}}</ng-container>\n <ng-container *ngSwitchCase=\"'dateAtTime'\">{{formatDateAtTime(c[col.key])}}</ng-container>\n <ng-container *ngSwitchDefault>{{c[col.key]}}</ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n</table>\n<ccd-pagination *ngIf=\"totalResultsCount > pageSize\"\n (pageChange)=\"goToPage($event)\" \n></ccd-pagination>\n","import { formatDate } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BrowserService } from '../../services/browser/browser.service';\n\nexport class DateTimeFormatUtils {\n public static formatDateAtTime(date: Date, is24Hour: boolean): string {\n return `${formatDate(date, 'dd MMM yyyy', 'en-GB')} at ${DateTimeFormatUtils.formatTime(date, is24Hour)}`;\n }\n\n public static formatTime(date: Date, is24Hour: boolean): string {\n return is24Hour ? formatDate(date, 'HH:mm', 'en-GB') : formatDate(date, 'h:mm a', 'en-GB').toLowerCase();\n }\n}\n\n@Component({\n selector: 'ccd-case-list',\n templateUrl: './case-list.component.html',\n styleUrls: ['./case-list.component.scss']\n})\nexport class CaseListComponent {\n\n @Input() public classes = '';\n\n @Input() public caption: string;\n @Input() public firstCellIsHeader = false;\n\n @Input() public cases: object[];\n\n @Input() public tableConfig: TableConfig = {\n idField: 'id',\n columnConfigs: [\n { header: 'Date', key: 'date', type: 'text' },\n { header: 'Amount', key: 'amount' }\n ]\n };\n\n @Input() public selectionEnabled = false;\n\n @Output() public selection = new EventEmitter<any[]>();\n\n @Input() public selectedCases: any[] = [];\n\n @Input() public currentPageNo: number;\n\n @Input() public totalResultsCount?: number;\n\n @Input() public pageSize?: number;\n\n @Output() public pageChange = new EventEmitter();\n\n constructor(private readonly browserService: BrowserService) { }\n\n public formatDate(date: Date): string {\n return date ? formatDate(date, 'dd MMM yyyy', 'en-GB') : '-';\n }\n\n public formatDateAtTime(date: Date): string {\n return date ? DateTimeFormatUtils.formatDateAtTime(date, false) : '-';\n }\n\n public canBeShared(c: any): boolean {\n return true;\n }\n\n public canAnyBeShared(): boolean {\n return this.cases.some(c => this.canBeShared(c));\n }\n\n public selectAll(): void {\n if (this.allOnPageSelected()) {\n // All cases already selected, so unselect all on this page\n this.selectedCases = [];\n } else {\n this.cases.forEach(aCase => {\n if (!this.isSelected(aCase) && this.canBeShared(aCase)) {\n this.selectedCases = [... this.selectedCases, aCase];\n }\n });\n }\n this.selection.emit(this.selectedCases);\n }\n\n public changeSelection(aCase: any): void {\n if (this.isSelected(aCase)) {\n this.selectedCases.forEach((aSelectedCase, i) => {\n if (aCase.case_id === aSelectedCase.case_id) {\n this.selectedCases = this.selectedCases.slice(0, i).concat(this.selectedCases.slice(i + 1));\n }\n });\n } else {\n if (this.canBeShared(aCase)) {\n this.selectedCases = [...this.selectedCases, aCase];\n }\n }\n this.selection.emit(this.selectedCases);\n }\n\n public isSelected(aCase: any): boolean {\n if (this.selectedCases) {\n for (let index = 0, length = this.selectedCases.length; index < length; index++) {\n if (aCase.case_id === this.selectedCases[index].case_id) {\n return true;\n }\n }\n }\n return false;\n }\n\n public allOnPageSelected(): boolean {\n return !this.cases.some(aCase => !this.isSelected(aCase));\n }\n\n public onKeyUp($event: KeyboardEvent, aCase: any): void {\n if ($event.key === 'Space') {\n if (this.browserService.isFirefox || this.browserService.isSafari || this.browserService.isIEOrEdge) {\n this.changeSelection(aCase);\n }\n }\n }\n\n public goToPage(pageNumber: number) {\n this.currentPageNo = pageNumber;\n this.pageChange.emit(pageNumber);\n }\n}\n\nexport class TableColumnConfig {\n public header: string;\n public key: string;\n public type?: string;\n constructor() {\n this.header = '';\n this.key = '';\n this.type = 'text';\n }\n}\n\nexport class TableConfig {\n // Specifies which field of an item uniquely identifies it among others of the same type\n public idField: string;\n\n public columnConfigs: TableColumnConfig[];\n\n constructor() {\n this.idField = '';\n this.columnConfigs = [];\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { CaseEventData } from '../../domain/case-event-data.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\nimport { HttpErrorService, HttpService } from '../http';\n\n@Injectable()\nexport class DraftService {\n\n public static readonly V2_MEDIATYPE_DRAFT_CREATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-create.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_UPDATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-update.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_READ =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-read.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_DELETE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-delete.v2+json;charset=UTF-8';\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {}\n\n public createDraft(ctid: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_CREATE)\n .set('Content-Type', 'application/json');\n return this.http\n .post(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public updateDraft(ctid: string, draftId: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid) + draftId;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_UPDATE)\n .set('Content-Type', 'application/json');\n return this.http\n .put(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public getDraft(draftId: string): Observable<CaseView> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_READ)\n .set('Content-Type', 'application/json');\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public deleteDraft(draftId: string): Observable<{} | any> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_DELETE)\n .set('Content-Type', 'application/json');\n return this.http\n .delete(url, {headers, observe: 'body'}).pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public createOrUpdateDraft(caseTypeId: string, draftId: string, caseEventData: CaseEventData): Observable<Draft> {\n if (!draftId) {\n return this.createDraft(caseTypeId, caseEventData);\n } else {\n return this.updateDraft(caseTypeId, Draft.stripDraftId(draftId), caseEventData);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class ErrorNotifierService {\n public errorSource: Subject<any> = new Subject<any>();\n public error = this.errorSource.asObservable();\n\n public announceError(error: any) {\n this.errorSource.next(error);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class EventStatusService {\n public static readonly CALLBACK_STATUS_INCOMPLETE = 'INCOMPLETE_CALLBACK';\n public static readonly DELETE_DRAFT_STATUS_INCOMPLETE = 'INCOMPLETE_DELETE_DRAFT';\n public static readonly CALLBACK_STATUS_COMPLETE = 'CALLBACK_COMPLETED';\n public static readonly DELETE_DRAFT_STATUS_COMPLETE = 'DELETE_DRAFT_COMPLETED';\n\n public static isIncomplete (eventStatus: string) {\n if (!eventStatus) {\n return false;\n }\n return EventStatusService.CALLBACK_STATUS_INCOMPLETE === eventStatus\n || EventStatusService.DELETE_DRAFT_STATUS_INCOMPLETE === eventStatus;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { Wizard } from '../../components/case-editor/domain/wizard.model';\nimport { ShowCondition } from '../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldsUtils } from './fields.utils';\n\n// @dynamic\n@Injectable()\nexport class FieldsPurger {\n\n constructor(private readonly fieldsUtils: FieldsUtils) {}\n\n /**\n * Deletes a field value by setting the value of the corresponding {@link FormControl} to null (or an empty array\n * if the field type is `Collection`), except when the field type is `Complex` or `Document`. For `Complex` field\n * types, this recursive method is called until simple or \"base\" field types are reached. For `Document` field\n * types, its _sub-field_ `FormControl` values are set to null.\n *\n * @param formGroup The `FormGroup` instance containing the `FormControl` for the specified field\n * @param field The `CaseField` whose value is to be deleted in the backend\n * @param parentField Reference to the parent `CaseField`. Used for checking specifically where a Complex field and\n * its sub-fields have `retain_hidden_value` set to `true`, but the field's parent has it set to `false` or undefined\n */\n public deleteFieldValue(formGroup: FormGroup, field: CaseField, parentField?: CaseField): void {\n const fieldType: FieldTypeEnum = field.field_type.type;\n const fieldControl = formGroup.get(field.id);\n\n if (fieldControl) {\n switch (fieldType) {\n case 'Complex':\n /**\n * If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for:\n *\n * * Any sub-fields where retain_hidden_value is false/undefined, if the parent field has\n * retain_hidden_value = true;\n * * ALL sub-fields if the parent field has retain_hidden_value = true BUT its _own_ parent has\n * retain_hidden_value = false/undefined (thus overriding anything else);\n * * ALL sub-fields if the parent field has retain_hidden_value = false/undefined;\n * * Any Complex sub-fields *regardless of their retain_hidden_value* (in order to inspect the sub-fields\n * of a Complex type within another Complex type)\n */\n if (field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n (complexSubField.field_type.type !== 'Complex' &&\n (field.retain_hidden_value\n ? !complexSubField.retain_hidden_value || (parentField && !parentField.retain_hidden_value)\n : true))) {\n // The fieldControl is cast to a FormGroup because a Complex field type uses this as its underlying\n // implementation\n this.deleteFieldValue(fieldControl as FormGroup, complexSubField, field);\n }\n }\n }\n break;\n case 'Collection':\n // If it is a collection of Complex types, loop through each one; else fall through to be handled as a\n // collection of simple types (in the same way as MultiSelectList), unless it's a collection of Document\n // types, which requires different handling\n const collectionFieldType = field.field_type.collection_field_type;\n if (collectionFieldType.type === 'Complex' && collectionFieldType.complex_fields.length > 0) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControl.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of collectionFieldType.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value, passing in the parent FormGroup\n const parentFormGroup: FormGroup = (fieldControl as FormArray).at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }));\n }\n break;\n } else if (collectionFieldType.type === 'Document') {\n // Get the array of Document field values\n const documentFieldValues = fieldControl.value as any[];\n\n // For each Document field value, set all its property values to null (this is not accepted by the\n // back-end but will be handled by sanitiseObject() in FormValueService before sending - see below for\n // the single Document case)\n if (documentFieldValues) {\n documentFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Get the FormGroup containing the FormControl for the sub-field and set its value to null\n (fieldControl as FormArray).at(index).get(`value.${subFieldId}`).setValue(null);\n }));\n }\n break;\n }\n // Omitted \"break\" is intentional because a collection should be handled as per MultiSelectList if it is\n // not a collection of Complex types\n // tslint:disable-next-line: no-switch-case-fall-through\n case 'MultiSelectList':\n // Field control should be a FormArray, so map each of its values to null\n // NOTE: The FormArray cannot just be set to an empty array because Angular checks that all existing values\n // of a FormArray are present; setting the control's value to an empty array causes a runtime error\n fieldControl.setValue(fieldControl.value.map(() => null));\n break;\n case 'Document':\n // NOTE: The field control (a FormGroup in this case) cannot just be set to null because Angular checks that\n // all existing values of a FormGroup are present; setting the control's value to null causes a runtime error\n const documentFieldValue = fieldControl.value;\n for (const key in documentFieldValue) {\n if (fieldControl.get(key)) {\n // The back-end doesn't accept null as a valid value for any of the Document field type properties but\n // this is handled by sanitiseObject() in FormValueService, returning a null object for the entire\n // Document field, if any of its properties is null - which is accepted by the back-end\n fieldControl.get(key).setValue(null);\n }\n }\n break;\n // Note: the default case applies to DynamicList fields, too\n default:\n fieldControl.setValue(null);\n }\n }\n }\n\n public clearHiddenFields(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger, currentPageId: string): void {\n this.clearHiddenFieldForFieldShowCondition(currentPageId, form, wizard, eventTrigger);\n this.clearHiddenFieldForPageShowCondition(form, wizard, eventTrigger);\n }\n\n private clearHiddenFieldForPageShowCondition(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger): void {\n const currentEventState = this.fieldsUtils.getCurrentEventState(eventTrigger, form);\n wizard.pages.forEach(wp => {\n if (this.hasShowConditionPage(wp, currentEventState)) {\n const condition = new ShowCondition(wp.show_condition);\n if (this.isHidden(condition, currentEventState)) {\n this.resetPage(form, wp);\n }\n }\n });\n }\n\n private clearHiddenFieldForFieldShowCondition(currentPageId: string, form: FormGroup, wizard: Wizard,\n eventTrigger: CaseEventTrigger): void {\n const formFields = form.getRawValue();\n const currentPage: WizardPage = wizard.getPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(eventTrigger, form));\n currentPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(currentPage, wpf);\n if (this.hasShowConditionField(case_field, formFields)) {\n const condition = new ShowCondition(case_field.show_condition);\n if (this.isHidden(condition, formFields.data) && !(this.isReadonly(case_field))) {\n this.resetField(form, case_field);\n }\n }\n this.retainHiddenValueByFieldType(case_field, form);\n });\n }\n\n private retainHiddenValueByFieldType(field: CaseField, form: any): void {\n // so far only applies to the new field type OrganisationPolicy which needs to retain the default case role value\n // for other case fields there should be no side effects\n if (field && field.field_type && field.field_type.id === 'OrganisationPolicy') {\n // <bubble_wrap>\n // Doing some null checking to stop it from falling over.\n const data: FormGroup = form.get('data') as FormGroup;\n if (data) {\n const fieldGroup: FormGroup = data.controls[field.id] as FormGroup;\n if (fieldGroup) {\n const caseRoleFormControl: FormControl = fieldGroup.get('OrgPolicyCaseAssignedRole') as FormControl;\n if (caseRoleFormControl) {\n caseRoleFormControl.enable();\n }\n }\n }\n // </bubble_wrap>\n }\n }\n\n private isHidden(condition: ShowCondition, formFields: any): boolean {\n return !condition.match(formFields);\n }\n\n private findCaseFieldByWizardPageFieldId(currentPage: WizardPage, wizardPageField: WizardPageField): CaseField {\n return currentPage.case_fields.find(cf => cf.id === wizardPageField.case_field_id);\n }\n\n private hasShowConditionPage(wizardPage: WizardPage, formFields: any): boolean {\n return wizardPage.show_condition && formFields[this.getShowConditionKey(wizardPage.show_condition)];\n }\n\n private hasShowConditionField(case_field: CaseField, formFields: any): boolean {\n return case_field.show_condition && formFields.data[this.getShowConditionKey(case_field.show_condition)];\n }\n\n private getShowConditionKey(show_condition: string): string {\n // Need to allow for negated conditions, i.e. !=, as well as regular ones (=)\n // Also need to allow for conditions specified using the \"CONTAINS\" keyword\n return show_condition.split(/!=|=|CONTAINS/)[0];\n }\n\n private resetField(form: FormGroup, field: CaseField): void {\n /**\n * If the hidden field's value is to be retained, do nothing (except if it is a Complex type or collection of\n * Complex types). This is a change to the previous behaviour (which used to clear the field value but remove it\n * from submission as an update to the back-end). The new behaviour is to leave the field as is, so if the field\n * is hidden but then un-hidden before form submission, any previously entered value is retained.\n *\n * For Complex field types, an additional check of sub-fields is required. The same applies to a collection of\n * Complex types.\n */\n if (field.retain_hidden_value) {\n const fieldType: FieldTypeEnum = field.field_type.type;\n // If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for any sub-fields\n // where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their retain_hidden_value*\n // (in order to inspect the sub-fields of a Complex type within another Complex type)\n if (fieldType === 'Complex' && field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n !complexSubField.retain_hidden_value) {\n // Check for the existence of the parent FormGroup corresponding to the Complex field; if it exists, call\n // deleteFieldValue() to delete the sub-field\n const parentFormGroup = (form.get('data') as FormGroup).controls[field.id] as FormGroup;\n if (parentFormGroup) {\n this.deleteFieldValue(parentFormGroup, complexSubField);\n }\n }\n }\n } else if (fieldType === 'Collection' && field.field_type.collection_field_type.type === 'Complex' &&\n field.field_type.collection_field_type.complex_fields.length > 0) {\n // If the field is a collection of Complex types, loop through each one and call deleteFieldValue() for any\n // sub-fields where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their\n // retain_hidden_value* (in order to inspect the sub-fields of a Complex type within another Complex type)\n\n // Get the array of field controls corresponding to the Complex field values\n const fieldControls = (form.get('data') as FormGroup).controls[field.id] as FormArray;\n\n if (fieldControls) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControls.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of field.field_type.collection_field_type.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value if retain_hidden_value is false, OR if the sub-field type is\n // Complex and regardless of retain_hidden_value, passing in the parent FormGroup\n if (subCaseField &&\n ((subCaseField.field_type.type === 'Complex' && subCaseField.field_type.complex_fields.length > 0) ||\n !subCaseField.retain_hidden_value)) {\n const parentFormGroup: FormGroup = fieldControls.at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }\n }));\n }\n }\n }\n } else {\n // Delete the field value\n this.deleteFieldValue(form.get('data') as FormGroup, field);\n }\n }\n\n private resetPage(form: FormGroup, wizardPage: WizardPage): void {\n wizardPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(wizardPage, wpf);\n this.resetField(form, case_field);\n });\n }\n\n private getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n private isObject(elem: any): boolean {\n return this.getType(elem) === 'Object';\n }\n\n // TODO: call isReadOnly on CaseFields once we make it available\n private isReadonly(case_field: CaseField): boolean {\n return case_field.display_context.toUpperCase() === 'READONLY';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\n@Injectable()\nexport class FormErrorService {\n\n public mapFieldErrors(errors: { id: string; message: string }[], form: FormGroup, errorKey: string): void {\n\n errors.forEach(error => {\n const formControl = this.getFormControl(form, error.id);\n\n if (formControl) {\n formControl.setErrors({\n [errorKey]: error.message\n });\n }\n });\n }\n\n private getFormControl(form: FormGroup, fieldId: string): FormControl {\n const fields = fieldId.split('.');\n\n let group: FormGroup = form;\n let inArray = false;\n let control: FormControl;\n fields.every((field, index) => {\n if (index === fields.length - 1) {\n control = group.controls[field] as FormControl;\n } else {\n group = group.controls[field] as FormGroup;\n\n if (inArray && group.controls['value']) {\n group = group.controls['value'] as FormGroup;\n }\n\n if (group && group.constructor && FormArray.name === group.constructor.name) {\n inArray = true;\n } else {\n inArray = false;\n }\n }\n return !!group;\n });\n\n return control;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\n\n@Injectable()\nexport class JurisdictionService {\n\n public readonly selectedJurisdictionSource = new Subject<Jurisdiction>();\n\n public selectedJurisdiction = this.selectedJurisdictionSource.asObservable();\n\n public announceSelectedJurisdiction(jurisdiction: Jurisdiction) {\n this.selectedJurisdictionSource.next(jurisdiction);\n }\n\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Banner } from '../../domain/definition/banner.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class BannersService {\n public static readonly V2_MEDIATYPE_BANNERS = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-banners.v2+json;charset=UTF-8';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getBanners(jurisdictionReferences: string[]): Observable<Banner[]> {\n const url = this.appConfig.getBannersUrl();\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', BannersService.V2_MEDIATYPE_BANNERS)\n .set('Content-Type', 'application/json');\n let params = new HttpParams();\n jurisdictionReferences.forEach(reference => params = params.append('ids', reference));\n return this.httpService\n .get(url, {params, headers, observe: 'body'})\n .pipe(\n map(body => body.banners)\n );\n }\n}\n","export enum NavigationOrigin {\n DRAFT_DELETED,\n ERROR_DELETING_DRAFT,\n DRAFT_RESUMED,\n EVENT_TRIGGERED,\n NO_READ_ACCESS_REDIRECTION\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class NavigationNotifierService {\n public navigationSource: BehaviorSubject<any> = new BehaviorSubject<any>({});\n public navigation = this.navigationSource.asObservable();\n\n public announceNavigation(origin: any) {\n this.navigationSource.next(origin);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Profile } from '../../domain/profile/profile.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class ProfileService {\n\n public static readonly V2_MEDIATYPE_USER_PROFILE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-user-profile.v2+json;charset=UTF-8';\n private static readonly URL = '/internal/profile';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public get(): Observable<Profile> {\n const url = this.appConfig.getCaseDataUrl() + ProfileService.URL;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', ProfileService.V2_MEDIATYPE_USER_PROFILE)\n .set('Content-Type', 'application/json');\n\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map((p: object) => plainToClass(Profile, p))\n );\n }\n\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { OptionsType } from '..';\n\n@Injectable()\nexport class RequestOptionsBuilder {\n\n public static readonly FIELD_PREFIX = 'case.';\n\n /**\n * Assess the value to see if it should be included in the request options.\n * If it's null or an \"empty\" string, it shouldn't be.\n *\n * @param value The value to be assessed.\n */\n private static includeParam(value: any): boolean {\n if (value) {\n if (typeof(value) === 'string') {\n return value.trim().length > 0;\n }\n return true;\n }\n return false;\n }\n\n public buildOptions(metaCriteria: object, caseCriteria: object, view?: SearchView): OptionsType {\n // TODO: This should probably be the now built-in URLSearchParams but it\n // requires a bigger refactor and there are bigger fish to fry right now.\n let params = new HttpParams();\n\n if (view) {\n params = params.set('view', view);\n }\n\n if (metaCriteria) {\n for (const criterion of Object.keys(metaCriteria)) {\n // EUI-3490. Make sure the parameter should be included for adding it.\n // This was already handled by the old URLSearchParams mechanism.\n if (RequestOptionsBuilder.includeParam(metaCriteria[criterion])) {\n params = params.set(criterion, metaCriteria[criterion]);\n }\n }\n }\n\n if (caseCriteria) {\n for (const criterion of Object.keys(caseCriteria)) {\n if (RequestOptionsBuilder.includeParam(caseCriteria[criterion])) {\n const key = RequestOptionsBuilder.FIELD_PREFIX + criterion;\n const value = caseCriteria[criterion].trim ? caseCriteria[criterion].trim() : caseCriteria[criterion];\n params = params.set(key, value.replace(/’/i, `'`));\n }\n }\n }\n\n const options: OptionsType = { params, observe: 'body'};\n return options;\n }\n\n}\n\nexport type SearchView = 'SEARCH' | 'WORKBASKET';\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { SearchInput } from '../../components/search-filters';\nimport { SearchResultView } from '../../domain/search/search-result-view.model';\nimport { HttpService, OptionsType } from '../http/http.service';\nimport { LoadingService } from '../loading/loading.service';\nimport { RequestOptionsBuilder, SearchView } from '../request/request.options.builder';\n\n@Injectable()\nexport class SearchService {\n public static readonly V2_MEDIATYPE_SEARCH_INPUTS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-search-input-details.v2+json;charset=UTF-8';\n public static readonly VIEW_SEARCH = 'SEARCH';\n public static readonly VIEW_WORKBASKET = 'WORKBASKET';\n public static readonly FIELD_PREFIX = 'case.';\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly appConfig: AbstractAppConfig,\n private readonly httpService: HttpService,\n private readonly requestOptionsBuilder: RequestOptionsBuilder,\n private readonly loadingService: LoadingService) { }\n\n public search(jurisdictionId: string, caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView): Observable<SearchResultView> {\n const url = this.appConfig.getApiUrl() + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types/${caseTypeId}`\n + `/cases`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const loadingToken = this.loadingService.register();\n return this.httpService\n .get(url, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public searchCases(caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView, sort?: {column: string, order: number}): Observable<{}> {\n const url = this.appConfig.getCaseDataUrl() + `/internal/searchCases?ctid=${caseTypeId}&use_case=${view}`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const body: {} = {\n sort,\n size: this.appConfig.getPaginationPageSize()\n };\n const loadingToken = this.loadingService.register();\n return this.httpService\n .post(url, body, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getSearchInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/search-inputs`;\n }\n\n public getSearchInputs(jurisdictionId: string, caseTypeId: string): Observable<SearchInput[]> {\n const url = this.getSearchInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', SearchService.V2_MEDIATYPE_SEARCH_INPUTS)\n .set('Content-Type', 'application/json');\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, { headers, observe: 'body' })\n .pipe(\n map(body => {\n const searchInputs = body.searchInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n searchInputs.forEach(item => {\n item.field.label = item.label;\n item.field.display_context_parameter = item.display_context_parameter;\n });\n } else {\n throw new Error('Response expired');\n }\n return searchInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class RouterHelperService {\n public getUrlSegmentsFromRoot(route: ActivatedRouteSnapshot): string[] {\n return route.pathFromRoot\n .filter(r => r.url && r.url.length)\n .reduce((acc, r) => {\n r.url.forEach(url => {\n acc.push(url.path);\n });\n return acc;\n }, []);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { WorkbasketInputModel } from '../../domain';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class WorkbasketInputFilterService {\n public static readonly V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-workbasket-input-details.v2+json;charset=UTF-8';\n\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getWorkbasketInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/work-basket-inputs`;\n }\n\n public getWorkbasketInputs(jurisdictionId: string, caseTypeId: string): Observable<WorkbasketInputModel[]> {\n const url = this.getWorkbasketInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', WorkbasketInputFilterService.V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS)\n .set('Content-Type', 'application/json');\n\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => {\n const workbasketInputs = body.workbasketInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n workbasketInputs.forEach(item => {\n item.field.label = item.label;\n if (item.display_context_parameter) {\n item.field.display_context_parameter = item.display_context_parameter;\n }\n });\n } else {\n throw new Error('Response expired');\n }\n return workbasketInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig as AppConfig } from '../../../app.config';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class DefinitionsService {\n\n constructor(private readonly http: HttpService, private readonly appConfig: AppConfig) {}\n\n public getCaseTypes(jurisdictionId: string, access: string): Observable<CaseTypeLite[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types?access=${access}`;\n\n return this.http\n .get(url).pipe(map(response => response));\n }\n\n public getJurisdictions(access: string): Observable<Jurisdiction[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions?access=${access}`;\n\n return this.http\n .get(url)\n .pipe(map(response => response));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DefinitionsService } from './definitions.service';\n\n@NgModule({\n providers: [\n DefinitionsService\n ]\n})\n\nexport class DefinitionsModule {}\n","import { Injectable } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SearchResultViewColumn } from '../../../domain/search/search-result-view-column.model';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SearchResultViewItemComparator } from '../../../domain/search/sorting/search-result-view-item-comparator';\n\n@Injectable()\nexport class SearchResultViewItemComparatorFactory {\n\n public createSearchResultViewItemComparator(column: SearchResultViewColumn): SearchResultViewItemComparator {\n const fieldId = column.case_field_id;\n switch (column.case_field_type.type) {\n case ('MultiSelectList'): {\n return this.textArrayComparator(fieldId);\n }\n case ('Number'):\n case ('MoneyGBP'): {\n return this.numberComparator(fieldId);\n }\n case ('Text'):\n case ('TextArea'):\n case ('Email'):\n case ('Date'):\n case ('DateTime'):\n case ('Label'):\n case ('Postcode'):\n case ('YesOrNo'):\n case ('PhoneUK'):\n case ('FixedList'): {\n return this.stringComparator(fieldId);\n }\n default: {\n return undefined;\n }\n }\n }\n\n private numberComparator(fieldId: string): SearchResultViewItemComparator {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA === null ? 0 : fieldA;\n fieldB = isUndefined(fieldB) || fieldB === null ? 0 : fieldB;\n return fieldA - fieldB;\n }\n } as SearchResultViewItemComparator;\n }\n\n private stringComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n\n private textArrayComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.join().toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.join().toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LoadingService } from './loading.service';\n\n@NgModule({\n imports: [\n ],\n declarations: [\n ],\n exports: [\n ],\n providers: [\n LoadingService\n ]\n})\n\nexport class LoadingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgxPaginationModule, PaginatePipe } from 'ngx-pagination';\nimport { PaginationComponent } from './pagination.component';\n\n@NgModule({\n imports: [\n CommonModule,\n NgxPaginationModule\n ],\n declarations: [\n PaginationComponent\n ],\n exports: [\n PaginationComponent,\n PaginatePipe\n ],\n})\nexport class PaginationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport { BrowserService } from '../../services';\nimport { PaginationModule } from '../pagination/pagination.module';\nimport { CaseListComponent } from './case-list.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n NgxPaginationModule,\n PaginationModule\n ],\n declarations: [CaseListComponent],\n exports: [CaseListComponent],\n providers: [\n BrowserService\n ]\n})\nexport class CaseListModule { }\n","\n<h2 class=\"heading-h2\" aria-label=\"Filters\">Filters</h2>\n<form class=\"global-display\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-jurisdiction\">Jurisdiction</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">Select a value</option>\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-type\">Case type</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-type\"\n name=\"case-type\" [(ngModel)]=\"selected.caseType\" [disabled]=\"isCaseTypesDropdownDisabled()\"\n (change)=\"onCaseTypeIdChange()\" aria-controls=\"search-result\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">Select a value</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-state\">State</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-state\"\n name=\"state\" [(ngModel)]=\"selected.caseState\" [disabled]=\"isCaseStatesDropdownDisabled()\"\n aria-controls=\"search-result\">\n <option [ngValue]=\"null\">Any</option>\n <option *ngFor=\"let cs of selectedCaseTypeStates\" [ngValue]=\"cs\">{{cs.name}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndWorkbasketInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let workbasketInput of workbasketInputs\">\n <ccd-field-write [caseField]=\"workbasketInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" [isInSearchBlock]=\"true\" (keyup.enter)=\"apply(null)\"></ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <button type=\"button\" class=\"button workbasket-filters-apply\" (click)=\"apply(true)\" [disabled]=\"isApplyButtonDisabled()\" title=\"Apply filter\" aria-label=\"Apply filter\">Apply</button> &nbsp;&nbsp;&nbsp;\n <button type=\"button\" (click)=\"reset()\" class=\"button button-secondary\" title=\"Reset filter\" aria-label=\"Reset filter\">Reset</button>\n</form>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { CaseState } from '../../domain/definition/case-state.model';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { WorkbasketInputModel } from '../../domain/workbasket/workbasket-input.model';\nimport { AlertService } from '../../services/alert/alert.service';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { WorkbasketInputFilterService } from '../../services/workbasket/workbasket-input-filter.service';\n\nconst FORM_GROUP_VAL_LOC_STORAGE = 'workbasket-filter-form-group-value';\nconst SAVED_QUERY_PARAM_LOC_STORAGE = 'savedQueryParams';\nconst REGION_LIST_AND_FRC_FILTER = 'regionList';\n\n@Component({\n selector: 'ccd-workbasket-filters',\n templateUrl: './workbasket-filters.component.html',\n styleUrls: ['./workbasket-filters.component.scss']\n})\nexport class WorkbasketFiltersComponent implements OnInit {\n\n public static readonly PARAM_JURISDICTION = 'jurisdiction';\n public static readonly PARAM_CASE_TYPE = 'case-type';\n public static readonly PARAM_CASE_STATE = 'case-state';\n public caseFields: CaseField[];\n\n @Input()\n public jurisdictions: Jurisdiction[];\n\n @Input()\n public defaults;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n public workbasketInputs: WorkbasketInputModel[];\n public workbasketInputsReady: boolean;\n\n public workbasketDefaults: boolean;\n\n public selected: {\n init?: boolean,\n jurisdiction?: Jurisdiction,\n caseType?: CaseTypeLite,\n caseState?: CaseState,\n formGroup?: FormGroup,\n page?: number,\n metadataFields?: string[]\n };\n\n public formGroup: FormGroup = new FormGroup({});\n\n public selectedJurisdictionCaseTypes?: CaseTypeLite[];\n public selectedCaseTypeStates?: CaseState[];\n\n public initialised = false;\n\n constructor(\n private readonly route: ActivatedRoute,\n private readonly workbasketInputFilterService: WorkbasketInputFilterService,\n private readonly orderService: OrderService,\n private readonly jurisdictionService: JurisdictionService,\n private readonly alertService: AlertService,\n private readonly windowService: WindowService) {\n }\n\n public ngOnInit(): void {\n this.selected = {};\n this.route.queryParams.subscribe(params => {\n if (!this.initialised || !params || !Object.keys(params).length) {\n this.initFilters(false);\n this.initialised = true;\n }\n });\n }\n\n public apply(init): void {\n // Save filters as query parameters for current route\n const queryParams = {};\n if (this.selected.jurisdiction) {\n queryParams[WorkbasketFiltersComponent.PARAM_JURISDICTION] = this.selected.jurisdiction.id;\n }\n if (this.selected.caseType) {\n queryParams[WorkbasketFiltersComponent.PARAM_CASE_TYPE] = this.selected.caseType.id;\n }\n if (this.selected.caseState) {\n queryParams[WorkbasketFiltersComponent.PARAM_CASE_STATE] = this.selected.caseState.id;\n }\n // without explicitly preserving alerts any message on the page\n // would be cleared out because of this initial navigation.\n // The above is only true if no alerts were set prior to loading case list page.\n if (!this.alertService.isPreserveAlerts()) {\n this.alertService.setPreserveAlerts(!this.initialised);\n }\n if (Object.keys(this.formGroup.controls).length === 0) {\n this.selected.formGroup = JSON.parse(localStorage.getItem(FORM_GROUP_VAL_LOC_STORAGE));\n } else {\n // Update form group filters\n this.updateFormGroupFilters();\n\n this.selected.formGroup = this.formGroup;\n }\n this.selected.init = init;\n this.selected.page = 1;\n this.selected.metadataFields = this.getMetadataFields();\n if (init) {\n this.windowService.setLocalStorage(SAVED_QUERY_PARAM_LOC_STORAGE, JSON.stringify(queryParams));\n if (Object.keys(this.formGroup.controls).length > 0) {\n this.windowService.setLocalStorage(FORM_GROUP_VAL_LOC_STORAGE, JSON.stringify(this.formGroup.value));\n }\n }\n // Apply filters\n this.onApply.emit({selected: this.selected, queryParams});\n this.setFocusToTop();\n }\n\n public reset(): void {\n this.windowService.removeLocalStorage(FORM_GROUP_VAL_LOC_STORAGE);\n this.windowService.removeLocalStorage(SAVED_QUERY_PARAM_LOC_STORAGE);\n setTimeout (() => {\n this.resetFieldsWhenNoDefaults();\n this.onReset.emit(true);\n }, 500);\n }\n\n public getMetadataFields(): string[] {\n if (this.workbasketInputs) {\n return this.workbasketInputs\n .filter(workbasketInput => workbasketInput.field.metadata === true)\n .map(workbasketInput => workbasketInput.field.id);\n }\n }\n\n public onJurisdictionIdChange() {\n if (this.selected.jurisdiction) {\n this.jurisdictionService.announceSelectedJurisdiction(this.selected.jurisdiction);\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes.length > 0 ? this.selected.jurisdiction.caseTypes : null;\n // Line was too long for linting so refactored it.\n if (this.workbasketDefaults && this.selectedJurisdictionCaseTypes) {\n this.selected.caseType = this.selectedJurisdictionCaseTypes[0];\n } else {\n this.selected.caseType = null;\n }\n\n this.selected.caseState = null;\n this.clearWorkbasketInputs();\n\n if (!this.isApplyButtonDisabled()) {\n this.onCaseTypeIdChange();\n }\n } else {\n this.resetCaseType();\n this.resetCaseState();\n }\n }\n\n public onCaseTypeIdChange(): void {\n if (this.selected.caseType) {\n this.selectedCaseTypeStates = this.sortStates(this.selected.caseType.states);\n this.selected.caseState = null;\n this.formGroup = new FormGroup({});\n this.clearWorkbasketInputs();\n if (!this.isApplyButtonDisabled()) {\n this.workbasketInputFilterService.getWorkbasketInputs(this.selected.jurisdiction.id, this.selected.caseType.id).pipe(\n take(1)\n ).subscribe(workbasketInputs => {\n this.workbasketInputsReady = true;\n this.workbasketInputs = workbasketInputs\n .sort(this.orderService.sortAsc);\n const formValue = this.windowService.getLocalStorage(FORM_GROUP_VAL_LOC_STORAGE);\n\n workbasketInputs.forEach(item => {\n if (item.field.elementPath) {\n item.field.id = item.field.id + '.' + item.field.elementPath;\n }\n item.field.label = item.label;\n if (formValue) {\n const searchFormValueObject = JSON.parse(formValue);\n item.field.value = searchFormValueObject[item.field.id];\n }\n });\n this.getCaseFields();\n }, error => {\n console.log('Workbasket input fields request will be discarded reason: ', error.message);\n });\n }\n } else {\n this.resetCaseState();\n }\n }\n\n public isCaseTypesDropdownDisabled(): boolean {\n return !this.selectedJurisdictionCaseTypes;\n }\n\n public isCaseStatesDropdownDisabled(): boolean {\n return !this.selected.caseType || !(this.selected.caseType.states && this.selected.caseType.states.length > 0);\n }\n\n public isApplyButtonDisabled(): boolean {\n return !(this.selected.jurisdiction && this.selected.caseType);\n }\n\n public isSearchableAndWorkbasketInputsReady(): boolean {\n return this.selected.jurisdiction && this.selected.caseType && this.workbasketInputsReady;\n }\n\n /**\n * This method is used to clear the previously used\n * form group control filter values to make sure only the\n * currently selected form group control filter values are present.\n *\n * Has been implemented for 'Region and FRC filters' and can be extended\n * in future to incorporate other dynamic filters.\n */\n public updateFormGroupFilters(): void {\n // Read the form group local storage\n const formGroupLS = JSON.parse(this.windowService.getLocalStorage(FORM_GROUP_VAL_LOC_STORAGE));\n\n // Form group local storage is available and contains regionList property\n if (!!formGroupLS && formGroupLS.hasOwnProperty(REGION_LIST_AND_FRC_FILTER)) {\n if (this.formGroup.get(REGION_LIST_AND_FRC_FILTER)) {\n // If regionList value does not match between local storage and form group\n // then the filter value has been changed and we need to clear the old filter values\n if (formGroupLS[REGION_LIST_AND_FRC_FILTER] !== this.formGroup.get(REGION_LIST_AND_FRC_FILTER).value) {\n for (const key in formGroupLS) {\n if (formGroupLS.hasOwnProperty(key)) {\n const value = formGroupLS[key];\n // Clear the filter form group control values if it has a value in local storage\n // The regionList form group control value should be ignored as it always contain the latest value\n if (key !== REGION_LIST_AND_FRC_FILTER && value != null) {\n this.formGroup.get(key).setValue(null);\n }\n }\n }\n }\n }\n }\n }\n\n private sortStates(states: CaseState[]) {\n return states.sort(this.orderService.sortAsc);\n }\n\n /**\n * Try to initialise filters based on query parameters or workbasket defaults.\n * Query parameters, when available, take precedence over workbasket defaults.\n */\n private initFilters(init: boolean) {\n const savedQueryParams = this.windowService.getLocalStorage(SAVED_QUERY_PARAM_LOC_STORAGE);\n const routeSnapshot: ActivatedRouteSnapshot = this.route.snapshot;\n if (savedQueryParams) {\n routeSnapshot.queryParams = JSON.parse(savedQueryParams);\n }\n const selectedJurisdictionId = routeSnapshot.queryParams[WorkbasketFiltersComponent.PARAM_JURISDICTION] ||\n (this.defaults && this.defaults.jurisdiction_id);\n if (selectedJurisdictionId) {\n this.selected.jurisdiction = this.jurisdictions.find(j => selectedJurisdictionId === j.id);\n if (this.selected.jurisdiction && this.selected.jurisdiction.caseTypes.length > 0) {\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes;\n this.selected.caseType = this.selectCaseType(this.selected, this.selectedJurisdictionCaseTypes, routeSnapshot);\n if (this.selected.caseType) {\n this.onCaseTypeIdChange();\n this.selected.caseState = this.selectCaseState(this.selected.caseType, routeSnapshot);\n }\n this.workbasketDefaults = true;\n }\n } else {\n this.selected.jurisdiction = null;\n }\n this.apply(init);\n }\n\n private selectCaseState(caseType: CaseTypeLite, routeSnapshot: ActivatedRouteSnapshot): CaseState {\n let caseState;\n if (caseType) {\n const selectedCaseStateId = this.selectCaseStateIdFromQueryOrDefaults(routeSnapshot, (this.defaults && this.defaults.state_id));\n caseState = caseType.states.find(ct => selectedCaseStateId === ct.id);\n }\n return caseState ? caseState : null;\n }\n\n private selectCaseStateIdFromQueryOrDefaults(routeSnapshot: ActivatedRouteSnapshot, defaultCaseStateId: string): string {\n return routeSnapshot.queryParams[WorkbasketFiltersComponent.PARAM_CASE_STATE] || defaultCaseStateId;\n }\n\n private selectCaseType(selected: any, caseTypes: CaseTypeLite[], routeSnapshot: ActivatedRouteSnapshot): CaseTypeLite {\n let caseType;\n if (selected.jurisdiction) {\n const selectedCaseTypeId = this.selectCaseTypeIdFromQueryOrDefaults(routeSnapshot, (this.defaults && this.defaults.case_type_id));\n caseType = caseTypes.find(ct => selectedCaseTypeId === ct.id);\n }\n return caseType ? caseType : caseTypes[0];\n }\n\n private selectCaseTypeIdFromQueryOrDefaults(routeSnapshot: ActivatedRouteSnapshot, defaultCaseTypeId: string): string {\n return routeSnapshot.queryParams[WorkbasketFiltersComponent.PARAM_CASE_TYPE] || defaultCaseTypeId;\n }\n\n private resetFieldsWhenNoDefaults() {\n this.resetCaseState();\n this.resetCaseType();\n this.clearWorkbasketInputs();\n this.workbasketDefaults = false;\n this.selected.jurisdiction = null;\n this.initialised = false;\n this.initFilters(true);\n }\n\n private clearWorkbasketInputs() {\n this.workbasketInputsReady = false;\n this.workbasketInputs = [];\n }\n\n private resetCaseState() {\n this.defaults.state_id = null;\n this.selected.caseState = null;\n this.selectedCaseTypeStates = null;\n }\n\n private resetCaseType() {\n this.selected.caseType = undefined; // option should be blank rather than \"Select a value\" in case of reset.\n this.selectedJurisdictionCaseTypes = null;\n }\n\n private setFocusToTop() {\n window.scrollTo(0, 0);\n\n const topContainer = document.getElementById('search-result-heading__text');\n if (topContainer) {\n topContainer.focus();\n }\n }\n\n private getCaseFields(): void {\n if (this.workbasketInputs) {\n this.caseFields = this.workbasketInputs.map(item => FieldsUtils.convertToCaseField(item.field));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ConditionalShowModule } from '../../directives/conditional-show/conditional-show.module';\nimport { AlertService } from '../../services/alert/alert.service';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { WorkbasketInputFilterService } from '../../services/workbasket/workbasket-input-filter.service';\nimport { PaletteModule } from '../palette/palette.module';\nimport { WorkbasketFiltersComponent } from './workbasket-filters.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteModule,\n ConditionalShowModule\n ],\n declarations: [\n WorkbasketFiltersComponent,\n ],\n exports: [\n WorkbasketFiltersComponent,\n ],\n providers: [\n WorkbasketInputFilterService,\n OrderService,\n JurisdictionService,\n AlertService,\n WindowService,\n ]\n})\nexport class WorkbasketFiltersModule {}\n","export type AccessTypeEnum =\n 'read'\n | 'create'\n | 'update';\n\nexport const READ_ACCESS: AccessTypeEnum = 'read';\nexport const CREATE_ACCESS: AccessTypeEnum = 'create';\nexport const UPDATE_ACCESS: AccessTypeEnum = 'update';\n","<ccd-workbasket-filters\n *ngIf=\"isVisible\"\n [jurisdictions]=\"jurisdictions\"\n [defaults]=\"defaults\"\n (onApply)=\"onWrapperApply($event)\"\n (onReset)=\"onWrapperReset($event)\"\n></ccd-workbasket-filters>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { READ_ACCESS } from '../../domain/case-view/access-types.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\n\n@Component({\n selector: 'ccd-case-list-filters',\n templateUrl: './case-list-filters.component.html'\n})\nexport class CaseListFiltersComponent implements OnInit {\n\n @Input()\n public defaults;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n public jurisdictions: Jurisdiction[];\n public isVisible: boolean;\n\n constructor(\n private readonly definitionsService: DefinitionsService,\n ) {\n }\n\n public ngOnInit(): void {\n this.isVisible = false;\n\n this.definitionsService.getJurisdictions(READ_ACCESS)\n .subscribe(jurisdictions => {\n this.isVisible = jurisdictions.length > 0;\n this.jurisdictions = jurisdictions;\n });\n }\n\n public onWrapperApply(value) {\n this.onApply.emit(value);\n }\n\n public onWrapperReset(value) {\n this.onReset.emit(value);\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AlertService, DefinitionsModule, JurisdictionService, OrderService, WindowService,\n WorkbasketInputFilterService } from '../../services';\nimport { PaletteModule } from '../palette';\nimport { WorkbasketFiltersModule } from '../workbasket-filters';\nimport { CaseListFiltersComponent } from './case-list-filters.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteModule,\n DefinitionsModule,\n WorkbasketFiltersModule\n ],\n declarations: [\n CaseListFiltersComponent,\n ],\n exports: [\n CaseListFiltersComponent,\n ],\n providers: [\n WorkbasketInputFilterService,\n OrderService,\n JurisdictionService,\n AlertService,\n WindowService\n ]\n})\nexport class CaseListFiltersModule {}\n","export class CallbackErrorsContext {\n public trigger_text: string;\n public ignore_warning: boolean;\n}\n","<div *ngIf=\"hasErrors() || hasWarnings()\" class=\"error-summary\" role=\"group\"\n aria-label=\"Cannot continue because the service reported one or more errors or warnings\" tabindex=\"-1\">\n <ng-container *ngIf=\"hasErrors()\">\n <h3 class=\"heading-h3 error-summary-heading\">\n Errors\n </h3>\n <ul id=\"errors\" class=\"error-summary-list\">\n <li *ngFor=\"let errorMsg of error.callbackErrors\">\n {{errorMsg}}\n </li>\n </ul>\n </ng-container>\n <!-- Add a break for spacing if there are both errors and warnings -->\n <br *ngIf=\"hasErrors() && hasWarnings()\">\n <ng-container *ngIf=\"hasWarnings()\">\n <h3 class=\"heading-h3 error-summary-heading\">\n Warnings\n </h3>\n <ul id=\"warnings\" class=\"error-summary-list\">\n <li *ngFor=\"let warningMsg of error.callbackWarnings\">\n {{warningMsg}}\n </li>\n </ul>\n </ng-container>\n</div>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { HttpError } from '../../domain/http';\nimport { CallbackErrorsContext } from './domain/error-context';\n\n@Component({\n selector: 'ccd-callback-errors',\n templateUrl: './callback-errors.html'\n})\nexport class CallbackErrorsComponent implements OnInit, OnDestroy {\n\n public static readonly TRIGGER_TEXT_SUBMIT = 'Submit';\n public static readonly TRIGGER_TEXT_START = 'Start';\n public static readonly TRIGGER_TEXT_GO = 'Go';\n public static readonly TRIGGER_TEXT_IGNORE = 'Ignore Warning and Go';\n\n @Input()\n public triggerTextIgnore: string = CallbackErrorsComponent.TRIGGER_TEXT_IGNORE;\n @Input()\n public triggerTextContinue: string = CallbackErrorsComponent.TRIGGER_TEXT_SUBMIT;\n @Input()\n public callbackErrorsSubject: Subject<any> = new Subject();\n\n @Output()\n public callbackErrorsContext: EventEmitter<CallbackErrorsContext> = new EventEmitter();\n\n public error: HttpError;\n\n public ngOnInit(): void {\n this.callbackErrorsSubject.subscribe(errorEvent => {\n this.error = errorEvent;\n if (this.hasWarnings() || this.hasErrors() || this.hasInvalidData()) {\n const callbackErrorsContext: CallbackErrorsContext = this.buildCallbackErrorsContext();\n this.callbackErrorsContext.emit(callbackErrorsContext);\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.callbackErrorsSubject) {\n this.callbackErrorsSubject.unsubscribe();\n }\n }\n\n public hasErrors(): boolean {\n return this.error\n && this.error.callbackErrors\n && this.error.callbackErrors.length;\n }\n\n public hasWarnings(): boolean {\n return this.error\n && this.error.callbackWarnings\n && this.error.callbackWarnings.length;\n }\n\n private buildCallbackErrorsContext(): CallbackErrorsContext {\n const errorContext: CallbackErrorsContext = new CallbackErrorsContext();\n if (this.hasWarnings() && !this.hasErrors() && !this.hasInvalidData()) {\n errorContext.ignore_warning = true;\n errorContext.trigger_text = this.triggerTextIgnore;\n } else {\n errorContext.ignore_warning = false;\n errorContext.trigger_text = this.triggerTextContinue;\n }\n return errorContext;\n }\n\n private hasInvalidData(): boolean {\n return this.error\n && this.error.details\n && this.error.details.field_errors\n && this.error.details.field_errors.length;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CallbackErrorsComponent } from './callback-errors.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n CallbackErrorsComponent\n ],\n exports: [\n CallbackErrorsComponent,\n ]\n})\nexport class ErrorsModule {}\n","<form (ngSubmit)=\"apply()\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"cc-jurisdiction\">Jurisdiction</label>\n <select class=\"form-control ccd-dropdown\" id=\"cc-jurisdiction\" name=\"jurisdiction\" [formControl]=\"filterJurisdictionControl\" (change)=\"onJurisdictionIdChange()\">\n <option value=\"\">--Select a value--</option>\n <option *ngFor=\"let j of jurisdictions\" [value]=\"j.id\">{{j.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"cc-case-type\">Case type</label>\n <select class=\"form-control ccd-dropdown\" id=\"cc-case-type\" name=\"case-type\" [formControl]=\"filterCaseTypeControl\" (change)=\"onCaseTypeIdChange()\">\n <option value=\"\">--Select a value--</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [value]=\"ct.id\">{{ct.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"cc-event\">Event</label>\n <select class=\"form-control ccd-dropdown\" id=\"cc-event\" name=\"event\" [formControl]=\"filterEventControl\" (change)=\"onEventIdChange()\">\n <option value=\"\">--Select a value--</option>\n <option *ngFor=\"let e of selectedCaseTypeEvents\" [value]=\"e.id\">{{e.name}}</option>\n </select>\n </div>\n\n <button type=\"submit\" class=\"button\" [disabled]=\"!isCreatable()\">{{startButtonText}}</button>\n</form>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { CREATE_ACCESS } from '../../domain/case-view/access-types.model';\nimport { CaseEvent } from '../../domain/definition/case-event.model';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { SessionStorageService } from '../../services/session/session-storage.service';\nimport { CreateCaseFiltersSelection } from './create-case-filters-selection.model';\n\n@Component({\n selector: 'ccd-create-case-filters',\n templateUrl: './create-case-filters.component.html'\n})\nexport class CreateCaseFiltersComponent implements OnInit {\n\n @Input()\n public isDisabled: boolean;\n @Input()\n public startButtonText: string;\n @Output()\n public selectionSubmitted: EventEmitter<CreateCaseFiltersSelection> = new EventEmitter();\n @Output()\n public selectionChanged: EventEmitter<any> = new EventEmitter();\n\n public formGroup: FormGroup = new FormGroup({});\n\n public selected: {\n jurisdiction?: Jurisdiction,\n caseType?: CaseTypeLite,\n event?: CaseEvent,\n formGroup?: FormGroup\n };\n\n public jurisdictions: Jurisdiction[];\n public selectedJurisdictionCaseTypes?: CaseTypeLite[];\n public selectedCaseTypeEvents?: CaseEvent[];\n\n public filterJurisdictionControl: FormControl;\n public filterCaseTypeControl: FormControl;\n public filterEventControl: FormControl;\n\n constructor(\n private readonly orderService: OrderService,\n private readonly definitionsService: DefinitionsService,\n private readonly sessionStorageService: SessionStorageService\n ) { }\n\n public ngOnInit() {\n this.selected = {};\n this.initControls();\n this.definitionsService.getJurisdictions(CREATE_ACCESS)\n .subscribe(jurisdictions => {\n this.jurisdictions = jurisdictions;\n this.selectJurisdiction(this.jurisdictions, this.filterJurisdictionControl);\n });\n if (document.getElementById('cc-jurisdiction')) {\n document.getElementById('cc-jurisdiction').focus();\n }\n }\n\n public onJurisdictionIdChange(): void {\n this.resetCaseType();\n this.resetEvent();\n if (this.filterJurisdictionControl.value !== '') {\n this.formGroup.controls['caseType'].enable();\n this.selected.jurisdiction = this.findJurisdiction(this.jurisdictions, this.filterJurisdictionControl.value);\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes;\n this.selectCaseType(this.selectedJurisdictionCaseTypes, this.filterCaseTypeControl);\n }\n }\n\n public onCaseTypeIdChange(): void {\n this.resetEvent();\n if (this.filterCaseTypeControl.value !== '') {\n this.selected.caseType = this.findCaseType(this.selectedJurisdictionCaseTypes, this.filterCaseTypeControl.value);\n this.formGroup.controls['event'].enable();\n this.selectedCaseTypeEvents = this.sortEvents(this.selected.caseType.events);\n this.selectEvent(this.selectedCaseTypeEvents, this.filterEventControl);\n }\n }\n\n public onEventIdChange(): void {\n this.emitChange();\n if (this.filterEventControl.value !== '') {\n this.selected.event = this.findEvent(this.selectedCaseTypeEvents, this.filterEventControl.value);\n } else {\n this.selected.event = null;\n }\n }\n\n public isCreatable(): boolean {\n return !this.isEmpty(this.selected) &&\n !this.isEmpty(this.selected.jurisdiction) &&\n !this.isEmpty(this.selected.caseType) &&\n !this.isEmpty(this.selected.event) &&\n !this.isDisabled;\n }\n\n public apply() {\n this.selectionSubmitted.emit({\n jurisdictionId: this.selected.jurisdiction.id,\n caseTypeId: this.selected.caseType.id,\n eventId: this.selected.event.id\n });\n }\n\n public initControls(): void {\n this.filterJurisdictionControl = new FormControl('');\n this.formGroup.addControl('jurisdiction', this.filterJurisdictionControl);\n this.filterCaseTypeControl = new FormControl({ value: '', disabled: true });\n this.formGroup.addControl('caseType', this.filterCaseTypeControl);\n this.filterEventControl = new FormControl({ value: '', disabled: true });\n this.formGroup.addControl('event', this.filterEventControl);\n }\n\n public emitChange(): void {\n setTimeout(() => { // workaround to prevent 'ExpressionChangedAfterItHasBeenCheckedError'\n if (this.selectionChanged) {\n this.selectionChanged.emit();\n }\n }, 0);\n }\n\n private sortEvents(events: CaseEvent[]): CaseEvent[] {\n return this.orderService.sort(this.retainEventsWithCreateRights(this.retainEventsWithNoPreStates(events)));\n }\n\n private retainEventsWithNoPreStates(events: CaseEvent[]): CaseEvent[] {\n return events.filter(event => event.pre_states.length === 0);\n }\n\n private retainEventsWithCreateRights(events: CaseEvent[]): CaseEvent[] {\n const userProfile = JSON.parse(this.sessionStorageService.getItem('userDetails'));\n return events.filter(event => userProfile && userProfile.roles &&\n !!userProfile.roles.find(role => this.hasCreateAccess(event, role)));\n }\n\n private hasCreateAccess(caseEvent: CaseEvent, role: any): boolean {\n return !!caseEvent.acls.find(acl => acl.role === role && acl.create === true);\n }\n\n private selectJurisdiction(jurisdictions: Jurisdiction[], filterJurisdictionControl: FormControl) {\n if (jurisdictions.length === 1) {\n filterJurisdictionControl.setValue(jurisdictions[0].id);\n this.onJurisdictionIdChange();\n }\n }\n\n private selectCaseType(caseTypes: CaseTypeLite[], filterCaseTypeControl: FormControl) {\n if (caseTypes.length === 1) {\n filterCaseTypeControl.setValue(caseTypes[0].id);\n this.onCaseTypeIdChange();\n }\n }\n\n private selectEvent(events: CaseEvent[], filterEventControl: FormControl) {\n if (events.length === 1) {\n filterEventControl.setValue(events[0].id);\n this.onEventIdChange();\n }\n }\n\n private findJurisdiction(jurisdictions: Jurisdiction[], id: string): Jurisdiction {\n return jurisdictions.find(j => j.id === id);\n }\n\n private findCaseType(caseTypes: CaseTypeLite[], id: string): CaseTypeLite {\n return caseTypes.find(caseType => caseType.id === id);\n }\n\n private findEvent(events: CaseEvent[], id: string): CaseEvent {\n return events.find(event => event.id === id);\n }\n\n private resetCaseType(): void {\n this.emitChange();\n this.filterCaseTypeControl.setValue('');\n this.selected.caseType = null;\n this.selectedJurisdictionCaseTypes = [];\n this.formGroup.controls['caseType'].disable();\n }\n\n private resetEvent(): void {\n this.emitChange();\n this.filterEventControl.setValue('');\n this.selected.event = null;\n this.selectedCaseTypeEvents = [];\n this.formGroup.controls['event'].disable();\n }\n\n private isEmpty(value: any): boolean {\n return value === null || value === undefined;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DefinitionsModule } from '../../services/definitions/definitions.module';\nimport { ErrorsModule } from '../error/errors.module';\nimport { CreateCaseFiltersComponent } from './create-case-filters.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DefinitionsModule,\n ErrorsModule,\n ],\n declarations: [\n CreateCaseFiltersComponent\n ],\n exports: [\n CreateCaseFiltersComponent\n ]\n})\n\nexport class CreateCaseFiltersModule {}\n","export class CreateCaseFiltersSelection {\n public jurisdictionId: string;\n public caseTypeId: string;\n public eventId: string;\n\n constructor() {\n this.jurisdictionId = 'TEST',\n this.caseTypeId = 'TestAddressBookCase',\n this.eventId = 'startCase';\n }\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-delete-or-cancel-dialog',\n templateUrl: './delete-or-cancel-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class DeleteOrCancelDialogComponent {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<DeleteOrCancelDialogComponent>) {}\n\n public delete() {\n this.result = 'Delete';\n this.matDialogRef.close(this.result);\n }\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n}\n","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Are you sure you want to delete this draft?</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You are about to delete this draft. Are you sure you want to proceed?</span>\n </div>\n <div>\n <button type=\"button\" title=\"Delete\" class=\"button action-button\" (click)=\"delete()\">Delete draft</button>\n <button type=\"button\" title=\"Cancel\" class=\"button button-secondary\" (click)=\"cancel()\">Cancel</button>\n </div>\n </div>\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-save-or-discard-dialog',\n templateUrl: './save-or-discard-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class SaveOrDiscardDialogComponent {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<SaveOrDiscardDialogComponent>) {}\n\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n public save() {\n this.result = 'Save';\n this.matDialogRef.close(this.result);\n }\n public discard() {\n this.result = 'Discard';\n this.matDialogRef.close(this.result);\n }\n}\n","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Would you like to save changes to this page?</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You will be taken back to your case list.</span>\n </div>\n <div>\n <button type=\"button\" title=\"Save\" class=\"button action-button\" (click)=\"save()\">Save</button>\n <button type=\"button\" title=\"Discard\" class=\"button button-secondary\" (click)=\"discard()\">Discard</button>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DeleteOrCancelDialogComponent } from './delete-or-cancel-dialog';\nimport { DocumentDialogComponent } from './document-dialog';\nimport { RemoveDialogComponent } from './remove-dialog';\nimport { SaveOrDiscardDialogComponent } from './save-or-discard-dialog';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n declarations: [\n DocumentDialogComponent,\n DeleteOrCancelDialogComponent,\n SaveOrDiscardDialogComponent,\n RemoveDialogComponent,\n ],\n exports: [\n DocumentDialogComponent,\n DeleteOrCancelDialogComponent,\n SaveOrDiscardDialogComponent,\n RemoveDialogComponent,\n ]\n})\nexport class DialogsModule {}\n","<!-- Cloned from rpx-xui-webapp src/app/components/error-message/error-message.component.html -->\n<ng-container *ngIf=\"error\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">{{error.title}}</h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a routerLink=\".\" [fragment]=\"error.fieldId\">{{error.description}}</a>\n </li>\n </ul>\n </div>\n </div>\n</ng-container>\n","/**\n * Cloned from rpx-xui-webapp src/app/components/error-message/error-message.component.ts\n */\nimport { Component, Input } from '@angular/core';\n\nimport { ErrorMessage } from '../../domain';\n\n@Component({\n selector: 'exui-error-message',\n templateUrl: './error-message.component.html'\n})\nexport class ErrorMessageComponent {\n @Input() public error: ErrorMessage;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ActivityModule } from '../activity';\nimport { ErrorMessageComponent } from './error-message.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n RouterModule,\n ActivityModule\n ],\n declarations: [\n ErrorMessageComponent\n ],\n exports: [\n ErrorMessageComponent\n ]\n})\nexport class EventMessageModule {}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-multiple-tasks-exist',\n templateUrl: './multiple-tasks-exist.component.html'\n})\nexport class MultipleTasksExistComponent {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Multiple tasks exist</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Multiple tasks exist</h2>\n\n <p>You're starting work which could complete more than one of the active tasks for this case.</p>\n\n <p>Return to tasks tab and start the event from there.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ActivatedRoute, NavigationExtras, Router } from '@angular/router';\n\n@Component({\n selector: 'app-no-tasks-available',\n templateUrl: './no-tasks-available.component.html'\n})\nexport class NoTasksAvailableComponent {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">No task available</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">No task available</h2>\n\n <p>You should have an assigned task for this event, but something has gone wrong.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { Judicialworker } from '../../../domain/work-allocation/judicial-worker.model';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\n\n@Injectable()\nexport class JudicialworkerService {\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {\n }\n\n public getJudicialworkers(userIds: string[], serviceId: string): Observable<Judicialworker[]> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/getJudicialUsers`;\n return this.http\n .post(url, {userIds, services: [serviceId]})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { CaseworkersByService } from '../../../domain/work-allocation/case-worker.model';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\n\n@Injectable()\nexport class CaseworkerService {\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {\n }\n\n public getCaseworkers(serviceId): Observable<CaseworkersByService[]> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/retrieveCaseWorkersForServices`;\n return this.http\n .post(url, { serviceIds: [serviceId]})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n}\n","<div class=\"govuk-!-margin-9\" *ngIf=\"assignedUserName\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task assignment required</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task assignment required</h2>\n\n <p>This task is assigned to {{assignedUserName}}. You must assign it to yourself to continue.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { Task } from '../../../../domain/work-allocation/Task';\nimport { CaseworkerService } from '../../../case-editor/services/case-worker.service';\nimport { JudicialworkerService } from '../../../case-editor/services/judicial-worker.service';\n\n@Component({\n selector: 'app-task-assigned',\n templateUrl: './task-assigned.component.html'\n})\nexport class TaskAssignedComponent implements OnInit, OnDestroy {\n\n public task: Task = null;\n public caseId: string;\n public assignedUserName: string;\n public caseworkerSubscription: Subscription;\n public judicialworkerSubscription: Subscription;\n\n constructor(private readonly route: ActivatedRoute,\n private readonly judicialworkerService: JudicialworkerService,\n private readonly caseworkerService: CaseworkerService) {\n this.caseId = this.route.snapshot.data.case.case_id;\n this.task = this.route.snapshot.queryParams as Task;\n }\n\n public ngOnInit(): void {\n // Current user is a caseworker?\n this.caseworkerSubscription = this.caseworkerService.getCaseworkers(this.task.jurisdiction).subscribe(result => {\n if (result && result[0].service === this.task.jurisdiction && result[0].caseworkers) {\n const caseworker = result[0].caseworkers.find(x => x.idamId === this.task.assignee);\n if (caseworker) {\n this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;\n }\n }\n\n if (!this.assignedUserName) {\n // Current user is a judicial user?\n this.judicialworkerSubscription =\n this.judicialworkerService.getJudicialworkers([this.task.assignee], this.task.jurisdiction)\n .subscribe(judicialworkers => {\n if (judicialworkers) {\n const judicialworker = judicialworkers.find(x => x.sidam_id === this.task.assignee);\n if (judicialworker) {\n this.assignedUserName = judicialworker.full_name;\n }\n }\n\n if (!this.assignedUserName) {\n this.assignedUserName = 'another user';\n }\n });\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.caseworkerSubscription) {\n this.caseworkerSubscription.unsubscribe();\n }\n if (this.judicialworkerSubscription) {\n this.judicialworkerSubscription.unsubscribe();\n }\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-task-cancelled',\n templateUrl: './task-cancelled.component.html'\n})\nexport class TaskCancelledComponent {\n @Input() public caseId: string;\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task cancelled/marked as done</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task cancelled/marked as done</h2>\n\n <p>This task has been cancelled or marked as done.</p>\n\n <p>Click Continue to complete the task and save your progress.</p>\n\n <p>Alternatively, click Cancel to return to the tasks tab without saving your progress.</p>\n\n <div class=\"form-group form-group-related\">\n <button type=\"submit\" class=\"govuk-button govuk-!-margin-right-2\" data-module=\"govuk-button\">Continue</button>\n <a [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\"\n class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\">Cancel</a>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Task } from '../../../../domain/work-allocation/Task';\n\n@Component({\n selector: 'app-task-conflict',\n templateUrl: './task-conflict.component.html'\n})\nexport class TaskConflictComponent {\n @Input() public task: Task;\n @Input() public caseId: string;\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task conflict</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task conflict</h2>\n\n <p>This task cannot be completed due to conflict with another task or tasks for this case.</p>\n\n <p>If the problem persists, contact William Priest</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","export enum EventStartStates {\n CHECK_FOR_MATCHING_TASKS = 'check-for-matching-tasks',\n NO_TASK = 'no-task',\n ONE_OR_MORE_TASKS = 'one-or-more-tasks',\n TASK_ASSIGNED_TO_USER = 'task-assigned-to-user',\n ONE_TASK_ASSIGNED_TO_USER = 'one-task-assigned-to-user',\n MULTIPLE_TASKS_ASSIGNED_TO_USER = 'multiple-tasks-assigned-to-user',\n TASK_UNASSIGNED = 'task-unassigned',\n TASK_ASSIGNMENT_REQUIRED = 'task-assignment-required',\n ASSIGN_TASK_TO_SELF = 'assign-task-to-self',\n ASK_MANAGER_TO_ASSIGN_TASK = 'ask-manager-to-assign-task',\n SHOW_WARNING = 'show-warning',\n FINAL = 'final'\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-task-unassigned',\n templateUrl: './task-unassigned.component.html'\n})\nexport class TaskUnassignedComponent {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\"\n data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task assignment required</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task assignment required</h2>\n\n <p>You must assign one of the available tasks from the task tab to continue with your work.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab to\n assign a task</a>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { Params } from '@angular/router';\nimport { State, StateMachine } from '@edium/fsm';\nimport { EventStartStateMachineContext, EventStartStates } from '../models';\n\nconst EVENT_STATE_MACHINE = 'EVENT STATE MACHINE';\n\n@Injectable()\nexport class EventStartStateMachineService {\n public stateCheckForMatchingTasks: State;\n public stateNoTask: State;\n public stateOneTask: State;\n public stateOneOrMoreTasks: State;\n public stateTaskAssignedToUser: State;\n public stateOneTaskAssignedToUser: State;\n public stateMultipleTasksAssignedToUser: State;\n public stateTaskUnassigned: State;\n public stateFinal: State;\n\n public initialiseStateMachine(context: EventStartStateMachineContext): StateMachine {\n return new StateMachine(EVENT_STATE_MACHINE, context);\n }\n\n public createStates(stateMachine: StateMachine): void {\n // Initial state\n this.stateCheckForMatchingTasks = stateMachine.createState(\n EventStartStates.CHECK_FOR_MATCHING_TASKS,\n false,\n this.entryActionForStateCheckForMatchingTasks\n );\n\n // States based on number of tasks available\n this.stateNoTask = stateMachine.createState(\n EventStartStates.NO_TASK,\n false,\n this.entryActionForStateNoTask\n );\n this.stateOneOrMoreTasks = stateMachine.createState(\n EventStartStates.ONE_OR_MORE_TASKS,\n false,\n this.entryActionForStateOneOrMoreTasks\n );\n\n // States based on number of tasks assigned to user\n this.stateTaskUnassigned = stateMachine.createState(\n EventStartStates.TASK_UNASSIGNED,\n false,\n this.entryActionForStateTaskUnAssigned\n );\n this.stateTaskAssignedToUser = stateMachine.createState(\n EventStartStates.TASK_ASSIGNED_TO_USER,\n false,\n this.entryActionForStateTaskAssignedToUser\n );\n this.stateOneTaskAssignedToUser = stateMachine.createState(\n EventStartStates.ONE_TASK_ASSIGNED_TO_USER,\n false,\n this.entryActionForStateOneTaskAssignedToUser\n );\n this.stateMultipleTasksAssignedToUser = stateMachine.createState(\n EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER,\n false,\n this.entryActionForStateMultipleTasksAssignedToUser\n );\n\n // Create final state, the second param isComplete is set to true to make sure state machine finished running\n this.stateFinal = stateMachine.createState(\n EventStartStates.FINAL,\n true,\n this.finalAction\n );\n }\n\n public addTransitions(): void {\n // Initial transition\n this.addTransitionsForStateCheckForMatchingTasks();\n\n // Transitions based on number of tasks available\n this.addTransitionsForStateNoTask();\n this.addTransitionsForStateOneOrMoreTasks();\n\n // Transitions based on number of tasks assigned to user\n this.addTransitionsForStateTaskUnassigned();\n this.addTransitionsForStateTaskAssignedToUser();\n this.addTransitionsForStateOneTaskAssignedToUser();\n this.addTransitionsForStateMultipleTasksAssignedToUser();\n }\n\n public startStateMachine(stateMachine: StateMachine): void {\n stateMachine.start(this.stateCheckForMatchingTasks);\n }\n\n /**\n * Initial entry action for state check for matching tasks, decided based on the number of tasks\n */\n public entryActionForStateCheckForMatchingTasks(state: State, context: EventStartStateMachineContext): void {\n const taskCount = context && context.tasks ? context.tasks.length : 0;\n\n if (taskCount === 0) {\n // Trigger state no task\n state.trigger(EventStartStates.NO_TASK);\n } else {\n // Trigger state one or more tasks\n state.trigger(EventStartStates.ONE_OR_MORE_TASKS);\n }\n }\n\n public entryActionForStateNoTask(state: State, context: EventStartStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n // Navigate to no tasks available error page\n context.router.navigate([`/cases/case-details/${context.caseId}/no-tasks-available`], { relativeTo: context.route });\n }\n\n public entryActionForStateOneOrMoreTasks(state: State, context: EventStartStateMachineContext): void {\n state.trigger(EventStartStates.TASK_ASSIGNED_TO_USER);\n }\n\n public entryActionForStateMultipleTasks(state: State, context: EventStartStateMachineContext): void {\n state.trigger(EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER);\n }\n\n public entryActionForStateTaskAssignedToUser(state: State, context: EventStartStateMachineContext): void {\n // Get number of tasks assigned to user\n const userInfoStr = context.sessionStorageService.getItem('userDetails');\n const userInfo = JSON.parse(userInfoStr);\n const tasksAssignedToUser = context.tasks.filter(x =>\n x.task_state !== 'unassigned' && x.assignee === userInfo.id || x.assignee === userInfo.uid\n );\n\n // Check if user initiated the event from task tab\n const isEventInitiatedFromTaskTab = context.taskId !== undefined && tasksAssignedToUser.findIndex(x => x.id === context.taskId) > -1;\n\n if (isEventInitiatedFromTaskTab) {\n // User initiated event from task tab\n state.trigger(EventStartStates.ONE_TASK_ASSIGNED_TO_USER);\n } else {\n // User initiated event from dropdown\n switch (tasksAssignedToUser.length) {\n case 0:\n // No tasks assigned to user, trigger state task unassigned\n state.trigger(EventStartStates.TASK_UNASSIGNED);\n break;\n case 1:\n // One task assigned to user\n state.trigger(EventStartStates.ONE_TASK_ASSIGNED_TO_USER);\n break;\n default:\n // Multiple tasks assigned to user, trigger state multiple tasks assigned to user\n state.trigger(EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER);\n break;\n }\n }\n }\n\n public entryActionForStateTaskUnAssigned(state: State, context: EventStartStateMachineContext): void {\n let navigationURL = '';\n let theQueryParams: Params = {};\n\n if (context.tasks[0].assignee) {\n // Task is assigned to some other user, navigate to task assigned error page\n navigationURL = `/cases/case-details/${context.caseId}/task-assigned`;\n theQueryParams = context.tasks[0];\n } else {\n // Task is unassigned, navigate to task unassigned error page\n navigationURL = `/cases/case-details/${context.caseId}/task-unassigned`;\n }\n\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n // Navigate\n context.router.navigate([`${navigationURL}`], { queryParams: theQueryParams, relativeTo: context.route });\n }\n\n public entryActionForStateOneTaskAssignedToUser(state: State, context: EventStartStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n\n // Get task assigned to user\n let task = context.tasks.find(x => x.id === context.taskId);\n if (!task) {\n task = context.tasks[0];\n }\n\n // Store task to session\n context.sessionStorageService.setItem('taskToComplete', JSON.stringify(task));\n // Allow user to perform the event\n context.router.navigate([`/cases/case-details/${context.caseId}/trigger/${context.eventId}`],\n { queryParams: { isComplete: true }, relativeTo: context.route });\n }\n\n public entryActionForStateMultipleTasksAssignedToUser(state: State, context: EventStartStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n // Navigate to multiple tasks exist error page\n context.router.navigate([`/cases/case-details/${context.caseId}/multiple-tasks-exist`], { relativeTo: context.route });\n }\n\n public finalAction(state: State): void {\n // Final actions can be performed here, the state machine finished running\n // console.log('FINAL', state);\n return;\n }\n\n public addTransitionsForStateCheckForMatchingTasks(): void {\n // No tasks\n this.stateCheckForMatchingTasks.addTransition(\n EventStartStates.NO_TASK,\n this.stateNoTask\n );\n // One task\n this.stateCheckForMatchingTasks.addTransition(\n EventStartStates.ONE_OR_MORE_TASKS,\n this.stateOneOrMoreTasks\n );\n }\n\n public addTransitionsForStateNoTask(): void {\n this.stateNoTask.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateOneOrMoreTasks(): void {\n this.stateOneOrMoreTasks.addTransition(\n EventStartStates.TASK_ASSIGNED_TO_USER,\n this.stateTaskAssignedToUser\n );\n }\n\n public addTransitionsForStateTaskUnassigned(): void {\n this.stateTaskUnassigned.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateTaskAssignedToUser(): void {\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.ONE_TASK_ASSIGNED_TO_USER,\n this.stateOneTaskAssignedToUser\n );\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.TASK_UNASSIGNED,\n this.stateTaskUnassigned\n );\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER,\n this.stateMultipleTasksAssignedToUser\n );\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateOneTaskAssignedToUser(): void {\n this.stateOneTaskAssignedToUser.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateMultipleTasksAssignedToUser(): void {\n this.stateMultipleTasksAssignedToUser.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { StateMachine } from '@edium/fsm';\nimport { Task } from '../../domain/work-allocation/Task';\nimport { SessionStorageService } from '../../services/session/session-storage.service';\nimport { EventStartStateMachineContext } from './models/event-start-state-machine-context.model';\nimport { EventStartStateMachineService } from './services/event-start-state-machine.service';\n\n@Component({\n selector: 'ccd-event-start',\n templateUrl: './event-start.component.html'\n})\nexport class EventStartComponent implements OnInit {\n\n public stateMachine: StateMachine;\n public context: EventStartStateMachineContext;\n\n constructor(private service: EventStartStateMachineService,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly sessionStorageService: SessionStorageService) {\n }\n\n public ngOnInit(): void {\n // Get task and case id payload from route data\n const tasks: Task[] = this.route.snapshot.data.tasks;\n const caseId = this.route.snapshot.data.case.case_id;\n const eventId = this.route.snapshot.queryParams['eventId'];\n const taskId = this.route.snapshot.queryParams['taskId'];\n\n // Setup the context\n this.context = {\n tasks,\n caseId,\n eventId,\n taskId,\n router: this.router,\n route: this.route,\n sessionStorageService: this.sessionStorageService\n };\n\n // Initialise state machine\n this.service = new EventStartStateMachineService();\n this.stateMachine = this.service.initialiseStateMachine(this.context);\n // Create states\n this.service.createStates(this.stateMachine);\n // Add transitions for the states\n this.service.addTransitions();\n // Start state machine\n this.service.startStateMachine(this.stateMachine);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { TaskPayload } from '../../../domain/work-allocation/TaskPayload';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { WorkAllocationService } from '../../case-editor/services/work-allocation.service';\n\n@Injectable()\nexport class EventStartGuard implements CanActivate {\n\n constructor(private readonly workAllocationService: WorkAllocationService,\n private readonly router: Router,\n private readonly appConfig: AbstractAppConfig,\n private readonly sessionStorageService: SessionStorageService) {\n }\n\n public canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\n // Checks must be performed only for Work Allocation 2\n if (this.appConfig.getWorkAllocationApiUrl().toLowerCase() === 'workallocation2') {\n const caseId = route.params['cid'];\n const eventId = route.params['eid'];\n const taskId = route.queryParams['tid'];\n\n // TODO: NavigationExtras should be used once Angular upgrade changes have been incorporated\n const isComplete = route.queryParams['isComplete'];\n const caseInfoStr = this.sessionStorageService.getItem('caseInfo');\n if (caseInfoStr) {\n const caseInfo = JSON.parse(caseInfoStr);\n if (caseInfo && caseInfo.cid === caseId) {\n if (isComplete) {\n return of(true);\n }\n\n return this.workAllocationService.getTasksByCaseIdAndEventId(eventId, caseId, caseInfo.caseType, caseInfo.jurisdiction).pipe(\n switchMap((payload: TaskPayload) => this.checkForTasks(payload, caseId, eventId, taskId))\n );\n }\n }\n } else {\n // Checks not required, return true by default for Work Allocation 1\n return of(true);\n }\n }\n\n public checkTaskInEventNotRequired(payload: TaskPayload, caseId: string, taskId: string): boolean {\n if (!payload || !payload.tasks) {\n return true;\n }\n const taskNumber = payload.tasks.length;\n if (taskNumber === 0) {\n // if there are no tasks just carry on\n return true;\n }\n // Get number of tasks assigned to user\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n const userInfo = JSON.parse(userInfoStr);\n const tasksAssignedToUser = payload.tasks.filter(x =>\n x.task_state !== 'unassigned' && x.assignee === userInfo.id || x.assignee === userInfo.uid\n );\n\n if (tasksAssignedToUser.length === 0) {\n // if no tasks assigned to user carry on\n return true;\n } else if (tasksAssignedToUser.length > 1 && !taskId) {\n // if more than one task assigned to the user then give multiple tasks error\n this.router.navigate([`/cases/case-details/${caseId}/multiple-tasks-exist`]);\n return false;\n } else {\n let task: any;\n if (taskId) {\n task = payload.tasks.find(x => x.id === taskId);\n } else {\n task = tasksAssignedToUser[0];\n }\n // if one task assigned to user, allow user to complete event\n this.sessionStorageService.setItem('taskToComplete', JSON.stringify(task));\n return true;\n }\n }\n\n private checkForTasks(payload: TaskPayload, caseId: string, eventId: string, taskId: string): Observable<boolean> {\n // Clear taskToComplete from session as we will be starting the process for new task\n this.sessionStorageService.removeItem('taskToComplete');\n\n if (payload.task_required_for_event) {\n // There are some issues in EventTriggerResolver/CaseService and/or CCD for some events\n // which triggers the CanActivate guard again.\n // If event start is initiated again, then we do not need to perform state machine processing again.\n // https://tools.hmcts.net/jira/browse/EUI-5489\n if (this.router && this.router.url && this.router.url.includes('event-start')) {\n return of(true);\n }\n this.router.navigate([`/cases/case-details/${caseId}/event-start`], { queryParams: { caseId, eventId, taskId } });\n return of(false);\n } else {\n return of(this.checkTaskInEventNotRequired(payload, caseId, taskId));\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Task } from '../../../domain/work-allocation/Task';\nimport { TaskPayload } from '../../../domain/work-allocation/TaskPayload';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { WorkAllocationService } from '../../case-editor/services/work-allocation.service';\n\n@Injectable()\nexport class EventTasksResolverService implements Resolve<Task[]> {\n\n constructor(private readonly service: WorkAllocationService,\n private readonly sessionStorageService: SessionStorageService) {\n }\n\n public resolve(route: ActivatedRouteSnapshot): Observable<Task[]> {\n const eventId = route.queryParamMap.get('eventId');\n const caseId = route.queryParamMap.get('caseId');\n const caseInfoStr = this.sessionStorageService.getItem('caseInfo');\n const caseInfo = JSON.parse(caseInfoStr);\n if (caseInfo) {\n return this.service.getTasksByCaseIdAndEventId(eventId, caseId, caseInfo.caseType, caseInfo.jurisdiction)\n .pipe(\n map((payload: TaskPayload) => payload.tasks)\n );\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { MultipleTasksExistComponent } from './components/multiple-tasks-exist/multiple-tasks-exist.component';\nimport { NoTasksAvailableComponent } from './components/no-tasks-available/no-tasks-available.component';\nimport { TaskAssignedComponent } from './components/task-assigned/task-assigned.component';\nimport { TaskCancelledComponent } from './components/task-cancelled/task-cancelled.component';\nimport { TaskConflictComponent } from './components/task-conflict/task-conflict.component';\nimport { TaskUnassignedComponent } from './components/task-unassigned/task-unassigned.component';\nimport { EventStartGuard } from './event-guard/event-start.guard';\nimport { EventStartComponent } from './event-start.component';\nimport { EventTasksResolverService } from './resolvers/event-tasks-resolver.service';\nimport { EventStartStateMachineService } from './services';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n RouterModule\n ],\n declarations: [\n EventStartComponent,\n MultipleTasksExistComponent,\n NoTasksAvailableComponent,\n TaskAssignedComponent,\n TaskCancelledComponent,\n TaskConflictComponent,\n TaskUnassignedComponent\n ],\n providers: [\n EventStartGuard,\n EventTasksResolverService,\n EventStartStateMachineService\n ],\n exports: [\n EventStartComponent,\n TaskAssignedComponent,\n TaskUnassignedComponent\n ]\n})\nexport class EventStartModule {}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ccd-loading-spinner',\n templateUrl: './loading-spinner.component.html',\n styleUrls: ['./loading-spinner.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\n\nexport class LoadingSpinnerComponent {\n @Input() public loadingText = 'Loading';\n}\n","<div class=\"spinner-container\">\n <div class=\"spinner-inner-container\">\n <p>{{loadingText}}</p>\n <div class=\"spinner\" style=\"margin: auto;\"></div>\n </div>\n</div>","import { Orderable } from '../../../domain/order/orderable.model';\nimport { Field } from '../../../domain/search/field.model';\n\nexport class SearchInput implements Orderable {\n constructor(\n public label: string,\n public order: number,\n public field: Field,\n public metadata?: boolean,\n public display_context_parameter?: string) {\n }\n}\n","<h2 class=\"heading-h2\" aria-label=\"Filters\">Filters</h2>\n<form class=\"global-display\">\n <div class=\"form-group\" style=\"margin-top: 13px;\">\n <label class=\"form-label\" for=\"s-jurisdiction\">Jurisdiction*</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"s-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"s-case-type\">Case type*</label>\n <select [disabled]=\"isJurisdictionSelected()\" class=\"form-control form-control-3-4 ccd-dropdown\"\n id=\"s-case-type\" name=\"case-type\" [(ngModel)]=\"selected.caseType\" aria-controls=\"search-result\"\n (change)=\"onCaseTypeIdChange()\">\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndSearchInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let searchInput of searchInputs\">\n <ccd-field-write [caseField]=\"searchInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" (keyup.enter)=\"apply()\"></ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <button [disabled]=\"!isSearchableAndSearchInputsReady()\" type=\"button\" class=\"button\" (click)=\"apply()\" (keyup.enter)=\"apply()\" title=\"Apply filter\" aria-label=\"Apply filter\">Apply</button> &nbsp;&nbsp;&nbsp;\n <button id=\"reset\" type=\"button\" (click)=\"reset()\" class=\"button button-secondary\" title=\"Reset filter\" aria-label=\"Reset filter\">Reset</button>\n</form>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { tap } from 'rxjs/operators';\n\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { CaseState } from '../../domain/definition/case-state.model';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { SearchService } from '../../services/search/search.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { SearchInput } from './domain/search-input.model';\n\nconst JURISDICTION_LOC_STORAGE = 'search-jurisdiction';\nconst META_FIELDS_LOC_STORAGE = 'search-metadata-fields';\nconst FORM_GROUP_VALUE_LOC_STORAGE = 'search-form-group-value';\nconst CASE_TYPE_LOC_STORAGE = 'search-caseType';\n@Component({\n selector: 'ccd-search-filters',\n templateUrl: './search-filters.component.html',\n})\n\nexport class SearchFiltersComponent implements OnInit {\n public readonly PARAM_JURISDICTION = 'jurisdiction';\n public readonly PARAM_CASE_TYPE = 'case-type';\n public readonly PARAM_CASE_STATE = 'case-state';\n public caseFields: CaseField[];\n\n @Input()\n public jurisdictions: Jurisdiction[];\n\n @Input()\n public autoApply: boolean;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onJurisdiction: EventEmitter<any> = new EventEmitter();\n\n public searchInputs: SearchInput[];\n public searchInputsReady: boolean;\n\n public selected: {\n jurisdiction?: Jurisdiction,\n caseType?: CaseTypeLite,\n formGroup?: FormGroup,\n caseState?: CaseState,\n page?: number,\n metadataFields?: string[]\n };\n\n public selectedJurisdictionCaseTypes?: CaseTypeLite[];\n\n public formGroup: FormGroup = new FormGroup({});\n\n constructor(private readonly searchService: SearchService,\n private readonly orderService: OrderService,\n private readonly jurisdictionService: JurisdictionService,\n private readonly windowService: WindowService) {\n }\n\n public ngOnInit(): void {\n this.selected = {};\n const jurisdiction = this.windowService.getLocalStorage(JURISDICTION_LOC_STORAGE);\n if (this.jurisdictions.length === 1 || jurisdiction) {\n this.selected.jurisdiction = this.jurisdictions[0];\n if (jurisdiction) {\n const localStorageJurisdiction = JSON.parse(jurisdiction);\n this.selected.jurisdiction = this.jurisdictions.filter(j => j.id === localStorageJurisdiction.id)[0];\n }\n this.onJurisdictionIdChange();\n }\n\n this.selected.formGroup = this.formGroup;\n this.selected.page = 1;\n this.selected.metadataFields = this.getMetadataFields();\n this.onApply.emit({\n selected: this.selected,\n queryParams: this.getQueryParams()\n });\n\n }\n\n public reset(): void {\n this.windowService.removeLocalStorage(FORM_GROUP_VALUE_LOC_STORAGE);\n this.windowService.removeLocalStorage(CASE_TYPE_LOC_STORAGE);\n this.windowService.removeLocalStorage(JURISDICTION_LOC_STORAGE);\n this.windowService.removeLocalStorage(META_FIELDS_LOC_STORAGE);\n this.selected = {};\n if (this.jurisdictions.length === 1) {\n this.selected.jurisdiction = this.jurisdictions[0];\n this.onJurisdictionIdChange();\n }\n this.onReset.emit();\n }\n\n public apply(): void {\n this.selected.formGroup = this.formGroup;\n this.selected.page = 1;\n this.selected.metadataFields = this.getMetadataFields();\n this.populateValuesInLocalStorage();\n this.onApply.emit({\n selected: this.selected,\n queryParams: this.getQueryParams()\n });\n this.setFocusToTop();\n }\n\n public populateValuesInLocalStorage(): void {\n this.windowService.setLocalStorage(FORM_GROUP_VALUE_LOC_STORAGE,\n JSON.stringify(this.selected.formGroup.value));\n this.windowService.setLocalStorage(META_FIELDS_LOC_STORAGE, JSON.stringify(this.selected.metadataFields));\n this.windowService.setLocalStorage(JURISDICTION_LOC_STORAGE, JSON.stringify(this.selected.jurisdiction));\n if (this.selected.caseType) {\n this.windowService.setLocalStorage(CASE_TYPE_LOC_STORAGE, JSON.stringify(this.selected.caseType));\n }\n }\n\n public getMetadataFields(): string[] {\n if (this.searchInputs) {\n return this.searchInputs\n .filter(searchInput => searchInput.field.metadata === true)\n .map(searchInput => searchInput.field.id);\n }\n }\n\n public isSearchable(): boolean {\n let result: boolean;\n result = this.selected.jurisdiction !== undefined && this.selected.jurisdiction !== null;\n result = result && this.selected.caseType !== undefined && this.selected.caseType !== null;\n return result;\n }\n\n public isSearchableAndSearchInputsReady(): boolean {\n return this.isSearchable() && this.searchInputsReady;\n }\n\n public onJurisdictionIdChange(): void {\n this.selected.caseType = null;\n this.jurisdictionService.announceSelectedJurisdiction(this.selected.jurisdiction);\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes;\n this.selectCaseType(this.selectedJurisdictionCaseTypes);\n this.onJurisdiction.emit(this.selected.jurisdiction);\n }\n\n public onCaseTypeIdChange(): void {\n this.formGroup = new FormGroup({});\n this.searchInputsReady = false;\n this.searchInputs = [];\n this.searchService.getSearchInputs(\n this.selected.jurisdiction.id,\n this.selected.caseType.id\n ).pipe(\n tap(() => this.searchInputsReady = true)\n ).subscribe(searchInputs => {\n this.searchInputs = searchInputs.sort(this.orderService.sortAsc);\n\n const formValue = this.windowService.getLocalStorage(FORM_GROUP_VALUE_LOC_STORAGE);\n let formValueObject = null;\n if (formValue) {\n formValueObject = JSON.parse(formValue);\n }\n searchInputs.forEach(item => {\n if (item.field.elementPath) {\n item.field.id = item.field.id + '.' + item.field.elementPath;\n }\n item.field.label = item.label;\n if (formValueObject) {\n item.field.value = formValueObject[item.field.id];\n }\n });\n this.getCaseFields();\n }, error => {\n console.log('Search input fields request will be discarded reason: ', error.message);\n });\n }\n\n public isJurisdictionSelected(): boolean {\n return this.selected.jurisdiction === null ||\n this.selected.jurisdiction === undefined;\n }\n\n private getQueryParams() {\n // Save filters as query parameters for current route\n const queryParams = {};\n if (this.selected.jurisdiction) {\n queryParams[this.PARAM_JURISDICTION] = this.selected.jurisdiction.id;\n }\n if (this.selected.caseType) {\n queryParams[this.PARAM_CASE_TYPE] = this.selected.caseType.id;\n }\n if (this.selected.caseState) {\n queryParams[this.PARAM_CASE_STATE] = this.selected.caseState.id;\n }\n return queryParams;\n }\n\n private selectCaseType(caseTypes: CaseTypeLite[]) {\n if (caseTypes && caseTypes.length > 0) {\n this.selected.caseType = caseTypes[0];\n const caseType = this.windowService.getLocalStorage(CASE_TYPE_LOC_STORAGE);\n if (caseType) {\n const caseTypeObject = JSON.parse(caseType);\n const result = caseTypes.filter(c => c.id === caseTypeObject.id);\n if (result !== undefined && result.length > 0) {\n this.selected.caseType = result[0];\n } else {\n this.selected.caseType = caseTypes[0];\n }\n } else {\n this.selected.caseType = caseTypes[0];\n }\n this.onCaseTypeIdChange();\n }\n }\n\n private setFocusToTop() {\n window.scrollTo(0, 0);\n\n const topContainer = document.getElementById('search-result-heading__text');\n if (topContainer) {\n topContainer.focus();\n }\n }\n\n private getCaseFields(): void {\n if (this.searchInputs) {\n this.caseFields = this.searchInputs.map(item => FieldsUtils.convertToCaseField(item.field));\n }\n }\n}\n","<ccd-search-filters\n *ngIf=\"isVisible\"\n [jurisdictions]=\"jurisdictions\"\n [autoApply]=\"autoApply\"\n (onApply)=\"onWrapperApply($event)\"\n (onReset)=\"onWrapperReset($event)\"\n (onJuridiction)=\"onWrapperJurisdiction($event)\"\n></ccd-search-filters>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { READ_ACCESS } from '../../domain/case-view/access-types.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\n\n@Component({\n selector: 'ccd-search-filters-wrapper',\n templateUrl: './search-filters-wrapper.component.html',\n})\n\nexport class SearchFiltersWrapperComponent implements OnInit {\n\n @Input()\n public autoApply: boolean;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onJurisdiction: EventEmitter<any> = new EventEmitter();\n\n public jurisdictions: Jurisdiction[];\n public isVisible: boolean;\n\n constructor(\n private readonly definitionsService: DefinitionsService,\n ) {\n }\n\n public ngOnInit(): void {\n this.isVisible = false;\n\n this.definitionsService.getJurisdictions(READ_ACCESS)\n .subscribe(jurisdictions => {\n this.isVisible = true;\n this.jurisdictions = jurisdictions;\n });\n }\n\n public onWrapperApply(value) {\n this.onApply.emit(value);\n }\n\n public onWrapperReset(value) {\n this.onReset.emit(value);\n }\n\n public onWrapperJurisdiction(value) {\n this.onJurisdiction.emit(value);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ConditionalShowModule } from '../../directives/conditional-show/conditional-show.module';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { SearchService } from '../../services/search/search.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { PaletteModule } from '../palette/palette.module';\n\nimport { SearchFiltersWrapperComponent } from './search-filters-wrapper.component';\nimport { SearchFiltersComponent } from './search-filters.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteModule,\n ConditionalShowModule\n ],\n declarations: [\n SearchFiltersComponent,\n SearchFiltersWrapperComponent\n ],\n exports: [\n SearchFiltersWrapperComponent\n ],\n providers: [\n SearchService,\n OrderService,\n JurisdictionService,\n DefinitionsService,\n WindowService\n ]\n})\nexport class SearchFiltersModule {}\n","export class ComplexFieldOverride {\n public complex_field_element_id: string;\n public display_context: string;\n public label?: string;\n public hint_text?: string;\n public show_condition?: string;\n}\n","import { CaseField, FieldType } from '../domain/definition';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\n\nexport class CaseFieldBuilder {\n\n private readonly caseField: CaseField = new CaseField();\n public static create(): CaseFieldBuilder {\n return new CaseFieldBuilder();\n }\n\n public withACLs(acls: AccessControlList[]): CaseFieldBuilder {\n this.caseField.acls = acls;\n return this;\n }\n\n public withId(id: string): CaseFieldBuilder {\n this.caseField.id = id;\n return this;\n }\n\n public withFieldType(field_type: FieldType): CaseFieldBuilder {\n this.caseField.field_type = field_type;\n return this;\n }\n\n public withDisplayContext(display_context: string): CaseFieldBuilder {\n this.caseField.display_context = display_context;\n return this;\n }\n\n public withDisplayContextParameter(display_context_parameter: string): CaseFieldBuilder {\n this.caseField.display_context_parameter = display_context_parameter;\n return this;\n }\n\n public withHidden(hidden: boolean): CaseFieldBuilder {\n this.caseField.hidden = hidden;\n return this;\n }\n\n public withHintText(hint_text: string): CaseFieldBuilder {\n this.caseField.hint_text = hint_text;\n return this;\n }\n\n public withLabel(label: string): CaseFieldBuilder {\n this.caseField.label = label;\n return this;\n }\n\n public withOrder(order: number): CaseFieldBuilder {\n this.caseField.order = order;\n return this;\n }\n\n public withSecurityLabel(security_label: string): CaseFieldBuilder {\n this.caseField.security_label = security_label;\n return this;\n }\n\n public withShowCondition(show_condition: string): CaseFieldBuilder {\n this.caseField.show_condition = show_condition;\n return this;\n }\n\n public withShowSummaryContentOption(option: number): CaseFieldBuilder {\n this.caseField.show_summary_content_option = option;\n return this;\n }\n\n public withValue(value: any): CaseFieldBuilder {\n this.caseField.value = value;\n return this;\n }\n\n public withListValue(value: any): CaseFieldBuilder {\n this.caseField.list_items = value;\n return this;\n }\n\n public build(): CaseField {\n return this.caseField;\n }\n}\n","import { ComplexFieldOverride } from '../components/case-editor/domain/wizard-page-field-complex-override.model';\nimport { WizardPageField } from '../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../components/case-editor/domain/wizard-page.model';\nimport { ShowCondition } from '../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../domain/case-view/case-event-trigger.model';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\nimport { CaseField } from '../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../domain/definition/field-type-enum.model';\nimport { FieldType } from '../domain/definition/field-type.model';\nimport { FixedListItem } from '../domain/definition/fixed-list-item.model';\nimport { CaseFieldBuilder } from './case-field-builder';\n\nexport const textFieldType = (): FieldType => {\n return {\n id: 'Text',\n type: 'Text',\n complex_fields: []\n };\n};\n\nexport const createCaseEventTrigger = (id: string,\n name: string,\n case_id: string,\n show_summary: boolean,\n case_fields: CaseField[],\n wizard_pages = [],\n can_save_draft = false): CaseEventTrigger => {\n const eventTrigger = new CaseEventTrigger();\n\n eventTrigger.id = id;\n eventTrigger.name = name;\n eventTrigger.case_id = case_id;\n eventTrigger.show_summary = show_summary;\n eventTrigger.wizard_pages = wizard_pages;\n eventTrigger.event_token = 'test-token';\n eventTrigger.case_fields = case_fields;\n eventTrigger.can_save_draft = can_save_draft;\n return eventTrigger;\n};\n\nexport const aCaseField = (id: string, label: string, type: FieldTypeEnum, display_context: string,\n show_summary_content_option: number, typeComplexFields: CaseField[] = [],\n retain_hidden_value?: boolean, hidden?: boolean): CaseField => {\n return ({\n id: id || 'personFirstName',\n field_type: {\n id: type.toString() || 'Text',\n type: type || 'Text',\n complex_fields: typeComplexFields || []\n },\n display_context: display_context || 'OPTIONAL',\n label: label || 'First name',\n show_summary_content_option,\n retain_hidden_value: retain_hidden_value || false,\n hidden: hidden || false\n }) as CaseField;\n};\n\nexport const createWizardPage = (id: string,\n label: string,\n order: number,\n wizardPageFields: WizardPageField[] = [],\n caseFields: CaseField[] = [],\n showCondition: string,\n parsedShowCondition: ShowCondition = null): WizardPage => {\n const wizardPage = new WizardPage();\n wizardPage.id = id;\n wizardPage.label = label;\n wizardPage.order = order;\n wizardPage.wizard_page_fields = wizardPageFields;\n wizardPage.case_fields = caseFields;\n wizardPage.show_condition = showCondition;\n wizardPage.parsedShowCondition = parsedShowCondition;\n return wizardPage;\n};\n\nexport const createWizardPageField = (id: string,\n order: number,\n pageColumnNumber: number,\n complexFieldOverrides: ComplexFieldOverride[] = []): WizardPageField => {\n const wizardPageField = new WizardPageField();\n wizardPageField.case_field_id = id;\n wizardPageField.order = order;\n wizardPageField.page_column_no = pageColumnNumber;\n wizardPageField.complex_field_overrides = complexFieldOverrides;\n return wizardPageField;\n};\n\nexport const createComplexFieldOverride = (id: string,\n order: number,\n displayContext: string,\n label: string,\n hint: string,\n showCondition: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = displayContext;\n complexFieldOverride.label = label;\n complexFieldOverride.hint_text = hint;\n complexFieldOverride.show_condition = showCondition;\n return complexFieldOverride;\n};\n\nexport const createHiddenComplexFieldOverride = (id: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = 'HIDDEN';\n return complexFieldOverride;\n};\n\nexport const createCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined,\n show_condition = undefined,\n ACLs: AccessControlList[] = undefined,\n hidden?: boolean): CaseField => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withLabel(label || 'First name')\n .withHintText(hint || 'First name hint text')\n .withShowSummaryContentOption(0)\n .withOrder(order)\n .withShowCondition(show_condition || undefined)\n .withACLs(ACLs)\n .withHidden(hidden || false)\n .build();\n};\n\nexport const newCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined): CaseFieldBuilder => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withHintText(hint || 'First name hint text')\n .withLabel(label || 'First name')\n .withOrder(order)\n .withShowSummaryContentOption(0);\n};\n\nexport const createFieldType = (typeId: string,\n type: FieldTypeEnum,\n complex_fields: CaseField[] = [],\n collection_field_type: FieldType = undefined): FieldType => {\n return {\n id: typeId || 'Text',\n type: type || 'Text',\n complex_fields: complex_fields || [],\n collection_field_type: collection_field_type || undefined\n };\n};\n\nexport const createFixedListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'FixedList-' + typeId,\n type: 'FixedList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createMultiSelectListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'MultiSelectList-' + typeId,\n type: 'MultiSelectList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createACL = (role: string, create: boolean, read: boolean, update: boolean, _delete: boolean): AccessControlList => {\n return ({\n role: role || 'roleX',\n create,\n read,\n update,\n delete: _delete\n }) as AccessControlList;\n};\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport class TestRouteSnapshotBuilder {\n private parent: ActivatedRouteSnapshot = null;\n private params: object = {};\n private data: object = {};\n\n public withParent(parent: ActivatedRouteSnapshot): TestRouteSnapshotBuilder {\n this.parent = parent;\n return this;\n }\n\n public withParams(params: object): TestRouteSnapshotBuilder {\n this.params = params;\n return this;\n }\n\n public withData(data: object): TestRouteSnapshotBuilder {\n this.data = data;\n return this;\n }\n\n public build(): ActivatedRouteSnapshot {\n return {\n url: [],\n params: this.params,\n queryParams: [],\n fragment: '',\n data: this.data,\n outlet: null,\n component: null,\n routeConfig: null,\n root: null,\n parent: this.parent,\n firstChild: null,\n children: [],\n pathFromRoot: null,\n paramMap: null,\n queryParamMap: null,\n };\n }\n}\n"],"mappings":"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AJ,GACAH,GACAP,GAGAiN,GACAnB,GACA5I,GACApG,GACA0O,GACA5xB,GACA7K,GACA+jB,GAGAqb,GACArH,GACAF,GACAV,GACAlC,GACAR,GACAzC,GACAsB,GACA3G,GACA6B,GACAS,GACA5B,GACA3uB,GACA4L,GACAvE,GACAqE,GACArB,GAGA3L,GACArC,GACAo9B,GACApQ,GACA+E,GACAW,GACA2Q,GACAlvB,GACAsuB,GACAb,GACAtI,GACAlG,GACArf,GAGA4wB,GACAvG,GACAhB,GACA5C,GACAvC,GACA9jB,GACA2kB,GACAlF,GACAS,GACArwB,GACAqD,IA8DJgiC,GAAA,W,oCAAaA,GAAa,E,iCAAbA,KAXAA,GAAA,KAAAzsE,EAAA,kBAAA+M,UAAA,CACTo6D,GACAiD,GACA/B,GACAvvC,GACAi3B,GACAgc,GACAr0B,GACA,CAACxrC,QAASwgE,kBAAiBl2B,SAAU,UAvD9BlzC,QAAA,EACPJ,eACAypE,gBACAxpE,eACAypE,cACAC,sBACAt2C,GACAe,GACA/B,GACAtyB,GACAwyB,GACAD,GACAE,GACAtlB,GACA2tC,GACA+uB,cACAC,6BACAC,yBACAC,yBACAC,qBACAC,iBACAC,sBACAC,mBACAC,iBAAeC,WAkBfn9D,GACAmmB,GACAe,OAeS,oBAAAl0B,uBAAApD,EAAA,mBAAAysE,GAAa,CAAAppE,aAAA,CAhCtBooE,GACAE,GACAE,GACApB,GACAzoC,GACAspC,GACA1U,GACAS,GACAtC,GACAU,GACAqW,GA9GAhF,GACAlzB,GACAozB,GACA3yC,GACA00C,GACAkB,GACAxB,GACA3zC,GACA8vC,GACAnK,GACAL,GACAJ,GACAH,GACAP,GAGAiN,GACAnB,GACA5I,GACApG,GACA0O,GACA5xB,GACA7K,GACA+jB,GAGAqb,GACArH,GACAF,GACAV,GACAlC,GACAR,GACAzC,GACAsB,GACA3G,GACA6B,GACAS,GACA5B,GACA3uB,GACA4L,GACAvE,GACAqE,GACArB,GAGA3L,GACArC,GACAo9B,GACApQ,GACA+E,GACAW,GACA2Q,GACAlvB,GACAsuB,GACAb,GACAtI,GACAlG,GACArf,GAGA4wB,GACAvG,GACAhB,GACA5C,GACAvC,GACA9jB,GACA2kB,GACAlF,GACAS,GACArwB,GACAqD,IAA6BnnC,QAAA,CAK7BJ,eACAypE,gBACAxpE,eACAypE,cACAC,sBACAt2C,GACAe,GACA/B,GACAtyB,GACAwyB,GACAD,GACAE,GACAtlB,GACA2tC,GACA+uB,cACAC,6BACAC,yBACAC,yBACAC,qBACAC,iBACAC,sBACAC,mBAAgBG,EAAAF,gBAAA/pE,QAAA,CAmBhB6M,GACAmmB,GACAe,GArHAwvC,GACAlzB,GACAozB,GACA3yC,GACA00C,GACAkB,GACAxB,GACA3zC,GACA8vC,GACAnK,GACAL,GACAJ,GACAH,GACAP,GAGAiN,GACAnB,GACA5I,GACApG,GACA0O,GACA5xB,GACA7K,GACA+jB,GAGAqb,GACArH,GACAF,GACAV,GACAlC,GACAR,GACAzC,GACAsB,GACA3G,GACA6B,GACAS,GACA5B,GACA3uB,GACA4L,GACAvE,GACAqE,GACArB,GAGA3L,GACArC,GACAo9B,GACApQ,GACA+E,GACAW,GACA2Q,GACAlvB,GACAsuB,GACAb,GACAtI,GACAlG,GACArf,GAGA4wB,GACAvG,GACAhB,GACA5C,GACAvC,GACA9jB,GACA2kB,GACAlF,GACAS,GACArwB,GACAqD,O,+DA8DSgiC,GAAa,E,KA3DzBjpE,WAASnC,KAAA,EACRiC,QAAS,CACPJ,eACAypE,gBACAxpE,eACAypE,cACAC,sBACAt2C,GACAe,GACA/B,GACAtyB,GACAwyB,GACAD,GACAE,GACAtlB,GACA2tC,GACA+uB,cACAC,6BACAC,yBACAC,yBACAC,qBACAC,iBACAC,sBACAC,mBACAC,iBAAeC,WAEjBlqE,aAAYwD,GAAA,CACV4kE,GACAE,GACAE,GACApB,GACAzoC,GACAspC,GACA1U,GACAS,GACAtC,GACAU,GACAqW,IAEGU,IAELjpE,QAAOsD,GAAA,CACLuJ,GACAmmB,GACAe,IAEGk1C,IAELz/D,UAAW,CACTo6D,GACAiD,GACA/B,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"}