@hmcts/rpx-xui-common-lib 1.8.7-fix-wrong-services → 1.8.7-generic-filter-clear-errors-on-destroy

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 (325) hide show
  1. package/bundles/hmcts-rpx-xui-common-lib.umd.js +4626 -7107
  2. package/bundles/hmcts-rpx-xui-common-lib.umd.js.map +1 -1
  3. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js +1 -1
  4. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-rpx-xui-common-lib.js +33 -35
  6. package/esm2015/lib/components/accessibility/accessibility.component.js +2 -8
  7. package/esm2015/lib/components/checkbox-list/checkbox-list.component.js +14 -112
  8. package/esm2015/lib/components/contact-details/contact-details.component.js +2 -12
  9. package/esm2015/lib/components/cookie-banner/cookie-banner.component.js +4 -65
  10. package/esm2015/lib/components/due-date/due-date.component.js +2 -97
  11. package/esm2015/lib/components/exui-main-wrapper/exui-page-wrapper.component.js +7 -21
  12. package/esm2015/lib/components/find-location/find-location.component.js +46 -140
  13. package/esm2015/lib/components/find-person/find-person.component.js +14 -154
  14. package/esm2015/lib/components/find-service/find-service.component.js +97 -43
  15. package/esm2015/lib/components/find-task-name/find-task-name.component.js +97 -0
  16. package/esm2015/lib/components/generic-filter/generic-filter-utils.js +11 -55
  17. package/esm2015/lib/components/generic-filter/generic-filter.component.js +286 -294
  18. package/esm2015/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.js +3 -18
  19. package/esm2015/lib/components/index.js +2 -7
  20. package/esm2015/lib/components/invite-user-form/invite-user-form.component.js +2 -22
  21. package/esm2015/lib/components/invite-user-permissions/invite-user-permission.component.js +2 -21
  22. package/esm2015/lib/components/loading-spinner/loading-spinner.component.js +3 -12
  23. package/esm2015/lib/components/pagination/pagination.component.js +2 -24
  24. package/esm2015/lib/components/public_api.js +37 -33
  25. package/esm2015/lib/components/search-judicials/search-judicials.component.js +11 -134
  26. package/esm2015/lib/components/search-location/search-location.component.js +64 -223
  27. package/esm2015/lib/components/search-service/search-service.component.js +28 -46
  28. package/esm2015/lib/components/search-venue/search-venue.component.js +11 -134
  29. package/esm2015/lib/components/selected-case/selected-case.component.js +20 -175
  30. package/esm2015/lib/components/selected-case-confirm/selected-case-confirm.component.js +3 -41
  31. package/esm2015/lib/components/selected-case-list/selected-case-list.component.js +4 -55
  32. package/esm2015/lib/components/service-message/service-message.component.js +2 -20
  33. package/esm2015/lib/components/service-messages/service-messages.component.js +7 -65
  34. package/esm2015/lib/components/share-case/share-case.component.js +23 -169
  35. package/esm2015/lib/components/share-case-confirm/share-case-confirm.component.js +4 -37
  36. package/esm2015/lib/components/tab/tab.component.js +2 -26
  37. package/esm2015/lib/components/tc-confirm/tc-confirm.component.js +2 -17
  38. package/esm2015/lib/components/terms-and-conditions/tc-display/tc-display-html/tc-display-html.component.js +2 -8
  39. package/esm2015/lib/components/terms-and-conditions/tc-display/tc-display-plain/tc-display-plain.component.js +2 -8
  40. package/esm2015/lib/components/terms-and-conditions/terms-and-conditions.component.js +2 -12
  41. package/esm2015/lib/components/user-details/user-details.component.js +2 -39
  42. package/esm2015/lib/components/user-list/user-list.component.js +2 -32
  43. package/esm2015/lib/components/user-select/user-select.component.js +5 -52
  44. package/esm2015/lib/directives/feature-toggle/feature-toggle.directive.js +3 -56
  45. package/esm2015/lib/directives/index.js +2 -7
  46. package/esm2015/lib/directives/let/let.directive.js +1 -39
  47. package/esm2015/lib/directives/public-api.js +3 -8
  48. package/esm2015/lib/exui-common-lib.module.js +11 -10
  49. package/esm2015/lib/gov-ui/components/gov-uk-checkbox/gov-uk-checkbox.component.js +2 -22
  50. package/esm2015/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.js +44 -16
  51. package/esm2015/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.js +4 -54
  52. package/esm2015/lib/gov-ui/components/gov-uk-error-message/gov-uk-error-message.component.js +2 -14
  53. package/esm2015/lib/gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component.js +2 -17
  54. package/esm2015/lib/gov-ui/components/gov-uk-file-upload/gov-uk-file-upload.component.js +2 -24
  55. package/esm2015/lib/gov-ui/components/gov-uk-form-group-wrapper/gov-uk-form-group-wrapper.component.js +2 -16
  56. package/esm2015/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.js +4 -24
  57. package/esm2015/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.js +4 -13
  58. package/esm2015/lib/gov-ui/components/gov-uk-radio/gov-uk-radio.component.js +6 -24
  59. package/esm2015/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.js +2 -13
  60. package/esm2015/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.js +3 -22
  61. package/esm2015/lib/gov-ui/components/gov-uk-table/gov-uk-table.component.js +2 -32
  62. package/esm2015/lib/gov-ui/components/gov-uk-textarea/gov-uk-textarea.component.js +2 -18
  63. package/esm2015/lib/gov-ui/components/hmcts-banner/hmcts-banner-info.interface.js +2 -0
  64. package/esm2015/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.js +13 -25
  65. package/esm2015/lib/gov-ui/components/hmcts-error-summary/hmcts-error-summary.component.js +2 -44
  66. package/esm2015/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.js +2 -16
  67. package/esm2015/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.js +3 -37
  68. package/esm2015/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.js +2 -23
  69. package/esm2015/lib/gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component.js +2 -22
  70. package/esm2015/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.js +3 -30
  71. package/esm2015/lib/gov-ui/components/index.js +2 -7
  72. package/esm2015/lib/gov-ui/components/public_api.js +22 -7
  73. package/esm2015/lib/gov-ui/directives/remove-host.directive.js +1 -22
  74. package/esm2015/lib/gov-ui/gov-ui.service.js +2 -8
  75. package/esm2015/lib/gov-ui/index.js +2 -7
  76. package/esm2015/lib/gov-ui/models/checkboxes-model.js +2 -22
  77. package/esm2015/lib/gov-ui/models/error-messages-model.js +2 -16
  78. package/esm2015/lib/gov-ui/models/gov-ui-config-model.js +2 -36
  79. package/esm2015/lib/gov-ui/models/index.js +2 -7
  80. package/esm2015/lib/gov-ui/models/isession-storage.interface.js +2 -24
  81. package/esm2015/lib/gov-ui/models/public_api.js +4 -10
  82. package/esm2015/lib/gov-ui/models/radio-buttons.model.js +2 -0
  83. package/esm2015/lib/gov-ui/public_api.js +5 -9
  84. package/esm2015/lib/gov-ui/util/helpers/html-templates.helper.js +4 -14
  85. package/esm2015/lib/gov-ui/util/session-storage/session-storage-utils.js +12 -48
  86. package/esm2015/lib/gov-ui/validators/checkboxes-be-checked.validator.js +5 -24
  87. package/esm2015/lib/gov-ui/validators/date.validator.js +3 -20
  88. package/esm2015/lib/gov-ui/validators/index.js +2 -7
  89. package/esm2015/lib/gov-ui/validators/public_api.js +4 -9
  90. package/esm2015/lib/gov-ui/validators/radio-group.validator.js +3 -15
  91. package/esm2015/lib/models/case-share.model.js +7 -33
  92. package/esm2015/lib/models/contact-details.model.js +7 -31
  93. package/esm2015/lib/models/due-date.model.js +7 -14
  94. package/esm2015/lib/models/feature-user.js +1 -16
  95. package/esm2015/lib/models/filter.model.js +1 -124
  96. package/esm2015/lib/models/idle-config.model.js +2 -20
  97. package/esm2015/lib/models/index.js +16 -20
  98. package/esm2015/lib/models/location.model.js +7 -129
  99. package/esm2015/lib/models/pagination.model.js +2 -18
  100. package/esm2015/lib/models/person.model.js +19 -96
  101. package/esm2015/lib/models/public_api.js +6 -11
  102. package/esm2015/lib/models/search-options.model.js +2 -22
  103. package/esm2015/lib/models/task-name.model.js +2 -0
  104. package/esm2015/lib/models/tcDocument.model.js +2 -18
  105. package/esm2015/lib/models/timeout-notification.model.js +2 -18
  106. package/esm2015/lib/models/user-details.model.js +2 -22
  107. package/esm2015/lib/models/user.model.js +2 -25
  108. package/esm2015/lib/pipes/capitalize/capitalize.pipe.js +11 -0
  109. package/esm2015/lib/pipes/index.js +2 -0
  110. package/esm2015/lib/services/case-sharing-state/case-sharing-state.service.js +11 -96
  111. package/esm2015/lib/services/cookie/cookie.service.js +8 -71
  112. package/esm2015/lib/services/feature-toggle/feature-toggle.guard.js +4 -43
  113. package/esm2015/lib/services/feature-toggle/feature-toggle.service.js +2 -28
  114. package/esm2015/lib/services/feature-toggle/launch-darkly.service.js +12 -94
  115. package/esm2015/lib/services/filter/filter.service.js +14 -69
  116. package/esm2015/lib/services/find-person/find-person.service.js +17 -125
  117. package/esm2015/lib/services/google-analytics/google-analytics.service.js +8 -63
  118. package/esm2015/lib/services/google-tag-manager/google-tag-manager.service.js +10 -64
  119. package/esm2015/lib/services/index.js +2 -7
  120. package/esm2015/lib/services/loading/loading.service.js +2 -41
  121. package/esm2015/lib/services/locations/location.service.js +14 -32
  122. package/esm2015/lib/services/manage-session/manage-session.services.js +10 -63
  123. package/esm2015/lib/services/public-api.js +14 -18
  124. package/esm2015/lib/services/ref-data/index.js +4 -0
  125. package/esm2015/lib/services/ref-data/models/ref-data-htmcs-service.model.js +2 -0
  126. package/esm2015/lib/services/ref-data/models/ref-data-region.model.js +2 -0
  127. package/esm2015/lib/services/ref-data/ref-data-data-access/models/ref-data-locations-by-service-code-response.model.js +2 -0
  128. package/esm2015/lib/services/ref-data/ref-data-data-access/ref-data-data-access.service.js +34 -0
  129. package/esm2015/lib/services/ref-data/ref-data.service.js +35 -0
  130. package/esm2015/lib/services/role-guard/role.guard.js +17 -55
  131. package/esm2015/lib/services/role-guard/role.service.js +7 -26
  132. package/esm2015/lib/services/storage/session-storage/session-storage.service.js +41 -0
  133. package/esm2015/lib/services/task-name/task-name.service.js +37 -0
  134. package/esm2015/lib/services/timeout-notifications/timeout-notifications.service.js +16 -78
  135. package/esm2015/lib/window.js +1 -10
  136. package/esm2015/public-api.js +9 -13
  137. package/fesm2015/hmcts-rpx-xui-common-lib.js +3941 -5799
  138. package/fesm2015/hmcts-rpx-xui-common-lib.js.map +1 -1
  139. package/hmcts-rpx-xui-common-lib.d.ts +31 -28
  140. package/hmcts-rpx-xui-common-lib.metadata.json +1 -1
  141. package/lib/components/checkbox-list/checkbox-list.component.d.ts +6 -5
  142. package/lib/components/due-date/due-date.component.d.ts +4 -4
  143. package/lib/components/find-location/find-location.component.d.ts +13 -8
  144. package/lib/components/find-person/find-person.component.d.ts +1 -1
  145. package/lib/components/find-service/find-service.component.d.ts +21 -9
  146. package/lib/components/find-task-name/find-task-name.component.d.ts +41 -0
  147. package/lib/components/generic-filter/generic-filter-utils.d.ts +2 -5
  148. package/lib/components/generic-filter/generic-filter.component.d.ts +20 -6
  149. package/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.d.ts +1 -1
  150. package/lib/components/invite-user-form/invite-user-form.component.d.ts +2 -2
  151. package/lib/components/public_api.d.ts +9 -0
  152. package/lib/components/search-judicials/search-judicials.component.d.ts +1 -1
  153. package/lib/components/search-location/search-location.component.d.ts +20 -20
  154. package/lib/components/search-service/search-service.component.d.ts +11 -9
  155. package/lib/components/search-venue/search-venue.component.d.ts +1 -1
  156. package/lib/components/user-list/user-list.component.d.ts +1 -1
  157. package/lib/directives/feature-toggle/feature-toggle.directive.d.ts +1 -1
  158. package/lib/directives/let/let.directive.d.ts +1 -1
  159. package/lib/exui-common-lib.module.d.ts +4 -3
  160. package/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.d.ts +14 -5
  161. package/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.d.ts +1 -2
  162. package/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.d.ts +1 -0
  163. package/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.d.ts +2 -2
  164. package/lib/gov-ui/components/hmcts-banner/hmcts-banner-info.interface.d.ts +7 -0
  165. package/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.d.ts +4 -2
  166. package/lib/gov-ui/components/hmcts-error-summary/hmcts-error-summary.component.d.ts +1 -1
  167. package/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.d.ts +1 -1
  168. package/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.d.ts +3 -3
  169. package/lib/gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component.d.ts +1 -1
  170. package/lib/gov-ui/components/public_api.d.ts +20 -0
  171. package/lib/gov-ui/models/checkboxes-model.d.ts +4 -7
  172. package/lib/gov-ui/models/gov-ui-config-model.d.ts +2 -0
  173. package/lib/gov-ui/models/public_api.d.ts +0 -1
  174. package/lib/gov-ui/models/radio-buttons.model.d.ts +9 -0
  175. package/lib/gov-ui/public_api.d.ts +1 -0
  176. package/lib/models/filter.model.d.ts +38 -8
  177. package/lib/models/index.d.ts +1 -0
  178. package/lib/models/location.model.d.ts +8 -8
  179. package/lib/models/task-name.model.d.ts +4 -0
  180. package/lib/pipes/capitalize/capitalize.pipe.d.ts +4 -0
  181. package/lib/pipes/index.d.ts +1 -0
  182. package/lib/services/case-sharing-state/case-sharing-state.service.d.ts +1 -1
  183. package/lib/services/filter/filter.service.d.ts +1 -0
  184. package/lib/services/find-person/find-person.service.d.ts +1 -1
  185. package/lib/services/loading/loading.service.d.ts +2 -2
  186. package/lib/services/locations/location.service.d.ts +1 -1
  187. package/lib/services/public-api.d.ts +1 -0
  188. package/lib/services/ref-data/index.d.ts +3 -0
  189. package/lib/services/ref-data/models/ref-data-htmcs-service.model.d.ts +13 -0
  190. package/lib/services/ref-data/models/ref-data-region.model.d.ts +4 -0
  191. package/lib/services/ref-data/ref-data-data-access/models/ref-data-locations-by-service-code-response.model.d.ts +8 -0
  192. package/lib/services/ref-data/ref-data-data-access/ref-data-data-access.service.d.ts +15 -0
  193. package/lib/services/ref-data/ref-data.service.d.ts +14 -0
  194. package/lib/services/role-guard/role.guard.d.ts +2 -1
  195. package/lib/services/role-guard/role.service.d.ts +4 -2
  196. package/lib/services/task-name/task-name.service.d.ts +14 -0
  197. package/lib/window.d.ts +2 -2
  198. package/package.json +6 -16
  199. package/public-api.d.ts +1 -0
  200. package/esm2015/lib/gov-ui/models/banner-data-model.js +0 -16
  201. package/esm2015/lib/services/session-storage/session-storage.service.js +0 -55
  202. package/esm5/hmcts-rpx-xui-common-lib.js +0 -75
  203. package/esm5/lib/components/accessibility/accessibility.component.js +0 -22
  204. package/esm5/lib/components/checkbox-list/checkbox-list.component.js +0 -391
  205. package/esm5/lib/components/contact-details/contact-details.component.js +0 -29
  206. package/esm5/lib/components/cookie-banner/cookie-banner.component.js +0 -154
  207. package/esm5/lib/components/due-date/due-date.component.js +0 -254
  208. package/esm5/lib/components/exui-main-wrapper/exui-page-wrapper.component.js +0 -45
  209. package/esm5/lib/components/find-location/find-location.component.js +0 -293
  210. package/esm5/lib/components/find-person/find-person.component.js +0 -287
  211. package/esm5/lib/components/find-service/find-service.component.js +0 -64
  212. package/esm5/lib/components/generic-filter/generic-filter-utils.js +0 -66
  213. package/esm5/lib/components/generic-filter/generic-filter.component.js +0 -840
  214. package/esm5/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.js +0 -47
  215. package/esm5/lib/components/index.js +0 -7
  216. package/esm5/lib/components/invite-user-form/invite-user-form.component.js +0 -54
  217. package/esm5/lib/components/invite-user-permissions/invite-user-permission.component.js +0 -46
  218. package/esm5/lib/components/loading-spinner/loading-spinner.component.js +0 -29
  219. package/esm5/lib/components/pagination/pagination.component.js +0 -58
  220. package/esm5/lib/components/public_api.js +0 -33
  221. package/esm5/lib/components/search-judicials/search-judicials.component.js +0 -291
  222. package/esm5/lib/components/search-location/search-location.component.js +0 -329
  223. package/esm5/lib/components/search-service/search-service.component.js +0 -68
  224. package/esm5/lib/components/search-venue/search-venue.component.js +0 -290
  225. package/esm5/lib/components/selected-case/selected-case.component.js +0 -424
  226. package/esm5/lib/components/selected-case-confirm/selected-case-confirm.component.js +0 -84
  227. package/esm5/lib/components/selected-case-list/selected-case-list.component.js +0 -115
  228. package/esm5/lib/components/service-message/service-message.component.js +0 -46
  229. package/esm5/lib/components/service-messages/service-messages.component.js +0 -122
  230. package/esm5/lib/components/share-case/share-case.component.js +0 -435
  231. package/esm5/lib/components/share-case-confirm/share-case-confirm.component.js +0 -70
  232. package/esm5/lib/components/tab/tab.component.js +0 -51
  233. package/esm5/lib/components/tc-confirm/tc-confirm.component.js +0 -42
  234. package/esm5/lib/components/terms-and-conditions/tc-display/tc-display-html/tc-display-html.component.js +0 -22
  235. package/esm5/lib/components/terms-and-conditions/tc-display/tc-display-plain/tc-display-plain.component.js +0 -22
  236. package/esm5/lib/components/terms-and-conditions/terms-and-conditions.component.js +0 -29
  237. package/esm5/lib/components/user-details/user-details.component.js +0 -92
  238. package/esm5/lib/components/user-list/user-list.component.js +0 -76
  239. package/esm5/lib/components/user-select/user-select.component.js +0 -131
  240. package/esm5/lib/directives/feature-toggle/feature-toggle.directive.js +0 -104
  241. package/esm5/lib/directives/index.js +0 -7
  242. package/esm5/lib/directives/let/let.directive.js +0 -78
  243. package/esm5/lib/directives/public-api.js +0 -8
  244. package/esm5/lib/exui-common-lib.module.js +0 -167
  245. package/esm5/lib/gov-ui/components/gov-uk-checkbox/gov-uk-checkbox.component.js +0 -56
  246. package/esm5/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.js +0 -36
  247. package/esm5/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.js +0 -135
  248. package/esm5/lib/gov-ui/components/gov-uk-error-message/gov-uk-error-message.component.js +0 -37
  249. package/esm5/lib/gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component.js +0 -49
  250. package/esm5/lib/gov-ui/components/gov-uk-file-upload/gov-uk-file-upload.component.js +0 -65
  251. package/esm5/lib/gov-ui/components/gov-uk-form-group-wrapper/gov-uk-form-group-wrapper.component.js +0 -40
  252. package/esm5/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.js +0 -66
  253. package/esm5/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.js +0 -34
  254. package/esm5/lib/gov-ui/components/gov-uk-radio/gov-uk-radio.component.js +0 -67
  255. package/esm5/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.js +0 -36
  256. package/esm5/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.js +0 -52
  257. package/esm5/lib/gov-ui/components/gov-uk-table/gov-uk-table.component.js +0 -77
  258. package/esm5/lib/gov-ui/components/gov-uk-textarea/gov-uk-textarea.component.js +0 -50
  259. package/esm5/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.js +0 -38
  260. package/esm5/lib/gov-ui/components/hmcts-error-summary/hmcts-error-summary.component.js +0 -108
  261. package/esm5/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.js +0 -40
  262. package/esm5/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.js +0 -87
  263. package/esm5/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.js +0 -51
  264. package/esm5/lib/gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component.js +0 -49
  265. package/esm5/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.js +0 -46
  266. package/esm5/lib/gov-ui/components/index.js +0 -7
  267. package/esm5/lib/gov-ui/components/public_api.js +0 -7
  268. package/esm5/lib/gov-ui/directives/remove-host.directive.js +0 -52
  269. package/esm5/lib/gov-ui/gov-ui.service.js +0 -22
  270. package/esm5/lib/gov-ui/index.js +0 -7
  271. package/esm5/lib/gov-ui/models/banner-data-model.js +0 -16
  272. package/esm5/lib/gov-ui/models/checkboxes-model.js +0 -22
  273. package/esm5/lib/gov-ui/models/error-messages-model.js +0 -16
  274. package/esm5/lib/gov-ui/models/gov-ui-config-model.js +0 -36
  275. package/esm5/lib/gov-ui/models/index.js +0 -7
  276. package/esm5/lib/gov-ui/models/isession-storage.interface.js +0 -24
  277. package/esm5/lib/gov-ui/models/public_api.js +0 -13
  278. package/esm5/lib/gov-ui/public_api.js +0 -12
  279. package/esm5/lib/gov-ui/util/helpers/html-templates.helper.js +0 -57
  280. package/esm5/lib/gov-ui/util/session-storage/session-storage-utils.js +0 -58
  281. package/esm5/lib/gov-ui/validators/checkboxes-be-checked.validator.js +0 -38
  282. package/esm5/lib/gov-ui/validators/date.validator.js +0 -32
  283. package/esm5/lib/gov-ui/validators/index.js +0 -7
  284. package/esm5/lib/gov-ui/validators/public_api.js +0 -12
  285. package/esm5/lib/gov-ui/validators/radio-group.validator.js +0 -27
  286. package/esm5/lib/models/case-share.model.js +0 -33
  287. package/esm5/lib/models/contact-details.model.js +0 -31
  288. package/esm5/lib/models/due-date.model.js +0 -15
  289. package/esm5/lib/models/feature-user.js +0 -28
  290. package/esm5/lib/models/filter.model.js +0 -130
  291. package/esm5/lib/models/idle-config.model.js +0 -20
  292. package/esm5/lib/models/index.js +0 -20
  293. package/esm5/lib/models/location.model.js +0 -129
  294. package/esm5/lib/models/pagination.model.js +0 -18
  295. package/esm5/lib/models/person.model.js +0 -96
  296. package/esm5/lib/models/public_api.js +0 -11
  297. package/esm5/lib/models/search-options.model.js +0 -22
  298. package/esm5/lib/models/tcDocument.model.js +0 -18
  299. package/esm5/lib/models/timeout-notification.model.js +0 -18
  300. package/esm5/lib/models/user-details.model.js +0 -22
  301. package/esm5/lib/models/user.model.js +0 -25
  302. package/esm5/lib/services/case-sharing-state/case-sharing-state.service.js +0 -313
  303. package/esm5/lib/services/cookie/cookie.service.js +0 -136
  304. package/esm5/lib/services/feature-toggle/feature-toggle.guard.js +0 -89
  305. package/esm5/lib/services/feature-toggle/feature-toggle.service.js +0 -90
  306. package/esm5/lib/services/feature-toggle/launch-darkly.service.js +0 -187
  307. package/esm5/lib/services/filter/filter.service.js +0 -190
  308. package/esm5/lib/services/find-person/find-person.service.js +0 -246
  309. package/esm5/lib/services/google-analytics/google-analytics.service.js +0 -128
  310. package/esm5/lib/services/google-tag-manager/google-tag-manager.service.js +0 -135
  311. package/esm5/lib/services/index.js +0 -7
  312. package/esm5/lib/services/loading/loading.service.js +0 -109
  313. package/esm5/lib/services/locations/location.service.js +0 -86
  314. package/esm5/lib/services/manage-session/manage-session.services.js +0 -111
  315. package/esm5/lib/services/public-api.js +0 -21
  316. package/esm5/lib/services/role-guard/role.guard.js +0 -81
  317. package/esm5/lib/services/role-guard/role.service.js +0 -45
  318. package/esm5/lib/services/session-storage/session-storage.service.js +0 -96
  319. package/esm5/lib/services/timeout-notifications/timeout-notifications.service.js +0 -190
  320. package/esm5/lib/window.js +0 -13
  321. package/esm5/public-api.js +0 -16
  322. package/fesm5/hmcts-rpx-xui-common-lib.js +0 -8157
  323. package/fesm5/hmcts-rpx-xui-common-lib.js.map +0 -1
  324. package/lib/gov-ui/models/banner-data-model.d.ts +0 -4
  325. /package/lib/services/{session-storage → storage/session-storage}/session-storage.service.d.ts +0 -0
@@ -1,840 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/components/generic-filter/generic-filter.component.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import * as tslib_1 from "tslib";
7
- import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';
8
- import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
9
- import { FilterService } from './../../services/filter/filter.service';
10
- import { getValues, maxSelectedValidator, minSelectedValidator } from './generic-filter-utils';
11
- var GenericFilterComponent = /** @class */ (function () {
12
- function GenericFilterComponent(filterService, fb) {
13
- this.filterService = filterService;
14
- this.fb = fb;
15
- this.submitted = false;
16
- }
17
- Object.defineProperty(GenericFilterComponent.prototype, "config", {
18
- get: /**
19
- * @return {?}
20
- */
21
- function () {
22
- return this._config;
23
- },
24
- set: /**
25
- * @param {?} value
26
- * @return {?}
27
- */
28
- function (value) {
29
- this._config = tslib_1.__assign({}, value, { fields: value.fields.map((/**
30
- * @param {?} field
31
- * @return {?}
32
- */
33
- function (field) { return (tslib_1.__assign({}, field, { displayMinSelectedError: false, displayMaxSelectedError: false })); })) });
34
- this._config = value;
35
- },
36
- enumerable: true,
37
- configurable: true
38
- });
39
- Object.defineProperty(GenericFilterComponent.prototype, "settings", {
40
- get: /**
41
- * @return {?}
42
- */
43
- function () {
44
- return this._settings;
45
- },
46
- set: /**
47
- * @param {?} value
48
- * @return {?}
49
- */
50
- function (value) {
51
- if (!value) {
52
- this.getSettings();
53
- }
54
- if (value && value.fields) {
55
- this.mergeDefaultFields(value);
56
- }
57
- this._settings = value;
58
- },
59
- enumerable: true,
60
- configurable: true
61
- });
62
- /**
63
- * @private
64
- * @param {?} field
65
- * @return {?}
66
- */
67
- GenericFilterComponent.addFormValidators = /**
68
- * @private
69
- * @param {?} field
70
- * @return {?}
71
- */
72
- function (field) {
73
- /** @type {?} */
74
- var validators = [];
75
- if (field && field.minSelected) {
76
- validators.push(minSelectedValidator(field.minSelected));
77
- }
78
- if (field && field.maxSelected) {
79
- validators.push(maxSelectedValidator(field.maxSelected));
80
- }
81
- return validators;
82
- };
83
- /**
84
- * @return {?}
85
- */
86
- GenericFilterComponent.prototype.ngOnInit = /**
87
- * @return {?}
88
- */
89
- function () {
90
- var _this = this;
91
- if (!this.settings) {
92
- this.getSettings();
93
- }
94
- this.mergeDefaultFields(this.settings);
95
- this.buildForm(this.config, this.settings);
96
- this.formSub = this.form.valueChanges.subscribe((/**
97
- * @return {?}
98
- */
99
- function () { return _this.submitted = false; }));
100
- };
101
- /**
102
- * @return {?}
103
- */
104
- GenericFilterComponent.prototype.ngOnDestroy = /**
105
- * @return {?}
106
- */
107
- function () {
108
- if (this.formSub) {
109
- this.formSub.unsubscribe();
110
- }
111
- };
112
- /**
113
- * @param {?} field
114
- * @param {?} form
115
- * @return {?}
116
- */
117
- GenericFilterComponent.prototype.hidden = /**
118
- * @param {?} field
119
- * @param {?} form
120
- * @return {?}
121
- */
122
- function (field, form) {
123
- if (!field.showCondition) {
124
- return false;
125
- }
126
- if (typeof field.showCondition === 'string') {
127
- /** @type {?} */
128
- var control = (/** @type {?} */ (form.get(field.name)));
129
- var _a = tslib_1.__read(field.showCondition.split('='), 2), name_1 = _a[0], value = _a[1];
130
- if (form.value && form.value[name_1] === value) {
131
- if (field.type === 'find-person') {
132
- control.get('email').setValidators(Validators.required);
133
- control.get('email').updateValueAndValidity();
134
- }
135
- else {
136
- control.setValidators(Validators.required);
137
- control.updateValueAndValidity();
138
- }
139
- return false;
140
- }
141
- else {
142
- if (field.type === 'find-person') {
143
- control.get('email').clearValidators();
144
- control.get('email').updateValueAndValidity();
145
- }
146
- else {
147
- control.clearValidators();
148
- control.updateValueAndValidity();
149
- }
150
- }
151
- }
152
- return true;
153
- };
154
- /**
155
- * @param {?} field
156
- * @param {?} form
157
- * @return {?}
158
- */
159
- GenericFilterComponent.prototype.disabled = /**
160
- * @param {?} field
161
- * @param {?} form
162
- * @return {?}
163
- */
164
- function (field, form) {
165
- if (!field.enableCondition) {
166
- return null;
167
- }
168
- if (typeof field.enableCondition === 'string') {
169
- /** @type {?} */
170
- var control = (/** @type {?} */ (form.get(field.name)));
171
- var _a = tslib_1.__read(field.enableCondition.split('='), 2), name_2 = _a[0], value = _a[1];
172
- if (form.value && form.value[name_2] === value) {
173
- if (field.type === 'find-person') {
174
- control.get('email').setValidators(Validators.required);
175
- control.get('email').updateValueAndValidity();
176
- }
177
- else {
178
- control.setValidators(Validators.required);
179
- control.updateValueAndValidity();
180
- }
181
- return null;
182
- }
183
- else {
184
- if (field.type === 'find-person') {
185
- control.get('email').clearValidators();
186
- control.get('email').updateValueAndValidity();
187
- }
188
- else {
189
- control.clearValidators();
190
- control.updateValueAndValidity();
191
- }
192
- }
193
- }
194
- // find-location is special case where need to reset textbox (by existing disabling functionality)
195
- // field.disable referred to component itself
196
- if (field.type === 'find-location') {
197
- return true;
198
- }
199
- // Note: field.disable decides whether to actually disable or not
200
- return field.disable ? field.disable : null;
201
- };
202
- /**
203
- * @param {?} form
204
- * @return {?}
205
- */
206
- GenericFilterComponent.prototype.applyFilter = /**
207
- * @param {?} form
208
- * @return {?}
209
- */
210
- function (form) {
211
- this.submitted = true;
212
- form.markAsTouched();
213
- if (form.valid) {
214
- this._settings = {
215
- id: this.config.id,
216
- idamId: this.filterService.getUserId(),
217
- fields: this.getSelectedValues(form.value, this.config)
218
- };
219
- this.filterService.givenErrors.next(null);
220
- /** @type {?} */
221
- var settings = tslib_1.__assign({}, this.settings, { reset: false });
222
- this.filterService.persist(settings, this.config.persistence);
223
- }
224
- else {
225
- this.emitFormErrors(form);
226
- }
227
- };
228
- // when domain changes ensure that person field is reset
229
- // when domain changes ensure that person field is reset
230
- /**
231
- * @param {?} field
232
- * @param {?} form
233
- * @return {?}
234
- */
235
- GenericFilterComponent.prototype.fieldChanged =
236
- // when domain changes ensure that person field is reset
237
- /**
238
- * @param {?} field
239
- * @param {?} form
240
- * @return {?}
241
- */
242
- function (field, form) {
243
- var e_1, _a;
244
- // TODO - Do similar with jurisdiction/service for caseworkers by services
245
- if (field.changeResetFields && field.changeResetFields.length) {
246
- try {
247
- for (var _b = tslib_1.__values(field.changeResetFields), _c = _b.next(); !_c.done; _c = _b.next()) {
248
- var resetField = _c.value;
249
- this.resetField(resetField, form);
250
- }
251
- }
252
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
253
- finally {
254
- try {
255
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
256
- }
257
- finally { if (e_1) throw e_1.error; }
258
- }
259
- }
260
- };
261
- // when user enters input change radio button
262
- // when user enters input change radio button
263
- /**
264
- * @param {?} field
265
- * @return {?}
266
- */
267
- GenericFilterComponent.prototype.inputChanged =
268
- // when user enters input change radio button
269
- /**
270
- * @param {?} field
271
- * @return {?}
272
- */
273
- function (field) {
274
- if (field.radioSelectionChange && typeof field.radioSelectionChange === 'string') {
275
- var _a = tslib_1.__read(field.enableCondition.split('='), 2), name_3 = _a[0], value = _a[1];
276
- this.form.get(name_3).patchValue(value);
277
- }
278
- };
279
- /**
280
- * @return {?}
281
- */
282
- GenericFilterComponent.prototype.cancelFilter = /**
283
- * @return {?}
284
- */
285
- function () {
286
- this.buildForm(this.config, this.settings, true);
287
- if (this.config && this.config.cancelSetting) {
288
- this._settings.fields = JSON.parse(JSON.stringify(this.config.cancelSetting.fields));
289
- }
290
- /** @type {?} */
291
- var settings = tslib_1.__assign({}, this.settings, { reset: true });
292
- this.filterService.persist(settings, this.config.persistence);
293
- this.filterService.givenErrors.next(null);
294
- this.submitted = false;
295
- };
296
- /**
297
- * @param {?} values
298
- * @param {?} field
299
- * @return {?}
300
- */
301
- GenericFilterComponent.prototype.updatePersonControls = /**
302
- * @param {?} values
303
- * @param {?} field
304
- * @return {?}
305
- */
306
- function (values, field) {
307
- var e_2, _a;
308
- /** @type {?} */
309
- var keys;
310
- if (!values) {
311
- keys = Object.keys(this.form.get(field.name).value);
312
- }
313
- else {
314
- keys = Object.keys(values);
315
- }
316
- try {
317
- for (var keys_1 = tslib_1.__values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
318
- var key = keys_1_1.value;
319
- if (this.form.get(field.name) && this.form.get(field.name).get(key)) {
320
- /** @type {?} */
321
- var value = values && values[key] ? values[key] : null;
322
- this.form.get(field.name).get(key).patchValue(value);
323
- }
324
- }
325
- }
326
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
327
- finally {
328
- try {
329
- if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
330
- }
331
- finally { if (e_2) throw e_2.error; }
332
- }
333
- };
334
- /**
335
- * @param {?} event
336
- * @param {?} form
337
- * @param {?} item
338
- * @param {?} field
339
- * @return {?}
340
- */
341
- GenericFilterComponent.prototype.toggleSelectAll = /**
342
- * @param {?} event
343
- * @param {?} form
344
- * @param {?} item
345
- * @param {?} field
346
- * @return {?}
347
- */
348
- function (event, form, item, field) {
349
- var e_3, _a;
350
- /** @type {?} */
351
- var isChecked = event.target.checked;
352
- /** @type {?} */
353
- var formArray = (/** @type {?} */ (form.get(field.name)));
354
- if (!item.selectAll) {
355
- /** @type {?} */
356
- var allChecked = formArray.controls.every((/**
357
- * @param {?} control
358
- * @return {?}
359
- */
360
- function (control) { return control.value; }));
361
- /** @type {?} */
362
- var index_1 = null;
363
- /** @type {?} */
364
- var hasSelectAllOption = field.options.find((/**
365
- * @param {?} option
366
- * @param {?} i
367
- * @return {?}
368
- */
369
- function (option, i) {
370
- if (option.hasOwnProperty('selectAll')) {
371
- index_1 = i;
372
- return true;
373
- }
374
- return false;
375
- }));
376
- // tslint:disable-next-line:variable-name
377
- /** @type {?} */
378
- var isAllCheckedExcludingTheSelectAllOption = formArray.controls.filter((/**
379
- * @param {?} _control
380
- * @param {?} i
381
- * @return {?}
382
- */
383
- function (_control, i) { return i !== index_1; }))
384
- .every((/**
385
- * @param {?} control
386
- * @return {?}
387
- */
388
- function (control) { return control.value; }));
389
- if (!allChecked && hasSelectAllOption && !isChecked) {
390
- formArray.controls.forEach((/**
391
- * @param {?} control
392
- * @param {?} i
393
- * @return {?}
394
- */
395
- function (control, i) {
396
- if (index_1 === i) {
397
- control.patchValue(false);
398
- return;
399
- }
400
- }));
401
- }
402
- else if (hasSelectAllOption && !allChecked && isChecked && isAllCheckedExcludingTheSelectAllOption) {
403
- formArray.controls[index_1].patchValue(true);
404
- }
405
- }
406
- else {
407
- formArray.controls.forEach((/**
408
- * @param {?} control
409
- * @return {?}
410
- */
411
- function (control) {
412
- if (isChecked) {
413
- control.patchValue(true);
414
- }
415
- else {
416
- control.patchValue(false);
417
- }
418
- }));
419
- }
420
- if (field.changeResetFields && field.changeResetFields.length) {
421
- try {
422
- for (var _b = tslib_1.__values(field.changeResetFields), _c = _b.next(); !_c.done; _c = _b.next()) {
423
- var resetField = _c.value;
424
- this.resetField(resetField, form);
425
- }
426
- }
427
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
428
- finally {
429
- try {
430
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
431
- }
432
- finally { if (e_3) throw e_3.error; }
433
- }
434
- }
435
- };
436
- /**
437
- * @private
438
- * @param {?} resetField
439
- * @param {?} form
440
- * @return {?}
441
- */
442
- GenericFilterComponent.prototype.resetField = /**
443
- * @private
444
- * @param {?} resetField
445
- * @param {?} form
446
- * @return {?}
447
- */
448
- function (resetField, form) {
449
- var e_4, _a;
450
- /** @type {?} */
451
- var control = form.get(resetField);
452
- /** @type {?} */
453
- var defaultValue = this.config.cancelSetting.fields.find((/**
454
- * @param {?} f
455
- * @return {?}
456
- */
457
- function (f) { return f.name === resetField; }));
458
- if (control instanceof FormArray) {
459
- for (var i = 0; i < control.length; i++) {
460
- control.removeAt(i);
461
- }
462
- }
463
- else if (control instanceof FormGroup) {
464
- /** @type {?} */
465
- var keys = Object.keys(control.value);
466
- try {
467
- for (var keys_2 = tslib_1.__values(keys), keys_2_1 = keys_2.next(); !keys_2_1.done; keys_2_1 = keys_2.next()) {
468
- var key = keys_2_1.value;
469
- this.resetField(key, control);
470
- }
471
- }
472
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
473
- finally {
474
- try {
475
- if (keys_2_1 && !keys_2_1.done && (_a = keys_2.return)) _a.call(keys_2);
476
- }
477
- finally { if (e_4) throw e_4.error; }
478
- }
479
- }
480
- else if (control instanceof FormControl) {
481
- /** @type {?} */
482
- var value = defaultValue && defaultValue.value && defaultValue.value.length ? defaultValue.value[0] : null;
483
- control.setValue(value);
484
- }
485
- };
486
- /**
487
- * @private
488
- * @param {?} filter
489
- * @return {?}
490
- */
491
- GenericFilterComponent.prototype.mergeDefaultFields = /**
492
- * @private
493
- * @param {?} filter
494
- * @return {?}
495
- */
496
- function (filter) {
497
- if (filter) {
498
- filter.fields = this.filterService.get(this.config.id) ? this.filterService.get(this.config.id).fields : filter.fields;
499
- }
500
- else if (this.config && this.config.cancelSetting) {
501
- this._settings = {
502
- id: this.config.id,
503
- fields: JSON.parse(JSON.stringify(this.config.cancelSetting.fields))
504
- };
505
- }
506
- };
507
- /**
508
- * @private
509
- * @return {?}
510
- */
511
- GenericFilterComponent.prototype.getSettings = /**
512
- * @private
513
- * @return {?}
514
- */
515
- function () {
516
- this._settings = this.filterService.get(this.config.id);
517
- };
518
- /**
519
- * @private
520
- * @param {?} config
521
- * @param {?} settings
522
- * @param {?=} reset
523
- * @return {?}
524
- */
525
- GenericFilterComponent.prototype.buildForm = /**
526
- * @private
527
- * @param {?} config
528
- * @param {?} settings
529
- * @param {?=} reset
530
- * @return {?}
531
- */
532
- function (config, settings, reset) {
533
- var e_5, _a;
534
- /** @type {?} */
535
- var findPersonControl = this.form ? this.form.get('findPersonControl') : null;
536
- this.form = this.fb.group({});
537
- if (findPersonControl) {
538
- // in order to maintain find person component, control needs to be kept
539
- this.form.addControl('findPersonControl', findPersonControl);
540
- }
541
- var _loop_1 = function (field) {
542
- if (field.type === 'checkbox' || field.type === 'checkbox-large') {
543
- /** @type {?} */
544
- var formArray = this_1.buildCheckBoxFormArray(field, settings);
545
- this_1.form.addControl(field.name, formArray);
546
- }
547
- else if (field.type === 'find-location') {
548
- /** @type {?} */
549
- var formArray = this_1.buildFindLocationFormArray(field, settings);
550
- this_1.form.addControl(field.name, formArray);
551
- }
552
- else {
553
- /** @type {?} */
554
- var validators = [];
555
- if (field.minSelected && field.minSelected > 0) {
556
- validators.push(Validators.required);
557
- }
558
- /** @type {?} */
559
- var defaultValue = null;
560
- if (reset && config.cancelSetting) {
561
- /** @type {?} */
562
- var cancelField = config.cancelSetting.fields.find((/**
563
- * @param {?} f
564
- * @return {?}
565
- */
566
- function (f) { return f.name === field.name; }));
567
- defaultValue = cancelField && cancelField.value ? cancelField.value[0] : '';
568
- }
569
- else if (settings && settings.fields) {
570
- /** @type {?} */
571
- var lastSavedValue = settings.fields.find((/**
572
- * @param {?} f
573
- * @return {?}
574
- */
575
- function (f) { return f.name === field.name; }));
576
- defaultValue = lastSavedValue && lastSavedValue ? lastSavedValue.value[0] : '';
577
- }
578
- // if field is find-person build a form group;
579
- if (field.type === 'find-person') {
580
- /** @type {?} */
581
- var formGroup = new FormGroup({
582
- domain: new FormControl(defaultValue && defaultValue.hasOwnProperty('domain') ? defaultValue.domain : ''),
583
- email: new FormControl(defaultValue && defaultValue.hasOwnProperty('email') ? defaultValue.email : '', validators),
584
- id: new FormControl(defaultValue && defaultValue.hasOwnProperty('id') ? defaultValue.id : ''),
585
- name: new FormControl(defaultValue && defaultValue.hasOwnProperty('name') ? defaultValue.name : ''),
586
- knownAs: new FormControl(defaultValue && defaultValue.hasOwnProperty('knownAs') ? defaultValue.knownAs : ''),
587
- });
588
- this_1.form.addControl(field.name, formGroup);
589
- }
590
- else {
591
- /** @type {?} */
592
- var control = new FormControl(defaultValue, validators);
593
- this_1.form.addControl(field.name, control);
594
- }
595
- // if field updates find person component set the initial domain
596
- if (field.findPersonField) {
597
- this_1.fieldChanged(field, this_1.form);
598
- }
599
- }
600
- };
601
- var this_1 = this;
602
- try {
603
- for (var _b = tslib_1.__values(config.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
604
- var field = _c.value;
605
- _loop_1(field);
606
- }
607
- }
608
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
609
- finally {
610
- try {
611
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
612
- }
613
- finally { if (e_5) throw e_5.error; }
614
- }
615
- };
616
- /**
617
- * @private
618
- * @param {?} field
619
- * @param {?} settings
620
- * @return {?}
621
- */
622
- GenericFilterComponent.prototype.buildCheckBoxFormArray = /**
623
- * @private
624
- * @param {?} field
625
- * @param {?} settings
626
- * @return {?}
627
- */
628
- function (field, settings) {
629
- var e_6, _a;
630
- /** @type {?} */
631
- var validators = GenericFilterComponent.addFormValidators(field);
632
- /** @type {?} */
633
- var formArray = this.fb.array([], validators);
634
- /** @type {?} */
635
- var defaultValues;
636
- if (settings && settings.fields) {
637
- defaultValues = settings.fields.find((/**
638
- * @param {?} f
639
- * @return {?}
640
- */
641
- function (f) { return f.name === field.name; }));
642
- }
643
- var _loop_2 = function (option) {
644
- /** @type {?} */
645
- var checked = false;
646
- if (defaultValues && Array.isArray(defaultValues.value)) {
647
- checked = !!defaultValues.value.find((/**
648
- * @param {?} value
649
- * @return {?}
650
- */
651
- function (value) { return value === option.key; }));
652
- }
653
- formArray.push(new FormControl(checked));
654
- };
655
- try {
656
- for (var _b = tslib_1.__values(field.options), _c = _b.next(); !_c.done; _c = _b.next()) {
657
- var option = _c.value;
658
- _loop_2(option);
659
- }
660
- }
661
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
662
- finally {
663
- try {
664
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
665
- }
666
- finally { if (e_6) throw e_6.error; }
667
- }
668
- return formArray;
669
- };
670
- /**
671
- * @private
672
- * @param {?} field
673
- * @param {?} settings
674
- * @return {?}
675
- */
676
- GenericFilterComponent.prototype.buildFindLocationFormArray = /**
677
- * @private
678
- * @param {?} field
679
- * @param {?} settings
680
- * @return {?}
681
- */
682
- function (field, settings) {
683
- var e_7, _a;
684
- /** @type {?} */
685
- var validators = GenericFilterComponent.addFormValidators(field);
686
- /** @type {?} */
687
- var formArray = this.fb.array([], validators);
688
- /** @type {?} */
689
- var defaultValues;
690
- if (settings && settings.fields) {
691
- defaultValues = settings.fields.find((/**
692
- * @param {?} f
693
- * @return {?}
694
- */
695
- function (f) { return f.name === field.name; }));
696
- if (defaultValues && defaultValues.value && defaultValues.value.length > 0) {
697
- try {
698
- for (var _b = tslib_1.__values(defaultValues.value), _c = _b.next(); !_c.done; _c = _b.next()) {
699
- var defaultValue = _c.value;
700
- formArray.push(new FormControl(defaultValue));
701
- }
702
- }
703
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
704
- finally {
705
- try {
706
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
707
- }
708
- finally { if (e_7) throw e_7.error; }
709
- }
710
- }
711
- }
712
- return formArray;
713
- };
714
- /**
715
- * @private
716
- * @param {?} formValues
717
- * @param {?} config
718
- * @return {?}
719
- */
720
- GenericFilterComponent.prototype.getSelectedValues = /**
721
- * @private
722
- * @param {?} formValues
723
- * @param {?} config
724
- * @return {?}
725
- */
726
- function (formValues, config) {
727
- return Object.keys(formValues).map((/**
728
- * @param {?} name
729
- * @return {?}
730
- */
731
- function (name) {
732
- /** @type {?} */
733
- var values = formValues[name];
734
- if (Array.isArray(values)) {
735
- /** @type {?} */
736
- var field = config.fields.find((/**
737
- * @param {?} f
738
- * @return {?}
739
- */
740
- function (f) { return f.name === name; }));
741
- if (field.type === 'find-location') {
742
- return { value: values, name: name };
743
- }
744
- else {
745
- return { value: getValues(field.options, values), name: name };
746
- }
747
- }
748
- else {
749
- return { value: [values], name: name };
750
- }
751
- }));
752
- };
753
- /**
754
- * @private
755
- * @param {?} form
756
- * @return {?}
757
- */
758
- GenericFilterComponent.prototype.emitFormErrors = /**
759
- * @private
760
- * @param {?} form
761
- * @return {?}
762
- */
763
- function (form) {
764
- var e_8, _a;
765
- /** @type {?} */
766
- var errors = [];
767
- try {
768
- for (var _b = tslib_1.__values(this.config.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
769
- var field = _c.value;
770
- /** @type {?} */
771
- var formGroup = form.get(field.name);
772
- if (formGroup && formGroup.errors && formGroup.errors.minLength) {
773
- errors.push({ name: field.name, error: field.minSelectedError });
774
- }
775
- if (formGroup && formGroup.errors && formGroup.errors.maxLength) {
776
- errors.push({ name: field.name, error: field.minSelectedError });
777
- }
778
- }
779
- }
780
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
781
- finally {
782
- try {
783
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
784
- }
785
- finally { if (e_8) throw e_8.error; }
786
- }
787
- if (errors.length) {
788
- this.filterService.givenErrors.next(errors);
789
- }
790
- };
791
- GenericFilterComponent.decorators = [
792
- { type: Component, args: [{
793
- selector: 'xuilib-generic-filter',
794
- template: "<form [formGroup]=\"form\" (ngSubmit)=\"applyFilter(form)\">\n <div class=\"contain-classes\" *ngFor=\"let field of config.fields\">\n <hr *ngIf=\"field.lineBreakBefore\" class=\"govuk-section-break govuk-section-break--visible elevated-break\">\n <div class=\"govuk-form-group xui-generic-filter\"\n [hidden]=\"hidden(field, form)\"\n [id]=\"field.name\"\n [ngClass]=\"{'form-group-error': submitted && (form.get(field.name).errors?.minLength || form.get(field.name).errors?.maxLength)}\">\n <h3 *ngIf=\"field.title\" class=\"govuk-heading-s\">{{field.title}}</h3>\n <p class=\"govuk-body\" *ngIf=\"field.subTitle\">{{field.subTitle}}</p>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMinSelectedError && submitted && form.get(field.name).errors?.minLength\">\n <span class=\"govuk-visually-hidden\">Error:</span> {{field.minSelectedError}}\n </span>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMaxSelectedError && submitted && form.get(field.name).errors?.maxLength\">\n <span class=\"govuk-visually-hidden\">Error:</span> {{field.maxSelectedError}}\n </span>\n <div class=\"govuk-body\" [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'select'\">\n <select class=\"govuk-select\" (change)=\"fieldChanged(field, form)\" [attr.disabled]=\"disabled(field, form)\" [name]=\"'select_' + field.name\" [id]=\"'select_' + field.name\" [formControlName]=\"field.name\">\n <option disabled selected hidden value=\"\">{{field.disabledText}}</option>\n <option class=\"govuk-radios__item\" *ngFor=\"let item of field.options\" [value]=\"item.key\">{{item.label}}</option>\n </select>\n </ng-container>\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <div class=\"govuk-checkboxes govuk-checkboxes--small\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of field.options; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + item.key\"\n [name]=\"'checkbox_' + item.key\"\n />\n <label\n [for]=\"'checkbox_' + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'checkbox-large'\">\n <div class=\"govuk-checkboxes\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of field.options; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + item.key\"\n [name]=\"'checkbox_' + item.key\"\n />\n <label\n [for]=\"'checkbox_' + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'radio'\">\n <div class=\"govuk-radios\">\n <div *ngFor=\"let item of field.options\" class=\"govuk-radios__item\">\n <input type=\"radio\"\n [formControlName]=\"field.name\"\n [id]=\"'radio_' + item.key\"\n [attr.disabled]=\"disabled(field, form)\"\n [checked]=\"item.key === form.get(field.name).value\"\n class=\"govuk-radios__input\"\n [value]=\"item.key\"\n (change)=\"fieldChanged(field, form)\"\n />\n <label [for]=\"'radio_' + item.key\" class=\"govuk-label govuk-radios__label\">{{item.label}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-person'\">\n <xuilib-find-person subTitle=\"\" (personSelected)=\"updatePersonControls($event, field)\"\n (personFieldChanged)=\"inputChanged(field)\"\n [submitted]=\"submitted\"\n [disabled]=\"disabled(field, form)\"\n [domain]=\"form.get(field.domainField)?.value\"\n [findPersonGroup]=\"form\"\n [selectedPerson]=\"form.get(field.name)?.value?.email\"\n [userIncluded]=\"false\"\n [placeholderContent]=\"field.placeholderContent ? field.placeholderContent : ''\"\n ></xuilib-find-person>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-location'\">\n <xuilib-find-location (locationFieldChanged)=\"inputChanged(field)\"\n [form]=\"form\"\n [fields]=\"config.fields\"\n [locationTitle]=\"field.locationTitle\"\n [enableAddLocationButton]=\"field.enableAddButton\"\n [disabled]=\"disabled(field, form)\"\n [disableInputField]=\"field.disable\"\n [selectedLocations]=\"form.get(field.name)?.value\"\n [submitted]=\"submitted\"\n [field]=\"field\"\n [services]=\"form.get(field.findLocationField)?.value\"\n ></xuilib-find-location>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-service'\">\n <xuilib-find-service (serviceFieldChanged)=\"inputChanged(field)\"\n [form]=\"form\"\n [fields]=\"config.fields\"\n [title]=\"field.title\"\n [enableAddServiceButton]=\"field.enableAddButton\"\n [disabled]=\"disabled(field, form)\"\n [disableInputField]=\"field.disable\"\n [field]=\"field\"\n [selectedServices]=\"form.get(field.name)?.value\" \n ></xuilib-find-service>\n </ng-container>\n </div>\n </div>\n </div>\n <hr class=\"govuk-section-break govuk-section-break--m govuk-section-break--visible\"/>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <button\n class=\"govuk-button govuk-!-margin-right-1 govuk-!-margin-bottom-0\"\n type=\"submit\"\n id=\"applyFilter\"\n [disabled]=\"config.enableDisabledButton && form.invalid\"\n >{{config.applyButtonText || 'Apply'}}</button>\n <button *ngIf=\"config.showCancelFilterButton\"\n class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\"\n type=\"button\"\n id=\"cancelFilter\"\n (click)=\"cancelFilter()\">{{ config.cancelButtonText || 'Cancel'}}</button>\n </div>\n </div>\n</form>\n",
795
- changeDetection: ChangeDetectionStrategy.OnPush,
796
- encapsulation: ViewEncapsulation.None,
797
- styles: [".contain-classes .elevated-break{position:relative;top:-10px}.contain-classes .xui-generic-filter .select-all{margin-bottom:10px}.contain-classes .xui-generic-filter .govuk-checkboxes{display:flex;flex-wrap:wrap}.contain-classes .xui-generic-filter .govuk-checkboxes>div{flex-grow:1;flex-shrink:0}"]
798
- }] }
799
- ];
800
- /** @nocollapse */
801
- GenericFilterComponent.ctorParameters = function () { return [
802
- { type: FilterService },
803
- { type: FormBuilder }
804
- ]; };
805
- GenericFilterComponent.propDecorators = {
806
- config: [{ type: Input }],
807
- settings: [{ type: Input }]
808
- };
809
- return GenericFilterComponent;
810
- }());
811
- export { GenericFilterComponent };
812
- if (false) {
813
- /** @type {?} */
814
- GenericFilterComponent.prototype.form;
815
- /** @type {?} */
816
- GenericFilterComponent.prototype.submitted;
817
- /** @type {?} */
818
- GenericFilterComponent.prototype.formSub;
819
- /**
820
- * @type {?}
821
- * @private
822
- */
823
- GenericFilterComponent.prototype._config;
824
- /**
825
- * @type {?}
826
- * @private
827
- */
828
- GenericFilterComponent.prototype._settings;
829
- /**
830
- * @type {?}
831
- * @private
832
- */
833
- GenericFilterComponent.prototype.filterService;
834
- /**
835
- * @type {?}
836
- * @private
837
- */
838
- GenericFilterComponent.prototype.fb;
839
- }
840
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL3JweC14dWktY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2dlbmVyaWMtZmlsdGVyL2dlbmVyaWMtZmlsdGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRjtJQVlFLGdDQUE2QixhQUE0QixFQUFtQixFQUFlO1FBQTlELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFIcEYsY0FBUyxHQUFHLEtBQUssQ0FBQztJQUl6QixDQUFDO0lBS0Qsc0JBQVcsMENBQU07Ozs7UUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQzs7Ozs7UUFFRCxVQUNrQixLQUFtQjtZQUNuQyxJQUFJLENBQUMsT0FBTyx3QkFDUCxLQUFLLElBQ1IsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRzs7OztnQkFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLHNCQUM3QixLQUFLLElBQ1IsdUJBQXVCLEVBQUUsS0FBSyxFQUM5Qix1QkFBdUIsRUFBRSxLQUFLLElBQzlCLEVBSmdDLENBSWhDLEVBQUMsR0FDSixDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFL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IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbHRlckNvbmZpZywgRmlsdGVyRXJyb3IsIEZpbHRlckZpZWxkQ29uZmlnLCBGaWx0ZXJTZXR0aW5nIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2ZpbHRlci9maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRWYWx1ZXMsIG1heFNlbGVjdGVkVmFsaWRhdG9yLCBtaW5TZWxlY3RlZFZhbGlkYXRvciB9IGZyb20gJy4vZ2VuZXJpYy1maWx0ZXItdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd4dWlsaWItZ2VuZXJpYy1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJ2dlbmVyaWMtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2dlbmVyaWMtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgcHVibGljIGZvcm1TdWI6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyKSB7XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9jb25maWc6IEZpbHRlckNvbmZpZztcblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpOiBGaWx0ZXJDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogRmlsdGVyQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBmaWVsZHM6IHZhbHVlLmZpZWxkcy5tYXAoZmllbGQgPT4gKHtcbiAgICAgICAgLi4uZmllbGQsXG4gICAgICAgIGRpc3BsYXlNaW5TZWxlY3RlZEVycm9yOiBmYWxzZSxcbiAgICAgICAgZGlzcGxheU1heFNlbGVjdGVkRXJyb3I6IGZhbHNlLFxuICAgICAgfSkpXG4gICAgfTtcbiAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIHByaXZhdGUgX3NldHRpbmdzPzogRmlsdGVyU2V0dGluZztcblxuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IEZpbHRlclNldHRpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2V0dGluZ3ModmFsdWU6IEZpbHRlclNldHRpbmcpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmdldFNldHRpbmdzKCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5maWVsZHMpIHtcbiAgICAgIHRoaXMubWVyZ2VEZWZhdWx0RmllbGRzKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0dGluZ3MgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFkZEZvcm1WYWxpZGF0b3JzKGZpZWxkOiBGaWx0ZXJGaWVsZENvbmZpZyk6IFZhbGlkYXRvcnMge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcbiAgICBpZiAoZmllbGQgJiYgZmllbGQubWluU2VsZWN0ZWQpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChtaW5TZWxlY3RlZFZhbGlkYXRvcihmaWVsZC5taW5TZWxlY3RlZCkpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZCAmJiBmaWVsZC5tYXhTZWxlY3RlZCkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG1heFNlbGVjdGVkVmFsaWRhdG9yKGZpZWxkLm1heFNlbGVjdGVkKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXR0aW5ncykge1xuICAgICAgdGhpcy5nZXRTZXR0aW5ncygpO1xuICAgIH1cbiAgICB0aGlzLm1lcmdlRGVmYXVsdEZpZWxkcyh0aGlzLnNldHRpbmdzKTtcbiAgICB0aGlzLmJ1aWxkRm9ybSh0aGlzLmNvbmZpZywgdGhpcy5zZXR0aW5ncyk7XG4gICAgdGhpcy5mb3JtU3ViID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybVN1Yikge1xuICAgICAgdGhpcy5mb3JtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhpZGRlbihmaWVsZDogRmlsdGVyRmllbGRDb25maWcsIGZvcm06IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xuICAgIGlmICghZmllbGQuc2hvd0NvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGZpZWxkLnNob3dDb25kaXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoZmllbGQubmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gZmllbGQuc2hvd0NvbmRpdGlvbi5zcGxpdCgnPScpO1xuICAgICAgaWYgKGZvcm0udmFsdWUgJiYgZm9ybS52YWx1ZVtuYW1lXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdmaW5kLXBlcnNvbicpIHtcbiAgICAgICAgICBjb250cm9sLmdldCgnZW1haWwnKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICAgIGNvbnRyb2wuZ2V0KCdlbWFpbCcpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdmaW5kLXBlcnNvbicpIHtcbiAgICAgICAgICBjb250cm9sLmdldCgnZW1haWwnKS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICBjb250cm9sLmdldCgnZW1haWwnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlZChmaWVsZDogRmlsdGVyRmllbGRDb25maWcsIGZvcm06IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xuICAgIGlmICghZmllbGQuZW5hYmxlQ29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmaWVsZC5lbmFibGVDb25kaXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoZmllbGQubmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gZmllbGQuZW5hYmxlQ29uZGl0aW9uLnNwbGl0KCc9Jyk7XG4gICAgICBpZiAoZm9ybS52YWx1ZSAmJiBmb3JtLnZhbHVlW25hbWVdID09PSB2YWx1ZSkge1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2ZpbmQtcGVyc29uJykge1xuICAgICAgICAgIGNvbnRyb2wuZ2V0KCdlbWFpbCcpLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgY29udHJvbC5nZXQoJ2VtYWlsJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnZmluZC1wZXJzb24nKSB7XG4gICAgICAgICAgY29udHJvbC5nZXQoJ2VtYWlsJykuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgY29udHJvbC5nZXQoJ2VtYWlsJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZmluZC1sb2NhdGlvbiBpcyBzcGVjaWFsIGNhc2Ugd2hlcmUgbmVlZCB0byByZXNldCB0ZXh0Ym94IChieSBleGlzdGluZyBkaXNhYmxpbmcgZnVuY3Rpb25hbGl0eSlcbiAgICAvLyBmaWVsZC5kaXNhYmxlIHJlZmVycmVkIHRvIGNvbXBvbmVudCBpdHNlbGZcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2ZpbmQtbG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gTm90ZTogZmllbGQuZGlzYWJsZSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0dWFsbHkgZGlzYWJsZSBvciBub3RcbiAgICByZXR1cm4gZmllbGQuZGlzYWJsZSA/IGZpZWxkLmRpc2FibGUgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGFwcGx5RmlsdGVyKGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICBmb3JtLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBpZiAoZm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5fc2V0dGluZ3MgPSB7XG4gICAgICAgIGlkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgICAgaWRhbUlkOiB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0VXNlcklkKCksXG4gICAgICAgIGZpZWxkczogdGhpcy5nZXRTZWxlY3RlZFZhbHVlcyhmb3JtLnZhbHVlLCB0aGlzLmNvbmZpZylcbiAgICAgIH07XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UuZ2l2ZW5FcnJvcnMubmV4dChudWxsKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gey4uLnRoaXMuc2V0dGluZ3MsIHJlc2V0OiBmYWxzZX07XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UucGVyc2lzdChzZXR0aW5ncywgdGhpcy5jb25maWcucGVyc2lzdGVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXRGb3JtRXJyb3JzKGZvcm0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHdoZW4gZG9tYWluIGNoYW5nZXMgZW5zdXJlIHRoYXQgcGVyc29uIGZpZWxkIGlzIHJlc2V0XG4gIHB1YmxpYyBmaWVsZENoYW5nZWQoZmllbGQ6IEZpbHRlckZpZWxkQ29uZmlnLCBmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICAvLyBUT0RPIC0gRG8gc2ltaWxhciB3aXRoIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGZvciBjYXNld29ya2VycyBieSBzZXJ2aWNlc1xuICAgIGlmIChmaWVsZC5jaGFuZ2VSZXNldEZpZWxkcyAmJiBmaWVsZC5jaGFuZ2VSZXNldEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgcmVzZXRGaWVsZCBvZiBmaWVsZC5jaGFuZ2VSZXNldEZpZWxkcykge1xuICAgICAgICB0aGlzLnJlc2V0RmllbGQocmVzZXRGaWVsZCwgZm9ybSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gd2hlbiB1c2VyIGVudGVycyBpbnB1dCBjaGFuZ2UgcmFkaW8gYnV0dG9uXG4gIHB1YmxpYyBpbnB1dENoYW5nZWQoZmllbGQ6IEZpbHRlckZpZWxkQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKGZpZWxkLnJhZGlvU2VsZWN0aW9uQ2hhbmdlICYmIHR5cGVvZiBmaWVsZC5yYWRpb1NlbGVjdGlvbkNoYW5nZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBmaWVsZC5lbmFibGVDb25kaXRpb24uc3BsaXQoJz0nKTtcbiAgICAgIHRoaXMuZm9ybS5nZXQobmFtZSkucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbmNlbEZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkRm9ybSh0aGlzLmNvbmZpZywgdGhpcy5zZXR0aW5ncywgdHJ1ZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmNhbmNlbFNldHRpbmcpIHtcbiAgICAgIHRoaXMuX3NldHRpbmdzLmZpZWxkcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuY2FuY2VsU2V0dGluZy5maWVsZHMpKTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB7Li4udGhpcy5zZXR0aW5ncywgcmVzZXQ6IHRydWV9O1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5wZXJzaXN0KHNldHRpbmdzLCB0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSk7XG4gICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmdpdmVuRXJyb3JzLm5leHQobnVsbCk7XG4gICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVQZXJzb25Db250cm9scyh2YWx1ZXM6IGFueSwgZmllbGQ6IEZpbHRlckZpZWxkQ29uZmlnKTogdm9pZCB7XG4gICAgbGV0IGtleXM7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0uZ2V0KGZpZWxkLm5hbWUpLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlcyk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmICh0aGlzLmZvcm0uZ2V0KGZpZWxkLm5hbWUpICYmIHRoaXMuZm9ybS5nZXQoZmllbGQubmFtZSkuZ2V0KGtleSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXMgJiYgdmFsdWVzW2tleV0gPyB2YWx1ZXNba2V5XSA6IG51bGw7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoZmllbGQubmFtZSkuZ2V0KGtleSkucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdEFsbChldmVudDogYW55LCBmb3JtOiBGb3JtR3JvdXAsIGl0ZW06IHsga2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHNlbGVjdEFsbD86IHRydWUgfSwgZmllbGQ6IEZpbHRlckZpZWxkQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgY29uc3QgZm9ybUFycmF5OiBGb3JtQXJyYXkgPSBmb3JtLmdldChmaWVsZC5uYW1lKSBhcyBGb3JtQXJyYXk7XG4gICAgaWYgKCFpdGVtLnNlbGVjdEFsbCkge1xuICAgICAgY29uc3QgYWxsQ2hlY2tlZCA9IGZvcm1BcnJheS5jb250cm9scy5ldmVyeSgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBjb250cm9sLnZhbHVlKTtcbiAgICAgIGxldCBpbmRleDogbnVtYmVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGhhc1NlbGVjdEFsbE9wdGlvbiA9IGZpZWxkLm9wdGlvbnMuZmluZCgob3B0aW9uLCBpKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb24uaGFzT3duUHJvcGVydHkoJ3NlbGVjdEFsbCcpKSB7XG4gICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICAgIGNvbnN0IGlzQWxsQ2hlY2tlZEV4Y2x1ZGluZ1RoZVNlbGVjdEFsbE9wdGlvbiA9IGZvcm1BcnJheS5jb250cm9scy5maWx0ZXIoKF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGk6IG51bWJlcikgPT4gaSAhPT0gaW5kZXgpXG4gICAgICAgIC5ldmVyeSgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBjb250cm9sLnZhbHVlKTtcblxuICAgICAgaWYgKCFhbGxDaGVja2VkICYmIGhhc1NlbGVjdEFsbE9wdGlvbiAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xuICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChoYXNTZWxlY3RBbGxPcHRpb24gJiYgIWFsbENoZWNrZWQgJiYgaXNDaGVja2VkICYmIGlzQWxsQ2hlY2tlZEV4Y2x1ZGluZ1RoZVNlbGVjdEFsbE9wdGlvbikge1xuICAgICAgICBmb3JtQXJyYXkuY29udHJvbHNbaW5kZXhdLnBhdGNoVmFsdWUodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGZpZWxkLmNoYW5nZVJlc2V0RmllbGRzICYmIGZpZWxkLmNoYW5nZVJlc2V0RmllbGRzLmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCByZXNldEZpZWxkIG9mIGZpZWxkLmNoYW5nZVJlc2V0RmllbGRzKSB7XG4gICAgICAgIHRoaXMucmVzZXRGaWVsZChyZXNldEZpZWxkLCBmb3JtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RmllbGQocmVzZXRGaWVsZDogc3RyaW5nLCBmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQocmVzZXRGaWVsZCk7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlOiB7IG5hbWU6IHN0cmluZywgdmFsdWU6IGFueVtdIH0gPSB0aGlzLmNvbmZpZy5jYW5jZWxTZXR0aW5nLmZpZWxkcy5maW5kKChmKSA9PiBmLm5hbWUgPT09IHJlc2V0RmllbGQpO1xuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29udHJvbC5yZW1vdmVBdChpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjb250cm9sLnZhbHVlKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgdGhpcy5yZXNldEZpZWxkKGtleSwgY29udHJvbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS52YWx1ZSAmJiBkZWZhdWx0VmFsdWUudmFsdWUubGVuZ3RoID8gZGVmYXVsdFZhbHVlLnZhbHVlWzBdIDogbnVsbDtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VEZWZhdWx0RmllbGRzKGZpbHRlcjogRmlsdGVyU2V0dGluZyk6IHZvaWQge1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIGZpbHRlci5maWVsZHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0KHRoaXMuY29uZmlnLmlkKSA/IHRoaXMuZmlsdGVyU2VydmljZS5nZXQodGhpcy5jb25maWcuaWQpLmZpZWxkcyA6IGZpbHRlci5maWVsZHM7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5jYW5jZWxTZXR0aW5nKSB7XG4gICAgICB0aGlzLl9zZXR0aW5ncyA9IHtcbiAgICAgICAgaWQ6IHRoaXMuY29uZmlnLmlkLFxuICAgICAgICBmaWVsZHM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuY2FuY2VsU2V0dGluZy5maWVsZHMpKVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldHRpbmdzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmdldCh0aGlzLmNvbmZpZy5pZCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybShjb25maWc6IEZpbHRlckNvbmZpZywgc2V0dGluZ3M6IEZpbHRlclNldHRpbmcsIHJlc2V0PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGZpbmRQZXJzb25Db250cm9sID0gdGhpcy5mb3JtID8gdGhpcy5mb3JtLmdldCgnZmluZFBlcnNvbkNvbnRyb2wnKSA6IG51bGw7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgaWYgKGZpbmRQZXJzb25Db250cm9sKSB7XG4gICAgICAvLyBpbiBvcmRlciB0byBtYWludGFpbiBmaW5kIHBlcnNvbiBjb21wb25lbnQsIGNvbnRyb2wgbmVlZHMgdG8gYmUga2VwdFxuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ2ZpbmRQZXJzb25Db250cm9sJywgZmluZFBlcnNvbkNvbnRyb2wpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNvbmZpZy5maWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hlY2tib3gnIHx8IGZpZWxkLnR5cGUgPT09ICdjaGVja2JveC1sYXJnZScpIHtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5idWlsZENoZWNrQm94Rm9ybUFycmF5KGZpZWxkLCBzZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGZvcm1BcnJheSk7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdmaW5kLWxvY2F0aW9uJykge1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmJ1aWxkRmluZExvY2F0aW9uRm9ybUFycmF5KGZpZWxkLCBzZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGZvcm1BcnJheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG4gICAgICAgIGlmIChmaWVsZC5taW5TZWxlY3RlZCAmJiBmaWVsZC5taW5TZWxlY3RlZCA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHJlc2V0ICYmIGNvbmZpZy5jYW5jZWxTZXR0aW5nKSB7XG4gICAgICAgICAgY29uc3QgY2FuY2VsRmllbGQgPSBjb25maWcuY2FuY2VsU2V0dGluZy5maWVsZHMuZmluZCgoZikgPT4gZi5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBjYW5jZWxGaWVsZCAmJiBjYW5jZWxGaWVsZC52YWx1ZSA/IGNhbmNlbEZpZWxkLnZhbHVlWzBdIDogJyc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MuZmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgbGFzdFNhdmVkVmFsdWUgPSBzZXR0aW5ncy5maWVsZHMuZmluZCgoZikgPT4gZi5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBsYXN0U2F2ZWRWYWx1ZSAmJiBsYXN0U2F2ZWRWYWx1ZSA/IGxhc3RTYXZlZFZhbHVlLnZhbHVlWzBdIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgZmllbGQgaXMgZmluZC1wZXJzb24gYnVpbGQgYSBmb3JtIGdyb3VwO1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2ZpbmQtcGVyc29uJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgZG9tYWluOiBuZXcgRm9ybUNvbnRyb2woZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZG9tYWluJykgPyBkZWZhdWx0VmFsdWUuZG9tYWluIDogJycpLFxuICAgICAgICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmhhc093blByb3BlcnR5KCdlbWFpbCcpID8gZGVmYXVsdFZhbHVlLmVtYWlsIDogJycsIHZhbGlkYXRvcnMpLFxuICAgICAgICAgICAgaWQ6IG5ldyBGb3JtQ29udHJvbChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmhhc093blByb3BlcnR5KCdpZCcpID8gZGVmYXVsdFZhbHVlLmlkIDogJycpLFxuICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuaGFzT3duUHJvcGVydHkoJ25hbWUnKSA/IGRlZmF1bHRWYWx1ZS5uYW1lIDogJycpLFxuICAgICAgICAgICAga25vd25BczogbmV3IEZvcm1Db250cm9sKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuaGFzT3duUHJvcGVydHkoJ2tub3duQXMnKSA/IGRlZmF1bHRWYWx1ZS5rbm93bkFzIDogJycpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGZvcm1Hcm91cCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChkZWZhdWx0VmFsdWUsIHZhbGlkYXRvcnMpO1xuICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgZmllbGQgdXBkYXRlcyBmaW5kIHBlcnNvbiBjb21wb25lbnQgc2V0IHRoZSBpbml0aWFsIGRvbWFpblxuICAgICAgICBpZiAoZmllbGQuZmluZFBlcnNvbkZpZWxkKSB7XG4gICAgICAgICAgdGhpcy5maWVsZENoYW5nZWQoZmllbGQsIHRoaXMuZm9ybSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2hlY2tCb3hGb3JtQXJyYXkoZmllbGQ6IEZpbHRlckZpZWxkQ29uZmlnLCBzZXR0aW5nczogRmlsdGVyU2V0dGluZyk6IEZvcm1BcnJheSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IEdlbmVyaWNGaWx0ZXJDb21wb25lbnQuYWRkRm9ybVZhbGlkYXRvcnMoZmllbGQpO1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoW10sIHZhbGlkYXRvcnMpO1xuICAgIGxldCBkZWZhdWx0VmFsdWVzO1xuICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5maWVsZHMpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZXMgPSBzZXR0aW5ncy5maWVsZHMuZmluZCgoZikgPT4gZi5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgZmllbGQub3B0aW9ucykge1xuICAgICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWVzICYmIEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlcy52YWx1ZSkpIHtcbiAgICAgICAgY2hlY2tlZCA9ICEhZGVmYXVsdFZhbHVlcy52YWx1ZS5maW5kKCh2YWx1ZSkgPT4gdmFsdWUgPT09IG9wdGlvbi5rZXkpO1xuICAgICAgfVxuICAgICAgZm9ybUFycmF5LnB1c2gobmV3IEZvcm1Db250cm9sKGNoZWNrZWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1BcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaW5kTG9jYXRpb25Gb3JtQXJyYXkoZmllbGQ6IEZpbHRlckZpZWxkQ29uZmlnLCBzZXR0aW5nczogRmlsdGVyU2V0dGluZyk6IEZvcm1BcnJheSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IEdlbmVyaWNGaWx0ZXJDb21wb25lbnQuYWRkRm9ybVZhbGlkYXRvcnMoZmllbGQpO1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoW10sIHZhbGlkYXRvcnMpO1xuICAgIGxldCBkZWZhdWx0VmFsdWVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueVtdIH07XG4gICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLmZpZWxkcykge1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IHNldHRpbmdzLmZpZWxkcy5maW5kKChmKSA9PiBmLm5hbWUgPT09IGZpZWxkLm5hbWUpO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlcy52YWx1ZSAmJiBkZWZhdWx0VmFsdWVzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBkZWZhdWx0VmFsdWUgb2YgZGVmYXVsdFZhbHVlcy52YWx1ZSkge1xuICAgICAgICAgIGZvcm1BcnJheS5wdXNoKG5ldyBGb3JtQ29udHJvbChkZWZhdWx0VmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybUFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZFZhbHVlcyhmb3JtVmFsdWVzOiBhbnksIGNvbmZpZzogRmlsdGVyQ29uZmlnKTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZm9ybVZhbHVlcykubWFwKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGZvcm1WYWx1ZXNbbmFtZV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29uZmlnLmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdmaW5kLWxvY2F0aW9uJykge1xuICAgICAgICAgIHJldHVybiB7dmFsdWU6IHZhbHVlcywgbmFtZX07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHt2YWx1ZTogZ2V0VmFsdWVzKGZpZWxkLm9wdGlvbnMsIHZhbHVlcyksIG5hbWV9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge3ZhbHVlOiBbdmFsdWVzXSwgbmFtZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGb3JtRXJyb3JzKGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yczogRmlsdGVyRXJyb3JbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5jb25maWcuZmllbGRzKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSBmb3JtLmdldChmaWVsZC5uYW1lKTtcbiAgICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmVycm9ycyAmJiBmb3JtR3JvdXAuZXJyb3JzLm1pbkxlbmd0aCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7bmFtZTogZmllbGQubmFtZSwgZXJyb3I6IGZpZWxkLm1pblNlbGVjdGVkRXJyb3J9KTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmVycm9ycyAmJiBmb3JtR3JvdXAuZXJyb3JzLm1heExlbmd0aCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7bmFtZTogZmllbGQubmFtZSwgZXJyb3I6IGZpZWxkLm1pblNlbGVjdGVkRXJyb3J9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyU2VydmljZS5naXZlbkVycm9ycy5uZXh0KGVycm9ycyk7XG4gICAgfVxuICB9XG59XG4iXX0=