ngx-techlify-core 11.4.6 → 11.4.7

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 (333) hide show
  1. package/README.md +24 -24
  2. package/bundles/ngx-techlify-core.umd.js +7861 -7849
  3. package/bundles/ngx-techlify-core.umd.js.map +1 -1
  4. package/bundles/ngx-techlify-core.umd.min.js +2 -2
  5. package/bundles/ngx-techlify-core.umd.min.js.map +1 -1
  6. package/esm2015/lib/action-popup/action-popup.component.js +32 -32
  7. package/esm2015/lib/action-popup/action-popup.model.js +3 -3
  8. package/esm2015/lib/action-popup/action-popup.module.js +26 -26
  9. package/esm2015/lib/action-popup/index.js +3 -3
  10. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.js +12 -12
  11. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.component.js +49 -49
  12. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.module.js +25 -25
  13. package/esm2015/lib/audit-log/audit-log-list/audit-log-list-routing.module.js +12 -12
  14. package/esm2015/lib/audit-log/audit-log-list/audit-log-list.component.js +132 -132
  15. package/esm2015/lib/audit-log/audit-log-list/audit-log-list.module.js +29 -29
  16. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.js +12 -12
  17. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.js +67 -67
  18. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.js +25 -25
  19. package/esm2015/lib/audit-log/audit-log-routing.module.js +19 -19
  20. package/esm2015/lib/audit-log/audit-log-view/audit-log-view-routing.module.js +12 -12
  21. package/esm2015/lib/audit-log/audit-log-view/audit-log-view.component.js +60 -60
  22. package/esm2015/lib/audit-log/audit-log-view/audit-log-view.module.js +21 -21
  23. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.js +12 -12
  24. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.component.js +57 -57
  25. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.module.js +21 -21
  26. package/esm2015/lib/audit-log/audit-log.module.js +20 -20
  27. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.js +12 -12
  28. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.js +35 -35
  29. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.js +21 -21
  30. package/esm2015/lib/core/alert.service.js +39 -39
  31. package/esm2015/lib/core/api-prefix.interceptor.js +28 -28
  32. package/esm2015/lib/core/authentication.guard.js +39 -39
  33. package/esm2015/lib/core/authentication.service.js +59 -59
  34. package/esm2015/lib/core/cache.interceptor.js +60 -60
  35. package/esm2015/lib/core/config.service.js +47 -47
  36. package/esm2015/lib/core/core.module.js +42 -42
  37. package/esm2015/lib/core/credentials.service.js +84 -84
  38. package/esm2015/lib/core/dataManager.service.js +120 -120
  39. package/esm2015/lib/core/error-handler.interceptor.js +53 -53
  40. package/esm2015/lib/core/error-handler.service.js +59 -59
  41. package/esm2015/lib/core/form-validator.service.js +23 -23
  42. package/esm2015/lib/core/header.interceptor.js +22 -22
  43. package/esm2015/lib/core/http-cache.service.js +110 -110
  44. package/esm2015/lib/core/http.service.js +82 -82
  45. package/esm2015/lib/core/index.js +21 -21
  46. package/esm2015/lib/core/logger.service.js +100 -100
  47. package/esm2015/lib/core/route-reusable-strategy.js +35 -35
  48. package/esm2015/lib/core/snack/snack.component.js +33 -33
  49. package/esm2015/lib/core/snack/snack.module.js +25 -25
  50. package/esm2015/lib/core/storage.service.js +36 -36
  51. package/esm2015/lib/core/techlify-config.model.js +28 -28
  52. package/esm2015/lib/core/token.interceptor.js +30 -30
  53. package/esm2015/lib/data-table/data-table.component.js +190 -190
  54. package/esm2015/lib/data-table/data-table.model.js +11 -11
  55. package/esm2015/lib/data-table/data-table.module.js +25 -25
  56. package/esm2015/lib/data-table/index.js +3 -3
  57. package/esm2015/lib/date-validator.js +10 -10
  58. package/esm2015/lib/document-viewer/document-viewer.component.js +58 -58
  59. package/esm2015/lib/document-viewer/document-viewer.module.js +25 -25
  60. package/esm2015/lib/document-viewer/index.js +3 -3
  61. package/esm2015/lib/document-viewer/viewer-config.model.js +3 -3
  62. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.js +26 -26
  63. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.js +72 -72
  64. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.js +23 -23
  65. package/esm2015/lib/email-subscription/email-subscription-for-user/index.js +2 -2
  66. package/esm2015/lib/email-subscription/email-subscription-routing.module.js +12 -12
  67. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.js +12 -12
  68. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.js +102 -102
  69. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.js +28 -28
  70. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.js +2 -2
  71. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.js +28 -28
  72. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.js +153 -153
  73. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.js +27 -27
  74. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.js +1 -1
  75. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.js +12 -12
  76. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type.module.js +15 -15
  77. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.js +12 -12
  78. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.js +99 -99
  79. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.js +27 -27
  80. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.js +2 -2
  81. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.js +28 -28
  82. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.js +155 -155
  83. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.js +29 -29
  84. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.js +2 -2
  85. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.js +12 -12
  86. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.js +50 -50
  87. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.js +25 -25
  88. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.js +2 -2
  89. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.js +12 -12
  90. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user.module.js +15 -15
  91. package/esm2015/lib/email-subscription/email-subscription.module.js +15 -15
  92. package/esm2015/lib/entity-files/entity-file-form/entity-file-form.component.js +138 -138
  93. package/esm2015/lib/entity-files/entity-file.service.js +42 -42
  94. package/esm2015/lib/entity-files/entity-files-view-all.component.js +208 -204
  95. package/esm2015/lib/entity-files/entity-files-view-all.module.js +34 -34
  96. package/esm2015/lib/entity-files/index.js +3 -3
  97. package/esm2015/lib/export-excel/export-excel-button/export-excel-button.component.js +32 -32
  98. package/esm2015/lib/export-excel/export-excel.module.js +17 -17
  99. package/esm2015/lib/file-dropper/file-dropper.component.js +122 -122
  100. package/esm2015/lib/file-dropper/file-dropper.model.js +3 -3
  101. package/esm2015/lib/file-dropper/file-dropper.module.js +21 -21
  102. package/esm2015/lib/file-dropper/index.js +3 -3
  103. package/esm2015/lib/import-csv/data-import/data-import.component.js +18 -18
  104. package/esm2015/lib/import-csv/failed-items-list/failed-items-list.component.js +33 -33
  105. package/esm2015/lib/import-csv/field-mapping/field-mapping.component.js +148 -148
  106. package/esm2015/lib/import-csv/import-csv-config.js +2 -2
  107. package/esm2015/lib/import-csv/import-csv.component.js +196 -196
  108. package/esm2015/lib/import-csv/import-csv.module.js +46 -46
  109. package/esm2015/lib/import-csv/import-history-list/import-history-list.component.js +71 -71
  110. package/esm2015/lib/import-csv/import-success/import-success.component.js +19 -19
  111. package/esm2015/lib/loader/index.js +2 -2
  112. package/esm2015/lib/loader/loader.component.js +22 -22
  113. package/esm2015/lib/loader/loader.module.js +21 -21
  114. package/esm2015/lib/login-history-for-user/login-history-for-user-routing.module.js +20 -20
  115. package/esm2015/lib/login-history-for-user/login-history-for-user.component.js +88 -88
  116. package/esm2015/lib/login-history-for-user/login-history-for-user.module.js +27 -27
  117. package/esm2015/lib/material.module.js +60 -60
  118. package/esm2015/lib/note/comment-form/comment-form.component.js +73 -73
  119. package/esm2015/lib/note/index.js +4 -4
  120. package/esm2015/lib/note/note-form/note-form.component.js +81 -81
  121. package/esm2015/lib/note/note-list/note-list.component.js +151 -151
  122. package/esm2015/lib/note/note.module.js +36 -36
  123. package/esm2015/lib/note/note.service.js +31 -31
  124. package/esm2015/lib/read-more/read-more.component.js +43 -43
  125. package/esm2015/lib/read-more/read-more.module.js +21 -21
  126. package/esm2015/lib/searchable-selector/index.js +3 -3
  127. package/esm2015/lib/searchable-selector/mat-select-infinite-scroll.directive.js +81 -81
  128. package/esm2015/lib/searchable-selector/searchable-selector.component.js +307 -307
  129. package/esm2015/lib/searchable-selector/searchable-selector.module.js +28 -28
  130. package/esm2015/lib/techlify-feature/on-off-switch/on-off-switch.component.js +27 -27
  131. package/esm2015/lib/techlify-feature/techlify-feature-enabled.directive.js +78 -78
  132. package/esm2015/lib/techlify-feature/techlify-feature-listing.component.js +177 -177
  133. package/esm2015/lib/techlify-feature/techlify-feature.module.js +30 -30
  134. package/esm2015/lib/techlify-feature/techlify-feature.routing.js +12 -12
  135. package/esm2015/lib/techlify-feature/techlify-feature.service.js +28 -28
  136. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.js +15 -15
  137. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.js +269 -269
  138. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.js +25 -25
  139. package/esm2015/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.js +168 -168
  140. package/esm2015/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.js +29 -29
  141. package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.component.js +114 -114
  142. package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.module.js +28 -28
  143. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.js +22 -22
  144. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.component.js +143 -143
  145. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.module.js +28 -28
  146. package/esm2015/lib/techlify-update/techlify-update-routing.module.js +22 -22
  147. package/esm2015/lib/techlify-update/techlify-update.module.js +30 -30
  148. package/esm2015/lib/techlify-update/techlify-update.service.js +43 -43
  149. package/esm2015/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.js +161 -161
  150. package/esm2015/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.js +82 -82
  151. package/esm2015/lib/techlify-update/update-notifier/update-notifier.component.js +62 -62
  152. package/esm2015/lib/techlify-update/update-notifier/update-notifier.module.js +29 -29
  153. package/esm2015/lib/techlify-update/update-view/update-view.component.js +36 -36
  154. package/esm2015/lib/techlify-update/update-view/update-view.module.js +24 -24
  155. package/esm2015/lib/timeline-filter/calculate-timeline.js +102 -102
  156. package/esm2015/lib/timeline-filter/index.js +4 -4
  157. package/esm2015/lib/timeline-filter/timeline-filter-routing.module.js +12 -12
  158. package/esm2015/lib/timeline-filter/timeline-filter.component.js +213 -213
  159. package/esm2015/lib/timeline-filter/timeline-filter.module.js +23 -23
  160. package/esm2015/lib/timeline-filter/timeline.model.js +18 -18
  161. package/esm2015/lib/utility/date-utils.service.js +48 -48
  162. package/esm2015/lib/utility/index.js +4 -4
  163. package/esm2015/lib/utility/num-items-selector.component.js +29 -29
  164. package/esm2015/lib/utility/number-selector.component.js +38 -38
  165. package/esm2015/lib/utility/utility.module.js +20 -20
  166. package/esm2015/ngx-techlify-core.js +59 -59
  167. package/esm2015/public-api.js +95 -95
  168. package/fesm2015/ngx-techlify-core.js +6726 -6722
  169. package/fesm2015/ngx-techlify-core.js.map +1 -1
  170. package/lib/action-popup/action-popup.component.d.ts +14 -14
  171. package/lib/action-popup/action-popup.model.d.ts +5 -5
  172. package/lib/action-popup/action-popup.module.d.ts +2 -2
  173. package/lib/action-popup/index.d.ts +2 -2
  174. package/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.d.ts +2 -2
  175. package/lib/audit-log/audit-log-for-model/audit-log-for-model.component.d.ts +12 -12
  176. package/lib/audit-log/audit-log-for-model/audit-log-for-model.module.d.ts +2 -2
  177. package/lib/audit-log/audit-log-list/audit-log-list-routing.module.d.ts +2 -2
  178. package/lib/audit-log/audit-log-list/audit-log-list.component.d.ts +32 -32
  179. package/lib/audit-log/audit-log-list/audit-log-list.module.d.ts +2 -2
  180. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.d.ts +2 -2
  181. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.d.ts +19 -19
  182. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.d.ts +2 -2
  183. package/lib/audit-log/audit-log-routing.module.d.ts +2 -2
  184. package/lib/audit-log/audit-log-view/audit-log-view-routing.module.d.ts +2 -2
  185. package/lib/audit-log/audit-log-view/audit-log-view.component.d.ts +17 -17
  186. package/lib/audit-log/audit-log-view/audit-log-view.module.d.ts +2 -2
  187. package/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.d.ts +2 -2
  188. package/lib/audit-log/audit-log-view-model/audit-log-view-model.component.d.ts +15 -15
  189. package/lib/audit-log/audit-log-view-model/audit-log-view-model.module.d.ts +2 -2
  190. package/lib/audit-log/audit-log.module.d.ts +2 -2
  191. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.d.ts +2 -2
  192. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.d.ts +11 -11
  193. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.d.ts +2 -2
  194. package/lib/core/alert.service.d.ts +12 -12
  195. package/lib/core/api-prefix.interceptor.d.ts +11 -11
  196. package/lib/core/authentication.guard.d.ts +10 -10
  197. package/lib/core/authentication.service.d.ts +23 -23
  198. package/lib/core/cache.interceptor.d.ts +21 -21
  199. package/lib/core/config.service.d.ts +19 -19
  200. package/lib/core/core.module.d.ts +3 -3
  201. package/lib/core/credentials.service.d.ts +36 -36
  202. package/lib/core/dataManager.service.d.ts +70 -70
  203. package/lib/core/error-handler.interceptor.d.ts +14 -14
  204. package/lib/core/error-handler.service.d.ts +14 -14
  205. package/lib/core/form-validator.service.d.ts +8 -8
  206. package/lib/core/header.interceptor.d.ts +8 -8
  207. package/lib/core/http-cache.service.d.ts +54 -54
  208. package/lib/core/http.service.d.ts +56 -56
  209. package/lib/core/index.d.ts +20 -20
  210. package/lib/core/logger.service.d.ts +85 -85
  211. package/lib/core/route-reusable-strategy.d.ts +13 -13
  212. package/lib/core/snack/snack.component.d.ts +8 -8
  213. package/lib/core/snack/snack.module.d.ts +2 -2
  214. package/lib/core/storage.service.d.ts +15 -15
  215. package/lib/core/techlify-config.model.d.ts +18 -18
  216. package/lib/core/token.interceptor.d.ts +11 -11
  217. package/lib/data-table/data-table.component.d.ts +60 -60
  218. package/lib/data-table/data-table.model.d.ts +46 -46
  219. package/lib/data-table/data-table.module.d.ts +2 -2
  220. package/lib/data-table/index.d.ts +2 -2
  221. package/lib/date-validator.d.ts +1 -1
  222. package/lib/document-viewer/document-viewer.component.d.ts +16 -16
  223. package/lib/document-viewer/document-viewer.module.d.ts +2 -2
  224. package/lib/document-viewer/index.d.ts +2 -2
  225. package/lib/document-viewer/viewer-config.model.d.ts +5 -5
  226. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.d.ts +7 -7
  227. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.d.ts +17 -17
  228. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.d.ts +2 -2
  229. package/lib/email-subscription/email-subscription-for-user/index.d.ts +1 -1
  230. package/lib/email-subscription/email-subscription-routing.module.d.ts +2 -2
  231. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.d.ts +2 -2
  232. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.d.ts +32 -32
  233. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.d.ts +2 -2
  234. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.d.ts +1 -1
  235. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.d.ts +9 -9
  236. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.d.ts +30 -30
  237. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.d.ts +2 -2
  238. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.d.ts +1 -1
  239. package/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.d.ts +2 -2
  240. package/lib/email-subscription/email-subscription-type/email-subscription-type.module.d.ts +2 -2
  241. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.d.ts +2 -2
  242. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.d.ts +32 -32
  243. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.d.ts +2 -2
  244. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.d.ts +1 -1
  245. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.d.ts +9 -9
  246. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.d.ts +32 -32
  247. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.d.ts +2 -2
  248. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.d.ts +1 -1
  249. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.d.ts +2 -2
  250. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.d.ts +13 -13
  251. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.d.ts +2 -2
  252. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.d.ts +1 -1
  253. package/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.d.ts +2 -2
  254. package/lib/email-subscription/email-subscription-user/email-subscription-user.module.d.ts +2 -2
  255. package/lib/email-subscription/email-subscription.module.d.ts +2 -2
  256. package/lib/entity-files/entity-file-form/entity-file-form.component.d.ts +34 -34
  257. package/lib/entity-files/entity-file.service.d.ts +10 -10
  258. package/lib/entity-files/entity-files-view-all.component.d.ts +45 -44
  259. package/lib/entity-files/entity-files-view-all.module.d.ts +2 -2
  260. package/lib/entity-files/index.d.ts +2 -2
  261. package/lib/export-excel/export-excel-button/export-excel-button.component.d.ts +8 -8
  262. package/lib/export-excel/export-excel.module.d.ts +2 -2
  263. package/lib/file-dropper/file-dropper.component.d.ts +33 -33
  264. package/lib/file-dropper/file-dropper.model.d.ts +10 -10
  265. package/lib/file-dropper/file-dropper.module.d.ts +2 -2
  266. package/lib/file-dropper/index.d.ts +2 -2
  267. package/lib/import-csv/data-import/data-import.component.d.ts +6 -6
  268. package/lib/import-csv/failed-items-list/failed-items-list.component.d.ts +12 -12
  269. package/lib/import-csv/field-mapping/field-mapping.component.d.ts +34 -34
  270. package/lib/import-csv/import-csv-config.d.ts +17 -17
  271. package/lib/import-csv/import-csv.component.d.ts +33 -33
  272. package/lib/import-csv/import-csv.module.d.ts +2 -2
  273. package/lib/import-csv/import-history-list/import-history-list.component.d.ts +21 -21
  274. package/lib/import-csv/import-success/import-success.component.d.ts +8 -8
  275. package/lib/loader/index.d.ts +1 -1
  276. package/lib/loader/loader.component.d.ts +8 -8
  277. package/lib/loader/loader.module.d.ts +2 -2
  278. package/lib/login-history-for-user/login-history-for-user-routing.module.d.ts +2 -2
  279. package/lib/login-history-for-user/login-history-for-user.component.d.ts +23 -23
  280. package/lib/login-history-for-user/login-history-for-user.module.d.ts +2 -2
  281. package/lib/material.module.d.ts +2 -2
  282. package/lib/note/comment-form/comment-form.component.d.ts +22 -22
  283. package/lib/note/index.d.ts +3 -3
  284. package/lib/note/note-form/note-form.component.d.ts +27 -27
  285. package/lib/note/note-list/note-list.component.d.ts +28 -28
  286. package/lib/note/note.module.d.ts +2 -2
  287. package/lib/note/note.service.d.ts +9 -9
  288. package/lib/read-more/read-more.component.d.ts +12 -12
  289. package/lib/read-more/read-more.module.d.ts +2 -2
  290. package/lib/searchable-selector/index.d.ts +2 -2
  291. package/lib/searchable-selector/mat-select-infinite-scroll.directive.d.ts +23 -23
  292. package/lib/searchable-selector/searchable-selector.component.d.ts +81 -81
  293. package/lib/searchable-selector/searchable-selector.module.d.ts +2 -2
  294. package/lib/techlify-feature/on-off-switch/on-off-switch.component.d.ts +9 -9
  295. package/lib/techlify-feature/techlify-feature-enabled.directive.d.ts +17 -17
  296. package/lib/techlify-feature/techlify-feature-listing.component.d.ts +37 -37
  297. package/lib/techlify-feature/techlify-feature.module.d.ts +2 -2
  298. package/lib/techlify-feature/techlify-feature.routing.d.ts +2 -2
  299. package/lib/techlify-feature/techlify-feature.service.d.ts +8 -8
  300. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.d.ts +12 -12
  301. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.d.ts +76 -76
  302. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.d.ts +2 -2
  303. package/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.d.ts +58 -58
  304. package/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.d.ts +2 -2
  305. package/lib/techlify-update/techlify-update-form/techlify-update-form.component.d.ts +30 -30
  306. package/lib/techlify-update/techlify-update-form/techlify-update-form.module.d.ts +2 -2
  307. package/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.d.ts +2 -2
  308. package/lib/techlify-update/techlify-update-history/techlify-update-history.component.d.ts +31 -31
  309. package/lib/techlify-update/techlify-update-history/techlify-update-history.module.d.ts +2 -2
  310. package/lib/techlify-update/techlify-update-routing.module.d.ts +2 -2
  311. package/lib/techlify-update/techlify-update.module.d.ts +2 -2
  312. package/lib/techlify-update/techlify-update.service.d.ts +13 -13
  313. package/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.d.ts +31 -31
  314. package/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.d.ts +25 -25
  315. package/lib/techlify-update/update-notifier/update-notifier.component.d.ts +16 -16
  316. package/lib/techlify-update/update-notifier/update-notifier.module.d.ts +2 -2
  317. package/lib/techlify-update/update-view/update-view.component.d.ts +14 -14
  318. package/lib/techlify-update/update-view/update-view.module.d.ts +2 -2
  319. package/lib/timeline-filter/calculate-timeline.d.ts +6 -6
  320. package/lib/timeline-filter/index.d.ts +3 -3
  321. package/lib/timeline-filter/timeline-filter-routing.module.d.ts +2 -2
  322. package/lib/timeline-filter/timeline-filter.component.d.ts +61 -61
  323. package/lib/timeline-filter/timeline-filter.module.d.ts +2 -2
  324. package/lib/timeline-filter/timeline.model.d.ts +17 -17
  325. package/lib/utility/date-utils.service.d.ts +21 -21
  326. package/lib/utility/index.d.ts +3 -3
  327. package/lib/utility/num-items-selector.component.d.ts +16 -16
  328. package/lib/utility/number-selector.component.d.ts +20 -20
  329. package/lib/utility/utility.module.d.ts +2 -2
  330. package/ngx-techlify-core.d.ts +59 -59
  331. package/ngx-techlify-core.metadata.json +1 -1
  332. package/package.json +1 -1
  333. package/public-api.d.ts +91 -91
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.model.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.component.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.component.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.model.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.component.ts","../../../projects/ngx-techlify-core/src/lib/core/logger.service.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/viewer-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/techlify-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/config.service.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.component.ts","../../../projects/ngx-techlify-core/src/lib/core/alert.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http-cache.service.ts","../../../projects/ngx-techlify-core/src/lib/core/cache.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/api-prefix.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/credentials.service.ts","../../../projects/ngx-techlify-core/src/lib/core/token.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/header.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file.service.ts","../../../projects/ngx-techlify-core/src/lib/core/form-validator.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file-form/entity-file-form.component.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.model.ts","../../../projects/ngx-techlify-core/src/lib/note/note.service.ts","../../../projects/ngx-techlify-core/src/lib/note/note-form/note-form.component.ts","../../../projects/ngx-techlify-core/src/lib/note/note-list/note-list.component.ts","../../../projects/ngx-techlify-core/src/lib/note/comment-form/comment-form.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/mat-select-infinite-scroll.directive.ts","../../../projects/ngx-techlify-core/src/lib/utility/num-items-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/utility/date-utils.service.ts","../../../projects/ngx-techlify-core/src/lib/utility/number-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline.model.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/calculate-timeline.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.component.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.module.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.guard.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.service.ts","../../../projects/ngx-techlify-core/src/lib/core/route-reusable-strategy.ts","../../../projects/ngx-techlify-core/src/lib/core/storage.service.ts","../../../projects/ngx-techlify-core/src/lib/core/dataManager.service.ts","../../../projects/ngx-techlify-core/src/lib/material.module.ts","../../../projects/ngx-techlify-core/src/lib/core/core.module.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.module.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.module.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.module.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.module.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.module.ts","../../../projects/ngx-techlify-core/src/lib/read-more/read-more.component.ts","../../../projects/ngx-techlify-core/src/lib/read-more/read-more.module.ts","../../../projects/ngx-techlify-core/src/lib/note/note.module.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.module.ts","../../../projects/ngx-techlify-core/src/lib/utility/utility.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.service.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.module.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel-button/export-excel-button.component.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/date-validator.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-success/import-success.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-history-list/import-history-list.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/field-mapping/field-mapping.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items-list/failed-items-list.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/data-import/data-import.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.module.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature.service.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature-listing.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature.routing.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/on-off-switch/on-off-switch.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature-enabled.directive.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature.module.ts"],"names":["ActionPopupComponent","dialogRef","data","this","prototype","ngOnInit","closeDialog","close","confirm","Component","args","selector","template","MatDialogRef","ActionPopup","decorators","type","Inject","MAT_DIALOG_DATA","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__decorate","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","push","__values","o","s","m","__read","ar","error","__spread","concat","DataTableComponent","DataTableComponent_1","dataSource","MatTableDataSource","action","EventEmitter","selctionChange","rowClick","tableScroll","sortChanged","elementId","nextId","ngAfterViewInit","_this","selection","changed","pipe","subscribe","change","selected","emit","sort","sortChange","untilDestroyed","isAllSelected","masterToggle","clearSelection","forEach","row","select","clear","ngOnChanges","changes","initializeConfig","isFirstChange","currentValue","config","page","lastPage","perPage","onScroll","editClicked","event","element","stopPropagation","viewClicked","deactivateClicked","downloadClicked","printClicked","rowClicked","actionMenuClick","menuValue","trigger","closeMenu","actionMenuTriggerClick","checkEdit","ele","editDisableFunction","checkView","viewDisableFunction","checkPrint","printDisableFunction","checkActions","actionsMenuFunction","checkActionButton","actionsMenuButtonFunction","getValue","keyString","keyList","replace","split","ngOnDestroy","Input","Output","ViewChild","MatSort","static","UntilDestroy","DocumentViewerComponent","remove","initData","removeFile","file","ext","getFileExtension","viewerType","nameArray","LogLevel","Logger","source","enableProductionMode","level","Warning","debug","objects","_i","log","console","Debug","info","Info","warn","Error","func","outputs","output","TechlifyConfig","projectKey","environment","authClientSecret","authGrantType","apiUrl","isLogoutWhileApiGetsFailed","loadFromMap","storage","rawConfigs","ConfigService","getConfigsRaw","getProjectKey","getApiUrl","getAuthClientSecret","getStorage","localStorage","getAuthGrantType","getCredentialsKey","BASE_CREDENTIALS","Injectable","providedIn","MAT_SNACK_BAR_DATA","AlertService","snackBar","addAlert","message","alertType","duration","openFromComponent","SuccessSnackComponent","ErrorSnackComponent","MatSnackBar","ErrorHandlerService","alerter","handleError","errorResponse","msg","errors","_a","property","_b","_c","_d","errMessage","status","sessionStorage","location","reload","ErrorHandlerInterceptor","configService","errorHandler","intercept","request","handle","catchError","ErrorEvent","throwError","HttpCacheService","cachedData","cachePersistenceKey","loadCacheData","setCacheData","url","lastUpdated","Date","saveCacheData","getCacheData","cacheEntry","getHttpCacheEntry","clearCache","cleanCache","expirationDate","keys","setPersistence","persistence","JSON","stringify","parse","CacheInterceptor","httpCacheService","forceUpdate","configure","options","instance","update","method","Observable","subscriber","urlWithParams","HttpResponse","complete","ApiPrefixInterceptor","test","clone","CredentialsService","_credentials","credentials","getItem","setCredentials","remember","setItem","getAccessToken","expiration","token","expires_in","access_token","now","parseInt","getExpiration","getRefreshToken","refresh_token","refresh","TokenInterceptor","setHeaders","Authorization","HeaderInterceptor","Content-Type","headers","get","HttpInterceptorHandler","interceptor","HTTP_DYNAMIC_INTERCEPTORS","InjectionToken","HttpService","httpHandler","injector","interceptors","_super","cache","cacheInterceptor","addInterceptor","skipErrorHandler","removeInterceptor","skipApiPrefix","skipToken","skipHeader","handler","reduceRight","HttpClient","interceptorType","filter","HttpHandler","Injector","Optional","EntityFileService","http","getEntityFiles","filters","params","toPromise","createEntityFile","model","post","updateEntityFile","put","id","deleteEntityFile","delete","uploadEntityFile","formData","FormData","append","name","entity_id","entity_type","FormValidatorService","isFieldValid","field","formGroup","firstAttempt","valid","touched","untouched","getErrorMessage","errorMessages","errorField","required","EntityFileFormComponent","formValidatorService","fb","entityFileService","alertService","fileList","createForm","entityFileGroup","group","title","details","Validators","file_size","entity","setValue","updateMode","patchValue","hideTitleAndDetails","fileConfig","fileId","containerId","styles","height","multiple","acceptFile","maxSize","acceptFileText","viewerConfig","viewerStyle","width","submit","assignmentFileFirstAttempt","item","fileChanged","FormBuilder","EntityFilesViewAllComponent","dialog","viewOnly","entityFiles","displayedColumns","isWorking","search","FormControl","imageStyle","hideRemove","x","entityType","entityId","valueChanges","debounceTime","distinctUntilChanged","fetchEntityFilesDetails","last_page","addEntityFile","open","autoFocus","restoreFocus","afterClosed","files","editEntityFile","resetFieldValue","sizeOf","bytes","Math","floor","pow","toFixed","charAt","Location","MatDialog","FileDropperComponent","fileArray","border","isSingleMode","Boolean","dragEnter","style","background","dragColor","preventDefault","dragOver","dragLeave","dropEvent","droppedFiles","dataTransfer","from","addFiles","onFileChange","document","getElementById","fileSizeAllowed","sortFiles","a","nameA","toUpperCase","nameB","size","clickEvent","click","NoteService","getNotes","filterModel","addNote","note","editNote","deleteNote","NoteFormComponent","noteService","noteFormGroup","compose","model_type","related_model_id","noteFormFirstAttempt","labelText","cancel","NoteListComponent","readonly","commentsView","notes","sort_by","relatedModelId","modelType","loadData","assign","current_page","resetScroll","commentAction","editComment","addComment","comment","index","findIndex","CommentFormComponent","credentialService","view","_commentData","commentFormGroup","isAuthenticated","user","reset","deleteComment","hideEdit","SearchableSelectorComponent","SearchableSelectorComponent_1","formBuilder","_focusMonitor","_elementRef","ngControl","valueField","titleField","selectedValueChange","enableSearch","add","edit","items","apiDataProperty","inDataSearch","selectionChange","itemsChange","isLoading","onChange","onTouched","stateChanges","Subject","focused","controlType","describedBy","cachedItems","_required","_disabled","selectorForm","select_value","monitor","origin","valueAccessor","empty","setValidators","coerceBooleanProperty","disable","enable","openedChange","dataItems","selectedValue","sortBy","fetchItemList","of","startWith","switchMap","finalize","setDescribedByIds","ids","join","onContainerClick","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","getPropertyValue","_handleInput","map","find","invalid","dirty","reloadData","searchField","filterItems","toLowerCase","addItem","itemComponent","addConfig","editItem","editConfig","stopMonitoring","providers","provide","MatFormFieldControl","useExisting","FocusMonitor","ElementRef","NgControl","Self","MatSelectInfiniteScrollDirective","matSelect","ngZone","threshold","infiniteScroll","thrPx","thrPc","singleOptionHeight","SELECT_ITEM_HEIGHT_EM","destroyed$","evaluateThreshold","takeUntil","opened","panel","nativeElement","getSelectItemHeightPx","registerScrollListener","lastIndexOf","parseFloat","fromEvent","tap","handleScrollEvent","runOutsideAngular","countOfRenderedOptions","infiniteScrollDistance","clientHeight","scrollTop","run","getComputedStyle","fontSize","Directive","MatSelect","NgZone","NumItemsSelector","numItemsChange","numItemsChanged","numItems","DateUtils","getYYYYMMDDString","inputDate","getFullYear","getMonth","getDate","getYYYY","getMM","getDateTime","toLocaleTimeString","NumberSelector","numChanged","start_value","end_value","Timeline","CUSTOM","TODAY","YESTERDAY","THIS_WEEK","LAST_WEEK","THIS_MONTH","LAST_MONTH","THIS_QUARTER","LAST_QUARTER","THIS_YEAR","LAST_YEAR","ALL","TOMMOROW","NEXT_WEEK","NEXT_MONTH","moment","moment_","calculateTimeline","date","date_from","date_to","show_custom_field","startOf","toISOString","endOf","subtract","TimelineFilterComponent","TimelineFilterComponent_1","datePipe","timelineValue","timelines","viewValue","dateFrom","dateTo","appearance","showClearbutton","form","touchUi","showCustomDateFields","changeTimeline","getDateRangeString","str","selectedRange","toUTCString","transform","_e","_g","_f","getFieldValue","setFieldValue","timeline","range","picker","dateRangeChange","dateRangeStart","dateRangeEnd","onCustomDateChange","DatePipe","LoaderComponent","NgModule","declarations","imports","CommonModule","MatSnackBarModule","MatIconModule","exports","AuthenticationGuard","router","credentialsService","canActivate","route","state","isUserAuthenticated","canLoad","navigate","queryParams","redirect","replaceUrl","Router","AuthenticationService","login","context","concatMap","tokenInfo","userInfo","logout","RouteReusableStrategy","shouldDetach","store","detachedTree","shouldAttach","retrieve","shouldReuseRoute","future","curr","routeConfig","component","RouteReuseStrategy","StorageService","storageSub","watch","asObservable","removeItem","DataManager","GET","urlq","POST","object","blank","POSTRAW","PUT","PATCH","patch","DELETE","MatButtonModule","MatCheckboxModule","MatCommonModule","MatDialogModule","MatFormFieldModule","MatInputModule","MatLineModule","MatMenuModule","MatNativeDateModule","MatOptionModule","MatProgressSpinnerModule","MatPseudoCheckboxModule","MatRippleModule","MatSelectModule","MatSortModule","MatTableModule","MatCardModule","MatDividerModule","MatChipsModule","MatDatepickerModule","MatListModule","MatTooltipModule","MatButtonToggleModule","parentModule","HttpClientModule","RouterModule","SnackModule","useClass","CoreModule","SkipSelf","FlexLayoutModule","MaterialModule","entryComponents","InfiniteScrollModule","NgxDocViewerModule","FormsModule","ReactiveFormsModule","FileDropperModule","DocumentViewerModule","ActionPopupModule","ReadMoreComponent","maxLength","hideToggle","isCollapsed","determineView","toggleView","text","currentText","substring","ReadMoreModule","forChild","TimelineFilterRoutingModule","EmailSubscriptionRoutingModule","EmailSubscriptionUserRoutingModule","user_id","email_type_id","EmailSubscriptionUserFormComponent","esUserFormGroup","esUser","selectedType","email_type","selectedUser","markAllAsTouched","esUserFormFirstAttempt","isSubmitLoading","SearchableSelectorModule","EmailSubscriptionUserFormRoutingModule","LoaderModule","EmailSubscriptionUserListComponent","esUserList","pageEvent","displayColumns","availableDisplayColumns","order","initializeData","changeSort","col","some","columnsChange","selectedColumns","filterChange","addEmailSubscriptionUser","editEmailSubscriptionUser","deleteEmailSubscriptionUser","direction","active","esulr","permissions","only","redirectTo","routes","path","EmailSubscriptionUserListFilterComponent","valueChange","esUserFilterForm","EmailSubscriptionUserListFilterRoutingModule","EmailSubscriptionUserListRoutingModule","EmailSubscriptionUserFormModule","EmailSubscriptionUserListFilterModule","EmailSubscriptionTypeRoutingModule","code","frequency_id","EmailSubscriptionTypeFormComponent","emailSubscriptionTypeFormGroup","description","emailSubscriptionType","selectedFrequency","frequency","emailSubscriptionTypeFormFirstAttempt","EmailSubscriptionTypeFormRoutingModule","EmailSubscriptionTypeListComponent","emailSubscriptionTypeList","isLoadRelations","relations","addEmailSubscriptionType","editEmailSubscriptionType","deleteEmailSubscriptionType","estlr","EmailSubscriptionTypeFormModule","EmailSubscriptionTypeListRoutingModule","EmailSubscriptionForUserComponent","subscriptions","fetchSubscriptions","sub","current_user_subscription","unsubscribe","esfur","EmailSubscriptionForUserRoutingModule","TechlifyUpdateService","getTechlifyUpdates","createTechlifyUpdate","techlifyUpdate","updateTechlifyUpdate","deleteTechlifyUpdate","techlifyUpdateId","getTechlifyUpdate","getNewUpdateForCurrentUser","createUpdateViewRecord","techlifyUpdateView","updateCurrentUserUpdates","released_on","version","learn_more_link","pattern","TechlifyUpdateFormComponent","techlifyUpdateService","onSave","isUpdateMode","toolbar","techlifyUpdateForm","techlifyUpdateDetails","editor","Editor","NgxEditorModule","TechlifyUpdatesListComponent","techlifyUpdates","filterFormGroup","listenChanges","modifyTechlifyUpdate","sortColumn","toString","assignFilter","column","pathMatch","TechlifyUpdateRoutingModule","TechlifyUpdateFormModule","UpdateViewComponent","rootNavUrl","openUpdateHistory","TechlifyUpdateHistoryComponent","openUpdateView","isFromHistory","TechlifyUpdateHistoryRoutingModule","UpdateNotifierSnackComponent","snackBarRef","maxDescriptionLength","descriptionText","determineDescription","dismiss","update_id","MatSnackBarRef","UpdateNotifierComponent","setTimeout","getNewUpdate","showUpdate","horizontalPosition","verticalPosition","panelClass","UpdateViewModule","ExportExcelButtonComponent","exportExcel","fileName","getTime","ws","XLSX.utils","json_to_sheet","wb","book_new","book_append_sheet","XLSX.writeFile","AuditLogViewModelComponent","showDeltaChanges","changeList","model_id","modelId","logInfo","getTransformedChanges","displayAttribute","slice","attribute","newValue","oldValue","pre_object","AuditLogsViewModelComponent","events","NavigationEnd","AuditLogForModelComponent","logView","getLogView","getLogsView","maxWidth","AuditLogViewModelRoutingModule","AuditLogListComponent","dataManager","sanitizer","auditLogList","showFilter","showExportButtons","Type","object_type","Action","Data","Pre-Object","Created At","created_at","toDateString","Created By","email","logClicked","objectType","objectId","object_id","userId","value_1","DomSanitizer","DateValidator","control","val","invalidDate","AuditLogListFilterComponent","auditLogFilterForm","AuditLogListFilterRoutingModule","AuditLogListRoutingModule","ExportExcelModule","AuditLogListFilterModule","AuditLogsViewModelRoutingModule","AuditLogListModule","AuditLogViewModelModule","AuditLogsViewModelModule","AuditLogForModelRoutingModule","AuditLogViewComponent","paramMap","fetchLogDetail","back","logId","patchDelta","delta","jsondiffpatch.diff","innerHTML","jsondiffpatch.formatters","html","format","ActivatedRoute","AuditLogViewRoutingModule","AuditLogRoutingModule","AuditLogViewModule","ImportSuccessComponent","ImportHistoryListComponent","histories","importHistory","isEnabled","unavailable","FieldMappingComponent","changeDetectorRef","firstDataArray","properties","onReUpload","createImportMappingForm","reFectorAttributes","importMappingForm","fields","array","createField","propertyType","k","dataValue","mainIndex","includes","fieldsArray","detectChanges","updatePropertyType","controls","uniqueValidator","propertyData","setErrors","removeField","removeAt","reUpload","ChangeDetectorRef","FailedItemsListComponent","isValidDate","isNaN","ImportCsvComponent","filesList","isUploaded","isImportTypeSelected","fileData","failedItems","selectedFields","importSteps","progressTitle","progressDescription","currentStep","filesConfig","selectedFile","jsonData","reader","FileReader","onload","XLSX.read","cellDates","SheetNames","reduce","initial","sheet","Sheets","sheet_to_json","header","defval","readAsBinaryString","mappingProcessed","tempFileData","save","failed_items","DataImportComponent","LoginHistoryForUserComponent","loginHistoryList","historyFilterForm","onTimelineChange","LoginHistoryForUserRoutingModule","TimelineFilterModule","selectable","removable","separatorKeysCodes","ENTER","COMMA","placeholder","createApiUrl","isCreateable","isCacheTags","isSingle","TechlifyTaggerTagFormFieldComponent","TechlifyTaggerTagFormFieldComponent_1","httpService","_formField","tagInputCtrl","TechlifyTaggerTagFormConfigModel","_allTags","categories","_value","filterValue","filterString","allTags","tagIds","_placeholder","init","_filter","trim","tags","tag","category_title","defaultCreateCategory","input","option","tagInput","availableTags","MatFormField","MAT_FORM_FIELD","MatAutocompleteModule","TechlifyTaggerTagSelectorComponent","TechlifyTaggerTagSelectorComponent_1","tagSelectorCtrl","showAllTags","useSelectButtonStyle","res","TechlifyFeatureService","getFeatures","disableFeature","enableFeature","TechlifyFeatureListingComponent","featureService","features","num_items","listenForChanges","setStorage","error_1","toggeleFeature","feature","error_2","localFeatures","features_1","features_1_1","client_feature","is_enabled","is_enabled_default","TechlifyFeatureRoutes","OnOffSwitchComponent","slideToggle","toggle","TechlifyFeatureEnabledDirective","el","checkForFeatureEnabled","enabledFeature","display","MatSlideToggleModule"],"mappings":"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","sourcesContent":["export class ActionPopup {\n name: string;\n title: string;\n message: string;\n}","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ActionPopup } from './action-popup.model';\n\n@Component({\n selector: 'app-action-popup',\n templateUrl: './action-popup.component.html',\n styleUrls: ['./action-popup.component.scss']\n})\nexport class ActionPopupComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<ActionPopupComponent>,\n @Inject(MAT_DIALOG_DATA) public data: ActionPopup,\n ) { }\n\n ngOnInit() {\n }\n\n /**Method to close dialog box */\n closeDialog() {\n this.dialogRef.close();\n }\n\n /**Method to close dialog box with the data given from parent component\n */\n confirm() {\n this.dialogRef.close(this.data);\n }\n\n}\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(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, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n AfterViewInit,\n ViewChild\n} from \"@angular/core\";\n\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatSort } from '@angular/material/sort';\nimport { DataTable } from './data-table.model';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\n\n@UntilDestroy()\n@Component({\n selector: \"app-data-table\",\n templateUrl: \"./data-table.component.html\",\n styleUrls: [\"./data-table.component.scss\"]\n})\nexport class DataTableComponent implements OnInit, OnChanges, AfterViewInit {\n\n trigger: MatMenuTrigger;\n\n @Input() data: any;\n\n @Input() config: DataTable;\n\n dataSource: MatTableDataSource<any> = new MatTableDataSource([]);\n\n @Input() selection: SelectionModel<any>;\n\n @Output() action = new EventEmitter();\n @Output() selctionChange = new EventEmitter();\n @Output() rowClick = new EventEmitter();\n @Output() tableScroll = new EventEmitter();\n @Output() sortChanged = new EventEmitter();\n\n page: number;\n lastPage: number;\n perPage: number;\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n static nextId = 0;\n @Input() elementId: string = `data-table-${DataTableComponent.nextId++}`;\n\n constructor() { }\n\n ngOnInit() { }\n\n /**Life cycle hook method */\n ngAfterViewInit() {\n // Assign the data to the data source for the table to render\n this.dataSource = new MatTableDataSource(this.data);\n\n // Emit change in selection\n if (this.selection) {\n this.selection.changed.pipe().subscribe((change: any) => {\n if (this.selection.selected) {\n this.selctionChange.emit(this.selection.selected);\n }\n });\n }\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.sortChanged.emit(value);\n })\n }\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n masterToggle() {\n this.isAllSelected()\n ? this.clearSelection()\n : this.dataSource.data.forEach(row => this.selection.select(row));\n }\n\n /**clear selection*/\n clearSelection() {\n this.selection.clear();\n this.selctionChange.emit(this.selection.selected);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.initializeConfig(changes);\n if (changes.data && !changes.data.isFirstChange() && this.dataSource) {\n // If not first change\n this.dataSource.data = changes.data.currentValue;\n }\n }\n\n initializeConfig(changes: SimpleChanges) {\n if (changes.config && !changes.config.isFirstChange()) {\n this.config = changes.config.currentValue;\n }\n this.page = this.config.page || 1;\n this.lastPage = this.config.lastPage || this.page;\n this.perPage = this.config.perPage || 20;\n }\n\n onScroll() {\n if (this.page < this.lastPage) {\n this.page += 1;\n this.tableScroll.emit({ page: this.page, lastPage: this.lastPage, perPage: this.perPage });\n }\n }\n\n /**Method invokes when edit action icon is clickes */\n editClicked(event: any, element: any) {\n this.action.emit({ action: \"edit\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when view action icon is clickes */\n viewClicked(event: any, element: any) {\n this.action.emit({ action: \"view\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when edit action icon is clickes */\n deactivateClicked(event: any, element: any) {\n this.action.emit({ action: \"deactivate\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when download action icon is clickes */\n downloadClicked(event: any, element: any) {\n this.action.emit({ action: \"download\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when print action icon is clickes */\n printClicked(event: any, element: any) {\n\n this.action.emit({ action: 'print', value: element });\n event.stopPropagation();\n\n }\n\n /**Method invokes when a row is clicked */\n rowClicked(event: any, element: any) {\n this.rowClick.emit(element);\n event.stopPropagation();\n }\n\n /**Method invokes when menu action icon is hovered */\n actionMenuClick(event: any, element: any, menuValue: string) {\n this.action.emit({ action: menuValue, value: element });\n this.trigger.closeMenu();\n event.stopPropagation();\n }\n\n /**Method invokes when menu action icon is hovered and selects for particular action*/\n actionMenuTriggerClick(event: any, trigger: MatMenuTrigger) {\n this.trigger = trigger;\n event.stopPropagation();\n }\n\n checkEdit(ele: any) {\n if (this.config.editDisableFunction) {\n return this.config.editDisableFunction(ele);\n }\n\n return true;\n }\n\n checkView(ele: any) {\n if (this.config.viewDisableFunction) {\n return this.config.viewDisableFunction(ele);\n }\n\n return true;\n }\n\n checkPrint(ele: any) {\n if (this.config.printDisableFunction) {\n return this.config.printDisableFunction(ele);\n }\n\n return true;\n }\n\n checkActions(ele: any) {\n if (this.config.actionsMenuFunction) {\n return this.config.actionsMenuFunction(ele);\n }\n\n return true;\n }\n\n checkActionButton(ele: any, value: any) {\n if (this.config.actionsMenuButtonFunction) {\n return this.config.actionsMenuButtonFunction(ele, value);\n }\n return true;\n }\n\n getValue(ele: any, keyString: string) {\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\n const keyList = keyString.split(\".\");\n for (let i = 0, n = keyList.length; i < n; ++i) {\n const key = keyList[i];\n if (ele && key in ele) {\n ele = ele[key];\n } else {\n return;\n }\n }\n return ele;\n }\n\n ngOnDestroy() {\n //Until Destroy uses it.\n }\n}\n","export class DataTable {\n displayedColumns: string[];\n columnsConfig: ColumnConfig[];\n actionsConfig?: ActionConfig;\n enableRowClick?: boolean;\n disableElevation?: boolean;\n downloadLink?: string;\n actionsMenuFunction?: any;\n actionsMenuButtonFunction?: any;\n editDisableFunction?: any;\n viewDisableFunction?: any;\n printDisableFunction?: any;\n customActionLabel?: string;\n stickyHeader?: boolean;\n page?: number;\n lastPage?: number;\n perPage?: number;\n pageSizeOptions?: number[];\n style?: any;\n}\n\nclass ColumnConfig {\n title: string;\n value: string;\n sort?: boolean;\n dateField?: boolean;\n currencyField?: boolean;\n format?: string;\n}\n\nclass ActionConfig {\n edit?: boolean;\n view?: boolean;\n download?: boolean;\n print?: boolean;\n deactivate?: boolean;\n actionsMenu?: ActionsMenu[];\n}\n\nclass ActionsMenu {\n name: string;\n value: string;\n}\n\nexport class PageEvent {\n page: number;\n lastPage?: number;\n perPage: number;\n}\n","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\nimport { ViewerConfig } from './viewer-config.model';\n\n@Component({\n selector: 'app-document-viewer',\n templateUrl: './document-viewer.component.html',\n styleUrls: ['./document-viewer.component.css']\n})\nexport class DocumentViewerComponent implements OnInit {\n\n\n @Input() config!: ViewerConfig;\n\n @Input() file!: any;\n\n @Input() fileUrl!: any;\n\n @Input() disableEdit: boolean;\n\n @Output() remove = new EventEmitter();\n viewerType: any;\n\n constructor() { }\n\n ngOnInit(): void {\n this.initData();\n }\n\n removeFile() {\n this.remove.emit();\n }\n\n initData() {\n if (this.file) {\n var ext = this.getFileExtension(this.file);\n if (ext === 'ppt' || ext === 'pptx' || ext === 'doc' || ext === 'docx' || ext === 'xls' || ext === 'xlsx') {\n this.viewerType = \"office\";\n }\n else if (ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'gif') {\n this.viewerType = \"image\";\n }\n else if (ext === 'pdf') {\n this.viewerType = \"pdf\";\n }\n else {\n this.viewerType = null;\n }\n }\n }\n\n get fileName() {\n if (this.file) {\n let nameArray = this.file.split('/');\n if (nameArray.length === 2) {\n return nameArray[1];\n }\n return nameArray[0];\n }\n return '';\n }\n\n getFileExtension(file: any) {\n return file.split('.').pop();\n }\n\n}\n","/**\n * Simple logger system with the possibility of registering custom outputs.\n *\n * 4 different log levels are provided, with corresponding methods:\n * - debug : for debug information\n * - info : for informative status of the application (success, ...)\n * - warning : for non-critical errors that do not prevent normal application behavior\n * - error : for critical errors that prevent normal application behavior\n *\n * Example usage:\n * ```\n * import { Logger } from 'app/core/logger.service';\n *\n * const log = new Logger('myFile');\n * ...\n * log.debug('something happened');\n * ```\n *\n * To disable debug and info logs in production, add this snippet to your root component:\n * ```\n * export class AppComponent implements OnInit {\n * ngOnInit() {\n * if (environment.production) {\n * Logger.enableProductionMode();\n * }\n * ...\n * }\n * }\n *\n * If you want to process logs through other outputs than console, you can add LogOutput functions to Logger.outputs.\n */\n\n/**\n * The possible log levels.\n * LogLevel.Off is never emitted and only used with Logger.level property to disable logs.\n */\nexport enum LogLevel {\n Off = 0,\n Error,\n Warning,\n Info,\n Debug\n}\n\n/**\n * Log output handler function.\n */\nexport type LogOutput = (source: string | undefined, level: LogLevel, ...objects: any[]) => void;\n\nexport class Logger {\n\n /**\n * Current logging level.\n * Set it to LogLevel.Off to disable logs completely.\n */\n static level = LogLevel.Debug;\n\n /**\n * Additional log outputs.\n */\n static outputs: LogOutput[] = [];\n\n /**\n * Enables production mode.\n * Sets logging level to LogLevel.Warning.\n */\n static enableProductionMode() {\n Logger.level = LogLevel.Warning;\n }\n\n constructor(private source?: string) { }\n\n /**\n * Logs messages or objects with the debug level.\n * Works the same as console.log().\n */\n debug(...objects: any[]) {\n this.log(console.log, LogLevel.Debug, objects);\n }\n\n /**\n * Logs messages or objects with the info level.\n * Works the same as console.log().\n */\n info(...objects: any[]) {\n this.log(console.info, LogLevel.Info, objects);\n }\n\n /**\n * Logs messages or objects with the warning level.\n * Works the same as console.log().\n */\n warn(...objects: any[]) {\n this.log(console.warn, LogLevel.Warning, objects);\n }\n\n /**\n * Logs messages or objects with the error level.\n * Works the same as console.log().\n */\n error(...objects: any[]) {\n this.log(console.error, LogLevel.Error, objects);\n }\n\n private log(func: (...args: any[]) => void, level: LogLevel, objects: any[]) {\n if (level <= Logger.level) {\n const log = this.source ? ['[' + this.source + ']'].concat(objects) : objects;\n func.apply(console, log);\n Logger.outputs.forEach(output => output.apply(output, [this.source, level, ...objects]));\n }\n }\n\n}\n","export class ViewerConfig {\n imageStyle?: any;\n viewerStyle?: any;\n hideRemove?: boolean;\n}\n","/**\n * Class that stores the configuration data\n *\n * @author Joshua Kissoon\n * @since 20180724\n */\nexport class TechlifyConfig {\n projectKey: string = '';\n environment: string = '';\n authClientSecret: string = '';\n authGrantType: string = '';\n apiUrl: string = '';\n rawConfigs: any;\n storage: Storage;\n isLogoutWhileApiGetsFailed: boolean = false;\n\n constructor(data: any) {\n this.loadFromMap(data);\n }\n\n loadFromMap(data: any) {\n this.projectKey = data.projectKey;\n this.environment = data.environment;\n this.authClientSecret = data.authClientSecret;\n this.authGrantType = data.authGrantType;\n this.apiUrl = data.apiUrl;\n this.storage = data?.storage;\n this.rawConfigs = data;\n this.isLogoutWhileApiGetsFailed = data?.isLogoutWhileApiGetsFailed;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { TechlifyConfig } from \"./techlify-config.model\";\n\n/**\n * Service that provides settings for all other services\n *\n * @author Joshua Kissoon\n * @since 20170709\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService {\n\n public static BASE_CREDENTIALS = \"credentials\";\n\n private config: TechlifyConfig;\n\n constructor(config: TechlifyConfig) {\n this.config = config;\n }\n\n getConfigsRaw() {\n return this.config.rawConfigs;\n }\n\n getProjectKey() {\n return this.config.projectKey;\n }\n\n getApiUrl() {\n return this.config.apiUrl;\n }\n\n getAuthClientSecret() {\n return this.config.authClientSecret;\n }\n\n getStorage() {\n return this.config.storage ? this.config.storage : localStorage;\n }\n\n getAuthGrantType() {\n return this.config.authGrantType;\n }\n\n getCredentialsKey() {\n return this.config.projectKey + \"_\" + ConfigService.BASE_CREDENTIALS;\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'success-snack.html',\n styleUrls: ['./snack.scss'],\n})\nexport class SuccessSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'error-snack.html',\n styleUrls: ['./snack.scss'],\n})\nexport class ErrorSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { ErrorSnackComponent, SuccessSnackComponent } from './snack/snack.component';\r\n\r\n/**\r\n * Service used to manage alerts in the entire system frontend\r\n * \r\n * @author Gokula Prasanna\r\n * @since 20210131\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n constructor(public snackBar: MatSnackBar) { }\r\n\r\n addAlert(message: string, alertType: string, duration = 3) {\r\n if (alertType == \"success\") {\r\n this.snackBar.openFromComponent(SuccessSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n else {\r\n this.snackBar.openFromComponent(ErrorSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n }\r\n}\r\n","import { TechlifyConfig } from './techlify-config.model';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AlertService } from \"./alert.service\";\r\n\r\n\r\n/**\r\n * Service used to handle errors from the request\r\n *\r\n * @author Joshua Kissoon\r\n * @since 20171202\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerService {\r\n\r\n constructor(private alerter: AlertService,\r\n private config: TechlifyConfig,\r\n ) {\r\n }\r\n\r\n handleError(errorResponse: any, msg: string = '') {\r\n // 1 - Create empty array to store errors\r\n const errors = [];\r\n\r\n // 2 - check if the error object is present in the response\r\n if (errorResponse?.error) {\r\n\r\n // 3 - Check for Laravel form validation error messages object\r\n if (errorResponse?.error?.errors) {\r\n\r\n // 4 - For each error property (which is a form field)\r\n for (const property in errorResponse.error.errors) {\r\n\r\n if (errorResponse.error.errors?.hasOwnProperty(property)) {\r\n\r\n // 5 - Extract it's array of errors\r\n const propertyErrors: Array<string> = errorResponse?.error?.errors[property];\r\n\r\n // 6 - Push all errors in the array to the errors array\r\n propertyErrors.forEach(error => errors.push(error));\r\n }\r\n\r\n }\r\n }\r\n\r\n if (errors.length === 0) {\r\n // 7 - Push the main error message to the array of errors if there is no validation error\r\n errors.push(errorResponse.error.message ? errorResponse.error.message : errorResponse.error?.error);\r\n }\r\n }\r\n var errMessage = errors.length ? errors[0] : msg;\r\n this.alerter.addAlert(\"Error: \" + errMessage, \"warning\");\r\n\r\n if (errorResponse.status == 403 && this.config.isLogoutWhileApiGetsFailed) {\r\n sessionStorage.clear();\r\n localStorage.clear();\r\n location.reload();\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Logger } from './logger.service';\nimport { ConfigService } from './config.service';\nimport { ErrorHandlerService } from './error-handler.service';\n\nconst log = new Logger('ErrorHandlerInterceptor');\n\n/**\n * Adds a default error handler to all requests.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorHandlerInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService, private errorHandler: ErrorHandlerService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(catchError(error => this.handleError(error)));\n }\n\n // Customize the default error handler here if needed\n private handleError(error: HttpErrorResponse): Observable<HttpEvent<any>> {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // client-side error\n errorMessage = `Client Error: ${this.configService?.getProjectKey()}: ${error.error.message}`;\n } else {\n // server-side error\n errorMessage = `Server Error: ${this.configService?.getProjectKey()}`;\n try {\n this.errorHandler.handleError(error, 'Unexpected Server Error, try later or contact service team');\n } catch (e) {\n console.log(\"Unable to handle server error\", e);\n }\n }\n return throwError(error);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpResponse } from '@angular/common/http';\nimport { ConfigService } from './config.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('HttpCacheService');\n\n\nexport interface HttpCacheEntry {\n lastUpdated: Date;\n data: HttpResponse<any>;\n}\n\n/**\n * Provides a cache facility for HTTP requests with configurable persistence policy.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpCacheService {\n\n private cachedData: { [key: string]: HttpCacheEntry; } = {};\n private storage: Storage | any | null;\n private cachePersistenceKey: String | any;\n\n constructor(private configService: ConfigService) {\n this.storage = this.configService.getStorage();\n this.cachePersistenceKey = this.configService.getProjectKey() + '_HTTP_CACHE';\n this.loadCacheData();\n }\n\n /**\n * Sets the cache data for the specified request.\n * @param {!string} url The request URL.\n * @param {ResponseOptions} data The received data.\n * @param {Date=} lastUpdated The cache last update, current date is used if not specified.\n */\n setCacheData(url: string, data: HttpResponse<any>, lastUpdated?: Date) {\n this.cachedData[url] = {\n lastUpdated: lastUpdated || new Date(),\n data: data\n };\n log.debug(`Cache set for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Gets the cached data for the specified request.\n * @param {!string} url The request URL.\n * @return {?ResponseOptions} The cached data or null if no cached data exists for this request.\n */\n getCacheData(url: string): HttpResponse<any> | null {\n const cacheEntry = this.cachedData[url];\n\n if (cacheEntry) {\n log.debug(`Cache hit for key: \"${url}\"`);\n return cacheEntry.data;\n }\n\n return null;\n }\n\n /**\n * Gets the cached entry for the specified request.\n * @param {!string} url The request URL.\n * @return {?HttpCacheEntry} The cache entry or null if no cache entry exists for this request.\n */\n getHttpCacheEntry(url: string): HttpCacheEntry | null {\n return this.cachedData[url] || null;\n }\n\n /**\n * Clears the cached entry (if exists) for the specified request.\n * @param {!string} url The request URL.\n */\n clearCache(url: string): void {\n delete this.cachedData[url];\n log.debug(`Cache cleared for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Cleans cache entries older than the specified date.\n * @param {date=} expirationDate The cache expiration date. If no date is specified, all cache is cleared.\n */\n cleanCache(expirationDate?: Date) {\n if (expirationDate) {\n Object(this.cachedData).keys.forEach((key: string) => {\n if (expirationDate >= this.cachedData[key]?.lastUpdated) {\n delete this.cachedData[key];\n }\n });\n } else {\n this.cachedData = {};\n }\n this.saveCacheData();\n }\n\n /**\n * Sets the cache persistence policy.\n * Note that changing the cache persistence will also clear the cache from its previous storage.\n * @param {'local'|'session'=} persistence How the cache should be persisted, it can be either local or session\n * storage, or if no value is provided it will be only in-memory (default).\n */\n setPersistence(persistence?: 'local' | 'session') {\n this.cleanCache();\n this.storage = persistence === 'local' ? localStorage : persistence === 'session' ? sessionStorage : null;\n this.loadCacheData();\n }\n\n private saveCacheData() {\n if (this.storage) {\n this.storage[this.cachePersistenceKey] = JSON.stringify(this.cachedData);\n }\n }\n\n private loadCacheData() {\n const data = this.storage ? this.storage[this.cachePersistenceKey] : null;\n this.cachedData = data ? JSON.parse(data) : {};\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { HttpCacheService } from './http-cache.service';\nimport { Observable, Subscriber } from 'rxjs';\n\n/**\n * Caches HTTP requests.\n * Use ExtendedHttpClient fluent API to configure caching for each request.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheInterceptor implements HttpInterceptor {\n\n private forceUpdate = false;\n\n constructor(private httpCacheService: HttpCacheService) { }\n\n /**\n * Configures interceptor options\n * @param {{update: boolean}} options If update option is enabled, forces request to be made and updates cache entry.\n * @return {CacheInterceptor} The configured instance.\n */\n configure(options?: { update?: boolean } | null): CacheInterceptor {\n const instance = new CacheInterceptor(this.httpCacheService);\n if (options && options.update) {\n instance.forceUpdate = true;\n }\n return instance;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.method !== 'GET') {\n return next.handle(request);\n }\n\n return new Observable((subscriber: Subscriber<HttpEvent<any>>) => {\n const cachedData = this.forceUpdate ? null : this.httpCacheService.getCacheData(request.urlWithParams);\n if (cachedData !== null) {\n // Create new response to avoid side-effects\n subscriber.next(new HttpResponse(cachedData as Object));\n subscriber.complete();\n } else {\n next.handle(request)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.httpCacheService.setCacheData(request.urlWithParams, event);\n }\n subscriber.next(event);\n },\n error => subscriber.error(error),\n () => subscriber.complete()\n );\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ConfigService } from './config.service';\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiPrefixInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!/^(http|https):/i.test(request.url)) {\n request = request.clone({ url: this.configService.getApiUrl() + request.url });\n }\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConfigService } from './config.service';\n\nexport interface Credentials {\n // Customize received credentials here\n user: any;\n token: any;\n}\n\n/**\n * Provides storage for authentication credentials.\n * The Credentials interface should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CredentialsService {\n\n private _credentials: Credentials | null = null;\n\n constructor(private configService: ConfigService) {\n }\n\n /**\n * Checks is the user is authenticated.\n * @return True if the user is authenticated.\n */\n get isAuthenticated(): boolean {\n return !!this.credentials;\n }\n\n /**\n * Gets the user credentials.\n * @return The user credentials or null if the user is not authenticated.\n */\n get credentials(): Credentials | null {\n if (!this._credentials) {\n this._credentials = JSON.parse(sessionStorage.getItem(this.configService.getCredentialsKey()) || localStorage.getItem(this.configService.getCredentialsKey()));\n }\n return this._credentials;\n }\n\n /**\n * Sets the user credentials.\n * The credentials may be persisted across sessions by setting the `remember` parameter to true.\n * Otherwise, the credentials are only persisted for the current session.\n * @param credentials The user credentials.\n * @param remember True to remember credentials across sessions.\n */\n setCredentials(credentials?: Credentials, remember?: boolean) {\n this._credentials = credentials || null;\n\n if (credentials) {\n (remember ? localStorage : sessionStorage).setItem(this.configService.getCredentialsKey(), JSON.stringify(credentials));\n } else {\n sessionStorage.clear();\n localStorage.clear();\n this._credentials = null;\n }\n }\n\n getAccessToken(): string | null {\n const expiration = this.credentials?.token?.expires_in || '';\n const token = this.credentials?.token?.access_token || '';\n\n if (!token || !expiration) {\n return null;\n }\n\n if (Date.now() > parseInt(expiration)) {\n this.setCredentials();\n return null;\n }\n\n return token;\n }\n\n getExpiration(): string {\n return this.credentials?.token?.expires_in || '';\n }\n\n getRefreshToken(): string {\n return this.credentials?.token?.refresh_token || '';\n }\n\n refresh(): CredentialsService {\n this._credentials = null;\n return this;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { CredentialsService } from './credentials.service';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenInterceptor implements HttpInterceptor {\n\n constructor(private credentials: CredentialsService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n Authorization: `Bearer ${this.credentials.getAccessToken() || ''}`\n }\n });\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HeaderInterceptor implements HttpInterceptor {\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n 'Content-Type': request.headers.get('Content-Type') || 'application/json',\n }\n });\n return next.handle(request);\n }\n}\n","import { Inject, Injectable, InjectionToken, Injector, Optional } from '@angular/core';\nimport { HttpClient, HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\nimport { CacheInterceptor } from './cache.interceptor';\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\nimport { TokenInterceptor } from './token.interceptor';\nimport { HeaderInterceptor } from './header.interceptor';\n\n\n// Augment HttpClient with the added configuration methods from HttpService, to allow in-place replacement of\n// HttpClient with HttpService using dependency injection\nexport interface HttpCustomClient {\n\n /**\n * Enables caching for this request.\n * @param {boolean} forceUpdate Forces request to be made and updates cache entry.\n * @return {HttpCustomClient} The new instance.\n */\n cache(forceUpdate?: boolean): HttpCustomClient;\n\n /**\n * Skips default error handler for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipErrorHandler(): HttpCustomClient;\n\n /**\n * Skips default API Prefix for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipApiPrefix(): HttpCustomClient;\n\n\n /**\n * Skips default Token Interceptor for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipToken(): HttpCustomClient;\n\n /**\n* Skips default Header Interceptor for this request.\n* @return {HttpCustomClient} The new instance.\n*/\n skipHeader(): HttpCustomClient;\n\n}\n\n\n// From @angular/common/http/src/interceptor: allows to chain interceptors\nclass HttpInterceptorHandler implements HttpHandler {\n\n constructor(private next: HttpHandler, private interceptor: HttpInterceptor) { }\n\n handle(request: HttpRequest<any>): Observable<HttpEvent<any>> {\n return this.interceptor.intercept(request, this.next);\n }\n\n}\n\n/**\n * Allows to override default dynamic interceptors that can be disabled with the HttpService extension.\n * Except for very specific needs, you should better configure these interceptors directly in the constructor below\n * for better readability.\n *\n * For static interceptors that should always be enabled (like ApiPrefixInterceptor), use the standard\n * HTTP_INTERCEPTORS token.\n */\nexport const HTTP_DYNAMIC_INTERCEPTORS = new InjectionToken<HttpInterceptor>('HTTP_DYNAMIC_INTERCEPTORS');\n\n/**\n * Extends HttpClient with per request configuration using dynamic interceptors.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService extends HttpClient implements HttpCustomClient {\n\n constructor(private httpHandler: HttpHandler,\n private injector: Injector,\n @Optional() @Inject(HTTP_DYNAMIC_INTERCEPTORS) private interceptors: HttpInterceptor[] = []) {\n super(httpHandler);\n\n if (!this.interceptors) {\n // Configure default interceptors that can be disabled here\n this.interceptors = [this.injector.get(ApiPrefixInterceptor), this.injector.get(HeaderInterceptor), this.injector.get(TokenInterceptor), this.injector.get(ErrorHandlerInterceptor)];\n }\n }\n\n cache(forceUpdate?: boolean): HttpService {\n const cacheInterceptor = this.injector.get(CacheInterceptor).configure({ update: forceUpdate });\n return this.addInterceptor(cacheInterceptor);\n }\n\n skipErrorHandler(): HttpService {\n return this.removeInterceptor(ErrorHandlerInterceptor);\n }\n\n skipApiPrefix(): HttpService {\n return this.removeInterceptor(ApiPrefixInterceptor);\n }\n\n skipToken(): HttpService {\n return this.removeInterceptor(TokenInterceptor);\n }\n\n skipHeader(): HttpService {\n return this.removeInterceptor(HeaderInterceptor);\n }\n\n // Override the original method to wire interceptors when triggering the request.\n request(method?: any, url?: any, options?: any): any {\n const handler = this.interceptors.reduceRight(\n (next, interceptor) => new HttpInterceptorHandler(next, interceptor),\n this.httpHandler\n );\n return new HttpClient(handler).request(method, url, options);\n }\n\n private removeInterceptor(interceptorType: Function): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.filter(i => !(i instanceof interceptorType))\n );\n }\n\n private addInterceptor(interceptor: HttpInterceptor): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.concat([interceptor])\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core/http.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EntityFileService {\n\n constructor(private http: HttpService) { }\n\n getEntityFiles(filters: any) {\n return this.http.get(`api/entity-files`, { params: filters }).toPromise();\n }\n\n createEntityFile(model: any) {\n return this.http.post(\"api/entity-files\", model).toPromise();\n }\n\n updateEntityFile(model: any) {\n return this.http.put(`api/entity-files/${model.id}`, model).toPromise();\n }\n\n deleteEntityFile(model: any) {\n return this.http.delete(`api/entity-files/${model.id}`).toPromise();\n }\n\n uploadEntityFile(file: File, params?: any) {\n const formData: FormData = new FormData();\n formData.append(\"fileData\", file, file.name);\n if (params?.entity_id) {\n formData.append('entity_id', params.entity_id);\n formData.append('entity_type', params.entity_type);\n }\n return this.http\n .skipHeader()\n .post(\n \"api/entity-files-upload\",\n formData,\n ).toPromise();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormValidatorService {\n\n constructor() { }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string, formGroup: FormGroup | any, firstAttempt?: boolean) {\n return (!formGroup.get(field).valid && formGroup.get(field).touched) ||\n (!formGroup.get(field).valid && formGroup.get(field).untouched && firstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string, formGroup: FormGroup | any, errorMessages: any, errorField?: string) {\n const error = Object.keys(formGroup.get(field).errors);\n return (error.length > 0) ? (errorMessages[errorField || field][error[0]] ? errorMessages[errorField || field][error[0]] : '') : '';\n }\n\n}\n","import { Component, OnInit, Inject } from \"@angular/core\";\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\nimport { EntityFileService } from '../entity-file.service';\nimport { FileDropperConfig } from '../../file-dropper/file-dropper.model';\nimport { ViewerConfig } from '../../document-viewer/viewer-config.model';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { AlertService } from \"../../core/alert.service\";\n\nconst errorMessages: any = {\n url: {\n required: \"File is required\"\n },\n};\n\n@Component({\n selector: 'entity-file-form',\n templateUrl: './entity-file-form.component.html',\n styleUrls: ['./entity-file-form.component.css']\n})\nexport class EntityFileFormComponent implements OnInit {\n\n entityFileGroup: FormGroup;\n assignmentFileFirstAttempt: boolean;\n updateMode: boolean;\n fileConfig: FileDropperConfig;\n fileList: any[] = [];\n viewerConfig: ViewerConfig;\n hideTitleAndDetails: boolean;\n\n constructor(\n public dialogRef: MatDialogRef<EntityFileFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private formValidatorService: FormValidatorService,\n private fb: FormBuilder,\n private entityFileService: EntityFileService,\n private alertService: AlertService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n //TODO: Finialize and add more validations.\n this.entityFileGroup = this.fb.group({\n id: [''],\n title: [''],\n details: [''],\n entity_type: [''],\n entity_id: [],\n file: ['', Validators.required],\n url: ['', Validators.required],\n file_size: ['', Validators.required],\n });\n }\n\n ngOnInit(): void {\n if (this.data.entity) {\n this.entityFileGroup.get('entity_type').setValue(this.data.entity.entity_type);\n this.entityFileGroup.get('entity_id').setValue(this.data.entity.entity_id);\n }\n if (this.data.file) {\n this.updateMode = true;\n this.entityFileGroup.patchValue(this.data.file);\n }\n\n if (this.data?.hideTitleAndDetails) {\n this.hideTitleAndDetails = this.data?.hideTitleAndDetails;\n }\n\n //File dropper config\n this.fileConfig = {\n fileId: \"subjectFile\",\n containerId: \"subjectFileContainer\",\n styles: {\n height: \"200px\"\n },\n multiple: false,\n acceptFile: \"*\",\n maxSize: 10,\n acceptFileText: \"All Files\"\n };\n\n this.viewerConfig = {\n viewerStyle: {\n height: '200px',\n width: '100%'\n }\n }\n }\n\n\n //Method to trigger submit\n async submit() {\n this.assignmentFileFirstAttempt = true;\n if (!this.entityFileGroup.valid) {\n return;\n }\n const model = this.entityFileGroup.value;\n\n if (this.hideTitleAndDetails) {\n model.title = model.file;\n }\n\n const result: any = this.updateMode\n ? await this.entityFileService.updateEntityFile(model)\n : await this.entityFileService.createEntityFile(model);\n this.dialogRef.close(result.item);\n this.alertService.addAlert(\n \"File submitted successfully\",\n \"success\"\n );\n\n }\n\n async fileChanged(event: any) {\n this.fileList = event;\n\n if (this.fileList.length > 0) {\n\n const result: any = await this.entityFileService.uploadEntityFile(\n this.fileList[0],\n );\n this.entityFileGroup.patchValue(result.item);;\n this.fileList = [];\n }\n }\n\n\n async removeFile() {\n if (this.entityFileGroup.value.file) {\n try {\n this.entityFileGroup.patchValue({\n file: \"\",\n url: \"\"\n });\n } catch (error) {\n this.alertService.addAlert(\"Unable to remove file, try later\", \"warn\");\n }\n }\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(\n field,\n this.entityFileGroup,\n this.assignmentFileFirstAttempt\n );\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.entityFileGroup,\n errorMessages\n );\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { MatDialog } from '@angular/material/dialog';\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\nimport { EntityFileService } from './entity-file.service';\nimport { ActionPopup } from '../action-popup/action-popup.model';\nimport { FormControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { AlertService } from '../core/alert.service';\nimport { ActionPopupComponent } from '../action-popup/action-popup.component';\nimport { ViewerConfig } from '../document-viewer/viewer-config.model';\nimport { FileDropperConfig } from '../file-dropper';\n\n@UntilDestroy()\n@Component({\n selector: 'app-entity-files-view-all',\n templateUrl: './entity-files-view-all.component.html',\n styleUrls: ['./entity-files-view-all.component.css']\n})\nexport class EntityFilesViewAllComponent implements OnInit {\n @Input() entityId: number;\n @Input() entityType: string;\n @Input() viewOnly: boolean = false;\n @Input() removeSearch: boolean;\n @Input() hideTitleAndDetails: boolean;\n @Input() displayMode: boolean;\n viewerConfig: ViewerConfig;\n @Input() title: string = \"File\";\n filters: any = {};\n entityFiles: any[] = [];\n displayedColumns = [\n 'index',\n 'title',\n 'details',\n 'file_size',\n 'uploaded_on',\n ];\n isWorking: boolean = false;\n search: FormControl = new FormControl('');\n page: number = 1;\n perPage: number = 25;\n lastPage: number = 0;\n fileConfig: FileDropperConfig;\n fileList: any[] = [];\n\n constructor(\n private entityFileService: EntityFileService,\n public location: Location,\n private alertService: AlertService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n //File dropper config\n this.fileConfig = {\n fileId: \"entityDashboardDropper\",\n containerId: \"entityDashboardDropperContainer\",\n styles: {\n height: \"500px\"\n },\n multiple: false,\n acceptFile: \"*\",\n maxSize: 10,\n acceptFileText: \"All Files\"\n };\n\n this.viewerConfig = {\n imageStyle: {\n height: '200px',\n width: '200px'\n },\n viewerStyle: {\n height: ' 160px',\n width: '200px'\n },\n hideRemove: true\n };\n\n if (this.hideTitleAndDetails) {\n this.displayedColumns = this.displayedColumns.filter(x => (x !== 'details') && (x !== 'title'));\n }\n\n this.filters = {\n entity_type: this.entityType,\n entity_id: this.entityId,\n title: \"\"\n };\n this.search.valueChanges.pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => {\n this.filters.title = value;\n this.reload();\n })\n this.fetchEntityFilesDetails();\n if (!this.viewOnly) {\n this.displayedColumns.push('actions');\n }\n }\n\n async fetchEntityFilesDetails() {\n this.filters.page = this.page;\n this.filters.perPage = this.perPage;\n this.isWorking = true;\n const result: any = await this.entityFileService.getEntityFiles(this.filters);\n this.lastPage = result.last_page || this.page;\n this.entityFiles = this.entityFiles.concat(result.data);\n this.isWorking = false;\n }\n\n addEntityFile() {\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\n width: \"700px\",\n data: {\n entity: this.filters,\n hideTitleAndDetails: this.hideTitleAndDetails\n },\n autoFocus: false,\n restoreFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n const files = [...this.entityFiles];\n files.push(result);\n this.entityFiles = files;\n }\n });\n }\n\n editEntityFile(file: any) {\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\n width: \"700px\",\n autoFocus: false,\n data: {\n file: file,\n hideTitleAndDetails: this.hideTitleAndDetails\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reload();\n }\n });\n }\n\n deleteEntityFile(file: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: \"Delete File\",\n message: `Are you sure to proceed delete the file ${file.title}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n const result = await this.entityFileService.deleteEntityFile(\n file\n );\n this.alertService.addAlert(\n \"File successfully deleted\",\n \"success\"\n );\n this.reload();\n\n }\n });\n }\n\n onScroll() {\n if (this.page < this.lastPage && !this.isWorking) {\n this.page += 1;\n this.fetchEntityFilesDetails();\n }\n }\n\n reload() {\n this.entityFiles = [];\n this.page = 1;\n if (!this.isWorking) {\n this.fetchEntityFilesDetails();\n }\n }\n\n ngOnDestroy() { }\n\n resetFieldValue() {\n this.search.setValue(\"\");\n }\n\n sizeOf(bytes) {\n if (!bytes) { return \"0.00 B\"; }\n var e = Math.floor(Math.log(bytes) / Math.log(1024));\n return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';\n }\n\n async fileChanged(event: any) {\n this.fileList = event;\n\n if (this.fileList.length > 0) {\n\n const result: any = await this.entityFileService.uploadEntityFile(\n this.fileList[0],\n {\n entity_type: this.entityType,\n entity_id: this.entityId,\n }\n );\n this.fileList = [];\n this.alertService.addAlert('Successfull uploaded', 'success');\n this.reload();\n }\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\";\nimport { AlertService } from \"../core/alert.service\";\nimport { FileDropperConfig } from './file-dropper.model';\n\n\n@Component({\n selector: \"app-file-dropper\",\n templateUrl: \"./file-dropper.component.html\",\n styleUrls: [\"./file-dropper.component.scss\"]\n})\nexport class FileDropperComponent implements OnInit {\n @Input() fileArray: any[] = [];\n\n @Input() config: FileDropperConfig;\n\n @Output() fileChanged: any = new EventEmitter();\n\n border = \"1px dashed #989898\";\n\n @Input() styles: any;\n\n isSingleMode: boolean;\n\n constructor(private alertService: AlertService) { }\n\n /**Life cycle hook method */\n ngOnInit() {\n this.isSingleMode = !Boolean(this.config.multiple);\n }\n\n /**Method for dragging event */\n dragEnter(event: any) {\n event.target.style.background = this.config.dragColor || \"#c0c0c0\";\n\n event.target.style.border = \"1px dashed black\";\n\n event.preventDefault();\n }\n\n /**Method for drag over event */\n dragOver(event: any) {\n event.preventDefault();\n }\n\n /**Method for drag leave event */\n dragLeave(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n\n event.preventDefault();\n }\n\n /**Method for drop event */\n dropEvent(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n const droppedFiles: FileList = event.dataTransfer.files;\n if (droppedFiles.length > 0) {\n const fileArray = Array.from(droppedFiles);\n this.addFiles(fileArray);\n }\n event.preventDefault();\n }\n\n /**Method to list files selected */\n onFileChange(event: any) {\n if (event.target.files && event.target.files.length) {\n const fileArray = Array.from(event.target.files);\n this.addFiles(fileArray);\n const fileInput = document.getElementById(\n this.config.fileId\n ) as HTMLInputElement;\n fileInput.value = \"\";\n }\n }\n\n /**Method to add files in the array */\n addFiles(fileArray: any) {\n if (!this.isSingleMode) {\n fileArray.forEach((file: any) => {\n this.fileArray = this.fileArray.filter(\n (item: any) => item.name !== file.name\n );\n if (this.fileSizeAllowed(file)) {\n this.fileArray.push(file);\n }\n });\n\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n } else {\n // Single Mode\n if (this.fileArray.length === 0) {\n if (this.fileSizeAllowed(fileArray[0])) {\n this.fileArray.push(fileArray[0]);\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n }\n }\n }\n }\n\n /**Method to sort the files in asc */\n sortFiles(a: any, b: any) {\n const nameA = a.name.toUpperCase();\n const nameB = b.name.toUpperCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n }\n\n /**Method tp validate the file size */\n fileSizeAllowed(file: any): boolean {\n if (!Boolean(this.config.maxSize)) {\n return true;\n } else if (file.size / (1024 * 1024) < this.config.maxSize) {\n return true;\n } else {\n this.alertService.addAlert(\n `The size of the file exceeds the limit ${this.config.maxSize} MB, kindly upload a file with size ${this.config.maxSize} MB or below`,\n \"warn\"\n );\n return false;\n }\n }\n\n /**Method invokes when the drop box is clicked to upload the file */\n clickEvent(event: any) {\n if (!(this.isSingleMode && this.fileArray.length > 0)) {\n document.getElementById(this.config.fileId).click();\n }\n event.preventDefault();\n }\n}\n","export class FileDropperConfig {\n containerId: string;\n fileId: string;\n styles?: any;\n multiple?: boolean;\n dragColor?: boolean;\n acceptFile: string; // use '*' to accept all file types.\n maxSize?: number; // size in MB\n acceptFileText?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core/http.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NoteService {\n\n constructor(private http: HttpService) { }\n\n getNotes(filterModel: any) {\n return this.http.get('api/notes', { params: filterModel }).toPromise();\n }\n\n addNote(note: any) {\n return this.http.post('api/notes', note).toPromise();\n }\n\n editNote(note: any) {\n return this.http.put(`api/notes/${note.id}`, note).toPromise();\n }\n\n deleteNote(note: any) {\n return this.http.delete(`api/notes/${note.id}`).toPromise();\n }\n}\n","import { Component, OnInit, Inject } from \"@angular/core\";\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\nimport { NoteService } from \"../note.service\";\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { AlertService } from \"../../core/alert.service\";\n\nconst errorMessages: any = {\n note: {\n required: \"Note is required\"\n }\n};\n\n@Component({\n selector: 'app-note-form',\n templateUrl: './note-form.component.html',\n styleUrls: ['./note-form.component.css']\n})\nexport class NoteFormComponent implements OnInit {\n\n updateMode: boolean;\n noteFormGroup: FormGroup;\n noteFormFirstAttempt: boolean;\n\n constructor(\n public dialogRef: MatDialogRef<NoteFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private noteService: NoteService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n //TODO: Finialize and add more validations.\n this.noteFormGroup = this.fb.group({\n id: [\"\"],\n note: [\"\", Validators.compose([Validators.required])],\n model_type: [\"\"],\n related_model_id: [\"\"],\n });\n }\n\n ngOnInit() {\n if (this.data.update) {\n this.updateMode = true;\n }\n this.noteFormGroup.patchValue(this.data.note);\n }\n\n //Method to trigger login\n async submit() {\n this.noteFormFirstAttempt = true;\n if (this.noteFormGroup.valid) {\n const model = this.noteFormGroup.value;\n const result = this.updateMode\n ? await this.noteService.editNote(model)\n : await this.noteService.addNote(model);\n\n this.alertService.addAlert(\n `${this.data?.labelText} saved successfully`,\n \"success\"\n );\n this.dialogRef.close(result);\n }\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(\n field,\n this.noteFormGroup,\n this.noteFormFirstAttempt\n );\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.noteFormGroup,\n errorMessages\n );\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { NoteService } from '../note.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NoteFormComponent } from '../note-form/note-form.component';\nimport { ActionPopupComponent } from '../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../action-popup/action-popup.model';\n\n@Component({\n selector: 'app-note-list',\n templateUrl: './note-list.component.html',\n styleUrls: ['./note-list.component.css']\n})\nexport class NoteListComponent implements OnInit {\n\n @Input() relatedModelId !: any;\n @Input() modelType !: any;\n @Input() readonly: boolean = false;\n @Input() labelText: string = 'Note';\n @Input() commentsView: boolean = false;\n\n notes: any[] = [];\n filters: any;\n displayedColumns = [\n 'index',\n 'note',\n 'actions'\n ];\n\n page = 1;\n lastPage = 1;\n\n constructor(private noteService: NoteService,\n private dialog: MatDialog\n ) {\n this.filters = {};\n this.filters.sort_by = \"created_at|DESC\";\n }\n\n ngOnInit() {\n if (this.readonly) {\n this.displayedColumns = this.displayedColumns.filter(x => x !== 'actions');\n }\n this.filters.related_model_id = this.relatedModelId;\n this.filters.model_type = this.modelType;\n this.loadData();\n }\n\n async loadData() {\n\n const result: any = await this.noteService.getNotes({ ...this.filters, page: this.page });\n this.notes = this.notes.concat(result.data);\n this.page = result.current_page;\n this.lastPage = result.last_page;\n }\n\n addNote() {\n const dialogRef = this.dialog.open(NoteFormComponent, {\n width: \"400px\",\n data: {\n note: { related_model_id: this.relatedModelId, model_type: this.modelType },\n labelText: this.labelText,\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.resetScroll();\n this.loadData();\n }\n });\n }\n\n editNote(note: any) {\n const dialogRef = this.dialog.open(NoteFormComponent, {\n width: \"400px\",\n data: {\n note: note,\n update: true,\n labelText: this.labelText\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.resetScroll();\n this.loadData();\n }\n });\n }\n\n async deleteNote(note: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: `Delete ${this.labelText}`,\n message: `Are you sure to delete?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n\n const result = await this.noteService.deleteNote(note);\n this.notes = this.notes.filter((item: any) => item.id !== note.id);\n\n }\n });\n }\n\n resetScroll() {\n this.page = 1;\n this.lastPage = 1;\n this.notes = [];\n }\n\n onScroll() {\n if (this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n commentAction(event: any) {\n if (event.type === \"save\") {\n if (event.value.id) {\n this.editComment(event.value);\n return;\n }\n this.addComment(event.value);\n return;\n }\n this.deleteNote(event.value);\n }\n\n async editComment(comment: any) {\n const result: any = await this.noteService.editNote(comment);\n let index = this.notes.findIndex(\n (x: any) => x.id === comment.id\n );\n if (index !== -1) {\n this.notes[index] = result.item;\n }\n }\n\n async addComment(comment: any) {\n comment.related_model_id = this.relatedModelId;\n comment.model_type = this.modelType;\n const result: any = await this.noteService.addNote(comment);\n this.notes.push(result.item);\n }\n\n}\n","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n OnDestroy\n} from \"@angular/core\";\nimport { FormGroup, FormBuilder } from \"@angular/forms\";\nimport { CredentialsService } from \"../../core/credentials.service\";\n\n@Component({\n selector: \"app-comment-form\",\n templateUrl: \"./comment-form.component.html\",\n styleUrls: [\"./comment-form.component.scss\"]\n})\nexport class CommentFormComponent implements OnInit, OnDestroy {\n commentFormGroup: FormGroup;\n view: boolean;\n _commentData: any;\n\n @Input() set commentData(data: any) {\n this.view = !!data;\n this._commentData = data;\n this.commentFormGroup.patchValue(data);\n }\n\n @Output() action = new EventEmitter();\n\n constructor(private fb: FormBuilder,\n private credentialService: CredentialsService\n ) {\n this.createForm();\n }\n\n ngOnInit() { }\n\n get isLoggedIn() {\n return this.credentialService.isAuthenticated;\n }\n\n get currentUser() {\n return this.credentialService.credentials.user;\n }\n\n private createForm() {\n //TODO: Finialize and add more validations.\n this.commentFormGroup = this.fb.group({\n id: [\"\"],\n note: [\"\"],\n model_type: [\"\"],\n related_model_id: [\"\"],\n });\n }\n\n submit() {\n if (this.commentFormGroup.get(\"note\").value) {\n if (this._commentData) {\n this.view = !this.view;\n }\n this.action.emit({ type: \"save\", value: this.commentFormGroup.value });\n this.commentFormGroup.reset();\n } else if (this.commentFormGroup.get(\"id\").value) {\n this.deleteComment();\n }\n }\n\n hideEdit() {\n if (this.commentFormGroup.get(\"id\").value) {\n this.view = !this.view;\n }\n }\n\n editComment() {\n this.view = !this.view;\n this.commentFormGroup.patchValue(this._commentData);\n }\n\n deleteComment() {\n this.action.emit({ type: \"delete\", value: this.commentFormGroup.value });\n }\n\n ngOnDestroy() { }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, Input, OnDestroy, OnInit, Optional, Self, Output, EventEmitter, TemplateRef } from '@angular/core';\nimport { FormBuilder, FormGroup, ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject, of, from } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, startWith, switchMap, finalize } from 'rxjs/operators';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { HttpService } from '../core/http.service';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\n\n@UntilDestroy()\n@Component({\n selector: 'app-searchable-selector',\n templateUrl: './searchable-selector.component.html',\n styleUrls: ['./searchable-selector.component.scss'],\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: SearchableSelectorComponent\n }\n ]\n})\nexport class SearchableSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\n\n @Input() valueField: string = 'id';\n @Input() titleField: string = 'title';\n @Input() apiUrl!: string;\n @Input() multiple: boolean = false;\n @Input() selectedValue: any;\n @Output() selectedValueChange = new EventEmitter();\n @Input() enableSearch: boolean = true;\n @Input() add: boolean = false;\n @Input() addConfig: any;\n @Input() edit: boolean = false;\n @Input() editConfig: any;\n @Input() sort: boolean = true;\n @Input() sortBy: string;\n @Input() searchField: string;\n @Input() itemComponent: ComponentType<unknown> | TemplateRef<unknown>;\n @Input() items: any[] = [];\n @Input() apiDataProperty: string = 'data';\n @Input() cache: boolean = false;\n @Input() perPage: number = 25;\n @Input() inDataSearch: boolean = false;\n @Output() selectionChange = new EventEmitter();\n @Output() itemsChange = new EventEmitter();\n\n\n isLoading: boolean = false;\n onChange: any = () => { };\n onTouched: any = () => { };\n static nextId = 0;\n selectorForm: FormGroup;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'searchable-selctor';\n id = `searchable-selctor-${SearchableSelectorComponent.nextId++}`;\n describedBy = '';\n filters: any;\n cachedItems: any[] = [];\n\n\n get empty() {\n const { value: { select_value } } = this.selectorForm;\n return !select_value;\n }\n\n get shouldLabelFloat() { return this.focused || !this.empty; }\n\n\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this.selectorForm.get('select_value').setValidators(Validators.required);\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n @Input()\n get value(): any {\n if (this.selectorForm.valid) {\n return this.selectorForm.value.select_value;\n }\n return '';\n }\n set value(data: any) {\n this.selectorForm.patchValue({ select_value: data || '' });\n this.stateChanges.next();\n }\n\n constructor(\n formBuilder: FormBuilder,\n private _focusMonitor: FocusMonitor,\n private http: HttpService,\n private _elementRef: ElementRef<HTMLElement>,\n private dialog: MatDialog,\n @Optional() @Self() public ngControl: NgControl) {\n\n this.selectorForm = formBuilder.group({\n select_value: [null],\n search: ''\n });\n\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n openedChange(event: any) {\n if (this.dataItems.length === 0 && this.selectorForm.get('search').value) {\n this.selectorForm.get('search').setValue('');\n }\n }\n\n get dataItems(): any[] {\n let items: any[] = [];\n if (this.multiple && this.selectedValue && (this.selectedValue.length > 0))\n items = [...this.selectedValue, ...this.items];\n else if ((!this.multiple) && this.selectedValue)\n items = [this.selectedValue, ...this.items];\n else\n items = this.items;\n items = items.filter((v, i, a) => a.findIndex(v => v[this.valueField] === a[i][this.valueField]) === i);\n //Emit the items to any child component\n this.itemsChange.emit(items);\n return items;\n }\n\n ngOnInit() {\n this.selectorForm.get('search').valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n if (this.enableSearch)\n this.search(value);\n });\n\n this.filters = {\n perPage: this.perPage,\n search: '',\n page: 1,\n lastPage: 1\n }\n if (this.sort) {\n this.filters.sort_by = this.sortBy || `${this.titleField}|asc`;\n }\n\n //Fetch Items only if it is not present, can be used in places where we load many entries.\n if (this.items.length === 0) {\n this.fetchItemList();\n }\n }\n\n fetchItemList() {\n this.isLoading = true;\n let request = this.http.get(this.apiUrl, { params: this.filters })\n if (this.cache) {\n request = this.http.cache().get(this.apiUrl, { params: this.filters })\n }\n of().pipe(\n startWith(true),\n switchMap((_) => from(request)),\n finalize(() => this.isLoading = false),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.items = this.items.concat(result[this.apiDataProperty]);\n if (this.cache) {\n this.cachedItems = this.items;\n }\n this.filters.page = result?.current_page || 1;\n this.filters.lastPage = result?.last_page || 1;\n });\n }\n\n\n setDescribedByIds(ids: string[]) {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n writeValue(data: any): void {\n this.value = data;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getPropertyValue(ele: any, keyString: string) {\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\n const keyList = keyString.split(\".\");\n for (let i = 0, n = keyList.length; i < n; ++i) {\n const key = keyList[i];\n if (ele && key in ele) {\n ele = ele[key];\n } else {\n return;\n }\n }\n return ele;\n }\n\n _handleInput(): void {\n this.onChange(this.value);\n if (this.multiple)\n this.selectedValue = (this.value as []).map(x => this.dataItems.find(y => y[this.valueField] === x));\n else\n this.selectedValue = this.dataItems.find(x => x[this.valueField] === this.value);\n this.selectedValueChange.emit(this.selectedValue);\n this.selectionChange.emit(this.value);\n }\n\n get errorState(): boolean {\n return (this.ngControl && this.ngControl.invalid && (this.ngControl.touched || this.ngControl.dirty));\n }\n\n static ngAcceptInputType_disabled: boolean | string | null | undefined;\n static ngAcceptInputType_required: boolean | string | null | undefined;\n\n onScroll() {\n if (this.filters.lastPage > this.filters.page) {\n this.filters.page += 1;\n this.fetchItemList();\n }\n }\n\n reloadData() {\n this.items = [];\n this.filters.page = 1;\n this.filters.lastPage = 1;\n this.fetchItemList();\n }\n\n search(event: any) {\n if (this.searchField) {\n this.filters[this.searchField] = event;\n } else {\n this.filters.search = event;\n }\n // we need search field to search in data\n if (this.inDataSearch && this.searchField) {\n this.filterItems(event);\n } else {\n this.reloadData();\n }\n }\n\n filterItems(event: string) {\n if (event) {\n this.items = this.cachedItems.filter((value: any) => {\n return (value[this.searchField] as string).toLowerCase().search(event.toLowerCase()) != -1\n })\n } else {\n this.items = this.cachedItems;\n }\n }\n\n addItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {},\n ...this.addConfig\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.items.push(result.item);\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n editItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {\n item: this.selectedValue\n },\n ...this.editConfig\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.items = this.items.filter(x => x[this.valueField] !== this.selectedValue[this.valueField]);\n this.items.push(result.item);\n this.selectedValue = null;\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n}\n","import { AfterViewInit, Directive, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\nimport { MatSelect, SELECT_ITEM_HEIGHT_EM } from '@angular/material/select';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\nimport { fromEvent, Subject } from 'rxjs';\n\n@Directive({\n selector: '[msInfiniteScroll]'\n})\nexport class MatSelectInfiniteScrollDirective implements OnInit, OnDestroy, AfterViewInit {\n\n @Input() threshold = '15%';\n @Input() debounceTime = 150;\n @Input() complete: boolean;\n @Output() infiniteScroll = new EventEmitter<void>();\n\n private panel: Element;\n private thrPx = 0;\n private thrPc = 0;\n private singleOptionHeight = SELECT_ITEM_HEIGHT_EM;\n\n private destroyed$ = new Subject<boolean>();\n\n constructor(private matSelect: MatSelect, private ngZone: NgZone) {\n }\n\n ngOnInit() {\n this.evaluateThreshold();\n }\n\n ngAfterViewInit() {\n this.matSelect.openedChange.pipe(\n takeUntil(this.destroyed$)\n ).subscribe((opened) => {\n if (opened) {\n this.panel = this.matSelect.panel.nativeElement;\n this.singleOptionHeight = this.getSelectItemHeightPx();\n this.registerScrollListener();\n }\n });\n }\n\n ngOnDestroy() {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n\n evaluateThreshold() {\n if (this.threshold.lastIndexOf('%') > -1) {\n this.thrPx = 0;\n this.thrPc = (parseFloat(this.threshold) / 100);\n\n } else {\n this.thrPx = parseFloat(this.threshold);\n this.thrPc = 0;\n }\n }\n\n registerScrollListener() {\n fromEvent(this.panel, 'scroll').pipe(\n takeUntil(this.destroyed$),\n debounceTime(this.debounceTime),\n tap((event) => {\n this.handleScrollEvent(event);\n })\n ).subscribe();\n }\n\n handleScrollEvent(event) {\n this.ngZone.runOutsideAngular(() => {\n if (this.complete) {\n return;\n }\n const countOfRenderedOptions = this.matSelect.options.length;\n const infiniteScrollDistance = this.singleOptionHeight * countOfRenderedOptions;\n const threshold = this.thrPc !== 0 ? (infiniteScrollDistance * this.thrPc) : this.thrPx;\n\n const scrolledDistance = this.panel.clientHeight + event.target.scrollTop;\n\n if ((scrolledDistance + threshold) >= infiniteScrollDistance) {\n this.ngZone.run(() => this.infiniteScroll.emit());\n }\n });\n }\n\n getSelectItemHeightPx(): number {\n return parseFloat(getComputedStyle(this.panel).fontSize) * SELECT_ITEM_HEIGHT_EM;\n }\n\n}","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\n\r\n/**\r\n * Component to generate a num items selector\r\n * \r\n * @author Floyd Kissoon\r\n * @since 20170817\r\n */\r\n@Component({\r\n selector: \"num-items-selector\",\r\n templateUrl: \"./num-items-selector.html\"\r\n})\r\nexport class NumItemsSelector {\r\n @Input() numItems: number;\r\n @Output() numItemsChange: EventEmitter<number>;\r\n\r\n constructor() {\r\n this.numItemsChange = new EventEmitter<number>();\r\n }\r\n\r\n /**\r\n * Called when an item has been selected\r\n */\r\n numItemsChanged() {\r\n this.numItemsChange.emit(this.numItems);\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\n\n/**\n * Service that provides utility functions for dates\n * \n * @author Joshua Kissoon\n * @since 20170726\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DateUtils {\n\n /**\n * Takes in a date object and outputs the string value\n */\n getYYYYMMDDString(inputDate: Date): string {\n var year = inputDate.getFullYear();\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\n\n return year + \"-\" + month + \"-\" + date;\n }\n\n /**\n * Takes in a date object and outputs the year\n */\n getYYYY(inputDate: Date): number {\n var year = inputDate.getFullYear();\n return year;\n }\n\n /**\n * Takes in a date object and outputs the Month\n */\n getMM(inputDate: Date): number {\n var month = inputDate.getMonth() + 1;\n return month;\n }\n // var n = this.rfidCardUseManualEntry.manual_date.toLocaleTimeString();\n\n getDateTime(inputDate: Date): string {\n var year = inputDate.getFullYear();\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\n var time = inputDate.toLocaleTimeString();\n\n return year + \"-\" + month + \"-\" + date + \" \" + time;\n }\n\n}","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\n\n/**\n * Component to generate a number selector\n * \n * @author Floyd Kissoon\n * @since 20180628\n */\n@Component({\n selector: \"number-selector\",\n templateUrl: \"./number-selector.html\"\n})\nexport class NumberSelector implements OnInit {\n @Input() start_value: number;\n @Input() end_value: number\n @Output() selectedValueChange: EventEmitter<number>;\n @Input() selectedValue: number;\n\n items = new Array();\n\n constructor() {\n this.selectedValueChange = new EventEmitter<number>();\n }\n\n /**\n * Called when an item has been selected\n */\n numChanged() {\n this.selectedValueChange.emit(this.selectedValue);\n }\n\n\n ngOnInit() {\n for (var i = this.start_value; i < this.end_value + 1; i++) {\n this.items.push(i);\n }\n }\n}\n","export class Timeline {\n public static CUSTOM: number = 1;\n public static TODAY: number = 2;\n public static YESTERDAY: number = 3;\n public static THIS_WEEK: number = 4;\n public static LAST_WEEK: number = 5;\n public static THIS_MONTH: number = 6;\n public static LAST_MONTH: number = 7;\n public static THIS_QUARTER: number = 8;\n public static LAST_QUARTER: number = 9;\n public static THIS_YEAR: number = 10;\n public static LAST_YEAR: number = 11;\n public static ALL: number = 12;\n public static TOMMOROW: number = 13;\n public static NEXT_WEEK: number = 14;\n public static NEXT_MONTH: number = 15;\n}\n","import * as moment_ from 'moment';\nconst moment = moment_;\nimport { Timeline } from \"./timeline.model\";\n\n\nexport interface TimelineValue {\n date_from: Date,\n date_to: Date,\n show_custom_field: boolean\n}\nexport function calculateTimeline(value: any) {\n const date = new Date();\n const data: any = {\n 'date_from': date,\n 'date_to': date,\n 'show_custom_field': false\n };\n switch (value) {\n case Timeline.CUSTOM: { //Custom\n data.show_custom_field = true;\n break;\n }\n case Timeline.TODAY: { // Today\n let now = moment();\n data.date_from = now.startOf('day').toISOString();\n data.date_to = now.endOf('day').toISOString();\n break;\n }\n case Timeline.YESTERDAY: { // Yesterday\n let now = moment().subtract(1, 'day');\n data.date_from = now.startOf('day').toISOString();\n data.date_to = now.endOf('day').toISOString();\n break;\n }\n case Timeline.THIS_WEEK: { // This Week\n let now = moment();\n data.date_from = now.startOf('isoWeek').toISOString();\n data.date_to = now.endOf('isoWeek').toISOString();\n break;\n }\n case Timeline.LAST_WEEK: { // Last Week\n let now = moment().subtract(1, 'week');\n data.date_from = now.startOf('isoWeek').toISOString();\n data.date_to = now.endOf('isoWeek').toISOString();\n break;\n }\n case Timeline.THIS_MONTH: { //This Month\n let now = moment();\n data.date_from = now.startOf('month').toISOString();\n data.date_to = now.endOf('month').toISOString();\n break;\n }\n case Timeline.LAST_MONTH: { // Last Month\n let now = moment().subtract(1, 'month');\n data.date_from = now.startOf('month').toISOString();\n data.date_to = now.endOf('month').toISOString();\n break;\n }\n case Timeline.THIS_QUARTER: { // This Quarter\n let now = moment();\n data.date_from = now.startOf('quarter').toISOString();\n data.date_to = now.endOf('quarter').toISOString();\n break;\n }\n case Timeline.LAST_QUARTER: { // Last Quarter\n let now = moment().subtract(1, 'quarter');\n data.date_from = now.startOf('quarter').toISOString();\n data.date_to = now.endOf('quarter').toISOString();\n break;\n }\n case Timeline.THIS_YEAR: { // This Year\n let now = moment();\n data.date_from = now.startOf('year').toISOString();\n data.date_to = now.endOf('year').toISOString();\n break;\n }\n case Timeline.LAST_YEAR: { // Last Year\n let now = moment().subtract(1, 'year');\n data.date_from = now.startOf('year').toISOString();\n data.date_to = now.endOf('year').toISOString();\n break;\n }\n case Timeline.TOMMOROW: {\n let now = moment().add(1, 'day');\n data.date_from = now.startOf('day').toISOString();\n data.date_to = now.endOf('day').toISOString();\n break;\n }\n case Timeline.NEXT_WEEK: {\n let now = moment().add(1, 'week');\n data.date_from = now.startOf('isoWeek').toISOString();\n data.date_to = now.endOf('isoWeek').toISOString();\n break;\n }\n case Timeline.NEXT_MONTH: {\n let now = moment().add(1, 'month');\n data.date_from = now.startOf('month').toISOString();\n data.date_to = now.endOf('month').toISOString();\n break;\n }\n default: { // All\n data.date_from = '';\n data.date_to = '';\n break;\n }\n\n }\n return data;\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Optional, Output, Self, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, FormControl, FormGroup, NgControl, Validators } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\nimport { TimelineValue, calculateTimeline } from './calculate-timeline';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { Timeline } from './timeline.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-timeline-filter',\n templateUrl: './timeline-filter.component.html',\n styleUrls: ['./timeline-filter.component.scss'],\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: TimelineFilterComponent\n }\n ]\n})\nexport class TimelineFilterComponent implements OnInit, ControlValueAccessor {\n\n @ViewChild('picker') picker;\n @Input() timelineValue: FormControl = new FormControl('');\n @Input() timelines: any[] = [\n { value: Timeline.CUSTOM, viewValue: 'Custom' },\n { value: Timeline.TODAY, viewValue: 'Today' },\n { value: Timeline.YESTERDAY, viewValue: 'Yesterday' },\n { value: Timeline.TOMMOROW, viewValue: 'Tomorrow' },\n { value: Timeline.THIS_WEEK, viewValue: 'This Week' },\n { value: Timeline.LAST_WEEK, viewValue: 'Last Week' },\n { value: Timeline.NEXT_WEEK, viewValue: 'Next Week' },\n { value: Timeline.THIS_MONTH, viewValue: 'This Month' },\n { value: Timeline.LAST_MONTH, viewValue: 'Last Month' },\n { value: Timeline.NEXT_MONTH, viewValue: 'Next Month' },\n { value: Timeline.THIS_QUARTER, viewValue: 'This Quarter' },\n { value: Timeline.LAST_QUARTER, viewValue: 'Last Quarter' },\n { value: Timeline.THIS_YEAR, viewValue: 'This Year' },\n { value: Timeline.LAST_YEAR, viewValue: 'Last Year' },\n { value: Timeline.ALL, viewValue: 'All dates' },\n ];\n @Input() dateFrom: string = 'date_from';\n @Input() dateTo: string = 'date_to';\n @Input() appearance: any = \"legacy\"\n @Input() showClearbutton: boolean = false;\n /**\n * @deprecated The form input is deprated\n */\n @Input() form: FormGroup = null;\n @Input() labelText: string = 'Select Timeline';\n @Input() selectedValue: any;\n @Input() touchUi: boolean = true;\n @Output() selectedValueChange = new EventEmitter();\n @Output() selectionChange = new EventEmitter();\n\n selectorForm: FormGroup;\n onChange: any = () => { };\n onTouched: any = () => { };\n static nextId = 0;\n stateChanges = new Subject<void>();\n controlType = 'timeline-filter';\n id = `timeline-filter-${TimelineFilterComponent.nextId++}`;\n describedBy = '';\n\n selectedRange: TimelineValue;\n @Input() set defaultValue(value: any) {\n this.timelineValue.setValue(value);\n this.changeTimeline(value);\n }\n\n showCustomDateFields: boolean = false;\n\n constructor(\n formBuilder: FormBuilder,\n @Optional() @Self() public ngControl: NgControl,\n private datePipe: DatePipe\n ) {\n this.selectorForm = formBuilder.group({\n select_value: [null],\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this.selectorForm.get('select_value').setValidators(Validators.required);\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n @Input()\n get value(): any {\n if (this.selectorForm.valid) {\n return this.selectorForm.value.select_value;\n }\n return '';\n }\n set value(data: any) {\n this.selectorForm.patchValue({ select_value: data || '' });\n this._handleInput();\n this.stateChanges.next();\n }\n\n getDateRangeString() {\n let str = \"\";\n if (this.selectedRange?.show_custom_field) {\n if (this.selectedRange?.date_from.toUTCString() != 'Invalid Date') {\n str += ' - ' + this.datePipe.transform(this.selectedRange?.date_from?.toUTCString())\n }\n if (this.selectedRange?.date_to.toUTCString() != 'Invalid Date') {\n str += ' - ' + this.datePipe.transform(this.selectedRange?.date_to?.toUTCString())\n }\n }\n return str;\n }\n\n resetFieldValue(field: string) {\n this.form.get(field).setValue('');\n }\n\n\n getFieldValue(field: string) {\n return this.form.get(field).value;\n }\n\n setFieldValue(field: string, value: any) {\n this.form.get(field).setValue(value);\n }\n\n changeTimeline(value: any) {\n const timeline = calculateTimeline(value);\n if (timeline) {\n this.setFieldValue(this.dateFrom, timeline.date_from)\n this.setFieldValue(this.dateTo, timeline.date_to)\n this.showCustomDateFields = timeline.show_custom_field;\n }\n }\n\n _handleInput(): void {\n if (this.value == 1) {\n this.picker.open();\n return;\n }\n const range: TimelineValue = calculateTimeline(this.value);\n this.selectedRange = range;\n this.onChange(this.value);\n this.selectedValueChange.emit(this.selectedValue);\n this.selectionChange.emit(range);\n }\n\n dateRangeChange(dateRangeStart: HTMLInputElement, dateRangeEnd: HTMLInputElement) {\n const range: TimelineValue = {\n date_from : new Date(dateRangeStart.value),\n date_to: new Date(dateRangeEnd.value),\n show_custom_field: true\n }\n this.selectedRange = range;\n this.onChange(this.value);\n this.selectedValueChange.emit(this.selectedValue);\n this.selectionChange.emit(range);\n }\n\n onCustomDateChange(event: any) {\n }\n\n setDescribedByIds(ids: string[]) {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n writeValue(data: any): void {\n this.value = data;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnInit(): void {\n console.log(this.form);\n\n this.timelineValue.valueChanges.\n pipe(\n debounceTime(100),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => this.changeTimeline(value));\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'app-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n\n @Input() isLoading = false;\n @Input() size = 0.6;\n @Input() message: string | undefined;\n\n constructor() { }\n\n ngOnInit() { }\n\n}\n","import { NgModule } from '@angular/core';\nimport { SuccessSnackComponent, ErrorSnackComponent } from './snack.component';\nimport { CommonModule } from '@angular/common';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [\n SuccessSnackComponent,\n ErrorSnackComponent\n ],\n imports: [\n CommonModule,\n MatSnackBarModule,\n MatIconModule\n ],\n exports: [\n SuccessSnackComponent,\n ErrorSnackComponent,\n ]\n})\nexport class SnackModule { }\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { CredentialsService } from './credentials.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('AuthenticationGuard');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationGuard implements CanActivate {\n\n constructor(private router: Router,\n private credentialsService: CredentialsService) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n canLoad(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n isUserAuthenticated(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n if (this.credentialsService.isAuthenticated) {\n return true;\n }\n\n log.debug('Not authenticated, redirecting and adding redirect url...');\n this.router.navigate(['/login'], { queryParams: { redirect: state.url }, replaceUrl: true });\n return false;\n }\n\n}\n","\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { concatMap, map } from 'rxjs/operators';\nimport { Credentials, CredentialsService } from './credentials.service';\nimport { HttpService } from './http.service';\n\n/**\n * Provides a base for authentication workflow.\n * The login/logout methods should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService {\n\n constructor(private credentialsService: CredentialsService, private http: HttpService) { }\n\n /**\n * Authenticates the user.\n * @param context The login parameters.\n * @return The user credentials.\n */\n login(context: any): Observable<Credentials> {\n const data = <Credentials>{};\n return this.http\n .skipToken()\n .post('oauth/token', context)\n .pipe(\n concatMap(async (tokenInfo: any) => {\n tokenInfo.expires_in = Date.now() + (tokenInfo.expires_in * 1000);\n data.token = tokenInfo;\n data.user = {};\n this.credentialsService.setCredentials(data, context.remember);\n const userInfo: any = await this.http.get('api/user/current').toPromise();\n data.user = userInfo?.user;\n this.credentialsService.setCredentials(data, context.remember);\n return data;\n })\n )\n }\n\n /**\n * Logs out the user and clear credentials.\n * @return True if the user was logged out successfully.\n */\n logout(): Observable<boolean> {\n\n this.credentialsService.setCredentials();\n return of(true);\n }\n\n}\n","import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\nimport { Injectable } from '@angular/core';\n\n/**\n * A route strategy allowing for explicit route reuse.\n * Used as a workaround for https://github.com/angular/angular/issues/18374\n * To reuse a given route, add `data: { reuse: true }` to the route definition.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteReusableStrategy extends RouteReuseStrategy {\n\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle | null): void { }\n\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n return null;\n }\n\n public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n // Reuse the route if the RouteConfig is the same, or if both routes use the\n // same component, because the latter can have different RouteConfigs.\n return future.routeConfig === curr.routeConfig ||\n Boolean(future.routeConfig?.component &&\n future.routeConfig?.component === curr.routeConfig?.component);\n }\n\n}\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Service used to manage Local Storage\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20190623\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n private storageSub = new Subject<any>();\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n watch(): Observable<any> {\r\n return this.storageSub.asObservable();\r\n }\r\n\r\n setItem(key: string, data: any) {\r\n localStorage.setItem(key, data);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n\r\n getItem(key: string) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n removeItem(key: string) {\r\n const data = this.getItem(key);\r\n localStorage.removeItem(key);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from './http.service';\r\n\r\n/**\r\n * Service that provides a wrapper for retrieving data from the server\r\n * @deprecated use HttpService Instead\r\n * @author Joshua Kissoon\r\n * @since 20170709\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataManager {\r\n\r\n constructor(private http: HttpService) { }\r\n\r\n /**\r\n * Callback wrapper for the HTTP GET Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n * @updated 20170711 to add parameters\r\n */\r\n GET(urlq: string, params = {}): any {\r\n return this.http\r\n .get(urlq, { params: params })\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POST(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POSTRAW(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .skipHeader()\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n\r\n /**\r\n * Callback wrapper for the HTTP PUT Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n PUT(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .put(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP PATCH Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20161107\r\n */\r\n PATCH(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .patch(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP DELETE Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n DELETE(urlq: string): any {\r\n return this.http\r\n .delete(urlq)\r\n .toPromise();\r\n }\r\n\r\n}","import { MatTooltipModule } from '@angular/material/tooltip';\n/*\n * This module imports and re-exports all Angular Material modules for convenience,\n * so only 1 module import is needed in your feature modules.\n * See https://material.angular.io/guide/getting-started#step-3-import-the-component-modules.\n *\n * To optimize your production builds, you should only import the components used in your app.\n */\n\nimport { NgModule } from \"@angular/core\";\nimport {\n MatCommonModule,\n MatLineModule,\n MatNativeDateModule,\n MatOptionModule,\n MatPseudoCheckboxModule,\n MatRippleModule\n} from \"@angular/material/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatSortModule } from \"@angular/material/sort\";\nimport { MatTableModule } from \"@angular/material/table\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatChipsModule } from \"@angular/material/chips\";\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatListModule } from '@angular/material/list'\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\n\n\n@NgModule({\n exports: [\n MatButtonModule,\n MatCheckboxModule,\n MatCommonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatLineModule,\n MatMenuModule,\n MatNativeDateModule,\n MatOptionModule,\n MatProgressSpinnerModule,\n MatPseudoCheckboxModule,\n MatRippleModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n MatCardModule,\n MatDividerModule,\n MatChipsModule,\n MatDatepickerModule,\n MatListModule,\n MatTooltipModule,\n MatButtonToggleModule\n ]\n})\nexport class MaterialModule { }\n","import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS, HttpClientModule, HttpClient } from '@angular/common/http';\nimport { RouteReuseStrategy, RouterModule } from '@angular/router';\n\nimport { RouteReusableStrategy } from './route-reusable-strategy';\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\nimport { HttpService } from './http.service';\nimport { TokenInterceptor } from './token.interceptor';\nimport { CacheInterceptor } from './cache.interceptor';\nimport { SnackModule } from './snack/snack.module';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n RouterModule,\n SnackModule\n ],\n providers: [\n {\n provide: HttpClient,\n useClass: HttpService\n },\n {\n provide: RouteReuseStrategy,\n useClass: RouteReusableStrategy\n }\n ],\n exports: [\n SnackModule\n ]\n})\nexport class CoreModule {\n\n constructor(@Optional() @SkipSelf() parentModule: CoreModule) {\n // Import guard\n if (parentModule) {\n throw new Error(`${parentModule} has already been loaded. Import Core module in the root module only.`);\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupComponent } from './action-popup.component';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n FlexLayoutModule,\n CommonModule,\n MaterialModule\n ],\n declarations: [\n ActionPopupComponent\n ],\n exports: [\n ActionPopupComponent\n ],\n entryComponents: [\n ActionPopupComponent\n ]\n})\nexport class ActionPopupModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { DataTableComponent } from './data-table.component';\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n imports: [\n FlexLayoutModule,\n CommonModule,\n InfiniteScrollModule,\n MaterialModule\n ],\n declarations: [\n DataTableComponent\n ],\n exports: [\n DataTableComponent\n ]\n})\nexport class DataTableModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { DocumentViewerComponent } from './document-viewer.component';\nimport { NgxDocViewerModule } from 'ngx-doc-viewer';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FlexLayoutModule,\n NgxDocViewerModule,\n MaterialModule\n ],\n declarations: [\n DocumentViewerComponent\n ],\n exports: [\n DocumentViewerComponent\n ]\n})\nexport class DocumentViewerModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FileDropperComponent } from './file-dropper.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FlexLayoutModule,\n MaterialModule\n ],\n declarations: [\n FileDropperComponent\n ],\n exports: [FileDropperComponent]\n})\nexport class FileDropperModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\nimport { EntityFilesViewAllComponent } from './entity-files-view-all.component';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FileDropperModule } from '../file-dropper/file-dropper.module';\nimport { DocumentViewerModule } from '../document-viewer/document-viewer.module';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n declarations: [EntityFileFormComponent, EntityFilesViewAllComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n FileDropperModule,\n DocumentViewerModule,\n InfiniteScrollModule,\n ActionPopupModule,\n MaterialModule\n ],\n exports: [\n EntityFilesViewAllComponent\n ],\n entryComponents: [EntityFileFormComponent]\n})\nexport class EntityFilesViewAllModule { }\n","import { Component, OnInit, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-read-more\",\n templateUrl: \"./read-more.component.html\",\n styleUrls: [\"./read-more.component.scss\"]\n})\nexport class ReadMoreComponent implements OnInit {\n @Input() text: string;\n @Input() maxLength: number = 100;\n currentText: string;\n hideToggle: boolean = true;\n\n isCollapsed: boolean = true;\n\n constructor() {}\n\n ngOnInit() {\n this.determineView();\n }\n\n toggleView() {\n this.isCollapsed = !this.isCollapsed;\n this.determineView();\n }\n\n determineView() {\n if (!this.text || this.text.length <= this.maxLength) {\n this.currentText = this.text;\n this.isCollapsed = false;\n this.hideToggle = true;\n return;\n }\n this.hideToggle = false;\n if (this.isCollapsed == true) {\n this.currentText = this.text.substring(0, this.maxLength) + \"...\";\n } else if (this.isCollapsed == false) {\n this.currentText = this.text;\n }\n }\n}\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReadMoreComponent } from './read-more.component';\n\n@NgModule({\n declarations: [ReadMoreComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule\n ],\n exports: [\n ReadMoreComponent\n ]\n})\nexport class ReadMoreModule { }","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NoteListComponent } from './note-list/note-list.component';\nimport { NoteFormComponent } from './note-form/note-form.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\nimport { MaterialModule } from '../material.module';\nimport { CommentFormComponent } from './comment-form/comment-form.component';\nimport { ReadMoreModule } from '../read-more/read-more.module';\n\n@NgModule({\n declarations: [\n NoteListComponent,\n NoteFormComponent,\n CommentFormComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n ActionPopupModule,\n MaterialModule,\n ReadMoreModule\n ],\n exports: [\n NoteListComponent\n ],\n entryComponents: [NoteFormComponent]\n})\nexport class NoteModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SearchableSelectorComponent } from './searchable-selector.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatSelectInfiniteScrollDirective } from './mat-select-infinite-scroll.directive';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n MaterialModule\n ],\n declarations: [\n SearchableSelectorComponent,\n MatSelectInfiniteScrollDirective\n ],\n exports: [\n SearchableSelectorComponent,\n MatSelectInfiniteScrollDirective\n ]\n})\nexport class SearchableSelectorModule { }\n","import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/* Selectors */\r\nimport { NumItemsSelector } from './num-items-selector.component';\r\nimport { NumberSelector } from './number-selector.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ],\r\n declarations: [\r\n NumItemsSelector, NumberSelector,\r\n ],\r\n exports: [NumItemsSelector, NumberSelector]\r\n})\r\nexport class UtilityModule { }\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TimelineFilterRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TimelineFilterRoutingModule } from './timeline-filter-routing.module';\nimport { TimelineFilterComponent } from './timeline-filter.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n declarations: [TimelineFilterComponent],\n imports: [\n CommonModule,\n TimelineFilterRoutingModule,\n FlexLayoutModule,\n MaterialModule,\n ReactiveFormsModule\n ],\n exports: [TimelineFilterComponent]\n})\nexport class TimelineFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LoaderComponent } from './loader.component';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@NgModule({\n declarations: [\n LoaderComponent\n ],\n imports: [\n CommonModule,\n MatProgressSpinnerModule\n ],\n exports: [\n LoaderComponent\n ]\n})\nexport class LoaderModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionRoutingModule } from './email-subscription-routing.module';\n\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionRoutingModule\n ]\n})\nexport class EmailSubscriptionModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserRoutingModule } from './email-subscription-user-routing.module';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionUserRoutingModule\n ]\n})\nexport class EmailSubscriptionUserModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserFormRoutingModule { }\n","\nimport { Component, Inject, OnInit, TemplateRef } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { finalize } from 'rxjs/operators';\nimport { AlertService } from '../../../core/alert.service';\nimport { FormValidatorService } from '../../../core/form-validator.service';\nimport { HttpService } from '../../../core/http.service';\nimport { Logger } from '../../../core/logger.service';\n\nconst log = new Logger('EmailSubscriptionUser Form');\n\nconst errorMessages: any = {\n user_id: {\n required: \"User is required\"\n },\n email_type_id: {\n required: \"Email Type is required\"\n },\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-form',\n templateUrl: './email-subscription-user-form.component.html',\n styleUrls: ['./email-subscription-user-form.component.scss']\n})\nexport class EmailSubscriptionUserFormComponent implements OnInit {\n\n updateMode: boolean;\n esUserFormGroup: FormGroup;\n esUserFormFirstAttempt: boolean;\n esUser: any;\n isSubmitLoading: boolean;\n selectedUser: any;\n selectedType: any;\n\n constructor(private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n public dialogRef: MatDialogRef<EmailSubscriptionUserFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.esUserFormGroup = this.fb.group({\n id: [''],\n user_id: ['', Validators.required],\n email_type_id: ['', Validators.required],\n });\n }\n\n\n ngOnInit() {\n if (this.data?.esUser?.id) {\n this.esUser = this.data.esUser;\n this.updateMode = true;\n this.selectedType = this.esUser?.email_type;\n this.selectedUser = this.esUser?.user;\n this.esUserFormGroup.patchValue(this.esUser);\n }\n\n }\n\n //Method to trigger login\n submit() {\n this.esUserFormGroup.markAllAsTouched();\n this.esUserFormFirstAttempt = true;\n if (this.esUserFormGroup.valid) {\n this.isSubmitLoading = true;\n const model = this.esUserFormGroup.value;\n (\n this.updateMode ?\n this.http.put(`api/email-subscription-users/${model?.id}`, model) :\n this.http.post(`api/email-subscription-users`, model)\n )\n .pipe(\n finalize(() => this.isSubmitLoading = false),\n untilDestroyed(this)\n ).subscribe(result => {\n this.alertService.addAlert(\"Subscription saved successfully\", \"success\");\n this.dialogRef.close(result);\n });\n }\n }\n\n\n cancel() {\n this.dialogRef.close();\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.esUserFormGroup, this.esUserFormFirstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.esUserFormGroup, errorMessages);\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserFormRoutingModule } from './email-subscription-user-form-routing.module';\nimport { EmailSubscriptionUserFormComponent } from './email-subscription-user-form.component';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { LoaderModule } from '../../../loader/loader.module';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserFormComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionUserFormRoutingModule,\n LoaderModule\n ],\n entryComponents: [EmailSubscriptionUserFormComponent]\n})\nexport class EmailSubscriptionUserFormModule { }\n","import { Component, OnInit, ViewChild } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { EmailSubscriptionUserFormComponent } from '../email-subscription-user-form/email-subscription-user-form.component';\nimport { Router } from '@angular/router';\nimport { Logger } from '../../../core/logger.service';\nimport { PageEvent } from '../../../data-table/data-table.model';\nimport { HttpService } from '../../../core/http.service';\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\n\nconst log = new Logger('EmailSubscriptionUser list');\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-list',\n templateUrl: './email-subscription-user-list.component.html',\n styleUrls: ['./email-subscription-user-list.component.scss']\n})\nexport class EmailSubscriptionUserListComponent implements OnInit {\n\n esUserList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n displayColumns: FormControl = new FormControl(['index', 'user.name', 'email_type.title', 'creator.name', 'created_at', 'actions']);\n displayedColumns: any[] = [];\n availableDisplayColumns: any[] = [\n { order: 1, value: 'index', name: 'Index' },\n { order: 2, value: 'user.name', name: 'User' },\n { order: 3, value: 'email_type.title', name: 'Email Type' },\n { order: 4, value: 'creator.name', name: 'Creator' },\n { order: 5, value: 'actions', name: 'Actions' }\n ];\n\n constructor(\n private dialog: MatDialog,\n private http: HttpService,\n private router: Router,\n ) { }\n\n ngOnInit() {\n this.displayedColumns = this.displayColumns.value;\n this.initializeData();\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n }\n\n get selectedColumns(): string[] {\n return this.availableDisplayColumns\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\n .map(col => col.value);\n }\n\n columnsChange() {\n this.displayedColumns = this.selectedColumns;\n }\n\n\n initializeData() {\n this.http.get(`api/email-subscription-users`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.esUserList = this.esUserList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n addEmailSubscriptionUser() {\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\n width: '800px',\n autoFocus: false,\n data: {} // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n log.debug(result);\n this.reload();\n }\n });\n }\n\n\n editEmailSubscriptionUser(event: any, esUser: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\n width: '800px',\n autoFocus: false,\n data: {\n esUser: esUser\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n log.debug(result);\n this.reload();\n }\n });\n }\n\n deleteEmailSubscriptionUser(event: any, esUser: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: '400px',\n data: <ActionPopup>{\n title: 'Delete Subscription',\n message: `Are you sure to proceed delete the esUser ${esUser.name}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n //Action confirmed\n this.http.delete(`api/email-subscription-users/${esUser?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.esUserList = this.esUserList.filter(x => x.id !== esUser.id);\n });\n }\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n reload() {\n this.esUserList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\n\nexport const esulr = {\n title: 'Email Subscription Users',\n permissions: {\n only: ['app_admin'],\n redirectTo: '/'\n }\n};\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionUserListComponent,\n canActivate: [AuthenticationGuard],\n data: esulr\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserListRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserListFilterRoutingModule { }\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-list-filter',\n templateUrl: './email-subscription-user-list-filter.component.html',\n styleUrls: ['./email-subscription-user-list-filter.component.scss']\n})\nexport class EmailSubscriptionUserListFilterComponent implements OnInit {\n\n esUserFilterForm: FormGroup;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private fb: FormBuilder) {\n this.createForm();\n }\n\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.esUserFilterForm = this.fb.group({\n user_id: [''],\n email_type_id: [''],\n });\n }\n\n ngOnInit(): void {\n\n this.esUserFilterForm.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n this.valueChange.emit(value);\n })\n }\n\n\n resetFieldValue(field: string) {\n this.esUserFilterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.esUserFilterForm.get(field).value;\n }\n\n\n ngOnDestroy() {\n\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserListFilterRoutingModule } from './email-subscription-user-list-filter-routing.module';\nimport { EmailSubscriptionUserListFilterComponent } from './email-subscription-user-list-filter.component';\nimport { MaterialModule } from '../../../material.module';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserListFilterComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionUserListFilterRoutingModule\n ],\n exports: [EmailSubscriptionUserListFilterComponent]\n})\nexport class EmailSubscriptionUserListFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserListRoutingModule } from './email-subscription-user-list-routing.module';\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\nimport { EmailSubscriptionUserListFilterModule } from '../email-subscription-user-list-filter/email-subscription-user-list-filter.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { EmailSubscriptionUserFormModule } from '../email-subscription-user-form/email-subscription-user-form.module';\nimport { MaterialModule } from '../../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserListComponent],\n imports: [\n CommonModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n EmailSubscriptionUserListRoutingModule,\n EmailSubscriptionUserFormModule,\n EmailSubscriptionUserListFilterModule\n ],\n exports: [EmailSubscriptionUserListComponent]\n})\nexport class EmailSubscriptionUserListModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\n\nexport class EmailSubscriptionTypeRoutingModule { }","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeRoutingModule } from './email-subscription-type-routing.module';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionTypeRoutingModule\n ]\n})\nexport class EmailSubscriptionTypeModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionTypeFormRoutingModule { }\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { finalize } from 'rxjs/operators';\nimport { AlertService } from '../../../core/alert.service';\nimport { FormValidatorService } from '../../../core/form-validator.service';\nimport { HttpService } from '../../../core/http.service';\n\nconst errorMessages: any = {\n title: {\n required: \"Title is required\"\n },\n code: {\n required: \"Code is required\"\n },\n frequency_id: {\n required: \"Frequency is required\"\n },\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-type-form',\n templateUrl: './email-subscription-type-form.component.html',\n styleUrls: ['./email-subscription-type-form.component.scss']\n})\nexport class EmailSubscriptionTypeFormComponent implements OnInit {\n\n updateMode: boolean;\n emailSubscriptionTypeFormGroup: FormGroup;\n emailSubscriptionTypeFormFirstAttempt: boolean;\n emailSubscriptionType: any;\n selectedFrequency: any;\n isLoading: boolean;\n isSubmitLoading: boolean;\n\n constructor(private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n public dialogRef: MatDialogRef<EmailSubscriptionTypeFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.emailSubscriptionTypeFormGroup = this.fb.group({\n id: [''],\n title: ['', Validators.compose([Validators.required])],\n code: ['', Validators.compose([Validators.required])],\n frequency_id: ['', Validators.required],\n description: [''],\n });\n }\n\n ngOnInit() {\n if (this.data.emailSubscriptionType?.id) {\n this.isLoading = true;\n this.emailSubscriptionType = this.data?.emailSubscriptionType;\n this.updateMode = true;\n this.selectedFrequency = this.emailSubscriptionType?.frequency || {};\n this.emailSubscriptionTypeFormGroup.patchValue(this.emailSubscriptionType);\n }\n }\n\n //Method to trigger login\n submit() {\n this.emailSubscriptionTypeFormGroup.markAllAsTouched();\n this.emailSubscriptionTypeFormFirstAttempt = true;\n if (this.emailSubscriptionTypeFormGroup.valid) {\n this.isSubmitLoading = true;\n const model = this.emailSubscriptionTypeFormGroup.value;\n (\n this.updateMode ?\n this.http.put(`api/email-subscription-types/${model?.id}`, model) :\n this.http.post(`api/email-subscription-types`, model)\n )\n .pipe(\n finalize(() => this.isSubmitLoading = false),\n untilDestroyed(this)\n ).subscribe(result => {\n this.alertService.addAlert(\"Email Type saved successfully\", \"success\");\n this.dialogRef.close(result);\n });\n }\n }\n\n\n cancel() {\n this.dialogRef.close();\n }\n\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.emailSubscriptionTypeFormGroup, this.emailSubscriptionTypeFormFirstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.emailSubscriptionTypeFormGroup, errorMessages);\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeFormRoutingModule } from './email-subscription-type-form-routing.module';\nimport { EmailSubscriptionTypeFormComponent } from './email-subscription-type-form.component';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { LoaderModule } from '../../../loader/loader.module';\n\n\n\n@NgModule({\n declarations: [EmailSubscriptionTypeFormComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionTypeFormRoutingModule,\n LoaderModule\n ],\n exports: [EmailSubscriptionTypeFormComponent],\n entryComponents: [EmailSubscriptionTypeFormComponent]\n})\nexport class EmailSubscriptionTypeFormModule { }\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\nimport { distinctUntilChanged, debounceTime } from 'rxjs/operators';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { EmailSubscriptionTypeFormComponent } from '../email-subscription-type-form/email-subscription-type-form.component';\nimport { PageEvent } from '../../../data-table/data-table.model';\nimport { HttpService } from '../../../core/http.service';\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-type-list',\n templateUrl: './email-subscription-type-list.component.html',\n styleUrls: ['./email-subscription-type-list.component.scss']\n})\nexport class EmailSubscriptionTypeListComponent implements OnInit {\n\n emailSubscriptionTypeList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n isLoadRelations: true,\n relations: ['frequency']\n };\n search: FormControl = new FormControl('');\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n displayColumns: FormControl = new FormControl(['index', 'title', 'frequency.title', 'description', 'actions']);\n displayedColumns: any[] = [];\n availableDisplayColumns: any[] = [\n { order: 1, value: 'index', name: 'Index' },\n { order: 2, value: 'title', name: 'Title' },\n { order: 3, value: 'code', name: 'Code' },\n { order: 4, value: 'frequency.title', name: 'Frequency' },\n { order: 5, value: 'description', name: 'Description' },\n { order: 6, value: 'actions', name: 'Actions' }\n ];\n\n constructor(\n private dialog: MatDialog,\n private http: HttpService,\n ) { }\n\n ngOnInit() {\n this.displayedColumns = this.displayColumns.value;\n this.initializeData();\n this.search.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n this.filters.search = value;\n this.reload();\n });\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n }\n\n get selectedColumns(): string[] {\n return this.availableDisplayColumns\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\n .map(col => col.value);\n }\n\n columnsChange() {\n this.displayedColumns = this.selectedColumns;\n }\n\n\n initializeData() {\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n addEmailSubscriptionType() {\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\n width: '400px',\n autoFocus: false,\n data: {} // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.reload();\n }\n });\n }\n\n\n editEmailSubscriptionType(event: any, emailSubscriptionType: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\n width: '400px',\n autoFocus: false,\n data: {\n emailSubscriptionType: emailSubscriptionType\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.reload();\n }\n });\n }\n\n deleteEmailSubscriptionType(event: any, emailSubscriptionType: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: '400px',\n data: <ActionPopup>{\n title: 'Delete Email Type',\n message: `Are you sure to proceed delete the Email Type ${emailSubscriptionType.title}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n //Action confirmed\n this.http.delete(`api/email-subscription-types/${emailSubscriptionType?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.filter(x => x.id !== emailSubscriptionType.id);\n });\n }\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n reload() {\n this.emailSubscriptionTypeList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\n\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\n\nexport const estlr = {\n title: 'Email Subscription Type',\n permissions: {\n only: ['client_admin'],\n redirectTo: '/'\n }\n};\n\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionTypeListComponent,\n canActivate: [AuthenticationGuard],\n data: estlr\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionTypeListRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeListRoutingModule } from './email-subscription-type-list-routing.module';\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\nimport { EmailSubscriptionTypeFormModule } from '../email-subscription-type-form/email-subscription-type-form.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionTypeListComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n EmailSubscriptionTypeFormModule,\n EmailSubscriptionTypeListRoutingModule\n ],\n exports: [EmailSubscriptionTypeListComponent]\n})\nexport class EmailSubscriptionTypeListModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { HttpService } from '../../core/http.service';\nimport { PageEvent } from '../../data-table/data-table.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-for-user',\n templateUrl: './email-subscription-for-user.component.html',\n styleUrls: ['./email-subscription-for-user.component.scss']\n})\nexport class EmailSubscriptionForUserComponent implements OnInit {\n\n subscriptions: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n isLoadRelations: true,\n relations: 'frequency,currentUserSubscription'\n };\n\n constructor(\n private http: HttpService\n ) { }\n\n ngOnInit(): void {\n this.fetchSubscriptions();\n }\n\n fetchSubscriptions() {\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.subscriptions = this.subscriptions.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.fetchSubscriptions();\n }\n }\n\n subscribe(sub: any) {\n this.http.post(`api/email-subscription-for-user`, { email_type_id: sub?.id })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n sub.current_user_subscription = result?.item;\n });\n }\n\n unsubscribe(sub: any) {\n this.http.delete(`api/email-subscription-users/${sub?.current_user_subscription?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((_: any) => {\n sub.current_user_subscription = null;\n });\n }\n\n\n reload() {\n this.subscriptions = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.fetchSubscriptions();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../core/authentication.guard';\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\n\nexport const esfur = {\n permissions: {\n only: ['client_admin']\n }\n};\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionForUserComponent,\n canActivate: [AuthenticationGuard],\n data: esfur\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionForUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionForUserRoutingModule } from './email-subscription-for-user-routing.module';\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [EmailSubscriptionForUserComponent],\n imports: [\n CommonModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n EmailSubscriptionForUserRoutingModule\n ],\n exports: [EmailSubscriptionForUserComponent]\n})\nexport class EmailSubscriptionForUserModule { }\n","import { HttpService } from '../core/http.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TechlifyUpdateService {\n\n constructor(private http: HttpService) { }\n\n getTechlifyUpdates(filters: any) {\n return this.http.get(`api/techlify-updates`, { params: filters }).toPromise();\n }\n\n createTechlifyUpdate(techlifyUpdate: any) {\n return this.http.post(`api/techlify-updates`, techlifyUpdate).toPromise();\n }\n\n updateTechlifyUpdate(techlifyUpdate: any) {\n return this.http.put(`api/techlify-updates/${techlifyUpdate.id}`, techlifyUpdate).toPromise();\n }\n\n deleteTechlifyUpdate(techlifyUpdateId: any) {\n return this.http.delete(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\n }\n\n getTechlifyUpdate(techlifyUpdateId: any) {\n return this.http.get(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\n }\n\n getNewUpdateForCurrentUser() {\n return this.http.get(`api/current-user-techlify-updates`).toPromise();\n }\n\n createUpdateViewRecord(techlifyUpdateView: any) {\n return this.http.post(`api/techlify-update-views`, techlifyUpdateView).toPromise();\n }\n\n updateCurrentUserUpdates() {\n return this.http.get(`api/techlify-updates/update-view`).toPromise();\n }\n}\n","import { AlertService } from \"../../core/alert.service\";\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, Validators } from '@angular/forms';\nimport { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Editor, Toolbar } from 'ngx-editor';\n\nconst errorMessages: any = {\n title: {\n required: \"Title is required\",\n },\n released_on: {\n required: \"Released On is required\",\n },\n version: {\n required: \"Version is required\",\n },\n description: {\n required: \"Description is required\",\n },\n learn_more_link: {\n pattern: \"Please enter valid link\",\n }\n}\n\n@Component({\n selector: 'app-techlify-update-form',\n templateUrl: './techlify-update-form.component.html',\n styleUrls: ['./techlify-update-form.component.scss']\n})\nexport class TechlifyUpdateFormComponent implements OnInit {\n\n @Output() onSave = new EventEmitter<any>();\n techlifyUpdateForm: FormGroup;\n isUpdateMode: boolean = false;\n editor: Editor;\n toolbar: Toolbar = [\n ['bold', 'italic'],\n ['bullet_list'],\n ];\n\n constructor(\n public dialogRef: MatDialogRef<TechlifyUpdateFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private techlifyUpdateService: TechlifyUpdateService\n ) {\n this.createForm();\n }\n\n private createForm() {\n this.techlifyUpdateForm = this.fb.group({\n id: new FormControl(''),\n title: new FormControl('', Validators.required),\n description: new FormControl('', Validators.required),\n version: new FormControl('', Validators.required),\n released_on: new FormControl('', Validators.required),\n learn_more_link: new FormControl('', Validators.compose([Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?')])),\n });\n if (this.data.techlifyUpdateDetails) {\n this.isUpdateMode = true;\n this.techlifyUpdateForm.patchValue(this.data.techlifyUpdateDetails);\n }\n }\n\n ngOnInit() {\n this.editor = new Editor();\n }\n\n async submit() {\n if (this.techlifyUpdateForm.valid) {\n let result;\n const model = this.techlifyUpdateForm.value;\n\n try {\n result = this.isUpdateMode ? await this.techlifyUpdateService.updateTechlifyUpdate(model)\n : await this.techlifyUpdateService.createTechlifyUpdate(model);\n this.alertService.addAlert(\n \"Techlify app update saved successfully\",\n \"success\"\n );\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n } finally {\n if (result) {\n this.dialogRef.close(result);\n }\n }\n }\n }\n\n resetFieldValue(field: string) {\n this.techlifyUpdateForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.techlifyUpdateForm.get(field).value;\n }\n\n /** Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.techlifyUpdateForm, true);\n }\n /** Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.techlifyUpdateForm, errorMessages);\n }\n\n}\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdateFormComponent } from './techlify-update-form.component';\nimport { NgxEditorModule } from 'ngx-editor';\n\n@NgModule({\n declarations: [TechlifyUpdateFormComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MaterialModule,\n FlexLayoutModule,\n NgxEditorModule,\n ],\n exports: [\n TechlifyUpdateFormComponent\n ],\n entryComponents: [\n TechlifyUpdateFormComponent\n ]\n})\nexport class TechlifyUpdateFormModule { }\n","import { UntilDestroy } from '@ngneat/until-destroy';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { ActionPopup } from './../../action-popup/action-popup.model';\nimport { ActionPopupComponent } from './../../action-popup/action-popup.component';\nimport { TechlifyUpdateFormComponent } from './../techlify-update-form/techlify-update-form.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, FormBuilder } from '@angular/forms';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlertService } from '../../core/alert.service';\nimport { Component, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-updates-list',\n templateUrl: './techlify-updates-list.component.html',\n styleUrls: ['./techlify-updates-list.component.scss']\n})\nexport class TechlifyUpdatesListComponent implements OnInit {\n techlifyUpdates: any[] = [];\n displayedColumns: string[] = [\n 'index',\n 'title',\n 'version',\n 'released_on',\n 'learn_more_link',\n 'description',\n 'creator',\n 'actions'\n ];\n page: number = 1;\n lastPage: number;\n perPage: number = 25;\n isWorking: boolean = false;\n filterFormGroup: FormGroup;\n\n constructor(\n private dialog: MatDialog,\n private alertService: AlertService,\n private techlifyUpdateService: TechlifyUpdateService,\n private fb: FormBuilder,\n ) {\n this.filterFormGroup = this.fb.group({\n search: new FormControl(''),\n version: new FormControl(''),\n sort_by: new FormControl('released_on|DESC'),\n });\n }\n\n ngOnInit() {\n this.loadData();\n this.listenChanges();\n }\n\n listenChanges() {\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\n .subscribe(changes => {\n this.reload();\n });\n }\n\n ngOnDestroy() { }\n\n async loadData() {\n try {\n this.isWorking = true;\n var filters: any = this.filterFormGroup.value;\n filters.perPage = this.perPage;\n filters.page = this.page;\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\n filters\n );\n this.lastPage = result.last_page || this.page;\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n finally {\n this.isWorking = false;\n }\n }\n\n reload() {\n this.techlifyUpdates = [];\n this.page = 1;\n if (!this.isWorking) {\n this.loadData();\n }\n }\n\n onScroll() {\n if (!this.isWorking && this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n modifyTechlifyUpdate(model?: any) {\n const dialogRef = this.dialog.open(TechlifyUpdateFormComponent, {\n width: \"600px\",\n data: {\n techlifyUpdateDetails: model,\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reload();\n }\n });\n }\n\n async deleteTechlifyUpdate(model: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: \"Delete Update\",\n message: `Are you sure to delete this update?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n try {\n await this.techlifyUpdateService.deleteTechlifyUpdate(model.id);\n this.alertService.addAlert(\n \"Successfully deleted the update\",\n \"success\"\n );\n this.reload();\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n });\n }\n\n resetFieldValue(field: string) {\n this.filterFormGroup.get(field).setValue(\"\");\n }\n\n sortColumn(event) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n assignFilter(column, direction) {\n switch (column) {\n case 'title': {\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\n }\n case 'released_on': {\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\n }\n case 'version': {\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\n }\n default: {\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\n }\n };\n }\n\n}\n","import { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n { path: '', redirectTo: 'all', pathMatch: 'full' },\n { path: 'all', component: TechlifyUpdatesListComponent },\n\n //fallback\n {\n path: '**',\n redirectTo: 'all',\n pathMatch: 'full'\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TechlifyUpdateRoutingModule { }\n","import { ReadMoreModule } from '../read-more/read-more.module';\nimport { TechlifyUpdateFormModule } from './techlify-update-form/techlify-update-form.module';\nimport { TechlifyUpdateRoutingModule } from './techlify-update-routing.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\n\n@NgModule({\n declarations: [TechlifyUpdatesListComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n MaterialModule,\n ActionPopupModule,\n TechlifyUpdateRoutingModule,\n TechlifyUpdateFormModule,\n ReadMoreModule,\n ]\n})\nexport class TechlifyUpdateModule { }\n","import { Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-update-view',\n templateUrl: './update-view.component.html',\n styleUrls: ['./update-view.component.scss']\n})\nexport class UpdateViewComponent implements OnInit {\n techlifyUpdate: any;\n rootNavUrl: any;\n\n constructor(\n public dialogRef: MatDialogRef<UpdateViewComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n this.techlifyUpdate = this.data.techlifyUpdate;\n this.rootNavUrl = this.data.rootNavUrl;\n }\n\n close() {\n this.dialogRef.close();\n }\n\n openUpdateHistory(): void {\n this.close();\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\n }\n\n}\n","import { UntilDestroy } from '@ngneat/until-destroy';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { AlertService } from './../../core/alert.service';\nimport { UpdateViewComponent } from './../update-view/update-view.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, FormBuilder } from '@angular/forms';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Component, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-update-history',\n templateUrl: './techlify-update-history.component.html',\n styleUrls: ['./techlify-update-history.component.scss']\n})\nexport class TechlifyUpdateHistoryComponent implements OnInit {\n techlifyUpdates: any[] = [];\n displayedColumns: string[] = [\n 'index',\n 'title',\n 'version',\n 'released_on',\n 'learn_more_link',\n 'description',\n 'creator',\n 'actions'\n ];\n page: number = 1;\n lastPage: number;\n perPage: number = 25;\n isWorking: boolean = false;\n filterFormGroup: FormGroup;\n\n constructor(\n private dialog: MatDialog,\n private techlifyUpdateService: TechlifyUpdateService,\n private fb: FormBuilder,\n private alertService: AlertService\n ) {\n this.filterFormGroup = this.fb.group({\n search: new FormControl(''),\n version: new FormControl(''),\n sort_by: new FormControl('released_on|DESC'),\n });\n }\n\n ngOnInit() {\n this.loadData();\n this.listenChanges();\n this.updateCurrentUserUpdates();\n }\n\n listenChanges() {\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\n .subscribe(changes => {\n this.reload();\n });\n }\n\n ngOnDestroy() { }\n\n async loadData() {\n try {\n this.isWorking = true;\n var filters: any = this.filterFormGroup.value;\n filters.perPage = this.perPage;\n filters.page = this.page;\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\n filters\n );\n this.lastPage = result.last_page || this.page;\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n finally {\n this.isWorking = false;\n }\n }\n\n reload() {\n this.techlifyUpdates = [];\n this.page = 1;\n if (!this.isWorking) {\n this.loadData();\n }\n }\n\n onScroll() {\n if (!this.isWorking && this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n resetFieldValue(field: string) {\n this.filterFormGroup.get(field).setValue(\"\");\n }\n\n sortColumn(event) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n assignFilter(column, direction) {\n switch (column) {\n case 'title': {\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\n }\n case 'released_on': {\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\n }\n case 'version': {\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\n }\n default: {\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\n }\n };\n }\n\n openUpdateView(techlifyUpdate: any): void {\n const dialogRef = this.dialog.open(UpdateViewComponent, {\n width: \"800px\",\n autoFocus: false,\n data: {\n techlifyUpdate: techlifyUpdate,\n isFromHistory: true,\n } // Any data passed here will be injected into the model\n });\n }\n\n async updateCurrentUserUpdates() {\n try {\n await this.techlifyUpdateService.updateCurrentUserUpdates();\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n}\n","import { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n { path: '', redirectTo: 'update-history', pathMatch: 'full' },\n { path: 'update-history', component: TechlifyUpdateHistoryComponent },\n\n //fallback\n {\n path: '**',\n redirectTo: 'all',\n pathMatch: 'full'\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TechlifyUpdateHistoryRoutingModule { }\n","import { ReactiveFormsModule } from '@angular/forms';\nimport { TechlifyUpdateHistoryRoutingModule } from './techlify-update-history-routing.module';\nimport { ReadMoreModule } from '../../read-more/read-more.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { MaterialModule } from '../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../../action-popup/action-popup.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n MaterialModule,\n ActionPopupModule,\n ReadMoreModule,\n TechlifyUpdateHistoryRoutingModule\n ],\n declarations: [TechlifyUpdateHistoryComponent]\n})\nexport class TechlifyUpdateHistoryModule { }\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdateViewComponent } from './update-view.component';\n\n\n\n@NgModule({\n declarations: [UpdateViewComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule\n ],\n exports: [\n UpdateViewComponent\n ],\n entryComponents: [\n UpdateViewComponent\n ]\n})\nexport class UpdateViewModule { }\n","import { AlertService } from './../../../core/alert.service';\nimport { TechlifyUpdateService } from './../../techlify-update.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Component, EmbeddedViewRef, Inject, OnInit } from '@angular/core';\nimport { MatSnackBarRef, MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { UpdateViewComponent } from '../../update-view/update-view.component';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-update-notifier-snack',\n templateUrl: './update-notifier-snack.component.html',\n styleUrls: ['./update-notifier-snack.component.scss']\n})\nexport class UpdateNotifierSnackComponent implements OnInit {\n maxDescriptionLength: any = 70;\n descriptionText: any = '';\n techlifyUpdate: any;\n rootNavUrl: any;\n\n constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: any,\n private snackBarRef: MatSnackBarRef<EmbeddedViewRef<any>>,\n private dialog: MatDialog,\n private router: Router,\n private techlifyUpdateService: TechlifyUpdateService,\n private alertService: AlertService\n ) { }\n\n ngOnInit(): void {\n this.techlifyUpdate = this.data.techlifyUpdate;\n this.rootNavUrl = this.data.rootNavUrl;\n this.determineDescription(this.techlifyUpdate?.description)\n }\n\n close(): void {\n this.createUpdateViewRecord();\n this.snackBarRef.dismiss();\n }\n\n determineDescription(description: any) {\n if (!description || description.length <= this.maxDescriptionLength) {\n this.descriptionText = description;\n return;\n }\n this.descriptionText = description.substring(0, this.maxDescriptionLength) + \"...\";\n }\n\n openUpdateView(): void {\n this.close();\n const dialogRef = this.dialog.open(UpdateViewComponent, {\n width: \"800px\",\n autoFocus: false,\n data: {\n techlifyUpdate: this.techlifyUpdate,\n rootNavUrl: this.data.rootNavUrl\n } // Any data passed here will be injected into the model\n });\n }\n\n openUpdateHistory(): void {\n this.close();\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\n }\n\n async createUpdateViewRecord() {\n try {\n var techlifyUpdateView = {\n update_id: this.techlifyUpdate?.id\n };\n let result: any = await this.techlifyUpdateService.createUpdateViewRecord(techlifyUpdateView);\n }\n catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n}\n","import { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { AlertService } from '../../core/alert.service';\n\n@Component({\n selector: 'app-update-notifier',\n templateUrl: './update-notifier.component.html',\n styleUrls: ['./update-notifier.component.scss']\n})\nexport class UpdateNotifierComponent implements OnInit {\n techlifyUpdate: any;\n @Input() rootNavUrl: string = '/techlify-updates';\n\n constructor(\n private snackBar: MatSnackBar,\n private techlifyUpdateService: TechlifyUpdateService,\n private alertService: AlertService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n setTimeout(x => {\n this.getNewUpdate();\n }, 5000);\n }\n\n async getNewUpdate() {\n try {\n let result: any = await this.techlifyUpdateService.getNewUpdateForCurrentUser();\n this.techlifyUpdate = result.item;\n if (this.techlifyUpdate) {\n this.showUpdate();\n }\n }\n catch (error) {\n console.log(\"Current user updates failed\");\n }\n }\n\n showUpdate() {\n this.snackBar.openFromComponent(UpdateNotifierSnackComponent, {\n data: {\n techlifyUpdate: this.techlifyUpdate,\n rootNavUrl: this.rootNavUrl\n },\n horizontalPosition: 'right',\n verticalPosition: 'top',\n panelClass: ['white-bg']\n });\n }\n\n}\n","import { ActionPopupModule } from './../../action-popup/action-popup.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { UpdateViewModule } from './../update-view/update-view.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdateNotifierComponent } from './update-notifier.component';\nimport { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\n\n\n@NgModule({\n declarations: [UpdateNotifierComponent, UpdateNotifierSnackComponent],\n imports: [\n CommonModule,\n MaterialModule,\n UpdateViewModule,\n FlexLayoutModule,\n ActionPopupModule\n ],\n exports: [\n UpdateNotifierComponent,\n ],\n entryComponents: [\n UpdateNotifierSnackComponent\n ]\n})\nexport class UpdateNotifierModule { }\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as XLSX from 'xlsx';\n\n@Component({\n selector: 'app-export-excel-button',\n templateUrl: './export-excel-button.component.html',\n styleUrls: ['./export-excel-button.component.scss']\n})\nexport class ExportExcelButtonComponent implements OnInit {\n\n @Input() name: string = 'Export_Data';\n @Input() data: any[] = [];\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n exportExcel() {\n const fileName = `${this.name}_${new Date().getTime()}.xlsx`;\n const ws = XLSX.utils.json_to_sheet(this.data);\n /* generate workbook and add the worksheet */\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\n\n /* save to file */\n XLSX.writeFile(wb, fileName);\n }\n\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExportExcelButtonComponent } from './export-excel-button/export-excel-button.component';\nimport { MaterialModule } from '../material.module';\n\n\n\n@NgModule({\n declarations: [ExportExcelButtonComponent],\n imports: [\n CommonModule,\n MaterialModule\n ],\n exports: [ExportExcelButtonComponent]\n})\nexport class ExportExcelModule { }\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { HttpService } from '../../core/http.service';\n\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-view',\n templateUrl: './audit-log-view-model.component.html',\n styleUrls: ['./audit-log-view-model.component.scss']\n})\nexport class AuditLogViewModelComponent implements OnInit {\n\n logInfo: any;\n showDeltaChanges: boolean = false;\n changeList: any[] = [];\n\n constructor(\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) { }\n\n ngOnInit(): void {\n if (this.data) {\n this.http.get(`api/recent-log-for-model`, {\n params: {\n model_type: this.data?.modelType,\n model_id: this.data?.modelId\n }\n }).pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.logInfo = result?.item;\n this.getTransformedChanges();\n });\n }\n }\n\n getTransformedChanges() {\n const changes = ((this.logInfo?.action === 'deleted') ? Object.keys(this.logInfo?.object) : Object.keys(this.logInfo?.data?.changes)) || [];\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (this.logInfo?.action === 'deleted') ? '' : (this.logInfo?.object[key] ?? ''), oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\n }\n\n close() {\n this.dialogRef.close();\n }\n\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { filter } from 'rxjs/operators';\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-logs-view-model',\n templateUrl: './audit-logs-view-model.component.html',\n styleUrls: ['./audit-logs-view-model.component.scss']\n})\nexport class AuditLogsViewModelComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd), untilDestroyed(this))\n .subscribe(_ => this.dialogRef.close());\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\nimport { AuditLogsViewModelComponent } from '../audit-logs-view-model/audit-logs-view-model.component';\n\n\n@Component({\n selector: 'app-audit-log-for-model',\n templateUrl: './audit-log-for-model.component.html',\n styleUrls: ['./audit-log-for-model.component.scss']\n})\nexport class AuditLogForModelComponent implements OnInit {\n\n @Input() modelType: string;\n @Input() modelId: any;\n @Input() logView: 'recent' | 'all' = 'recent';\n\n constructor(\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n\n }\n\n getLogView() {\n const dialogRef = this.dialog.open(AuditLogViewModelComponent, {\n width: '800px',\n autoFocus: false,\n data: {\n modelType: this.modelType,\n modelId: this.modelId\n } // Any data passed here will be injected into the model\n });\n }\n\n getLogsView() {\n const dialogRef = this.dialog.open(AuditLogsViewModelComponent, {\n width: '95%',\n maxWidth: 'unset',\n autoFocus: false,\n data: {\n modelType: this.modelType,\n modelId: this.modelId\n } // Any data passed here will be injected into the model\n });\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogForModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogViewModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogViewModelRoutingModule } from './audit-log-view-model-routing.module';\nimport { AuditLogViewModelComponent } from './audit-log-view-model.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogViewModelComponent],\n imports: [\n CommonModule,\n AuditLogViewModelRoutingModule,\n FlexLayoutModule,\n MaterialModule\n ],\n exports: [AuditLogViewModelComponent]\n})\nexport class AuditLogViewModelModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogsViewModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogListRoutingModule { }\n","import { Component, OnInit, OnDestroy, Input, ViewChild } from '@angular/core';\n\n\nimport { Router } from '@angular/router';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { PageEvent } from '../../data-table/data-table.model';\nimport { DataManager } from '../../core/dataManager.service';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list',\n templateUrl: './audit-log-list.component.html',\n styleUrls: ['./audit-log-list.component.scss'],\n})\nexport class AuditLogListComponent implements OnInit, OnDestroy {\n\n auditLogList: any[] = [];\n @Input() objectId: any;\n @Input() objectType: any;\n @Input() showFilter: boolean = true;\n @Input() showExportButtons: boolean = true;\n @Input() userId: any;\n\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = { sort_by: 'created_at|desc' };\n displayedColumns: any[] = ['index', 'id', 'object_type', 'object_id', 'action', 'changes', 'created_at', 'user.email'];\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n constructor(\n private dataManager: DataManager,\n private router: Router,\n public sanitizer: DomSanitizer\n ) { }\n\n ngOnInit() {\n\n this.initializeData();\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n\n }\n\n get excelData(): any[] {\n if (this.auditLogList.length > 0) {\n return this.auditLogList.map(item => {\n return {\n 'Type': item?.object_type,\n 'Action': item?.action,\n 'Data': JSON.stringify(item?.data || {}),\n 'Object': JSON.stringify(item?.object || {}),\n 'Pre-Object': JSON.stringify(item?.pre_object || {}),\n 'Created At': new Date(item?.created_at).toDateString(),\n 'Created By': item?.user?.email\n };\n });\n }\n return [];\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n logClicked(log: any) {\n this.router.navigate(['/system/audit-logs/log-view', log.id]);\n }\n\n\n async initializeData() {\n if (this.objectType) {\n this.filters = { ...this.filters, object_type: this.objectType }\n }\n if (this.objectId) {\n this.filters = { ...this.filters, object_id: this.objectId }\n }\n if (this.userId) {\n this.filters = { ...this.filters, user_id: this.userId }\n }\n const result = await this.dataManager.GET(`api/audit-logs`, { ...this.filters, ...this.pageEvent });\n this.auditLogList = this.auditLogList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n }\n\n filterChange(event: any) {\n if (this.showFilter) {\n this.filters = {\n ...this.filters,\n ...event,\n object_type: this.objectType || event?.object_type || '',\n object_id: this.objectId || '',\n };\n this.reload();\n }\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n reload() {\n this.auditLogList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n getTransformedChanges(log: any) {\n if (log?.data?.changes) {\n const changes = Object.keys(log?.data?.changes) || [];\n let value = '<div>';\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n value = `${value} <div><b>${displayAttribute}:</b> <span id=\"old-value\">${log?.pre_object[key] ?? ''}</span><span id=\"new-value\">${log?.object[key] ?? ''}</span></div>`;\n });\n value = `${value} </div>`;\n return value;\n }\n return '';\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogListFilterRoutingModule { }\n","import { FormControl } from \"@angular/forms\";\n\nexport function DateValidator(): any {\n return (control: FormControl): { [key: string]: any } => {\n\n const val: any = new Date(control.value);\n if (!!control.value && val == 'Invalid Date') {\n return { invalidDate: true };\n }\n return null;\n };\n}","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { DateValidator } from '../../date-validator';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list-filter',\n templateUrl: './audit-log-list-filter.component.html',\n styleUrls: ['./audit-log-list-filter.component.scss']\n})\nexport class AuditLogListFilterComponent implements OnInit {\n\n auditLogFilterForm: FormGroup;\n\n @Input() objectId: any;\n @Input() objectType: any;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private fb: FormBuilder, private formValidatorService: FormValidatorService) {\n this.createForm();\n }\n\n get showObjectFilter() {\n return !(this.objectId || this.objectType);\n }\n\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.auditLogFilterForm = this.fb.group({\n object_type: [''],\n action: [''],\n data: [''],\n date_to: ['', DateValidator()],\n date_from: ['', DateValidator()]\n });\n }\n\n ngOnInit(): void {\n\n this.auditLogFilterForm.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.valueChange.emit(value);\n })\n }\n\n\n resetFieldValue(field: string) {\n this.auditLogFilterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.auditLogFilterForm.get(field).value;\n }\n\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.auditLogFilterForm, true);\n }\n\n\n ngOnDestroy() {\n\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogListFilterRoutingModule } from './audit-log-list-filter-routing.module';\nimport { AuditLogListFilterComponent } from './audit-log-list-filter.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../../material.module';\nimport { SearchableSelectorModule } from '../../searchable-selector/searchable-selector.module';\n\n\n@NgModule({\n declarations: [AuditLogListFilterComponent],\n imports: [\n CommonModule,\n AuditLogListFilterRoutingModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n MaterialModule,\n SearchableSelectorModule,\n ],\n exports: [AuditLogListFilterComponent]\n})\nexport class AuditLogListFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogListRoutingModule } from './audit-log-list-routing.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { AuditLogListComponent } from './audit-log-list.component';\nimport { AuditLogListFilterModule } from '../audit-log-list-filter/audit-log-list-filter.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ExportExcelModule } from '../../export-excel/export-excel.module';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogListComponent],\n imports: [\n CommonModule,\n AuditLogListRoutingModule,\n ExportExcelModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n MaterialModule,\n InfiniteScrollModule,\n AuditLogListFilterModule\n ],\n exports: [AuditLogListComponent]\n})\nexport class AuditLogListModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogsViewModelRoutingModule } from './audit-logs-view-model-routing.module';\nimport { AuditLogsViewModelComponent } from './audit-logs-view-model.component';\nimport { AuditLogListModule } from '../audit-log-list/audit-log-list.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\n\n\n@NgModule({\n declarations: [AuditLogsViewModelComponent],\n imports: [\n CommonModule,\n AuditLogsViewModelRoutingModule,\n FlexLayoutModule,\n AuditLogListModule\n ],\n exports: [AuditLogsViewModelComponent]\n})\nexport class AuditLogsViewModelModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogForModelRoutingModule } from './audit-log-for-model-routing.module';\nimport { AuditLogForModelComponent } from './audit-log-for-model.component';\nimport { AuditLogViewModelModule } from '../audit-log-view-model/audit-log-view-model.module';\nimport { AuditLogsViewModelModule } from '../audit-logs-view-model/audit-logs-view-model.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogForModelComponent],\n imports: [\n AuditLogViewModelModule,\n AuditLogsViewModelModule,\n CommonModule,\n AuditLogForModelRoutingModule,\n FlexLayoutModule,\n MaterialModule,\n ],\n exports: [AuditLogForModelComponent]\n})\nexport class AuditLogForModelModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\nimport * as jsondiffpatch from \"jsondiffpatch\"\nimport { DataManager } from '../../core/dataManager.service';\n\n@Component({\n selector: 'app-audit-log-view',\n templateUrl: './audit-log-view.component.html',\n styleUrls: ['./audit-log-view.component.scss']\n})\nexport class AuditLogViewComponent implements OnInit {\n\n logInfo: any;\n showDeltaChanges: boolean = false;\n changeList: any[] = [];\n\n constructor(\n private dataManager: DataManager,\n private route: ActivatedRoute,\n private location: Location\n ) { }\n\n ngOnInit(): void {\n this.route.paramMap.subscribe(params => {\n if (params.get('id')) {\n this.fetchLogDetail(params.get('id'));\n } else {\n this.location.back();\n }\n });\n }\n\n getTransformedChanges() {\n const changes = ((this.logInfo?.action === 'deleted') ? Object.keys(this.logInfo?.object) : Object.keys(this.logInfo?.data?.changes)) || [];\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (this.logInfo?.action === 'deleted') ? '' : (this.logInfo?.object[key] ?? ''), oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\n }\n\n async fetchLogDetail(logId: any) {\n const result = await this.dataManager.GET(`api/audit-logs/${logId}`);\n this.logInfo = result.item;\n this.getTransformedChanges();\n this.patchDelta();\n }\n\n patchDelta() {\n const delta = jsondiffpatch.diff(this.logInfo?.pre_object, this.logInfo?.object);\n document.getElementById('jsondiff').innerHTML = jsondiffpatch.formatters.html.format(delta, this.logInfo?.pre_object);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogViewRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogViewRoutingModule } from './audit-log-view-routing.module';\nimport { AuditLogViewComponent } from './audit-log-view.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogViewComponent],\n imports: [\n CommonModule,\n AuditLogViewRoutingModule,\n FlexLayoutModule,\n MaterialModule\n ],\n exports: [AuditLogViewComponent]\n})\nexport class AuditLogViewModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../core/authentication.guard';\nimport { AuditLogListComponent } from './audit-log-list/audit-log-list.component';\nimport { AuditLogViewComponent } from './audit-log-view/audit-log-view.component';\n\n\nconst routes: Routes = [\n { path: 'log-list', component: AuditLogListComponent, canActivate: [AuthenticationGuard] },\n { path: 'log-view/:id', component: AuditLogViewComponent, canActivate: [AuthenticationGuard] },\n { path: '**', redirectTo: 'log-list', pathMatch: 'full' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogRoutingModule } from './audit-log-routing.module';\nimport { AuditLogListModule } from './audit-log-list/audit-log-list.module';\nimport { AuditLogViewModule } from './audit-log-view/audit-log-view.module';\n\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n AuditLogRoutingModule,\n AuditLogListModule,\n AuditLogViewModule\n ],\n exports: []\n})\nexport class AuditLogModule { }\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ImportCsvConfig } from '../import-csv-config';\n\n@Component({\n selector: 'app-import-success',\n templateUrl: './import-success.component.html',\n styleUrls: ['./import-success.component.scss']\n})\nexport class ImportSuccessComponent implements OnInit {\n @Input() data: any;\n @Input() config: ImportCsvConfig;\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { ErrorHandlerService } from './../../core/error-handler.service';\nimport { PageEvent } from './../../data-table/data-table.model';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ImportCsvConfig } from '../import-csv-config';\nimport { HttpService } from '../../core/http.service';\n\n@Component({\n selector: 'app-import-history-list',\n templateUrl: './import-history-list.component.html',\n styleUrls: ['./import-history-list.component.scss']\n})\nexport class ImportHistoryListComponent implements OnInit {\n\n @Input() config: ImportCsvConfig;\n histories: any[] = [];\n displayedColumns: string[] = [\n 'index',\n 'imported_by',\n 'date',\n 'no_of_records'\n ];\n isWorking: boolean = false;\n filter: any;\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n\n constructor(\n private errorHandler: ErrorHandlerService,\n private http: HttpService,\n ) {\n }\n\n ngOnInit() {\n if (this.config.importHistory.isEnabled) {\n this.filter = {\n model_type: this.config.importHistory.type,\n };\n }\n this.loadData();\n }\n\n loadData() {\n try {\n this.isWorking = true;\n this.http.get(this.config.importHistory.apiUrl, { params: { ...this.filter, ...this.pageEvent } }).subscribe((result: any) => {\n this.histories = this.histories.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n finally {\n this.isWorking = false;\n }\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.loadData();\n }\n }\n\n reload() {\n this.histories = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.loadData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { FormValidatorService } from '../../core/form-validator.service';\nimport { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Location } from '@angular/common';\nimport { ImportCsvConfig } from '../import-csv-config';\n\nconst errorMessages: any = {\n property: {\n required: \"Property is required\",\n unavailable: \"Duplicate entry\"\n },\n};\n\n@Component({\n selector: 'app-field-mapping',\n templateUrl: './field-mapping.component.html',\n styleUrls: ['./field-mapping.component.scss']\n})\nexport class FieldMappingComponent implements OnInit {\n\n importMappingForm: FormGroup;\n @Input() data: any[];\n @Input() config: ImportCsvConfig;\n firstDataArray: any[] = [];\n properties: any[] = [];\n @Output() onSave = new EventEmitter();\n @Output() onReUpload= new EventEmitter();\n\n constructor(\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private changeDetectorRef: ChangeDetectorRef,\n public location: Location\n ) {\n this.createImportMappingForm();\n }\n\n ngOnInit() {\n this.properties = this.config.properties;;\n this.reFectorAttributes(this.data[0]);\n }\n\n createImportMappingForm() {\n this.importMappingForm = this.fb.group({\n fields: this.fb.array([]),\n });\n }\n\n get fieldsArray(): FormArray {\n return this.importMappingForm.get('fields') as FormArray;\n }\n\n createField(field: any): FormGroup {\n var fieldForm: FormGroup = this.fb.group({\n id: new FormControl(field.id),\n label: new FormControl(field.label),\n value: new FormControl(field.value),\n property: new FormControl(field.property,\n Validators.compose(\n [\n Validators.required\n ]\n )\n ),\n propertyType: new FormControl(field.propertyType)\n });\n return fieldForm;\n }\n\n reFectorAttributes(data) {\n for (var k in data) {\n if (data.hasOwnProperty(k)) {\n var dataValue = {\n id: '',\n label: k,\n value: data[k],\n property: '',\n propertyType: ''\n };\n this.firstDataArray.push(dataValue);\n }\n }\n this.firstDataArray.forEach((element: any, mainIndex: any) => {\n element.id = mainIndex;\n this.properties.find((property: any, index: any) => {\n if (property.label.toLowerCase().includes(element.label.toLowerCase())) {\n element.property = property.value;\n element.propertyType = property.type;\n return element;\n }\n });\n });\n }\n\n next() {\n this.importMappingForm.markAllAsTouched();\n if (!this.importMappingForm.valid) {\n return;\n }\n this.onSave.emit(this.importMappingForm.value);\n }\n\n /** Method to evaluate form fields*/\n isFieldValid(field: string, form: any) {\n return this.formValidatorService.isFieldValid(field, form);\n }\n\n /** Method to find error in form fields*/\n getErrorMessage(field: string, form: any) {\n return this.formValidatorService.getErrorMessage(field, form, errorMessages);\n }\n\n ngAfterViewInit(): void {\n //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.\n //Add 'implements AfterViewInit' to the class.\n setTimeout(x => {\n this.firstDataArray.forEach((element: any) => {\n this.fieldsArray.push(this.createField(element));\n });\n this.changeDetectorRef.detectChanges();\n }, 500);\n }\n\n updatePropertyType(event: any, index: any): void {\n var field = this.properties.find((field: any) => field.value == event.value);\n if (field) {\n this.fieldsArray.controls[index].get('propertyType').setValue(field.type);\n this.uniqueValidator();\n }\n }\n\n uniqueValidator() {\n this.fieldsArray.value.forEach((field: any, index: any) => {\n var control = this.fieldsArray.controls[index].get('property');\n const isNameUnique = this.fieldsArray.value.find(propertyData =>\n propertyData.property === control.value\n && propertyData.id != this.fieldsArray.controls[index].get('id').value\n )\n ? false\n : true;\n if (!isNameUnique) {\n control.setErrors({ unavailable: true });\n }\n else {\n control.setErrors(null);\n }\n });\n }\n\n removeField(index: number) {\n if (index == -1) {\n return;\n }\n this.fieldsArray.removeAt(index);\n }\n\n reUpload() {\n this.onReUpload.emit(true);\n }\n\n}\n","import { Location } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'app-failed-items-list',\n templateUrl: './failed-items-list.component.html',\n styleUrls: ['./failed-items-list.component.scss']\n})\nexport class FailedItemsListComponent implements OnInit {\n @Input() failedItems: any[];\n @Input() selectedFields: any[];\n @Output() onReUpload = new EventEmitter();\n\n constructor(\n public location: Location\n ) { }\n\n ngOnInit() {\n }\n\n isValidDate(d: any): boolean {\n var date = new Date(d);\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n reUpload() {\n this.onReUpload.emit(true);\n }\n\n}\n","import { ViewerConfig } from '../document-viewer/viewer-config.model';\nimport { FileDropperConfig } from '../file-dropper/file-dropper.model';\nimport { HttpService } from '../core/http.service';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { AlertService } from '../core/alert.service';\nimport { ErrorHandlerService } from '../core/error-handler.service';\nimport * as XLSX from 'xlsx';\nimport { ImportCsvConfig } from './import-csv-config';\n@UntilDestroy()\n\n@Component({\n selector: 'app-import-csv',\n templateUrl: './import-csv.component.html',\n styleUrls: ['./import-csv.component.scss']\n})\nexport class ImportCsvComponent implements OnInit {\n result: any;\n @Input() config: ImportCsvConfig;\n filesConfig: FileDropperConfig;\n filesList: any[] = [];\n data: any[] = [];\n isUploaded: boolean = false;\n isImportTypeSelected: boolean = false;\n viewerConfig: ViewerConfig;\n fileData: any[] = [];\n failedItems: any[] = [];\n selectedFields: any[] = [];\n importSteps: any = [\n {\n id: 1,\n step: 1,\n title: 'Upload',\n progressTitle: '',\n progressDescription: ''\n },\n {\n id: 2,\n step: 2,\n title: 'Field Mappings',\n progressTitle: '',\n progressDescription: ''\n },\n {\n id: 3,\n step: 3,\n title: 'Data Validation',\n progressTitle: 'Data Being Validated',\n progressDescription: 'The data is currently being validated and checked for errors, please do not navigate away from this page. '\n },\n {\n id: 4,\n step: 3,\n title: 'Data Validation & Errors',\n progressTitle: '',\n progressDescription: ''\n },\n {\n id: 5,\n step: 4,\n title: 'Data Importing',\n progressTitle: 'Data Being Imported',\n progressDescription: 'The data is currently being imported and saved, please do not navigate away from this page. After the import is completed, you will be redirected to a page with the imported records.'\n },\n {\n id: 6,\n step: 5,\n title: 'Success Page & Data Preview',\n progressTitle: '',\n progressDescription: ''\n },\n ];\n currentStep: any = 1;\n\n constructor(\n private alertService: AlertService,\n private errorHandler: ErrorHandlerService,\n private http: HttpService,\n ) {\n this.filesConfig = {\n fileId: \"file\",\n containerId: \"fileContainer\",\n styles: {\n height: \"200px\"\n },\n acceptFile: '.csv',\n multiple: false,\n maxSize: 10,\n acceptFileText: \".csv\"\n };\n }\n\n ngOnInit() {\n }\n\n get step() {\n return this.importSteps.find(step => step.id == this.currentStep);\n }\n\n async fileChanged(event: any) {\n this.currentStep = 2;\n this.filesList = event;\n\n let selectedFile = null;\n let jsonData = null;\n const reader = new FileReader();\n const file = this.filesList[0];\n reader.onload = (event) => {\n const data = reader.result;\n selectedFile = XLSX.read(data, {\n type: 'binary',\n cellDates: true,\n });\n jsonData = selectedFile.SheetNames.reduce((initial, name) => {\n const sheet = selectedFile.Sheets[name];\n initial = XLSX.utils.sheet_to_json(sheet, {\n header: 0,\n defval: \"\",\n });\n return initial;\n }, {});\n this.fileData = jsonData;\n }\n reader.readAsBinaryString(file);\n return;\n }\n\n mappingProcessed(event: any) {\n this.currentStep = 3;\n setTimeout(x => {\n this.selectedFields = event.fields;\n const tempFileData = JSON.parse(JSON.stringify(this.fileData));\n tempFileData.forEach(data => {\n for (var key in data) {\n var field = event.fields.find((field: any) => field.label == key);\n if (field) {\n if ((field.propertyType == 'date' || field.propertyType == 'dateTime') && this.isValidDate(new Date(data[field.label]))) {\n data[field.property] = (new Date(data[field.label]) as Date).toISOString();\n }\n else {\n data[field.property] = data[field.label];\n }\n delete data[key];\n }\n else {\n delete data[key];\n }\n }\n });\n this.save(tempFileData);\n }, 2000);\n }\n\n async save(tempFileData: any) {\n try {\n this.http.post(this.config.apiUrl, { data: tempFileData })\n .pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n\n this.failedItems = result.failed_items;\n if (this.failedItems.length) {\n this.alertService.addAlert(result.msg, 'warn');\n }\n if (!(this.failedItems.length > 0)) {\n this.currentStep = 5;\n setTimeout(x => {\n this.currentStep = 6;\n this.result = result;\n }, 2000);\n }\n else {\n this.currentStep = 4;\n }\n });\n } catch (error) {\n if ((error.status === 422 || error.status === 400) && error.msg) {\n this.alertService.addAlert(error.msg, \"warning\");\n }\n this.errorHandler.handleError(error);\n this.reUpload();\n }\n }\n\n isValidDate(d: any) {\n return d instanceof Date && !isNaN(d.getTime());\n }\n\n reUpload() {\n this.data = [];\n this.fileData = [];\n this.filesList = [];\n this.failedItems = [];\n this.selectedFields = [];\n this.currentStep = 1;\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-data-import',\n templateUrl: './data-import.component.html',\n styleUrls: ['./data-import.component.scss']\n})\nexport class DataImportComponent implements OnInit {\n @Input() step: any;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DocumentViewerModule } from './../document-viewer/document-viewer.module';\nimport { FileDropperModule } from './../file-dropper/file-dropper.module';\nimport { MaterialModule } from './../material.module';\nimport { ImportSuccessComponent } from './import-success/import-success.component';\nimport { ImportHistoryListComponent } from './import-history-list/import-history-list.component';\nimport { FieldMappingComponent } from './field-mapping/field-mapping.component';\nimport { FailedItemsListComponent } from './failed-items-list/failed-items-list.component';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ImportCsvComponent } from './import-csv.component';\nimport { RouterModule } from '@angular/router';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { DataImportComponent } from './data-import/data-import.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n RouterModule,\n MaterialModule,\n FlexLayoutModule,\n FileDropperModule,\n DocumentViewerModule,\n InfiniteScrollModule\n ],\n declarations: [\n ImportCsvComponent,\n FieldMappingComponent,\n FailedItemsListComponent,\n ImportHistoryListComponent,\n ImportSuccessComponent,\n DataImportComponent\n ],\n providers: [],\n exports: [\n ImportCsvComponent\n ],\n})\nexport class ImportCsvModule { }\n","import { Component, Input, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { PageEvent } from '../data-table/data-table.model';\nimport { HttpService } from '../core/http.service';\nimport { TimelineValue } from '../timeline-filter';\n\n@UntilDestroy()\n@Component({\n selector: 'app-login-history-for-user',\n templateUrl: './login-history-for-user.component.html',\n styleUrls: ['./login-history-for-user.component.scss']\n})\nexport class LoginHistoryForUserComponent implements OnInit {\n\n loginHistoryList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n historyFilterForm: FormGroup;\n displayedColumns: any[] = ['index', 'created_at'];\n @Input() userId: any;\n\n constructor(\n private http: HttpService,\n private fb: FormBuilder,\n ) {\n this.historyFilterForm = this.fb.group({\n 'duration': [''],\n 'date_from': [''],\n 'date_to': ['']\n });\n }\n\n ngOnInit() {\n this.filters.user_id = this.userId;\n this.historyFilterForm.valueChanges\n .pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this))\n .subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.filterChange(value);\n });\n this.initializeData();\n }\n\n onTimelineChange(range: TimelineValue) {\n let date_from = range?.date_from ? new Date(range.date_from) : '';\n let date_to = range?.date_to ? new Date(range.date_to) : '';\n this.historyFilterForm.patchValue({\n date_from,\n date_to\n });\n }\n\n initializeData() {\n this.http.get(`api/user-login-history`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.loginHistoryList = this.loginHistoryList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n\n reload() {\n this.loginHistoryList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../core/authentication.guard';\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: LoginHistoryForUserComponent,\n canActivate: [AuthenticationGuard]\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class LoginHistoryForUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { LoginHistoryForUserRoutingModule } from './login-history-for-user-routing.module';\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\nimport { TimelineFilterModule } from '../timeline-filter/timeline-filter.module';\n\n\n@NgModule({\n declarations: [LoginHistoryForUserComponent],\n imports: [\n CommonModule,\n LoginHistoryForUserRoutingModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n TimelineFilterModule\n ],\n exports: [LoginHistoryForUserComponent]\n})\nexport class LoginHistoryForUserModule { }\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\n\nexport class TechlifyTaggerTagFormConfigModel {\n selectable: boolean;\n removable: boolean;\n separatorKeysCodes: number[];\n placeholder: string;\n apiUrl: string;\n isCreateable: boolean;\n createApiUrl: string;\n isCacheTags: boolean;\n isSingle: boolean;\n\n constructor() {\n this.selectable = true;\n this.removable = true;\n this.separatorKeysCodes = [ENTER, COMMA];\n this.placeholder = 'New Tag..';\n this.apiUrl = 'api/techlify-tagger-tags';\n this.createApiUrl = 'api/techlify-tagger-tags';\n this.isCreateable = true;\n this.isCacheTags = false;\n this.isSingle = false;\n }\n}","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, ViewChild, OnInit, Input, OnDestroy, Inject, Optional, Self, OnChanges, SimpleChanges } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { HttpService } from '../core/http.service';\nimport { TechlifyTaggerTagFormConfigModel } from './techlify-tagger-tag-form-config.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-tagger-tag-form-field',\n templateUrl: './techlify-tagger-tag-form-field.component.html',\n styleUrls: ['./techlify-tagger-tag-form-field.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent }],\n})\nexport class TechlifyTaggerTagFormFieldComponent implements OnInit, ControlValueAccessor, MatFormFieldControl<any>, OnDestroy, OnChanges {\n\n static nextId = 0;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'techlify-tagger-form-field';\n id = `techlify-tagger-form-field-${TechlifyTaggerTagFormFieldComponent.nextId++}`;\n\n onChange = (_: any) => { };\n onTouched = () => { };\n\n tagInputCtrl = new FormControl();\n filterString: any;\n @ViewChild('tagInput') tagInput: ElementRef<HTMLInputElement>;\n\n /**Pass the configuration for Techlify Tagger */\n @Input() config: TechlifyTaggerTagFormConfigModel = new TechlifyTaggerTagFormConfigModel();\n /**Pass the Model Type for Techlify Tagger, Required */\n @Input() modelType!: string;\n /**Pass the Model ID for Techlify Tagger */\n @Input() modelId: string;\n\n /**Pass the default list of tags */\n private _allTags: any[] = [];\n @Input()\n get allTags() {\n return this._allTags;\n }\n set allTags(value) {\n this._allTags = value;\n }\n\n /**Pass the Categories to filter for a model */\n @Input() categories: string[] = [];\n /**Pass default category to be used for assigning the tags, when we filter by more than one category */\n @Input() defaultCreateCategory: string;\n\n get tags() {\n return this.allTags.filter(x => this.value.some(y => y == x.id));\n }\n\n //Default Getter and Setters for a Form Field Implementation\n get empty() {\n return this.value.length == 0;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty || this.tagInputCtrl.value;\n }\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.tagInputCtrl.disable() : this.tagInputCtrl.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n\n private _value: any[] = [];\n @Input()\n get value(): any[] {\n return this._value;\n }\n set value(tagIds: any[]) {\n this._value = tagIds || [];\n this.stateChanges.next();\n }\n\n get errorState(): boolean {\n return this.tagInputCtrl.dirty && this.required && (this.value.length == 0);\n }\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n private _placeholder: string;\n\n\n ngOnInit(): void {\n\n }\n\n ngOnChanges(changes: SimpleChanges) {\n\n //API to load all tags for the model type\n if (this.allTags.length == 0) {\n this.httpService\n .cache(!this.config.isCacheTags)\n .get(this.config.apiUrl, {\n params: {\n categories: this.categories.join(','),\n perPage: '1000'\n }\n }).pipe(\n debounceTime(500),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.allTags = result.data;\n });\n }\n\n //API to load only the selected tags for the model\n if (this.modelId && this.value.length == 0) {\n //Model Id is passed and no tags are present, so we query db for the avilable tags for the model ID.\n this.httpService\n .cache(!this.config.isCacheTags)\n .get(this.config.apiUrl, {\n params: {\n categories: this.categories.join(','),\n model_type: this.modelType,\n model_id: this.modelId,\n perPage: '1000'\n }\n }).pipe(\n debounceTime(500),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.value = (result?.data || []).map((x: any) => x.id);\n this._handleInput();\n });\n }\n }\n\n init() {\n if (this.modelId && this.allTags.length == 0) {\n //Model Id is passed and no tags are passed, so we query db for the avilable tags for the model ID.\n this.httpService\n .cache(!this.config.isCacheTags)\n .get(this.config.apiUrl, {\n params: {\n categories: this.categories.join(','),\n model_type: this.modelType,\n model_id: this.modelId\n }\n }).pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.allTags = result.data;\n });\n }\n }\n\n get filteredTags(): any[] {\n return this._filter();\n }\n\n constructor(\n private _focusMonitor: FocusMonitor,\n private _elementRef: ElementRef<HTMLElement>,\n private httpService: HttpService,\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\n @Optional() @Self() public ngControl: NgControl) {\n\n this.tagInputCtrl.valueChanges\n .subscribe(filterValue => {\n this.filterString = filterValue;\n });\n\n //Set Focus Monitor\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n setDescribedByIds(ids: string[]) {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n onContainerClick() {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n\n async add(event: MatChipInputEvent) {\n const value = (event.value || '').trim();\n // Add our tag\n // Validate for single mode\n if (!this.config.isSingle || (this.value.length === 0)) {\n if (value && this.config.isCreateable) {\n const tags = this.allTags;\n let tag = tags.find((item: any) => item.title.toLowerCase() == value.toLowerCase());\n if (!tag) {\n //No tag present in the list\n try {\n const result: any = await this.httpService.post(this.config.createApiUrl, {\n title: value,\n description: value,\n category_title: (this.categories.length > 0) ? (this.defaultCreateCategory ? this.defaultCreateCategory : this.categories[0]) : ''\n }).toPromise();\n tag = result.item;\n } catch (error) {\n return;\n }\n this.allTags.push(tag);\n } else {\n //Optionally clean the existing value, to avoid duplicate\n this.remove(tag);\n }\n this.value.push(tag.id);\n this._handleInput();\n }\n }\n\n // Clear the input value\n event.input.value = '';\n\n this.tagInputCtrl.setValue(null);\n }\n\n remove(tag: any): void {\n this.value = this.value.filter(x => x !== tag.id);\n this._handleInput();\n }\n\n selected(event: MatAutocompleteSelectedEvent): void {\n // Validate for single mode\n if (!this.config.isSingle || (this.value.length === 0)) {\n //Clean the existing value, to avoid duplicate\n this.remove({ id: event.option.value });\n this.value.push(event.option.value);\n this._handleInput();\n }\n this.tagInput.nativeElement.value = '';\n this.tagInputCtrl.setValue(null);\n }\n\n private _filter(): any[] {\n const filterValue = this.filterString ? this.filterString.toString().toLowerCase() : null;\n const availableTags = this.allTags.filter((tag: any) => !this.value.some((item: any) => item == tag.id));\n return filterValue ? availableTags.filter((tag: any) => tag.title.toLowerCase().includes(filterValue)) : availableTags;\n }\n\n writeValue(tagIds: any[]): void {\n this.value = tagIds || [];\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n _handleInput(): void {\n this.onChange(this.value);\n }\n\n static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_required: BooleanInput;\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyTaggerTagFormFieldComponent } from './techlify-tagger-tag-form-field.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MaterialModule } from '../material.module';\n\n\n\n@NgModule({\n declarations: [\n TechlifyTaggerTagFormFieldComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n MatAutocompleteModule,\n ReactiveFormsModule\n ],\n exports: [TechlifyTaggerTagFormFieldComponent]\n})\nexport class TechlifyTaggerTagFormFieldModule { }\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, OnInit, Input, OnDestroy, Inject, Optional, Self } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { HttpService } from '../core/http.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-tagger-tag-selector',\n templateUrl: './techlify-tagger-tag-selector.component.html',\n styleUrls: ['./techlify-tagger-tag-selector.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagSelectorComponent }],\n})\nexport class TechlifyTaggerTagSelectorComponent implements OnInit, ControlValueAccessor, MatFormFieldControl<any>, OnDestroy {\n\n /**Pass the Categories to filter for a model */\n @Input() categories: string[] = [];\n @Input() multiple: boolean = false;\n @Input() enableSearch: boolean = true;\n tagSelectorCtrl = new FormControl();\n @Input() showAllTags: boolean = false;\n @Input() useSelectButtonStyle: boolean = false;\n\n tags: any[] = [];\n\n static nextId = 0;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'techlify-tagger-selector';\n id = `techlify-tagger-selector-${TechlifyTaggerTagSelectorComponent.nextId++}`;\n\n onChange = (_: any) => { };\n onTouched = () => { };\n\n get apiUrl() {\n if (this.showAllTags) {\n return 'api/techlify-tagger-tags'\n }\n else if (this.categories?.length > 0) {\n return 'api/techlify-tagger-tags?categories=' + this.categories.join(',');\n }\n else {\n return '';\n }\n }\n\n //Default Getter and Setters for a Form Field Implementation\n get empty() {\n return this.value.length == 0;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.tagSelectorCtrl.disable() : this.tagSelectorCtrl.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n\n private _value: any;\n @Input()\n get value(): any {\n return this._value;\n }\n set value(val: any) {\n this._value = val;\n this.tagSelectorCtrl.setValue(val);\n this.stateChanges.next();\n }\n\n get errorState(): boolean {\n return this.tagSelectorCtrl.dirty && this.required && (this.value.length == 0);\n }\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n private _placeholder: string;\n\n\n ngOnInit(): void {\n if (this.useSelectButtonStyle) {\n this.httpService.get(this.apiUrl)\n .pipe(untilDestroyed(this))\n .subscribe((res: any) => {\n this.tags = res.data;\n })\n }\n }\n\n selectionChange(value: any) {\n this.value = value;\n this._handleInput();\n }\n\n constructor(\n private _focusMonitor: FocusMonitor,\n private _elementRef: ElementRef<HTMLElement>,\n private httpService: HttpService,\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\n @Optional() @Self() public ngControl: NgControl) {\n\n //Set Focus Monitor\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n setDescribedByIds(ids: string[]) {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n onContainerClick() {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n writeValue(val: any): void {\n this.value = val;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n _handleInput(): void {\n this.onChange(this.value);\n }\n\n static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_required: BooleanInput;\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyTaggerTagSelectorComponent } from './techlify-tagger-tag-selector.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MaterialModule } from '../material.module';\nimport { SearchableSelectorModule } from '../searchable-selector/searchable-selector.module';\n\n\n\n@NgModule({\n declarations: [\n TechlifyTaggerTagSelectorComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n MatButtonToggleModule\n ],\n exports: [TechlifyTaggerTagSelectorComponent]\n})\nexport class TechlifyTaggerTagSelectorModule { }\n","import { DataManager } from './../core/dataManager.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TechlifyFeatureService {\n\n constructor(private dataManager: DataManager) { }\n\n getFeatures() {\n return this.dataManager.GET(`api/features`);\n }\n\n disableFeature(id: any) {\n return this.dataManager.GET(`api/feature/${id}/disable`);\n }\n\n enableFeature(id: any) {\n return this.dataManager.GET(`api/feature/${id}/enable`);\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { TechlifyFeatureService } from './techlify-feature.service';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime } from 'rxjs/operators';\nimport { ActionPopup, ActionPopupComponent } from '../action-popup';\nimport { DataManager } from '../core/dataManager.service';\nimport { ErrorHandlerService } from '../core/error-handler.service';\nimport { AlertService } from '../core/alert.service';\nimport { StorageService } from '../core/storage.service';\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-listing-feature',\n templateUrl: './techlify-feature-listing.component.html',\n styleUrls: ['./techlify-feature-listing.component.scss']\n})\nexport class TechlifyFeatureListingComponent implements OnInit {\n\n features: any[] = []\n displayedColumns: string[] = [\n 'index',\n 'feature',\n 'description',\n 'actions',\n ]\n\n dataSource = new MatTableDataSource()\n\n page: number = 1;\n lastPage: number;\n perPage: number = 25;\n\n isWorking: boolean = false\n filterFormGroup: FormGroup;\n featureToggleForm: FormGroup;\n\n constructor(\n private dataManager: DataManager,\n private errorHandler: ErrorHandlerService,\n private fb: FormBuilder,\n private alertService: AlertService,\n private dialog: MatDialog,\n private storage: StorageService,\n private featureService: TechlifyFeatureService\n ) {\n this.filterFormGroup = this.fb.group({\n num_items: [\"\"]\n })\n }\n\n ngOnInit() {\n this.loadData()\n this.listenForChanges()\n }\n\n listenForChanges() {\n this.filterFormGroup.valueChanges\n .pipe(debounceTime(500), untilDestroyed(this))\n .subscribe((changes) => {\n this.reload()\n })\n }\n\n async loadData() {\n let result;\n try {\n this.isWorking = true\n var filter = this.filterFormGroup.value\n filter.page = this.page;\n filter.perPage = this.perPage;\n result = await this.dataManager.GET(`api/features`, filter);\n this.features = this.features.concat(result.data);\n this.dataSource = new MatTableDataSource(this.features);\n\n if (!this.storage.getItem('features')) {\n this.setStorage(this.features);\n }\n\n this.isWorking = false\n } catch (error) {\n this.errorHandler.handleError(error);\n } finally {\n this.isWorking = false;\n }\n }\n\n async toggeleFeature(element, feature) {\n let status = element ? 'Off' : \"On\";\n let data;\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: `Turn this feature ${status}?`,\n message: `Would you like to turn ${feature.title} feature ${status}`\n }\n })\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n try {\n data = element\n ? await this.featureService.disableFeature(feature.id)\n : await this.featureService.enableFeature(feature.id);\n } catch (error) {\n this.errorHandler.handleError(error);\n } finally {\n this.alertService.addAlert(`You have just turned ${status} the feature ${feature.title}`, 'success');\n this.reload();\n this.storage.removeItem('features');\n this.setStorage(this.features);\n this.isWorking = false;\n }\n } else {\n this.reload();\n }\n })\n }\n\n setStorage(features) {\n let localFeatures = [];\n for (let feature of features) {\n if (!feature.client_feature) {\n if (feature.is_enabled_default) {\n localFeatures.push(feature.code);\n }\n } else {\n if (feature.client_feature.is_enabled) {\n localFeatures.push(feature.code);\n }\n }\n\n }\n this.storage.setItem(\"features\", localFeatures);\n }\n\n reload() {\n this.features = [];\n this.page = 1;\n if (!this.isWorking) {\n this.loadData();\n }\n }\n\n onScroll() {\n if (!this.isWorking && this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n sortColumn(event) {\n var direction = event.direction.toString().toUpperCase()\n this.assignFilter(event.active, direction)\n this.reload()\n }\n\n assignFilter(column, direction) {\n switch (column) {\n case 'name': {\n return this.filterFormGroup\n .get('sort_by')\n .setValue('first_name|' + direction)\n }\n case 'added_on': {\n return this.filterFormGroup\n .get('sort_by')\n .setValue('created_at|' + direction)\n }\n }\n }\n\n}\n","import { AuthenticationGuard } from './../core/authentication.guard';\nimport { Routes, RouterModule } from '@angular/router';\nimport { TechlifyFeatureListingComponent } from './techlify-feature-listing.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: TechlifyFeatureListingComponent,\n canActivate: [AuthenticationGuard]\n },\n];\n\nexport const TechlifyFeatureRoutes = RouterModule.forChild(routes);\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'app-on-off-switch',\n templateUrl: './on-off-switch.component.html',\n styleUrls: ['./on-off-switch.component.scss']\n})\n\nexport class OnOffSwitchComponent implements OnInit {\n\n @Input() value: boolean;\n slideToggle: FormGroup;\n\n constructor(private fb: FormBuilder) {\n this.slideToggle = this.fb.group({\n toggle: [\"\"]\n })\n }\n\n ngOnInit() {\n this.slideToggle.get('toggle').setValue(this.value);\n }\n\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { ErrorHandlerService } from '../core/error-handler.service';\nimport { StorageService } from '../core/storage.service';\nimport { TechlifyFeatureService } from './techlify-feature.service';\n\n@Directive({\n selector: '[techlifyFeatureEnabled]'\n})\nexport class TechlifyFeatureEnabledDirective {\n\n features: any;\n localFeatures: any[] = [];\n @Input('techlifyFeatureEnabled') enabledFeature: any;\n\n constructor(\n private el: ElementRef,\n private featureService: TechlifyFeatureService,\n private errorHandler: ErrorHandlerService,\n private storage: StorageService) {\n\n }\n\n ngOnInit(): void {\n if (!this.storage.getItem('features')) {\n this.getFeatures();\n } else {\n this.checkForFeatureEnabled();\n }\n }\n\n async getFeatures() {\n try {\n let features = await this.featureService.getFeatures();\n\n for (let feature of features.data) {\n if (!feature.client_feature) {\n if (feature.is_enabled_default) {\n this.localFeatures.push(feature.code);\n }\n } else {\n if (feature.client_feature.is_enabled) {\n this.localFeatures.push(feature.code);\n }\n }\n\n }\n this.storage.setItem(\"features\", this.localFeatures);\n } catch (error) {\n this.errorHandler.handleError(error);\n } finally {\n this.checkForFeatureEnabled()\n }\n }\n\n checkForFeatureEnabled() {\n try {\n let features = this.storage.getItem('features');\n let features_split = features.split(',');\n\n if (features_split.includes(this.enabledFeature)) {\n this.el.nativeElement.style.display = \"show\";\n } else {\n this.el.nativeElement.remove();\n }\n\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyFeatureListingComponent } from './techlify-feature-listing.component';\n\nimport { TechlifyFeatureRoutes } from './techlify-feature.routing';\nimport { OnOffSwitchComponent } from './on-off-switch/on-off-switch.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { TechlifyFeatureEnabledDirective } from './techlify-feature-enabled.directive';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n TechlifyFeatureRoutes,\n MatSlideToggleModule,\n FormsModule,\n ReactiveFormsModule,\n InfiniteScrollModule\n ],\n declarations: [TechlifyFeatureListingComponent, OnOffSwitchComponent, TechlifyFeatureEnabledDirective],\n exports: [TechlifyFeatureListingComponent, TechlifyFeatureEnabledDirective]\n})\nexport class TechlifyFeatureModule { }\n"]}
1
+ {"version":3,"sources":["../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.model.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.component.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.component.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.model.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.component.ts","../../../projects/ngx-techlify-core/src/lib/core/logger.service.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/viewer-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/techlify-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/config.service.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.component.ts","../../../projects/ngx-techlify-core/src/lib/core/alert.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http-cache.service.ts","../../../projects/ngx-techlify-core/src/lib/core/cache.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/api-prefix.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/credentials.service.ts","../../../projects/ngx-techlify-core/src/lib/core/token.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/header.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file.service.ts","../../../projects/ngx-techlify-core/src/lib/core/form-validator.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file-form/entity-file-form.component.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.model.ts","../../../projects/ngx-techlify-core/src/lib/note/note.service.ts","../../../projects/ngx-techlify-core/src/lib/note/note-form/note-form.component.ts","../../../projects/ngx-techlify-core/src/lib/note/note-list/note-list.component.ts","../../../projects/ngx-techlify-core/src/lib/note/comment-form/comment-form.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/mat-select-infinite-scroll.directive.ts","../../../projects/ngx-techlify-core/src/lib/utility/num-items-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/utility/date-utils.service.ts","../../../projects/ngx-techlify-core/src/lib/utility/number-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline.model.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/calculate-timeline.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.component.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.module.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.guard.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.service.ts","../../../projects/ngx-techlify-core/src/lib/core/route-reusable-strategy.ts","../../../projects/ngx-techlify-core/src/lib/core/storage.service.ts","../../../projects/ngx-techlify-core/src/lib/core/dataManager.service.ts","../../../projects/ngx-techlify-core/src/lib/material.module.ts","../../../projects/ngx-techlify-core/src/lib/core/core.module.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.module.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.module.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.module.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.module.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.module.ts","../../../projects/ngx-techlify-core/src/lib/read-more/read-more.component.ts","../../../projects/ngx-techlify-core/src/lib/read-more/read-more.module.ts","../../../projects/ngx-techlify-core/src/lib/note/note.module.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.module.ts","../../../projects/ngx-techlify-core/src/lib/utility/utility.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.service.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.module.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel-button/export-excel-button.component.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/date-validator.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-success/import-success.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-history-list/import-history-list.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/field-mapping/field-mapping.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items-list/failed-items-list.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/data-import/data-import.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.module.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature.service.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature-listing.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature.routing.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/on-off-switch/on-off-switch.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature-enabled.directive.ts","../../../projects/ngx-techlify-core/src/lib/techlify-feature/techlify-feature.module.ts"],"names":["ActionPopupComponent","dialogRef","data","this","prototype","ngOnInit","closeDialog","close","confirm","Component","args","selector","template","MatDialogRef","ActionPopup","decorators","type","Inject","MAT_DIALOG_DATA","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__decorate","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","push","__values","o","s","m","__read","ar","error","__spread","concat","DataTableComponent","DataTableComponent_1","dataSource","MatTableDataSource","action","EventEmitter","selctionChange","rowClick","tableScroll","sortChanged","elementId","nextId","ngAfterViewInit","_this","selection","changed","pipe","subscribe","change","selected","emit","sort","sortChange","untilDestroyed","isAllSelected","masterToggle","clearSelection","forEach","row","select","clear","ngOnChanges","changes","initializeConfig","isFirstChange","currentValue","config","page","lastPage","perPage","onScroll","editClicked","event","element","stopPropagation","viewClicked","deactivateClicked","downloadClicked","printClicked","rowClicked","actionMenuClick","menuValue","trigger","closeMenu","actionMenuTriggerClick","checkEdit","ele","editDisableFunction","checkView","viewDisableFunction","checkPrint","printDisableFunction","checkActions","actionsMenuFunction","checkActionButton","actionsMenuButtonFunction","getValue","keyString","keyList","replace","split","ngOnDestroy","Input","Output","ViewChild","MatSort","static","UntilDestroy","DocumentViewerComponent","remove","initData","removeFile","file","ext","getFileExtension","viewerType","nameArray","LogLevel","Logger","source","enableProductionMode","level","Warning","debug","objects","_i","log","console","Debug","info","Info","warn","Error","func","outputs","output","TechlifyConfig","projectKey","environment","authClientSecret","authGrantType","apiUrl","isLogoutWhileApiGetsFailed","loadFromMap","storage","rawConfigs","ConfigService","getConfigsRaw","getProjectKey","getApiUrl","getAuthClientSecret","getStorage","localStorage","getAuthGrantType","getCredentialsKey","BASE_CREDENTIALS","Injectable","providedIn","MAT_SNACK_BAR_DATA","AlertService","snackBar","addAlert","message","alertType","duration","openFromComponent","SuccessSnackComponent","ErrorSnackComponent","MatSnackBar","ErrorHandlerService","alerter","handleError","errorResponse","msg","errors","_a","property","_b","_c","_d","errMessage","status","sessionStorage","location","reload","ErrorHandlerInterceptor","configService","errorHandler","intercept","request","handle","catchError","ErrorEvent","throwError","HttpCacheService","cachedData","cachePersistenceKey","loadCacheData","setCacheData","url","lastUpdated","Date","saveCacheData","getCacheData","cacheEntry","getHttpCacheEntry","clearCache","cleanCache","expirationDate","keys","setPersistence","persistence","JSON","stringify","parse","CacheInterceptor","httpCacheService","forceUpdate","configure","options","instance","update","method","Observable","subscriber","urlWithParams","HttpResponse","complete","ApiPrefixInterceptor","test","clone","CredentialsService","_credentials","credentials","getItem","setCredentials","remember","setItem","getAccessToken","expiration","token","expires_in","access_token","now","parseInt","getExpiration","getRefreshToken","refresh_token","refresh","TokenInterceptor","setHeaders","Authorization","HeaderInterceptor","Content-Type","headers","get","HttpInterceptorHandler","interceptor","HTTP_DYNAMIC_INTERCEPTORS","InjectionToken","HttpService","httpHandler","injector","interceptors","_super","cache","cacheInterceptor","addInterceptor","skipErrorHandler","removeInterceptor","skipApiPrefix","skipToken","skipHeader","handler","reduceRight","HttpClient","interceptorType","filter","HttpHandler","Injector","Optional","EntityFileService","http","getEntityFiles","filters","params","toPromise","createEntityFile","model","post","updateEntityFile","put","id","deleteEntityFile","delete","uploadEntityFile","formData","FormData","append","name","entity_id","entity_type","FormValidatorService","isFieldValid","field","formGroup","firstAttempt","valid","touched","untouched","getErrorMessage","errorMessages","errorField","required","EntityFileFormComponent","formValidatorService","fb","entityFileService","alertService","fileList","createForm","entityFileGroup","group","title","details","Validators","file_size","entity","setValue","updateMode","patchValue","hideTitleAndDetails","fileConfig","fileId","containerId","styles","height","multiple","acceptFile","maxSize","acceptFileText","viewerConfig","viewerStyle","width","submit","assignmentFileFirstAttempt","item","fileChanged","FormBuilder","EntityFilesViewAllComponent","dialog","viewOnly","allowMultipleFiles","entityFiles","displayedColumns","isWorking","search","FormControl","imageStyle","hideRemove","x","entityType","entityId","valueChanges","debounceTime","distinctUntilChanged","fetchEntityFilesDetails","last_page","addEntityFile","open","autoFocus","restoreFocus","afterClosed","files","editEntityFile","resetFieldValue","sizeOf","bytes","Math","floor","pow","toFixed","charAt","Location","MatDialog","FileDropperComponent","fileArray","border","isSingleMode","Boolean","dragEnter","style","background","dragColor","preventDefault","dragOver","dragLeave","dropEvent","droppedFiles","dataTransfer","from","addFiles","onFileChange","document","getElementById","fileSizeAllowed","sortFiles","a","nameA","toUpperCase","nameB","size","clickEvent","click","NoteService","getNotes","filterModel","addNote","note","editNote","deleteNote","NoteFormComponent","noteService","noteFormGroup","compose","model_type","related_model_id","noteFormFirstAttempt","labelText","cancel","NoteListComponent","readonly","commentsView","notes","sort_by","relatedModelId","modelType","loadData","assign","current_page","resetScroll","commentAction","editComment","addComment","comment","index","findIndex","CommentFormComponent","credentialService","view","_commentData","commentFormGroup","isAuthenticated","user","reset","deleteComment","hideEdit","SearchableSelectorComponent","SearchableSelectorComponent_1","formBuilder","_focusMonitor","_elementRef","ngControl","valueField","titleField","selectedValueChange","enableSearch","add","edit","items","apiDataProperty","inDataSearch","selectionChange","itemsChange","isLoading","onChange","onTouched","stateChanges","Subject","focused","controlType","describedBy","cachedItems","_required","_disabled","selectorForm","select_value","monitor","origin","valueAccessor","empty","setValidators","coerceBooleanProperty","disable","enable","openedChange","dataItems","selectedValue","sortBy","fetchItemList","of","startWith","switchMap","finalize","setDescribedByIds","ids","join","onContainerClick","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","getPropertyValue","_handleInput","map","find","invalid","dirty","reloadData","searchField","filterItems","toLowerCase","addItem","itemComponent","addConfig","editItem","editConfig","stopMonitoring","providers","provide","MatFormFieldControl","useExisting","FocusMonitor","ElementRef","NgControl","Self","MatSelectInfiniteScrollDirective","matSelect","ngZone","threshold","infiniteScroll","thrPx","thrPc","singleOptionHeight","SELECT_ITEM_HEIGHT_EM","destroyed$","evaluateThreshold","takeUntil","opened","panel","nativeElement","getSelectItemHeightPx","registerScrollListener","lastIndexOf","parseFloat","fromEvent","tap","handleScrollEvent","runOutsideAngular","countOfRenderedOptions","infiniteScrollDistance","clientHeight","scrollTop","run","getComputedStyle","fontSize","Directive","MatSelect","NgZone","NumItemsSelector","numItemsChange","numItemsChanged","numItems","DateUtils","getYYYYMMDDString","inputDate","getFullYear","getMonth","getDate","getYYYY","getMM","getDateTime","toLocaleTimeString","NumberSelector","numChanged","start_value","end_value","Timeline","CUSTOM","TODAY","YESTERDAY","THIS_WEEK","LAST_WEEK","THIS_MONTH","LAST_MONTH","THIS_QUARTER","LAST_QUARTER","THIS_YEAR","LAST_YEAR","ALL","TOMMOROW","NEXT_WEEK","NEXT_MONTH","moment","moment_","calculateTimeline","date","date_from","date_to","show_custom_field","startOf","toISOString","endOf","subtract","TimelineFilterComponent","TimelineFilterComponent_1","datePipe","timelineValue","timelines","viewValue","dateFrom","dateTo","appearance","showClearbutton","form","touchUi","showCustomDateFields","changeTimeline","getDateRangeString","str","selectedRange","toUTCString","transform","_e","_g","_f","getFieldValue","setFieldValue","timeline","range","picker","dateRangeChange","dateRangeStart","dateRangeEnd","onCustomDateChange","DatePipe","LoaderComponent","NgModule","declarations","imports","CommonModule","MatSnackBarModule","MatIconModule","exports","AuthenticationGuard","router","credentialsService","canActivate","route","state","isUserAuthenticated","canLoad","navigate","queryParams","redirect","replaceUrl","Router","AuthenticationService","login","context","concatMap","tokenInfo","userInfo","logout","RouteReusableStrategy","shouldDetach","store","detachedTree","shouldAttach","retrieve","shouldReuseRoute","future","curr","routeConfig","component","RouteReuseStrategy","StorageService","storageSub","watch","asObservable","removeItem","DataManager","GET","urlq","POST","object","blank","POSTRAW","PUT","PATCH","patch","DELETE","MatButtonModule","MatCheckboxModule","MatCommonModule","MatDialogModule","MatFormFieldModule","MatInputModule","MatLineModule","MatMenuModule","MatNativeDateModule","MatOptionModule","MatProgressSpinnerModule","MatPseudoCheckboxModule","MatRippleModule","MatSelectModule","MatSortModule","MatTableModule","MatCardModule","MatDividerModule","MatChipsModule","MatDatepickerModule","MatListModule","MatTooltipModule","MatButtonToggleModule","parentModule","HttpClientModule","RouterModule","SnackModule","useClass","CoreModule","SkipSelf","FlexLayoutModule","MaterialModule","entryComponents","InfiniteScrollModule","NgxDocViewerModule","FormsModule","ReactiveFormsModule","FileDropperModule","DocumentViewerModule","ActionPopupModule","ReadMoreComponent","maxLength","hideToggle","isCollapsed","determineView","toggleView","text","currentText","substring","ReadMoreModule","forChild","TimelineFilterRoutingModule","EmailSubscriptionRoutingModule","EmailSubscriptionUserRoutingModule","user_id","email_type_id","EmailSubscriptionUserFormComponent","esUserFormGroup","esUser","selectedType","email_type","selectedUser","markAllAsTouched","esUserFormFirstAttempt","isSubmitLoading","SearchableSelectorModule","EmailSubscriptionUserFormRoutingModule","LoaderModule","EmailSubscriptionUserListComponent","esUserList","pageEvent","displayColumns","availableDisplayColumns","order","initializeData","changeSort","col","some","columnsChange","selectedColumns","filterChange","addEmailSubscriptionUser","editEmailSubscriptionUser","deleteEmailSubscriptionUser","direction","active","esulr","permissions","only","redirectTo","routes","path","EmailSubscriptionUserListFilterComponent","valueChange","esUserFilterForm","EmailSubscriptionUserListFilterRoutingModule","EmailSubscriptionUserListRoutingModule","EmailSubscriptionUserFormModule","EmailSubscriptionUserListFilterModule","EmailSubscriptionTypeRoutingModule","code","frequency_id","EmailSubscriptionTypeFormComponent","emailSubscriptionTypeFormGroup","description","emailSubscriptionType","selectedFrequency","frequency","emailSubscriptionTypeFormFirstAttempt","EmailSubscriptionTypeFormRoutingModule","EmailSubscriptionTypeListComponent","emailSubscriptionTypeList","isLoadRelations","relations","addEmailSubscriptionType","editEmailSubscriptionType","deleteEmailSubscriptionType","estlr","EmailSubscriptionTypeFormModule","EmailSubscriptionTypeListRoutingModule","EmailSubscriptionForUserComponent","subscriptions","fetchSubscriptions","sub","current_user_subscription","unsubscribe","esfur","EmailSubscriptionForUserRoutingModule","TechlifyUpdateService","getTechlifyUpdates","createTechlifyUpdate","techlifyUpdate","updateTechlifyUpdate","deleteTechlifyUpdate","techlifyUpdateId","getTechlifyUpdate","getNewUpdateForCurrentUser","createUpdateViewRecord","techlifyUpdateView","updateCurrentUserUpdates","released_on","version","learn_more_link","pattern","TechlifyUpdateFormComponent","techlifyUpdateService","onSave","isUpdateMode","toolbar","techlifyUpdateForm","techlifyUpdateDetails","editor","Editor","NgxEditorModule","TechlifyUpdatesListComponent","techlifyUpdates","filterFormGroup","listenChanges","modifyTechlifyUpdate","sortColumn","toString","assignFilter","column","pathMatch","TechlifyUpdateRoutingModule","TechlifyUpdateFormModule","UpdateViewComponent","rootNavUrl","openUpdateHistory","TechlifyUpdateHistoryComponent","openUpdateView","isFromHistory","TechlifyUpdateHistoryRoutingModule","UpdateNotifierSnackComponent","snackBarRef","maxDescriptionLength","descriptionText","determineDescription","dismiss","update_id","MatSnackBarRef","UpdateNotifierComponent","setTimeout","getNewUpdate","showUpdate","horizontalPosition","verticalPosition","panelClass","UpdateViewModule","ExportExcelButtonComponent","exportExcel","fileName","getTime","ws","XLSX.utils","json_to_sheet","wb","book_new","book_append_sheet","XLSX.writeFile","AuditLogViewModelComponent","showDeltaChanges","changeList","model_id","modelId","logInfo","getTransformedChanges","displayAttribute","slice","attribute","newValue","oldValue","pre_object","AuditLogsViewModelComponent","events","NavigationEnd","AuditLogForModelComponent","logView","getLogView","getLogsView","maxWidth","AuditLogViewModelRoutingModule","AuditLogListComponent","dataManager","sanitizer","auditLogList","showFilter","showExportButtons","Type","object_type","Action","Data","Pre-Object","Created At","created_at","toDateString","Created By","email","logClicked","objectType","objectId","object_id","userId","value_1","DomSanitizer","DateValidator","control","val","invalidDate","AuditLogListFilterComponent","auditLogFilterForm","AuditLogListFilterRoutingModule","AuditLogListRoutingModule","ExportExcelModule","AuditLogListFilterModule","AuditLogsViewModelRoutingModule","AuditLogListModule","AuditLogViewModelModule","AuditLogsViewModelModule","AuditLogForModelRoutingModule","AuditLogViewComponent","paramMap","fetchLogDetail","back","logId","patchDelta","delta","jsondiffpatch.diff","innerHTML","jsondiffpatch.formatters","html","format","ActivatedRoute","AuditLogViewRoutingModule","AuditLogRoutingModule","AuditLogViewModule","ImportSuccessComponent","ImportHistoryListComponent","histories","importHistory","isEnabled","unavailable","FieldMappingComponent","changeDetectorRef","firstDataArray","properties","onReUpload","createImportMappingForm","reFectorAttributes","importMappingForm","fields","array","createField","propertyType","k","dataValue","mainIndex","includes","fieldsArray","detectChanges","updatePropertyType","controls","uniqueValidator","propertyData","setErrors","removeField","removeAt","reUpload","ChangeDetectorRef","FailedItemsListComponent","isValidDate","isNaN","ImportCsvComponent","filesList","isUploaded","isImportTypeSelected","fileData","failedItems","selectedFields","importSteps","progressTitle","progressDescription","currentStep","filesConfig","selectedFile","jsonData","reader","FileReader","onload","XLSX.read","cellDates","SheetNames","reduce","initial","sheet","Sheets","sheet_to_json","header","defval","readAsBinaryString","mappingProcessed","tempFileData","save","failed_items","DataImportComponent","LoginHistoryForUserComponent","loginHistoryList","historyFilterForm","onTimelineChange","LoginHistoryForUserRoutingModule","TimelineFilterModule","selectable","removable","separatorKeysCodes","ENTER","COMMA","placeholder","createApiUrl","isCreateable","isCacheTags","isSingle","TechlifyTaggerTagFormFieldComponent","TechlifyTaggerTagFormFieldComponent_1","httpService","_formField","tagInputCtrl","TechlifyTaggerTagFormConfigModel","_allTags","categories","_value","filterValue","filterString","allTags","tagIds","_placeholder","init","_filter","trim","tags","tag","category_title","defaultCreateCategory","input","option","tagInput","availableTags","MatFormField","MAT_FORM_FIELD","MatAutocompleteModule","TechlifyTaggerTagSelectorComponent","TechlifyTaggerTagSelectorComponent_1","tagSelectorCtrl","showAllTags","useSelectButtonStyle","res","TechlifyFeatureService","getFeatures","disableFeature","enableFeature","TechlifyFeatureListingComponent","featureService","features","num_items","listenForChanges","setStorage","error_1","toggeleFeature","feature","error_2","localFeatures","features_1","features_1_1","client_feature","is_enabled","is_enabled_default","TechlifyFeatureRoutes","OnOffSwitchComponent","slideToggle","toggle","TechlifyFeatureEnabledDirective","el","checkForFeatureEnabled","enabledFeature","display","MatSlideToggleModule"],"mappings":"spHAAA,0BCWE,SAAAA,EACSC,EACyBC,GADzBC,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,SAGlCF,EAAAI,UAAAC,SAAA,aAIAL,EAAAI,UAAAE,YAAA,WACEH,KAAKF,UAAUM,SAKjBP,EAAAI,UAAAI,QAAA,WACEL,KAAKF,UAAUM,MAAMJ,KAAKD,gCAvB7BO,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mBACVC,SAAA,2wBALOC,EAAAA,oBACAC,EAAWC,WAAA,CAAA,CAAAC,KAWfC,EAAAA,OAAMP,KAAA,CAACQ,EAAAA;;;;;;;;;;;;;;;ACGZ,IAAIC,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOC,OAAOlB,UAAUuB,eAAeC,KAAKP,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,MAC3EN,EAAGC,aAGZQ,EAAUT,EAAGC,GACzB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIS,UAAU,uBAAyBC,OAAOV,GAAK,iCAE7D,SAASW,IAAO7B,KAAK8B,YAAcb,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEhB,UAAkB,OAANiB,EAAaC,OAAOY,OAAOb,IAAMW,EAAG5B,UAAYiB,EAAEjB,UAAW,IAAI4B,YA0BnEG,EAAWpB,EAAYqB,EAAQC,EAAKC,GAChD,IAA2HlB,EAAvHmB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOhB,OAAOqB,yBAAyBP,EAAQC,GAAOC,EACrH,GAAuB,iBAAZM,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAS9B,EAAYqB,EAAQC,EAAKC,QACpH,IAAK,IAAIQ,EAAI/B,EAAW0B,OAAS,EAAGK,GAAK,EAAGA,KAAS1B,EAAIL,EAAW+B,MAAIJ,GAAKH,EAAI,EAAInB,EAAEsB,GAAKH,EAAI,EAAInB,EAAEgB,EAAQC,EAAKK,GAAKtB,EAAEgB,EAAQC,KAASK,GAChJ,OAAOH,EAAI,GAAKG,GAAKpB,OAAOyB,eAAeX,EAAQC,EAAKK,GAAIA,WAWhDM,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,IAAW,MAAOG,GAAKL,EAAOK,IACpF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,IAAW,MAAOG,GAAKL,EAAOK,IACvF,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,OAITO,KAAKR,EAAWK,GAClGH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,oBAItDO,EAAYjB,EAASkB,GACjC,IAAsGC,EAAGC,EAAGC,EAAGC,EAA3GC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPJ,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOK,KAAM,GAAIC,IAAK,IAChG,OAAOL,EAAI,CAAEZ,KAAMkB,EAAK,GAAIC,MAASD,EAAK,GAAIE,OAAUF,EAAK,IAAwB,mBAAXG,SAA0BT,EAAES,OAAOC,UAAY,WAAa,OAAO9E,OAAUoE,EACvJ,SAASM,EAAKK,GAAK,OAAO,SAAUC,GAAK,OACzC,SAAcC,GACV,GAAIhB,EAAG,MAAM,IAAItC,UAAU,mCAC3B,KAAO0C,OACH,GAAIJ,EAAI,EAAGC,IAAMC,EAAY,EAARc,EAAG,GAASf,EAAU,OAAIe,EAAG,GAAKf,EAAS,SAAOC,EAAID,EAAU,SAAMC,EAAE1C,KAAKyC,GAAI,GAAKA,EAAEV,SAAWW,EAAIA,EAAE1C,KAAKyC,EAAGe,EAAG,KAAKrB,KAAM,OAAOO,EAE3J,OADID,EAAI,EAAGC,IAAGc,EAAK,CAAS,EAARA,EAAG,GAAQd,EAAEb,QACzB2B,EAAG,IACP,KAAK,EAAG,KAAK,EAAGd,EAAIc,EAAI,MACxB,KAAK,EAAc,OAAXZ,EAAEC,QAAgB,CAAEhB,MAAO2B,EAAG,GAAIrB,MAAM,GAChD,KAAK,EAAGS,EAAEC,QAASJ,EAAIe,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKZ,EAAEI,IAAIS,MAAOb,EAAEG,KAAKU,MAAO,SACxC,QACI,KAAMf,EAAIE,EAAEG,MAAML,EAAIA,EAAE7B,OAAS,GAAK6B,EAAEA,EAAE7B,OAAS,KAAkB,IAAV2C,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEZ,EAAI,EAAG,SACjG,GAAc,IAAVY,EAAG,MAAcd,GAAMc,EAAG,GAAKd,EAAE,IAAMc,EAAG,GAAKd,EAAE,IAAM,CAAEE,EAAEC,MAAQW,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYZ,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIA,EAAIc,EAAI,MAC7D,GAAId,GAAKE,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIE,EAAEI,IAAIU,KAAKF,GAAK,MACvDd,EAAE,IAAIE,EAAEI,IAAIS,MAChBb,EAAEG,KAAKU,MAAO,SAEtBD,EAAKjB,EAAKvC,KAAKqB,EAASuB,GAC1B,MAAOZ,GAAKwB,EAAK,CAAC,EAAGxB,GAAIS,EAAI,UAAeD,EAAIE,EAAI,EACtD,GAAY,EAARc,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAE3B,MAAO2B,EAAG,GAAKA,EAAG,QAAK,EAAQrB,MAAM,GArB9BL,CAAK,CAACwB,EAAGC,MAyBhC7D,OAAOY,gBAYpBqD,EAASC,GACrB,IAAIC,EAAsB,mBAAXT,QAAyBA,OAAOC,SAAUS,EAAID,GAAKD,EAAEC,GAAI3C,EAAI,EAC5E,GAAI4C,EAAG,OAAOA,EAAE9D,KAAK4D,GACrB,GAAIA,GAAyB,iBAAbA,EAAE/C,OAAqB,MAAO,CAC1CkB,KAAM,WAEF,OADI6B,GAAK1C,GAAK0C,EAAE/C,SAAQ+C,OAAI,GACrB,CAAE/B,MAAO+B,GAAKA,EAAE1C,KAAMiB,MAAOyB,KAG5C,MAAM,IAAI1D,UAAU2D,EAAI,0BAA4B,4CAGxCE,EAAOH,EAAGN,GACtB,IAAIQ,EAAsB,mBAAXV,QAAyBQ,EAAER,OAAOC,UACjD,IAAKS,EAAG,OAAOF,EACf,IAAmB9C,EAAYkB,EAA3Bd,EAAI4C,EAAE9D,KAAK4D,GAAOI,EAAK,GAC3B,IACI,WAAc,IAANV,GAAgBA,KAAM,MAAQxC,EAAII,EAAEa,QAAQI,MAAM6B,EAAGN,KAAK5C,EAAEe,OAExE,MAAOoC,GAASjC,EAAI,CAAEiC,MAAOA,WAEzB,IACQnD,IAAMA,EAAEqB,OAAS2B,EAAI5C,EAAU,SAAI4C,EAAE9D,KAAKkB,WAExC,GAAIc,EAAG,MAAMA,EAAEiC,OAE7B,OAAOD,WAIKE,IACZ,IAAK,IAAIF,EAAK,GAAI9C,EAAI,EAAGA,EAAIN,UAAUC,OAAQK,IAC3C8C,EAAKA,EAAGG,OAAOJ,EAAOnD,UAAUM,KACpC,OAAO8C,EAqDX,OAAyBtE,OAAOY,OCpLnB8D,EAAAA,GAAkBC,GAAA,WA4B7B,SAAAD,IApBA7F,KAAA+F,WAAsC,IAAIC,EAAAA,mBAAmB,IAInDhG,KAAAiG,OAAS,IAAIC,EAAAA,aACblG,KAAAmG,eAAiB,IAAID,EAAAA,aACrBlG,KAAAoG,SAAW,IAAIF,EAAAA,aACflG,KAAAqG,YAAc,IAAIH,EAAAA,aAClBlG,KAAAsG,YAAc,IAAIJ,EAAAA,aAUnBlG,KAAAuG,UAAoB,cAAcT,GAAmBU,gBAI9DX,EAAA5F,UAAAC,SAAA,aAGA2F,EAAA5F,UAAAwG,gBAAA,WAAA,IAAAC,EAAA1G,KAEEA,KAAK+F,WAAa,IAAIC,EAAAA,mBAAmBhG,KAAKD,MAG1CC,KAAK2G,WACP3G,KAAK2G,UAAUC,QAAQC,OAAOC,WAAU,SAACC,GACnCL,EAAKC,UAAUK,UACjBN,EAAKP,eAAec,KAAKP,EAAKC,UAAUK,aAK1ChH,KAAKkH,MACPlH,KAAKkH,KAAKC,WAAWN,KAAKO,EAAAA,eAAepH,OACtC8G,WAAU,SAACxD,GACVoD,EAAKJ,YAAYW,KAAK3D,OAM9BuC,EAAA5F,UAAAoH,cAAA,WAGE,OAFoBrH,KAAK2G,UAAUK,SAAS1E,SAC5BtC,KAAK+F,WAAWhG,KAAKuC,QAKvCuD,EAAA5F,UAAAqH,aAAA,WAAA,IAAAZ,EAAA1G,KACEA,KAAKqH,gBACDrH,KAAKuH,iBACLvH,KAAK+F,WAAWhG,KAAKyH,SAAQ,SAAAC,GAAO,OAAAf,EAAKC,UAAUe,OAAOD,OAIhE5B,EAAA5F,UAAAsH,eAAA,WACEvH,KAAK2G,UAAUgB,QACf3H,KAAKmG,eAAec,KAAKjH,KAAK2G,UAAUK,WAG1CnB,EAAA5F,UAAA2H,YAAA,SAAYC,GACV7H,KAAK8H,iBAAiBD,GAClBA,EAAQ9H,OAAS8H,EAAQ9H,KAAKgI,iBAAmB/H,KAAK+F,aAExD/F,KAAK+F,WAAWhG,KAAO8H,EAAQ9H,KAAKiI,eAIxCnC,EAAA5F,UAAA6H,iBAAA,SAAiBD,GACXA,EAAQI,SAAWJ,EAAQI,OAAOF,kBACpC/H,KAAKiI,OAASJ,EAAQI,OAAOD,cAE/BhI,KAAKkI,KAAOlI,KAAKiI,OAAOC,MAAQ,EAChClI,KAAKmI,SAAWnI,KAAKiI,OAAOE,UAAYnI,KAAKkI,KAC7ClI,KAAKoI,QAAUpI,KAAKiI,OAAOG,SAAW,IAGxCvC,EAAA5F,UAAAoI,SAAA,WACMrI,KAAKkI,KAAOlI,KAAKmI,WACnBnI,KAAKkI,MAAQ,EACblI,KAAKqG,YAAYY,KAAK,CAAEiB,KAAMlI,KAAKkI,KAAMC,SAAUnI,KAAKmI,SAAUC,QAASpI,KAAKoI,YAKpFvC,EAAA5F,UAAAqI,YAAA,SAAYC,EAAYC,GACtBxI,KAAKiG,OAAOgB,KAAK,CAAEhB,OAAQ,OAAQ3C,MAAOkF,IAC1CD,EAAME,mBAIR5C,EAAA5F,UAAAyI,YAAA,SAAYH,EAAYC,GACtBxI,KAAKiG,OAAOgB,KAAK,CAAEhB,OAAQ,OAAQ3C,MAAOkF,IAC1CD,EAAME,mBAIR5C,EAAA5F,UAAA0I,kBAAA,SAAkBJ,EAAYC,GAC5BxI,KAAKiG,OAAOgB,KAAK,CAAEhB,OAAQ,aAAc3C,MAAOkF,IAChDD,EAAME,mBAIR5C,EAAA5F,UAAA2I,gBAAA,SAAgBL,EAAYC,GAC1BxI,KAAKiG,OAAOgB,KAAK,CAAEhB,OAAQ,WAAY3C,MAAOkF,IAC9CD,EAAME,mBAIR5C,EAAA5F,UAAA4I,aAAA,SAAaN,EAAYC,GAEvBxI,KAAKiG,OAAOgB,KAAK,CAAEhB,OAAQ,QAAS3C,MAAOkF,IAC3CD,EAAME,mBAKR5C,EAAA5F,UAAA6I,WAAA,SAAWP,EAAYC,GACrBxI,KAAKoG,SAASa,KAAKuB,GACnBD,EAAME,mBAIR5C,EAAA5F,UAAA8I,gBAAA,SAAgBR,EAAYC,EAAcQ,GACxChJ,KAAKiG,OAAOgB,KAAK,CAAEhB,OAAQ+C,EAAW1F,MAAOkF,IAC7CxI,KAAKiJ,QAAQC,YACbX,EAAME,mBAIR5C,EAAA5F,UAAAkJ,uBAAA,SAAuBZ,EAAYU,GACjCjJ,KAAKiJ,QAAUA,EACfV,EAAME,mBAGR5C,EAAA5F,UAAAmJ,UAAA,SAAUC,GACR,OAAIrJ,KAAKiI,OAAOqB,qBACPtJ,KAAKiI,OAAOqB,oBAAoBD,IAM3CxD,EAAA5F,UAAAsJ,UAAA,SAAUF,GACR,OAAIrJ,KAAKiI,OAAOuB,qBACPxJ,KAAKiI,OAAOuB,oBAAoBH,IAM3CxD,EAAA5F,UAAAwJ,WAAA,SAAWJ,GACT,OAAIrJ,KAAKiI,OAAOyB,sBACP1J,KAAKiI,OAAOyB,qBAAqBL,IAM5CxD,EAAA5F,UAAA0J,aAAA,SAAaN,GACX,OAAIrJ,KAAKiI,OAAO2B,qBACP5J,KAAKiI,OAAO2B,oBAAoBP,IAM3CxD,EAAA5F,UAAA4J,kBAAA,SAAkBR,EAAU/F,GAC1B,OAAItD,KAAKiI,OAAO6B,2BACP9J,KAAKiI,OAAO6B,0BAA0BT,EAAK/F,IAKtDuC,EAAA5F,UAAA8J,SAAA,SAASV,EAAUW,GAIjB,IADA,IAAMC,GADND,GADAA,EAAYA,EAAUE,QAAQ,aAAc,QACtBA,QAAQ,MAAO,KACXC,MAAM,KACvBxH,EAAI,EAAGoC,EAAIkF,EAAQ3H,OAAQK,EAAIoC,IAAKpC,EAAG,CAC9C,IAAMT,EAAM+H,EAAQtH,GACpB,IAAI0G,KAAOnH,KAAOmH,GAGhB,OAFAA,EAAMA,EAAInH,GAKd,OAAOmH,GAGTxD,EAAA5F,UAAAmK,YAAA,eA3M6B,GAyBtBvE,EAAAA,GAAAA,OAAS,yBA9BjBvF,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,iBACVC,SAAA,q4OAOC4J,EAAAA,sBAEAA,EAAAA,yBAIAA,EAAAA,sBAEAC,EAAAA,+BACAA,EAAAA,yBACAA,EAAAA,4BACAA,EAAAA,4BACAA,EAAAA,qBAOAC,EAAAA,UAAShK,KAAA,CAACiK,EAAAA,QAAS,CAAEC,QAAQ,uBAG7BJ,EAAAA,SA1BUxE,EAAAA,GAAkBC,GAAA9D,EAAA,CAN9B0I,EAAAA,gBAMY7E,EAAAA,WCzBb,gBA4CA,2BCtBE,SAAA8E,IAHU3K,KAAA4K,OAAS,IAAI1E,EAAAA,oBAKvByE,EAAA1K,UAAAC,SAAA,WACEF,KAAK6K,YAGPF,EAAA1K,UAAA6K,WAAA,WACE9K,KAAK4K,OAAO3D,QAGd0D,EAAA1K,UAAA4K,SAAA,WACE,GAAI7K,KAAK+K,KAAM,CACb,IAAIC,EAAMhL,KAAKiL,iBAAiBjL,KAAK+K,MAEnC/K,KAAKkL,WADK,QAARF,GAAyB,SAARA,GAA0B,QAARA,GAAyB,SAARA,GAA0B,QAARA,GAAyB,SAARA,EACvE,SAEH,QAARA,GAAyB,SAARA,GAA0B,QAARA,GAAyB,QAARA,EACzC,QAEH,QAARA,EACW,MAGA,OAKxB7J,OAAAyB,eAAI+H,EAAA1K,UAAA,WAAQ,KAAZ,WACE,GAAID,KAAK+K,KAAM,CACb,IAAII,EAAYnL,KAAK+K,KAAKZ,MAAM,KAChC,OAAyB,IAArBgB,EAAU7I,OACL6I,EAAU,GAEZA,EAAU,GAEnB,MAAO,oCAGTR,EAAA1K,UAAAgL,iBAAA,SAAiBF,GACf,OAAOA,EAAKZ,MAAM,KAAKjF,iCA3D1B5E,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,sBACVC,SAAA,29BAMC4J,EAAAA,oBAEAA,EAAAA,uBAEAA,EAAAA,2BAEAA,EAAAA,sBAEAC,EAAAA,cCiBSc,MCpCZ,cDoCYA,GAAAA,EAAAA,WAAAA,EAAAA,SAAQ,KAClBA,GAAA,IAAA,GAAA,MACAA,GAAAA,GAAA,MAAA,GAAA,QACAA,GAAAA,GAAA,QAAA,GAAA,UACAA,GAAAA,GAAA,KAAA,GAAA,OACAA,GAAAA,GAAA,MAAA,GAAA,0BA6BA,SAAAC,EAAoBC,GAAAtL,KAAAsL,OAAAA,SAJbD,EAAAE,qBAAP,WACEF,EAAOG,MAAQJ,EAAAA,SAASK,SAS1BJ,EAAApL,UAAAyL,MAAA,eAAM,IAAAC,EAAA,GAAAC,EAAA,EAAAA,EAAAvJ,UAAAC,OAAAsJ,IAAAD,EAAAC,GAAAvJ,UAAAuJ,GACJ5L,KAAK6L,IAAIC,QAAQD,IAAKT,EAAAA,SAASW,MAAOJ,IAOxCN,EAAApL,UAAA+L,KAAA,eAAK,IAAAL,EAAA,GAAAC,EAAA,EAAAA,EAAAvJ,UAAAC,OAAAsJ,IAAAD,EAAAC,GAAAvJ,UAAAuJ,GACH5L,KAAK6L,IAAIC,QAAQE,KAAMZ,EAAAA,SAASa,KAAMN,IAOxCN,EAAApL,UAAAiM,KAAA,eAAK,IAAAP,EAAA,GAAAC,EAAA,EAAAA,EAAAvJ,UAAAC,OAAAsJ,IAAAD,EAAAC,GAAAvJ,UAAAuJ,GACH5L,KAAK6L,IAAIC,QAAQI,KAAMd,EAAAA,SAASK,QAASE,IAO3CN,EAAApL,UAAAyF,MAAA,eAAM,IAAAiG,EAAA,GAAAC,EAAA,EAAAA,EAAAvJ,UAAAC,OAAAsJ,IAAAD,EAAAC,GAAAvJ,UAAAuJ,GACJ5L,KAAK6L,IAAIC,QAAQpG,MAAO0F,EAAAA,SAASe,MAAOR,IAGlCN,EAAApL,UAAA4L,IAAA,SAAIO,EAAgCZ,EAAiBG,GAArD,IAAAjF,EAAA1G,KACN,GAAIwL,GAASH,EAAOG,MAAO,CACzB,IAAMK,EAAM7L,KAAKsL,OAAS,CAAC,IAAMtL,KAAKsL,OAAS,KAAK1F,OAAO+F,GAAWA,EACtES,EAAKtI,MAAMgI,QAASD,GACpBR,EAAOgB,QAAQ7E,SAAQ,SAAA8E,GAAU,OAAAA,EAAOxI,MAAMwI,EAAM3G,EAAA,CAAGe,EAAK4E,OAAQE,GAAUG,cArD3EN,GAAAG,MAAQJ,EAAAA,SAASW,MAKjBV,GAAAgB,QAAuB,qBE5C5B,SAAAE,EAAYxM,GATZC,KAAAwM,WAAqB,GACrBxM,KAAAyM,YAAsB,GACtBzM,KAAA0M,iBAA2B,GAC3B1M,KAAA2M,cAAwB,GACxB3M,KAAA4M,OAAiB,GAGjB5M,KAAA6M,4BAAsC,EAGlC7M,KAAK8M,YAAY/M,UAGrBwM,EAAAtM,UAAA6M,YAAA,SAAY/M,GACRC,KAAKwM,WAAazM,EAAKyM,WACvBxM,KAAKyM,YAAc1M,EAAK0M,YACxBzM,KAAK0M,iBAAmB3M,EAAK2M,iBAC7B1M,KAAK2M,cAAgB5M,EAAK4M,cAC1B3M,KAAK4M,OAAS7M,EAAK6M,OACnB5M,KAAK+M,QAAUhN,MAAAA,OAAI,EAAJA,EAAMgN,QACrB/M,KAAKgN,WAAajN,EAClBC,KAAK6M,2BAA6B9M,MAAAA,OAAI,EAAJA,EAAM8M,+CCT9C,SAAAI,EAAYhF,GACVjI,KAAKiI,OAASA,SAGhBgF,EAAAhN,UAAAiN,cAAA,WACE,OAAOlN,KAAKiI,OAAO+E,YAGrBC,EAAAhN,UAAAkN,cAAA,WACE,OAAOnN,KAAKiI,OAAOuE,YAGrBS,EAAAhN,UAAAmN,UAAA,WACE,OAAOpN,KAAKiI,OAAO2E,QAGrBK,EAAAhN,UAAAoN,oBAAA,WACE,OAAOrN,KAAKiI,OAAOyE,kBAGrBO,EAAAhN,UAAAqN,WAAA,WACE,OAAOtN,KAAKiI,OAAO8E,QAAU/M,KAAKiI,OAAO8E,QAAUQ,cAGrDN,EAAAhN,UAAAuN,iBAAA,WACE,OAAOxN,KAAKiI,OAAO0E,eAGrBM,EAAAhN,UAAAwN,kBAAA,WACE,OAAOzN,KAAKiI,OAAOuE,WAAa,IAAMS,EAAcS,uBAjCxCT,GAAAS,iBAAmB,iJALlCC,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDATLrB,aCOP,SAA+CxM,GAAAC,KAAAD,KAAAA,wBANhDO,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,oCACVC,SAAA,2dAIaK,EAAAA,OAAMP,KAAA,CAACsN,EAAAA,gCAQpB,SAA+C9N,GAAAC,KAAAD,KAAAA,wBANhDO,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,oCACVC,SAAA,2cAIaK,EAAAA,OAAMP,KAAA,CAACsN,EAAAA,2CCFlB,SAAAC,EAAmBC,GAAA/N,KAAA+N,SAAAA,SAEnBD,EAAA7N,UAAA+N,SAAA,SAASC,EAAiBC,EAAmBC,QAAA,IAAAA,IAAAA,EAAA,GACxB,WAAbD,EACAlO,KAAK+N,SAASK,kBAAkBC,GAAuB,CACnDF,SAAU,IAAOA,EACjBpO,KAAMkO,IAIVjO,KAAK+N,SAASK,kBAAkBE,GAAqB,CACjDH,SAAU,IAAOA,EACjBpO,KAAMkO,wJAjBrBN,EAAAA,WAAUpN,KAAA,CAAC,CACRqN,WAAY,qDAVPW,EAAAA,iCCeP,SAAAC,EAAoBC,EACVxG,GADUjI,KAAAyO,QAAAA,EACVzO,KAAAiI,OAAAA,SAIVuG,EAAAvO,UAAAyO,YAAA,SAAYC,EAAoBC,oBAAA,IAAAA,IAAAA,EAAA,IAE9B,IAAMC,EAAS,GAGf,GAAIF,MAAAA,OAAa,EAAbA,EAAejJ,MAAO,CAGxB,GAAwB,QAAxBoJ,EAAIH,MAAAA,OAAa,EAAbA,EAAejJ,aAAK,IAAAoJ,OAAA,EAAAA,EAAED,OAGxB,IAAK,IAAME,KAAYJ,EAAcjJ,MAAMmJ,OAAQ,CAEjD,GAA8B,QAA9BG,EAAIL,EAAcjJ,MAAMmJ,cAAM,IAAAG,OAAA,EAAAA,EAAExN,eAAeuN,IAGa,QAAtCE,EAAkBN,MAAAA,OAAa,EAAbA,EAAejJ,aAAK,IAAAuJ,OAAA,EAAAA,EAAEJ,OAAOE,IAGpDvH,SAAQ,SAAA9B,GAAS,OAAAmJ,EAAO1J,KAAKO,MAM5B,IAAlBmJ,EAAOvM,QAETuM,EAAO1J,KAAKwJ,EAAcjJ,MAAMuI,QAAUU,EAAcjJ,MAAMuI,QAA6B,QAAtBiB,EAAGP,EAAcjJ,aAAK,IAAAwJ,OAAA,EAAAA,EAAExJ,OAGjG,IAAIyJ,EAAaN,EAAOvM,OAASuM,EAAO,GAAKD,EAC7C5O,KAAKyO,QAAQT,SAAS,UAAYmB,EAAY,WAElB,KAAxBR,EAAcS,QAAiBpP,KAAKiI,OAAO4E,6BAC7CwC,eAAe1H,QACf4F,aAAa5F,QACb2H,SAASC,kKA9Cd5B,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAVLE,UAFAvB,MCQG,IAAIlB,GAAO,2BAAvB,kBAUE,SAAAmE,EAAoBC,EAAsCC,GAAtC1P,KAAAyP,cAAAA,EAAsCzP,KAAA0P,aAAAA,SAE1DF,EAAAvP,UAAA0P,UAAA,SAAUC,EAA2BpM,GAArC,IAAAkD,EAAA1G,KACE,OAAOwD,EAAKqM,OAAOD,GAAS/I,KAAKiJ,EAAAA,YAAW,SAAApK,GAAS,OAAAgB,EAAKgI,YAAYhJ,QAIhE8J,EAAAvP,UAAAyO,YAAA,SAAYhJ,WAElB,GAAIA,EAAMA,iBAAiBqK,WAEV,kBAAmC,QAAlBjB,EAAA9O,KAAKyP,qBAAa,IAAAX,OAAA,EAAAA,EAAE3B,iBAAe,KAAKzH,EAAMA,MAAMuI,YAC/E,CAEU,kBAAmC,QAAlBe,EAAAhP,KAAKyP,qBAAa,IAAAT,OAAA,EAAAA,EAAE7B,iBACpD,IACEnN,KAAK0P,aAAahB,YAAYhJ,EAAO,8DACrC,MAAOjC,GACPqI,QAAQD,IAAI,gCAAiCpI,IAGjD,OAAOuM,EAAAA,WAAWtK,2JA1BrBiI,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDATLX,UACAuB,MCDT,IAAM3C,GAAM,IAAIR,GAAO,kCAoBrB,SAAA4E,EAAoBR,GAAAzP,KAAAyP,cAAAA,EAJZzP,KAAAkQ,WAAiD,GAKvDlQ,KAAK+M,QAAU/M,KAAKyP,cAAcnC,aAClCtN,KAAKmQ,oBAAsBnQ,KAAKyP,cAActC,gBAAkB,cAChEnN,KAAKoQ,uBASPH,EAAAhQ,UAAAoQ,aAAA,SAAaC,EAAavQ,EAAyBwQ,GACjDvQ,KAAKkQ,WAAWI,GAAO,CACrBC,YAAaA,GAAe,IAAIC,KAChCzQ,KAAMA,GAER8L,GAAIH,MAAM,uBAAuB4E,EAAG,KACpCtQ,KAAKyQ,iBAQPR,EAAAhQ,UAAAyQ,aAAA,SAAaJ,GACX,IAAMK,EAAa3Q,KAAKkQ,WAAWI,GAEnC,OAAIK,GACF9E,GAAIH,MAAM,uBAAuB4E,EAAG,KAC7BK,EAAW5Q,MAGb,MAQTkQ,EAAAhQ,UAAA2Q,kBAAA,SAAkBN,GAChB,OAAOtQ,KAAKkQ,WAAWI,IAAQ,MAOjCL,EAAAhQ,UAAA4Q,WAAA,SAAWP,UACFtQ,KAAKkQ,WAAWI,GACvBzE,GAAIH,MAAM,2BAA2B4E,EAAG,KACxCtQ,KAAKyQ,iBAOPR,EAAAhQ,UAAA6Q,WAAA,SAAWC,GAAX,IAAArK,EAAA1G,KACM+Q,EACF5P,OAAOnB,KAAKkQ,YAAYc,KAAKxJ,SAAQ,SAACtF,SAChC6O,IAAsC,QAAxBjC,EAAIpI,EAAKwJ,WAAWhO,UAAI,IAAA4M,OAAA,EAAAA,EAAEyB,qBACnC7J,EAAKwJ,WAAWhO,MAI3BlC,KAAKkQ,WAAa,GAEpBlQ,KAAKyQ,iBASPR,EAAAhQ,UAAAgR,eAAA,SAAeC,GACblR,KAAK8Q,aACL9Q,KAAK+M,QAA0B,UAAhBmE,EAA0B3D,aAA+B,YAAhB2D,EAA4B7B,eAAiB,KACrGrP,KAAKoQ,iBAGCH,EAAAhQ,UAAAwQ,cAAA,WACFzQ,KAAK+M,UACP/M,KAAK+M,QAAQ/M,KAAKmQ,qBAAuBgB,KAAKC,UAAUpR,KAAKkQ,cAIzDD,EAAAhQ,UAAAmQ,cAAA,WACN,IAAMrQ,EAAOC,KAAK+M,QAAU/M,KAAK+M,QAAQ/M,KAAKmQ,qBAAuB,KACrEnQ,KAAKkQ,WAAanQ,EAAOoR,KAAKE,MAAMtR,GAAQ,4IAtG/C4N,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAfLX,wBCcP,SAAAqE,EAAoBC,GAAAvR,KAAAuR,iBAAAA,EAFZvR,KAAAwR,aAAc,SAStBF,EAAArR,UAAAwR,UAAA,SAAUC,GACR,IAAMC,EAAW,IAAIL,EAAiBtR,KAAKuR,kBAI3C,OAHIG,GAAWA,EAAQE,SACrBD,EAASH,aAAc,GAElBG,GAGTL,EAAArR,UAAA0P,UAAA,SAAUC,EAA2BpM,GAArC,IAAAkD,EAAA1G,KACE,MAAuB,QAAnB4P,EAAQiC,OACHrO,EAAKqM,OAAOD,GAGd,IAAIkC,EAAAA,YAAW,SAACC,GACrB,IAAM7B,EAAaxJ,EAAK8K,YAAc,KAAO9K,EAAK6K,iBAAiBb,aAAad,EAAQoC,eACrE,OAAf9B,GAEF6B,EAAWvO,KAAK,IAAIyO,EAAAA,aAAa/B,IACjC6B,EAAWG,YAEX1O,EAAKqM,OAAOD,GACT9I,WACC,SAAAyB,GACMA,aAAiB0J,EAAAA,cACnBvL,EAAK6K,iBAAiBlB,aAAaT,EAAQoC,cAAezJ,GAE5DwJ,EAAWvO,KAAK+E,MAElB,SAAA7C,GAAS,OAAAqM,EAAWrM,MAAMA,MAC1B,WAAM,OAAAqM,EAAWG,0JA3C5BvE,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDARLqC,wBCWP,SAAAkC,EAAoB1C,GAAAzP,KAAAyP,cAAAA,SAEpB0C,EAAAlS,UAAA0P,UAAA,SAAUC,EAA2BpM,GAInC,MAHK,kBAAkB4O,KAAKxC,EAAQU,OAClCV,EAAUA,EAAQyC,MAAM,CAAE/B,IAAKtQ,KAAKyP,cAAcrC,YAAcwC,EAAQU,OAEnE9M,EAAKqM,OAAOD,4IAXtBjC,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDANLX,wBCiBP,SAAAqF,EAAoB7C,GAAAzP,KAAAyP,cAAAA,EAFZzP,KAAAuS,aAAmC,YAS3CpR,OAAAyB,eAAI0P,EAAArS,UAAA,kBAAe,KAAnB,WACE,QAASD,KAAKwS,6CAOhBrR,OAAAyB,eAAI0P,EAAArS,UAAA,cAAW,KAAf,WAIE,OAHKD,KAAKuS,eACRvS,KAAKuS,aAAepB,KAAKE,MAAMhC,eAAeoD,QAAQzS,KAAKyP,cAAchC,sBAAwBF,aAAakF,QAAQzS,KAAKyP,cAAchC,uBAEpIzN,KAAKuS,8CAUdD,EAAArS,UAAAyS,eAAA,SAAeF,EAA2BG,GACxC3S,KAAKuS,aAAeC,GAAe,KAE/BA,GACDG,EAAWpF,aAAe8B,gBAAgBuD,QAAQ5S,KAAKyP,cAAchC,oBAAqB0D,KAAKC,UAAUoB,KAE1GnD,eAAe1H,QACf4F,aAAa5F,QACb3H,KAAKuS,aAAe,OAIxBD,EAAArS,UAAA4S,eAAA,uBACQC,GAAoC,QAAvB9D,EAAgB,QAAhBF,EAAA9O,KAAKwS,mBAAW,IAAA1D,OAAA,EAAAA,EAAEiE,aAAK,IAAA/D,OAAA,EAAAA,EAAEgE,aAAc,GACpDD,GAA+B,QAAvB7D,EAAgB,QAAhBD,EAAAjP,KAAKwS,mBAAW,IAAAvD,OAAA,EAAAA,EAAE8D,aAAK,IAAA7D,OAAA,EAAAA,EAAE+D,eAAgB,GAEvD,OAAKF,GAAUD,EAIXtC,KAAK0C,MAAQC,SAASL,IACxB9S,KAAK0S,iBACE,MAGFK,EARE,MAWXT,EAAArS,UAAAmT,cAAA,mBACE,OAA8B,QAAvBpE,EAAgB,QAAhBF,EAAA9O,KAAKwS,mBAAW,IAAA1D,OAAA,EAAAA,EAAEiE,aAAK,IAAA/D,OAAA,EAAAA,EAAEgE,aAAc,IAGhDV,EAAArS,UAAAoT,gBAAA,mBACE,OAA8B,QAAvBrE,EAAgB,QAAhBF,EAAA9O,KAAKwS,mBAAW,IAAA1D,OAAA,EAAAA,EAAEiE,aAAK,IAAA/D,OAAA,EAAAA,EAAEsE,gBAAiB,IAGnDhB,EAAArS,UAAAsT,QAAA,WAEE,OADAvT,KAAKuS,aAAe,KACbvS,8IA1EV2N,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAbLX,wBCaP,SAAAuG,EAAoBhB,GAAAxS,KAAAwS,YAAAA,SAEpBgB,EAAAvT,UAAA0P,UAAA,SAAUC,EAA2BpM,GAMnC,OALAoM,EAAUA,EAAQyC,MAAM,CACtBoB,WAAY,CACVC,cAAe,WAAU1T,KAAKwS,YAAYK,kBAAoB,OAG3DrP,EAAKqM,OAAOD,4IAbtBjC,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAPL0E,MCQT,IAAAqB,GAAA,WAAA,SAAAA,YAEEA,EAAA1T,UAAA0P,UAAA,SAAUC,EAA2BpM,GAMnC,OALAoM,EAAUA,EAAQyC,MAAM,CACtBoB,WAAY,CACVG,eAAgBhE,EAAQiE,QAAQC,IAAI,iBAAmB,sBAGpDtQ,EAAKqM,OAAOD,MARvB,sHAHCjC,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,WC0Cd,IAAAmG,GAAA,WAEE,SAAAA,EAAoBvQ,EAA2BwQ,GAA3BhU,KAAAwD,KAAAA,EAA2BxD,KAAAgU,YAAAA,SAE/CD,EAAA9T,UAAA4P,OAAA,SAAOD,GACL,OAAO5P,KAAKgU,YAAYrE,UAAUC,EAAS5P,KAAKwD,SALpD,GAkBayQ,GAA4B,IAAIC,EAAAA,eAAgC,4CAU3E,SAAAC,EAAoBC,EACVC,EAC+CC,QAAA,IAAAA,IAAAA,EAAA,IAFzD,IAAA5N,EAGE6N,EAAA9S,KAAAzB,KAAMoU,IAAYpU,YAHA0G,EAAA0N,YAAAA,EACV1N,EAAA2N,SAAAA,EAC+C3N,EAAA4N,aAAAA,EAGlD5N,EAAK4N,eAER5N,EAAK4N,aAAe,CAAC5N,EAAK2N,SAASP,IAAI3B,IAAuBzL,EAAK2N,SAASP,IAAIH,IAAoBjN,EAAK2N,SAASP,IAAIN,IAAmB9M,EAAK2N,SAASP,IAAItE,eAThI9N,EAAAyS,EAAAI,GAa/BJ,EAAAlU,UAAAuU,MAAA,SAAMhD,GACJ,IAAMiD,EAAmBzU,KAAKqU,SAASP,IAAIxC,IAAkBG,UAAU,CAAEG,OAAQJ,IACjF,OAAOxR,KAAK0U,eAAeD,IAG7BN,EAAAlU,UAAA0U,iBAAA,WACE,OAAO3U,KAAK4U,kBAAkBpF,KAGhC2E,EAAAlU,UAAA4U,cAAA,WACE,OAAO7U,KAAK4U,kBAAkBzC,KAGhCgC,EAAAlU,UAAA6U,UAAA,WACE,OAAO9U,KAAK4U,kBAAkBpB,KAGhCW,EAAAlU,UAAA8U,WAAA,WACE,OAAO/U,KAAK4U,kBAAkBjB,KAIhCQ,EAAAlU,UAAA2P,QAAA,SAAQiC,EAAcvB,EAAWoB,GAC/B,IAAMsD,EAAUhV,KAAKsU,aAAaW,aAChC,SAACzR,EAAMwQ,GAAgB,OAAA,IAAID,GAAuBvQ,EAAMwQ,KACxDhU,KAAKoU,aAEP,OAAO,IAAIc,EAAAA,WAAWF,GAASpF,QAAQiC,EAAQvB,EAAKoB,IAG9CyC,EAAAlU,UAAA2U,kBAAA,SAAkBO,GACxB,OAAO,IAAIhB,EACTnU,KAAKoU,YACLpU,KAAKqU,SACLrU,KAAKsU,aAAac,QAAO,SAAAzS,GAAK,QAAEA,aAAawS,QAIzChB,EAAAlU,UAAAyU,eAAA,SAAeV,GACrB,OAAO,IAAIG,EACTnU,KAAKoU,YACLpU,KAAKqU,SACLrU,KAAKsU,aAAa1O,OAAO,CAACoO,SAvDCkB,EAAAA,kMAHhCvH,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDA1EmCyH,EAAAA,mBADJC,EAAAA,wCAiFxCC,EAAAA,UAAQ,CAAA1U,KAAIC,EAAAA,OAAMP,KAAA,CAAC0T,2BCzEtB,SAAAuB,EAAoBC,GAAAzV,KAAAyV,KAAAA,SAEpBD,EAAAvV,UAAAyV,eAAA,SAAeC,GACb,OAAO3V,KAAKyV,KAAK3B,IAAI,mBAAoB,CAAE8B,OAAQD,IAAWE,aAGhEL,EAAAvV,UAAA6V,iBAAA,SAAiBC,GACf,OAAO/V,KAAKyV,KAAKO,KAAK,mBAAoBD,GAAOF,aAGnDL,EAAAvV,UAAAgW,iBAAA,SAAiBF,GACf,OAAO/V,KAAKyV,KAAKS,IAAI,oBAAoBH,EAAMI,GAAMJ,GAAOF,aAG9DL,EAAAvV,UAAAmW,iBAAA,SAAiBL,GACf,OAAO/V,KAAKyV,KAAKY,OAAO,oBAAoBN,EAAMI,IAAMN,aAG1DL,EAAAvV,UAAAqW,iBAAA,SAAiBvL,EAAY6K,GAC3B,IAAMW,EAAqB,IAAIC,SAM/B,OALAD,EAASE,OAAO,WAAY1L,EAAMA,EAAK2L,OACnCd,MAAAA,OAAM,EAANA,EAAQe,aACVJ,EAASE,OAAO,YAAab,EAAOe,WACpCJ,EAASE,OAAO,cAAeb,EAAOgB,cAEjC5W,KAAKyV,KACTV,aACAiB,KACC,0BACAO,GACAV,qJAnCPlI,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAHLuG,wBCOP,SAAA0C,YAGAA,EAAA5W,UAAA6W,aAAA,SAAaC,EAAeC,EAA4BC,GACtD,OAASD,EAAUlD,IAAIiD,GAAOG,OAASF,EAAUlD,IAAIiD,GAAOI,UACxDH,EAAUlD,IAAIiD,GAAOG,OAASF,EAAUlD,IAAIiD,GAAOK,WAAaH,GAItEJ,EAAA5W,UAAAoX,gBAAA,SAAgBN,EAAeC,EAA4BM,EAAoBC,GAC7E,IAAM7R,EAAQvE,OAAO6P,KAAKgG,EAAUlD,IAAIiD,GAAOlI,QAC/C,OAAQnJ,EAAMpD,OAAS,GAAMgV,EAAcC,GAAcR,GAAOrR,EAAM,IAAM4R,EAAcC,GAAcR,GAAOrR,EAAM,IAAY,4HAhBpIiI,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,kDCKd,IAAM0J,GAAqB,CACzBhH,IAAK,CACHkH,SAAU,mCAmBZ,SAAAC,EACS3X,EACyBC,EACxB2X,EACAC,EACAC,EACAC,GALD7X,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAA0X,qBAAAA,EACA1X,KAAA2X,GAAAA,EACA3X,KAAA4X,kBAAAA,EACA5X,KAAA6X,aAAAA,EAVV7X,KAAA8X,SAAkB,GAYhB9X,KAAK+X,oBAICN,EAAAxX,UAAA8X,WAAA,WAEN/X,KAAKgY,gBAAkBhY,KAAK2X,GAAGM,MAAM,CACnC9B,GAAI,CAAC,IACL+B,MAAO,CAAC,IACRC,QAAS,CAAC,IACVvB,YAAa,CAAC,IACdD,UAAW,GACX5L,KAAM,CAAC,GAAIqN,EAAAA,WAAWZ,UACtBlH,IAAK,CAAC,GAAI8H,EAAAA,WAAWZ,UACrBa,UAAW,CAAC,GAAID,EAAAA,WAAWZ,aAI/BC,EAAAxX,UAAAC,SAAA,mBACMF,KAAKD,KAAKuY,SACZtY,KAAKgY,gBAAgBlE,IAAI,eAAeyE,SAASvY,KAAKD,KAAKuY,OAAO1B,aAClE5W,KAAKgY,gBAAgBlE,IAAI,aAAayE,SAASvY,KAAKD,KAAKuY,OAAO3B,YAE9D3W,KAAKD,KAAKgL,OACZ/K,KAAKwY,YAAa,EAClBxY,KAAKgY,gBAAgBS,WAAWzY,KAAKD,KAAKgL,QAG/B,QAAb+D,EAAI9O,KAAKD,YAAI,IAAA+O,OAAA,EAAAA,EAAE4J,uBACb1Y,KAAK0Y,oBAA+B,QAAZ1J,EAAGhP,KAAKD,YAAI,IAAAiP,OAAA,EAAAA,EAAE0J,qBAIxC1Y,KAAK2Y,WAAa,CAChBC,OAAQ,cACRC,YAAa,uBACbC,OAAQ,CACNC,OAAQ,SAEVC,UAAU,EACVC,WAAY,IACZC,QAAS,GACTC,eAAgB,aAGlBnZ,KAAKoZ,aAAe,CAClBC,YAAa,CACXN,OAAQ,QACRO,MAAO,UAOP7B,EAAAxX,UAAAsZ,OAAA,+GAEJ,OADAvZ,KAAKwZ,4BAA6B,EAC7BxZ,KAAKgY,gBAAgBd,OAGpBnB,EAAQ/V,KAAKgY,gBAAgB1U,MAE/BtD,KAAK0Y,sBACP3C,EAAMmC,MAAQnC,EAAMhL,MAGF/K,KAAKwY,WACrB,CAAA,EAAMxY,KAAK4X,kBAAkB3B,iBAAiBF,IAD9B,CAAA,EAAA,IARlB,CAAA,iBASE9G,EAAAC,EAAA3K,oBACA,MAAA,CAAA,EAAMvE,KAAK4X,kBAAkB9B,iBAAiBC,WAA9C9G,EAAAC,EAAA3K,+BAFEZ,EAAMsL,EAGZjP,KAAKF,UAAUM,MAAMuD,EAAO8V,MAC5BzZ,KAAK6X,aAAa7J,SAChB,8BACA,uBAKEyJ,EAAAxX,UAAAyZ,YAAA,SAAYnR,0GAChBvI,KAAK8X,SAAWvP,EAEZvI,KAAK8X,SAASxV,OAAS,EAEL,CAAA,EAAMtC,KAAK4X,kBAAkBtB,iBAC/CtW,KAAK8X,SAAS,KAHd,CAAA,EAAA,UAEInU,EAAcsL,EAAA1K,OAGpBvE,KAAKgY,gBAAgBS,WAAW9U,EAAO8V,MACvCzZ,KAAK8X,SAAW,sCAKdL,EAAAxX,UAAA6K,WAAA,8EACJ,GAAI9K,KAAKgY,gBAAgB1U,MAAMyH,KAC7B,IACE/K,KAAKgY,gBAAgBS,WAAW,CAC9B1N,KAAM,GACNuF,IAAK,KAEP,MAAO5K,GACP1F,KAAK6X,aAAa7J,SAAS,mCAAoC,yBAMrEyJ,EAAAxX,UAAA6W,aAAA,SAAaC,GACX,OAAO/W,KAAK0X,qBAAqBZ,aAC/BC,EACA/W,KAAKgY,gBACLhY,KAAKwZ,6BAKT/B,EAAAxX,UAAAoX,gBAAA,SAAgBN,GACd,OAAO/W,KAAK0X,qBAAqBL,gBAC/BN,EACA/W,KAAKgY,gBACLV,+BA7ILhX,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mBACVC,SAAA,o3DAhBOC,EAAAA,6CA+BJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BA1BH8V,UAJW8C,EAAAA,mBACXnE,UAIA1H,MCaI8L,EAAAA,GAA2B,WA2BtC,SAAAA,EACUhC,EACDtI,EACCuI,EACAgC,GAHA7Z,KAAA4X,kBAAAA,EACD5X,KAAAsP,SAAAA,EACCtP,KAAA6X,aAAAA,EACA7X,KAAA6Z,OAAAA,EA5BD7Z,KAAA8Z,UAAoB,EAIpB9Z,KAAA+Z,oBAA8B,EAE9B/Z,KAAAkY,MAAgB,OACzBlY,KAAA2V,QAAe,GACf3V,KAAAga,YAAqB,GACrBha,KAAAia,iBAAmB,CACjB,QACA,QACA,UACA,YACA,eAEFja,KAAAka,WAAqB,EACrBla,KAAAma,OAAsB,IAAIC,EAAAA,YAAY,IACtCpa,KAAAkI,KAAe,EACflI,KAAAoI,QAAkB,GAClBpI,KAAAmI,SAAmB,EAEnBnI,KAAA8X,SAAkB,UASlB8B,EAAA3Z,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KAEEA,KAAK2Y,WAAa,CAChBC,OAAQ,yBACRC,YAAa,kCACbC,OAAQ,CACNC,OAAQ,SAEVC,SAAUhZ,KAAK+Z,mBACfd,WAAY,IACZC,QAAS,GACTC,eAAgB,aAGlBnZ,KAAKoZ,aAAe,CAClBiB,WAAY,CACVtB,OAAQ,QACRO,MAAO,SAETD,YAAa,CACXN,OAAQ,SACRO,MAAO,SAETgB,YAAY,GAGVta,KAAK0Y,sBACP1Y,KAAKia,iBAAmBja,KAAKia,iBAAiB7E,QAAO,SAAAmF,GAAK,MAAO,YAANA,GAA2B,UAANA,MAGlFva,KAAK2V,QAAU,CACbiB,YAAa5W,KAAKwa,WAClB7D,UAAW3W,KAAKya,SAChBvC,MAAO,IAETlY,KAAKma,OAAOO,aAAa7T,KAAK8T,EAAAA,aAAa,KAAMC,EAAAA,uBAAwBxT,EAAAA,eAAepH,OAAO8G,WAAU,SAAAxD,GACvGoD,EAAKiP,QAAQuC,MAAQ5U,EACrBoD,EAAK6I,YAEPvP,KAAK6a,0BACA7a,KAAK8Z,UACR9Z,KAAKia,iBAAiB9U,KAAK,YAIzByU,EAAA3Z,UAAA4a,wBAAA,2GAIgB,OAHpB7a,KAAK2V,QAAQzN,KAAOlI,KAAKkI,KACzBlI,KAAK2V,QAAQvN,QAAUpI,KAAKoI,QAC5BpI,KAAKka,WAAY,EACG,CAAA,EAAMla,KAAK4X,kBAAkBlC,eAAe1V,KAAK2V,wBAA/DhS,EAAcmL,EAAAvK,OACpBvE,KAAKmI,SAAWxE,EAAOmX,WAAa9a,KAAKkI,KACzClI,KAAKga,YAAcha,KAAKga,YAAYpU,OAAOjC,EAAO5D,MAClDC,KAAKka,WAAY,cAGnBN,EAAA3Z,UAAA8a,cAAA,WAAA,IAAArU,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKvD,GAAyB,CAC1D6B,MAAO,QACPvZ,KAAM,CACJuY,OAAQtY,KAAK2V,QACb+C,oBAAqB1Y,KAAK0Y,qBAE5BuC,WAAW,EACXC,cAAc,IAGNC,cAAcrU,WAAU,SAAMnD,GAAM,OAAAd,EAAA6D,OAAA,OAAA,GAAA,mDACxC/C,KACIyX,EAAKzV,EAAO3F,KAAKga,cACjB7U,KAAKxB,GACX3D,KAAKga,YAAcoB,iBAKzBxB,EAAA3Z,UAAAob,eAAA,SAAetQ,GAAf,IAAArE,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKvD,GAAyB,CAC1D6B,MAAO,QACP2B,WAAW,EACXlb,KAAM,CACJgL,KAAMA,EACN2N,oBAAqB1Y,KAAK0Y,uBAIpByC,cAAcrU,WAAU,SAAAnD,GAC5BA,GACF+C,EAAK6I,aAKXqK,EAAA3Z,UAAAmW,iBAAA,SAAiBrL,GAAjB,IAAArE,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKnb,EAAsB,CACvDyZ,MAAO,QACPvZ,KAAmB,CACjBmY,MAAO,cACPjK,QAAS,2CAA2ClD,EAAKmN,MAAK,KAEhE+C,WAAW,IAGHE,cAAcrU,WAAU,SAAMnD,GAAM,OAAAd,EAAA6D,OAAA,OAAA,GAAA,oEACxC/C,EAEa,CAAA,EAAM3D,KAAK4X,kBAAkBxB,iBAC1CrL,IAHA,CAAA,EAAA,UAEa+D,EAAAvK,OAGfvE,KAAK6X,aAAa7J,SAChB,4BACA,WAEFhO,KAAKuP,+CAMXqK,EAAA3Z,UAAAoI,SAAA,WACMrI,KAAKkI,KAAOlI,KAAKmI,WAAanI,KAAKka,YACrCla,KAAKkI,MAAQ,EACblI,KAAK6a,4BAITjB,EAAA3Z,UAAAsP,OAAA,WACEvP,KAAKga,YAAc,GACnBha,KAAKkI,KAAO,EACPlI,KAAKka,WACRla,KAAK6a,2BAITjB,EAAA3Z,UAAAmK,YAAA,aAEAwP,EAAA3Z,UAAAqb,gBAAA,WACEtb,KAAKma,OAAO5B,SAAS,KAGvBqB,EAAA3Z,UAAAsb,OAAA,SAAOC,GACL,IAAKA,EAAS,MAAO,SACrB,IAAI/X,EAAIgY,KAAKC,MAAMD,KAAK5P,IAAI2P,GAASC,KAAK5P,IAAI,OAC9C,OAAQ2P,EAAQC,KAAKE,IAAI,KAAMlY,IAAImY,QAAQ,GAAK,IAAM,SAASC,OAAOpY,GAAK,KAGvEmW,EAAA3Z,UAAAyZ,YAAA,SAAYnR,+GAChBvI,KAAK8X,SAAWvP,EACZvI,KAAK8X,SAASxV,OAAS,EAE5B,CAAA,EAAMtC,KAAK8X,SAAStQ,SAAQ,SAAMuD,GAAI,OAAAlI,EAAA6D,OAAA,OAAA,GAAA,6DACb,MAAA,CAAA,EAAM1G,KAAK4X,kBAAkBtB,iBAC/CvL,EACA,CACE6L,YAAa5W,KAAKwa,WAClB7D,UAAW3W,KAAKya,0BAJA3L,EAAAvK,sBAHpB,CAAA,EAAA,UAELuK,EAAAvK,OASGvE,KAAK8X,SAAW,GAChB9X,KAAK6X,aAAa7J,SAAS,uBAAwB,WACnDhO,KAAKuP,8CAlM6B,0BALvCjP,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,4BACVC,SAAA,uoKAbO+U,UAHAsG,EAAAA,gBAQAhO,UAPAiO,EAAAA,kDAmBN1R,EAAAA,0BACAA,EAAAA,wBACAA,EAAAA,4BACAA,EAAAA,mCACAA,EAAAA,2BACAA,EAAAA,kCACAA,EAAAA,qBAEAA,EAAAA,SATUuP,EAAAA,GAA2B5X,EAAA,CANvC0I,EAAAA,gBAMYkP,EAAAA,sBCGX,SAAAoC,EAAoBnE,GAAA7X,KAAA6X,aAAAA,EAZX7X,KAAAic,UAAmB,GAIlBjc,KAAA0Z,YAAmB,IAAIxT,EAAAA,aAEjClG,KAAAkc,OAAS,4BASTF,EAAA/b,UAAAC,SAAA,WACEF,KAAKmc,cAAgBC,QAAQpc,KAAKiI,OAAO+Q,WAI3CgD,EAAA/b,UAAAoc,UAAA,SAAU9T,GACRA,EAAMtG,OAAOqa,MAAMC,WAAavc,KAAKiI,OAAOuU,WAAa,UAEzDjU,EAAMtG,OAAOqa,MAAMJ,OAAS,mBAE5B3T,EAAMkU,kBAIRT,EAAA/b,UAAAyc,SAAA,SAASnU,GACPA,EAAMkU,kBAIRT,EAAA/b,UAAA0c,UAAA,SAAUpU,GACRA,EAAMtG,OAAOqa,MAAMC,WAAa,GAChChU,EAAMtG,OAAOqa,MAAMJ,OAASlc,KAAKkc,OAEjC3T,EAAMkU,kBAIRT,EAAA/b,UAAA2c,UAAA,SAAUrU,GACRA,EAAMtG,OAAOqa,MAAMC,WAAa,GAChChU,EAAMtG,OAAOqa,MAAMJ,OAASlc,KAAKkc,OACjC,IAAMW,EAAyBtU,EAAMuU,aAAa1B,MAClD,GAAIyB,EAAava,OAAS,EAAG,CAC3B,IAAM2Z,EAAY3a,MAAMyb,KAAKF,GAC7B7c,KAAKgd,SAASf,GAEhB1T,EAAMkU,kBAIRT,EAAA/b,UAAAgd,aAAA,SAAa1U,GACX,GAAIA,EAAMtG,OAAOmZ,OAAS7S,EAAMtG,OAAOmZ,MAAM9Y,OAAQ,CACnD,IAAM2Z,EAAY3a,MAAMyb,KAAKxU,EAAMtG,OAAOmZ,OAC1Cpb,KAAKgd,SAASf,GACIiB,SAASC,eACzBnd,KAAKiI,OAAO2Q,QAEJtV,MAAQ,KAKtB0Y,EAAA/b,UAAA+c,SAAA,SAASf,GAAT,IAAAvV,EAAA1G,KACOA,KAAKmc,aAcsB,IAA1Bnc,KAAKic,UAAU3Z,QACbtC,KAAKod,gBAAgBnB,EAAU,MACjCjc,KAAKic,UAAU9W,KAAK8W,EAAU,IAC9Bjc,KAAKic,UAAU/U,KAAKlH,KAAKqd,WACzBrd,KAAK0Z,YAAYzS,KAAKjH,KAAKic,aAjB/BA,EAAUzU,SAAQ,SAACuD,GACjBrE,EAAKuV,UAAYvV,EAAKuV,UAAU7G,QAC9B,SAACqE,GAAc,OAAAA,EAAK/C,OAAS3L,EAAK2L,QAEhChQ,EAAK0W,gBAAgBrS,IACvBrE,EAAKuV,UAAU9W,KAAK4F,MAIxB/K,KAAKic,UAAU/U,KAAKlH,KAAKqd,WACzBrd,KAAK0Z,YAAYzS,KAAKjH,KAAKic,aAc/BD,EAAA/b,UAAAod,UAAA,SAAUC,EAAQpc,GAChB,IAAMqc,EAAQD,EAAE5G,KAAK8G,cACfC,EAAQvc,EAAEwV,KAAK8G,cACrB,OAAID,EAAQE,GACF,EAENF,EAAQE,EACH,EAGF,GAITzB,EAAA/b,UAAAmd,gBAAA,SAAgBrS,GACd,OAAKqR,QAAQpc,KAAKiI,OAAOiR,WAEdnO,EAAK2S,KAAI,QAAmB1d,KAAKiI,OAAOiR,UAGjDlZ,KAAK6X,aAAa7J,SAChB,0CAA0ChO,KAAKiI,OAAOiR,QAAO,uCAAuClZ,KAAKiI,OAAOiR,QAAO,eACvH,SAEK,KAKX8C,EAAA/b,UAAA0d,WAAA,SAAWpV,GACHvI,KAAKmc,cAAgBnc,KAAKic,UAAU3Z,OAAS,GACjD4a,SAASC,eAAend,KAAKiI,OAAO2Q,QAAQgF,QAE9CrV,EAAMkU,4CAnITnc,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mBACVC,SAAA,gtCANOqN,0CAUNzD,EAAAA,sBAEAA,EAAAA,2BAEAC,EAAAA,uBAIAD,EAAAA,gBCnBH,2BCQE,SAAAwT,EAAoBpI,GAAAzV,KAAAyV,KAAAA,SAEpBoI,EAAA5d,UAAA6d,SAAA,SAASC,GACP,OAAO/d,KAAKyV,KAAK3B,IAAI,YAAa,CAAE8B,OAAQmI,IAAelI,aAG7DgI,EAAA5d,UAAA+d,QAAA,SAAQC,GACN,OAAOje,KAAKyV,KAAKO,KAAK,YAAaiI,GAAMpI,aAG3CgI,EAAA5d,UAAAie,SAAA,SAASD,GACP,OAAOje,KAAKyV,KAAKS,IAAI,aAAa+H,EAAK9H,GAAM8H,GAAMpI,aAGrDgI,EAAA5d,UAAAke,WAAA,SAAWF,GACT,OAAOje,KAAKyV,KAAKY,OAAO,aAAa4H,EAAK9H,IAAMN,qJApBnDlI,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAHLuG,MCMT,IAAMmD,GAAqB,CACzB2G,KAAM,CACJzG,SAAU,mCAeZ,SAAA4G,EACSte,EACyBC,EACxB4X,EACAD,EACAG,EACAwG,GALDre,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAA2X,GAAAA,EACA3X,KAAA0X,qBAAAA,EACA1X,KAAA6X,aAAAA,EACA7X,KAAAqe,YAAAA,EAERre,KAAK+X,oBAICqG,EAAAne,UAAA8X,WAAA,WAEN/X,KAAKse,cAAgBte,KAAK2X,GAAGM,MAAM,CACjC9B,GAAI,CAAC,IACL8H,KAAM,CAAC,GAAI7F,EAAAA,WAAWmG,QAAQ,CAACnG,EAAAA,WAAWZ,YAC1CgH,WAAY,CAAC,IACbC,iBAAkB,CAAC,OAIvBL,EAAAne,UAAAC,SAAA,WACMF,KAAKD,KAAK6R,SACZ5R,KAAKwY,YAAa,GAEpBxY,KAAKse,cAAc7F,WAAWzY,KAAKD,KAAKke,OAIpCG,EAAAne,UAAAsZ,OAAA,4HACJvZ,KAAK0e,sBAAuB,EACxB1e,KAAKse,cAAcpH,OACfnB,EAAQ/V,KAAKse,cAAchb,MAClBtD,KAAKwY,WAChB,CAAA,EAAMxY,KAAKqe,YAAYH,SAASnI,IADrB,CAAA,EAAA,IAFb,CAAA,EAAA,iBAGE/G,EAAAC,EAAA1K,oBACA,MAAA,CAAA,EAAMvE,KAAKqe,YAAYL,QAAQjI,WAA/B/G,EAAAC,EAAA1K,wBAFEZ,EAAMqL,EAIZhP,KAAK6X,aAAa7J,UACJ,QAATc,EAAA9O,KAAKD,YAAI,IAAA+O,OAAA,EAAAA,EAAE6P,WAAS,sBACvB,WAEF3e,KAAKF,UAAUM,MAAMuD,sCAIzBya,EAAAne,UAAA2e,OAAA,WACE5e,KAAKF,UAAUM,SAIjBge,EAAAne,UAAA6W,aAAA,SAAaC,GACX,OAAO/W,KAAK0X,qBAAqBZ,aAC/BC,EACA/W,KAAKse,cACLte,KAAK0e,uBAKTN,EAAAne,UAAAoX,gBAAA,SAAgBN,GACd,OAAO/W,KAAK0X,qBAAqBL,gBAC/BN,EACA/W,KAAKse,cACLhH,+BA3ELhX,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,gBACVC,SAAA,4vCAbOC,EAAAA,6CAwBJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BAzBQ4Y,EAAAA,mBAGX9C,UACA/I,UAFA+P,wBC4BP,SAAAgB,EAAoBR,EACVxE,GADU7Z,KAAAqe,YAAAA,EACVre,KAAA6Z,OAAAA,EAhBD7Z,KAAA8e,UAAoB,EACpB9e,KAAA2e,UAAoB,OACpB3e,KAAA+e,cAAwB,EAEjC/e,KAAAgf,MAAe,GAEfhf,KAAAia,iBAAmB,CACjB,QACA,OACA,WAGFja,KAAAkI,KAAO,EACPlI,KAAAmI,SAAW,EAKTnI,KAAK2V,QAAU,GACf3V,KAAK2V,QAAQsJ,QAAU,yBAGzBJ,EAAA5e,UAAAC,SAAA,WACMF,KAAK8e,WACP9e,KAAKia,iBAAmBja,KAAKia,iBAAiB7E,QAAO,SAAAmF,GAAK,MAAM,YAANA,MAE5Dva,KAAK2V,QAAQ8I,iBAAmBze,KAAKkf,eACrClf,KAAK2V,QAAQ6I,WAAaxe,KAAKmf,UAC/Bnf,KAAKof,YAGDP,EAAA5e,UAAAmf,SAAA,2GAEgB,MAAA,CAAA,EAAMpf,KAAKqe,YAAYP,SAAQ3c,OAAAke,OAAAle,OAAAke,OAAA,GAAMrf,KAAK2V,SAAO,CAAEzN,KAAMlI,KAAKkI,uBAA5EvE,EAAcmL,EAAAvK,OACpBvE,KAAKgf,MAAQhf,KAAKgf,MAAMpZ,OAAOjC,EAAO5D,MACtCC,KAAKkI,KAAOvE,EAAO2b,aACnBtf,KAAKmI,SAAWxE,EAAOmX,sBAGzB+D,EAAA5e,UAAA+d,QAAA,WAAA,IAAAtX,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKoD,GAAmB,CACpD9E,MAAO,QACPvZ,KAAM,CACJke,KAAM,CAAEQ,iBAAkBze,KAAKkf,eAAgBV,WAAYxe,KAAKmf,WAChER,UAAW3e,KAAK2e,WAElB1D,WAAW,IAGHE,cAAcrU,WAAU,SAAAnD,GAC5BA,IACF+C,EAAK6Y,cACL7Y,EAAK0Y,gBAKXP,EAAA5e,UAAAie,SAAA,SAASD,GAAT,IAAAvX,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKoD,GAAmB,CACpD9E,MAAO,QACPvZ,KAAM,CACJke,KAAMA,EACNrM,QAAQ,EACR+M,UAAW3e,KAAK2e,WAElB1D,WAAW,IAGHE,cAAcrU,WAAU,SAAAnD,GAC5BA,IACF+C,EAAK6Y,cACL7Y,EAAK0Y,gBAKLP,EAAA5e,UAAAke,WAAA,SAAWF,wFACGje,KAAK6Z,OAAOmB,KAAKnb,EAAsB,CACvDyZ,MAAO,QACPvZ,KAAmB,CACjBmY,MAAO,UAAUlY,KAAK2e,UACtB1Q,QAAS,2BAEXgN,WAAW,IAGHE,cAAcrU,WAAU,SAAMnD,GAAM,OAAAd,EAAA6D,OAAA,OAAA,GAAA,oEACxC/C,EAGa,CAAA,EAAM3D,KAAKqe,YAAYF,WAAWF,IAH/C,CAAA,EAAA,UAGanP,EAAAvK,OACfvE,KAAKgf,MAAQhf,KAAKgf,MAAM5J,QAAO,SAACqE,GAAc,OAAAA,EAAKtD,KAAO8H,EAAK9H,sDAMrE0I,EAAA5e,UAAAsf,YAAA,WACEvf,KAAKkI,KAAO,EACZlI,KAAKmI,SAAW,EAChBnI,KAAKgf,MAAQ,IAGfH,EAAA5e,UAAAoI,SAAA,WACMrI,KAAKkI,KAAOlI,KAAKmI,WACnBnI,KAAKkI,MAAQ,EACblI,KAAKof,aAITP,EAAA5e,UAAAuf,cAAA,SAAcjX,GACZ,GAAmB,SAAfA,EAAM1H,KACR,OAAI0H,EAAMjF,MAAM6S,QACdnW,KAAKyf,YAAYlX,EAAMjF,YAGzBtD,KAAK0f,WAAWnX,EAAMjF,OAGxBtD,KAAKme,WAAW5V,EAAMjF,QAGlBub,EAAA5e,UAAAwf,YAAA,SAAYE,qGACI,MAAA,CAAA,EAAM3f,KAAKqe,YAAYH,SAASyB,kBAA9Chc,EAAcmL,EAAAvK,QAIL,KAHXqb,EAAQ5f,KAAKgf,MAAMa,WACrB,SAACtF,GAAW,OAAAA,EAAEpE,KAAOwJ,EAAQxJ,SAG7BnW,KAAKgf,MAAMY,GAASjc,EAAO8V,kBAIzBoF,EAAA5e,UAAAyf,WAAA,SAAWC,mGAGK,OAFpBA,EAAQlB,iBAAmBze,KAAKkf,eAChCS,EAAQnB,WAAaxe,KAAKmf,UACN,CAAA,EAAMnf,KAAKqe,YAAYL,QAAQ2B,kBAA7Chc,EAAcmL,EAAAvK,OACpBvE,KAAKgf,MAAM7Z,KAAKxB,EAAO8V,4CAjJ1BnZ,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,gBACVC,SAAA,moFAROod,UACA9B,EAAAA,sDAYN1R,EAAAA,yBACAA,EAAAA,wBACAA,EAAAA,yBACAA,EAAAA,4BACAA,EAAAA,8BCWD,SAAAyV,EAAoBnI,EACVoI,GADU/f,KAAA2X,GAAAA,EACV3X,KAAA+f,kBAAAA,EAHA/f,KAAAiG,OAAS,IAAIC,EAAAA,aAKrBlG,KAAK+X,oBAXP5W,OAAAyB,eAAakd,EAAA7f,UAAA,cAAW,KAAxB,SAAyBF,GACvBC,KAAKggB,OAASjgB,EACdC,KAAKigB,aAAelgB,EACpBC,KAAKkgB,iBAAiBzH,WAAW1Y,oCAWnC+f,EAAA7f,UAAAC,SAAA,aAEAiB,OAAAyB,eAAIkd,EAAA7f,UAAA,aAAU,KAAd,WACE,OAAOD,KAAK+f,kBAAkBI,iDAGhChf,OAAAyB,eAAIkd,EAAA7f,UAAA,cAAW,KAAf,WACE,OAAOD,KAAK+f,kBAAkBvN,YAAY4N,sCAGpCN,EAAA7f,UAAA8X,WAAA,WAEN/X,KAAKkgB,iBAAmBlgB,KAAK2X,GAAGM,MAAM,CACpC9B,GAAI,CAAC,IACL8H,KAAM,CAAC,IACPO,WAAY,CAAC,IACbC,iBAAkB,CAAC,OAIvBqB,EAAA7f,UAAAsZ,OAAA,WACMvZ,KAAKkgB,iBAAiBpM,IAAI,QAAQxQ,OAChCtD,KAAKigB,eACPjgB,KAAKggB,MAAQhgB,KAAKggB,MAEpBhgB,KAAKiG,OAAOgB,KAAK,CAAEpG,KAAM,OAAQyC,MAAOtD,KAAKkgB,iBAAiB5c,QAC9DtD,KAAKkgB,iBAAiBG,SACbrgB,KAAKkgB,iBAAiBpM,IAAI,MAAMxQ,OACzCtD,KAAKsgB,iBAITR,EAAA7f,UAAAsgB,SAAA,WACMvgB,KAAKkgB,iBAAiBpM,IAAI,MAAMxQ,QAClCtD,KAAKggB,MAAQhgB,KAAKggB,OAItBF,EAAA7f,UAAAwf,YAAA,WACEzf,KAAKggB,MAAQhgB,KAAKggB,KAClBhgB,KAAKkgB,iBAAiBzH,WAAWzY,KAAKigB,eAGxCH,EAAA7f,UAAAqgB,cAAA,WACEtgB,KAAKiG,OAAOgB,KAAK,CAAEpG,KAAM,SAAUyC,MAAOtD,KAAKkgB,iBAAiB5c,SAGlEwc,EAAA7f,UAAAmK,YAAA,uCAvED9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mBACVC,SAAA,smEALkBkZ,EAAAA,mBACXrH,4CAYNjI,EAAAA,sBAMAC,EAAAA,UCHUkW,EAAAA,GAA2BC,GAAA,WA8EtC,SAAAD,EACEE,EACQC,EACAlL,EACAmL,EACA/G,EACmBgH,GAN7B,IAAAna,EAAA1G,KAEUA,KAAA2gB,cAAAA,EACA3gB,KAAAyV,KAAAA,EACAzV,KAAA4gB,YAAAA,EACA5gB,KAAA6Z,OAAAA,EACmB7Z,KAAA6gB,UAAAA,EAlFpB7gB,KAAA8gB,WAAqB,KACrB9gB,KAAA+gB,WAAqB,QAErB/gB,KAAAgZ,UAAoB,EAEnBhZ,KAAAghB,oBAAsB,IAAI9a,EAAAA,aAC3BlG,KAAAihB,cAAwB,EACxBjhB,KAAAkhB,KAAe,EAEflhB,KAAAmhB,MAAgB,EAEhBnhB,KAAAkH,MAAgB,EAIhBlH,KAAAohB,MAAe,GACfphB,KAAAqhB,gBAA0B,OAC1BrhB,KAAAwU,OAAiB,EACjBxU,KAAAoI,QAAkB,GAClBpI,KAAAshB,cAAwB,EACvBthB,KAAAuhB,gBAAkB,IAAIrb,EAAAA,aACtBlG,KAAAwhB,YAAc,IAAItb,EAAAA,aAG5BlG,KAAAyhB,WAAqB,EACrBzhB,KAAA0hB,SAAgB,aAChB1hB,KAAA2hB,UAAiB,aAGjB3hB,KAAA4hB,aAAe,IAAIC,EAAAA,QACnB7hB,KAAA8hB,SAAU,EACV9hB,KAAA+hB,YAAc,qBACd/hB,KAAAmW,GAAK,sBAAsBsK,GAA4Bja,SACvDxG,KAAAgiB,YAAc,GAEdhiB,KAAAiiB,YAAqB,GAkBbjiB,KAAAkiB,WAAY,EASZliB,KAAAmiB,WAAY,EAsBlBniB,KAAKoiB,aAAe1B,EAAYzI,MAAM,CACpCoK,aAAc,CAAC,MACflI,OAAQ,KAGVwG,EAAc2B,QAAQ1B,GAAa,GAAM9Z,WAAU,SAAAyb,GAC7C7b,EAAKob,UAAYS,GACnB7b,EAAKib,YAEPjb,EAAKob,UAAYS,EACjB7b,EAAKkb,aAAape,UAGE,MAAlBxD,KAAK6gB,YACP7gB,KAAK6gB,UAAU2B,cAAgBxiB,aA5DnCmB,OAAAyB,eAAI4d,EAAAvgB,UAAA,QAAK,KAAT,WAEE,OADoCD,KAAKoiB,aAAY9e,MAAA+e,8CAIvDlhB,OAAAyB,eAAI4d,EAAAvgB,UAAA,mBAAgB,KAApB,WAAyB,OAAOD,KAAK8hB,UAAY9hB,KAAKyiB,uCAGtDthB,OAAAyB,eACI4d,EAAAvgB,UAAA,WAAQ,KADZ,WAC0B,OAAOD,KAAKkiB,eACtC,SAAa5e,GACXtD,KAAKoiB,aAAatO,IAAI,gBAAgB4O,cAActK,EAAAA,WAAWZ,UAC/DxX,KAAKkiB,UAAYS,EAAAA,sBAAsBrf,GACvCtD,KAAK4hB,aAAape,wCAIpBrC,OAAAyB,eACI4d,EAAAvgB,UAAA,WAAQ,KADZ,WAC0B,OAAOD,KAAKmiB,eACtC,SAAa7e,GACXtD,KAAKmiB,UAAYQ,EAAAA,sBAAsBrf,GACvCtD,KAAKmiB,UAAYniB,KAAKoiB,aAAaQ,UAAY5iB,KAAKoiB,aAAaS,SACjE7iB,KAAK4hB,aAAape,wCAIpBrC,OAAAyB,eACI4d,EAAAvgB,UAAA,QAAK,KADT,WAEE,OAAID,KAAKoiB,aAAalL,MACblX,KAAKoiB,aAAa9e,MAAM+e,aAE1B,QAET,SAAUtiB,GACRC,KAAKoiB,aAAa3J,WAAW,CAAE4J,aAActiB,GAAQ,KACrDC,KAAK4hB,aAAape,wCA6BpBgd,EAAAvgB,UAAA6iB,aAAA,SAAava,GACmB,IAA1BvI,KAAK+iB,UAAUzgB,QAAgBtC,KAAKoiB,aAAatO,IAAI,UAAUxQ,OACjEtD,KAAKoiB,aAAatO,IAAI,UAAUyE,SAAS,KAI7CpX,OAAAyB,eAAI4d,EAAAvgB,UAAA,YAAS,KAAb,WAAA,IAAAyG,EAAA1G,KACMohB,EAAe,GAUnB,OAHAA,GALEA,EADEphB,KAAKgZ,UAAYhZ,KAAKgjB,eAAkBhjB,KAAKgjB,cAAc1gB,OAAS,EACjEqD,EAAO3F,KAAKgjB,cAAkBhjB,KAAKohB,QAC/BphB,KAAKgZ,UAAahZ,KAAKgjB,cAC3Brd,EAAA,CAAI3F,KAAKgjB,eAAkBhjB,KAAKohB,OAE7BphB,KAAKohB,OACDhM,QAAO,SAACpQ,EAAGrC,EAAG2a,GAAM,OAAAA,EAAEuC,WAAU,SAAA7a,GAAK,OAAAA,EAAE0B,EAAKoa,cAAgBxD,EAAE3a,GAAG+D,EAAKoa,iBAAiBne,KAErG3C,KAAKwhB,YAAYva,KAAKma,GACfA,mCAGTZ,EAAAvgB,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACEA,KAAKoiB,aAAatO,IAAI,UAAU4G,aAC7B7T,KACC8T,EAAAA,aAAa,KACbC,EAAAA,uBACAxT,EAAAA,eAAepH,OACf8G,WAAU,SAAAxD,GACNoD,EAAKua,cACPva,EAAKyT,OAAO7W,MAGlBtD,KAAK2V,QAAU,CACbvN,QAASpI,KAAKoI,QACd+R,OAAQ,GACRjS,KAAM,EACNC,SAAU,GAERnI,KAAKkH,OACPlH,KAAK2V,QAAQsJ,QAAUjf,KAAKijB,QAAajjB,KAAK+gB,WAAU,QAIhC,IAAtB/gB,KAAKohB,MAAM9e,QACbtC,KAAKkjB,iBAIT1C,EAAAvgB,UAAAijB,cAAA,WAAA,IAAAxc,EAAA1G,KACEA,KAAKyhB,WAAY,EACjB,IAAI7R,EAAU5P,KAAKyV,KAAK3B,IAAI9T,KAAK4M,OAAQ,CAAEgJ,OAAQ5V,KAAK2V,UACpD3V,KAAKwU,QACP5E,EAAU5P,KAAKyV,KAAKjB,QAAQV,IAAI9T,KAAK4M,OAAQ,CAAEgJ,OAAQ5V,KAAK2V,WAE9DwN,EAAAA,KAAKtc,KACHuc,EAAAA,WAAU,GACVC,EAAAA,WAAU,SAAChf,GAAM,OAAA0Y,EAAAA,KAAKnN,MACtB0T,EAAAA,UAAS,WAAM,OAAA5c,EAAK+a,WAAY,KAChCra,EAAAA,eAAepH,OACf8G,WAAU,SAACnD,GACX+C,EAAK0a,MAAQ1a,EAAK0a,MAAMxb,OAAOjC,EAAO+C,EAAK2a,kBACvC3a,EAAK8N,QACP9N,EAAKub,YAAcvb,EAAK0a,OAE1B1a,EAAKiP,QAAQzN,MAAOvE,MAAAA,OAAM,EAANA,EAAQ2b,eAAgB,EAC5C5Y,EAAKiP,QAAQxN,UAAWxE,MAAAA,OAAM,EAANA,EAAQmX,YAAa,MAKjD0F,EAAAvgB,UAAAsjB,kBAAA,SAAkBC,GAChBxjB,KAAKgiB,YAAcwB,EAAIC,KAAK,MAG9BjD,EAAAvgB,UAAAyjB,iBAAA,SAAiBnb,GACfA,EAAME,mBAGR+X,EAAAvgB,UAAA0jB,WAAA,SAAW5jB,GACTC,KAAKsD,MAAQvD,GAGfygB,EAAAvgB,UAAA2jB,iBAAA,SAAiBC,GACf7jB,KAAK0hB,SAAWmC,GAGlBrD,EAAAvgB,UAAA6jB,kBAAA,SAAkBD,GAChB7jB,KAAK2hB,UAAYkC,GAGnBrD,EAAAvgB,UAAA8jB,iBAAA,SAAiBC,GACfhkB,KAAKikB,SAAWD,GAGlBxD,EAAAvgB,UAAAikB,iBAAA,SAAiB7a,EAAUW,GAIzB,IADA,IAAMC,GADND,GADAA,EAAYA,EAAUE,QAAQ,aAAc,QACtBA,QAAQ,MAAO,KACXC,MAAM,KACvBxH,EAAI,EAAGoC,EAAIkF,EAAQ3H,OAAQK,EAAIoC,IAAKpC,EAAG,CAC9C,IAAMT,EAAM+H,EAAQtH,GACpB,IAAI0G,KAAOnH,KAAOmH,GAGhB,OAFAA,EAAMA,EAAInH,GAKd,OAAOmH,GAGTmX,EAAAvgB,UAAAkkB,aAAA,WAAA,IAAAzd,EAAA1G,KACEA,KAAK0hB,SAAS1hB,KAAKsD,OACftD,KAAKgZ,SACPhZ,KAAKgjB,cAAiBhjB,KAAKsD,MAAa8gB,KAAI,SAAA7J,GAAK,OAAA7T,EAAKqc,UAAUsB,MAAK,SAAAngB,GAAK,OAAAA,EAAEwC,EAAKoa,cAAgBvG,QAEjGva,KAAKgjB,cAAgBhjB,KAAK+iB,UAAUsB,MAAK,SAAA9J,GAAK,OAAAA,EAAE7T,EAAKoa,cAAgBpa,EAAKpD,SAC5EtD,KAAKghB,oBAAoB/Z,KAAKjH,KAAKgjB,eACnChjB,KAAKuhB,gBAAgBta,KAAKjH,KAAKsD,QAGjCnC,OAAAyB,eAAI4d,EAAAvgB,UAAA,aAAU,KAAd,WACE,OAAQD,KAAK6gB,WAAa7gB,KAAK6gB,UAAUyD,UAAYtkB,KAAK6gB,UAAU1J,SAAWnX,KAAK6gB,UAAU0D,wCAMhG/D,EAAAvgB,UAAAoI,SAAA,WACMrI,KAAK2V,QAAQxN,SAAWnI,KAAK2V,QAAQzN,OACvClI,KAAK2V,QAAQzN,MAAQ,EACrBlI,KAAKkjB,kBAIT1C,EAAAvgB,UAAAukB,WAAA,WACExkB,KAAKohB,MAAQ,GACbphB,KAAK2V,QAAQzN,KAAO,EACpBlI,KAAK2V,QAAQxN,SAAW,EACxBnI,KAAKkjB,iBAGP1C,EAAAvgB,UAAAka,OAAA,SAAO5R,GACDvI,KAAKykB,YACPzkB,KAAK2V,QAAQ3V,KAAKykB,aAAelc,EAEjCvI,KAAK2V,QAAQwE,OAAS5R,EAGpBvI,KAAKshB,cAAgBthB,KAAKykB,YAC5BzkB,KAAK0kB,YAAYnc,GAEjBvI,KAAKwkB,cAIThE,EAAAvgB,UAAAykB,YAAA,SAAYnc,GAAZ,IAAA7B,EAAA1G,KAEIA,KAAKohB,MADH7Y,EACWvI,KAAKiiB,YAAY7M,QAAO,SAAC9R,GACpC,OAAyF,GAAjFA,EAAMoD,EAAK+d,aAAwBE,cAAcxK,OAAO5R,EAAMoc,kBAG3D3kB,KAAKiiB,aAItBzB,EAAAvgB,UAAA2kB,QAAA,SAAQrc,GAAR,IAAA7B,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKhb,KAAK6kB,cAAa1jB,OAAAke,OAAA,CACnD/F,MAAO,QACP2B,WAAW,EACXlb,KAAM,IACHC,KAAK8kB,YAGA3J,cAAcrU,WAAU,SAACnD,GAC7BA,IACF+C,EAAK0a,MAAMjc,KAAKxB,EAAO8V,MACvB/S,EAAK0b,aAAatO,IAAI,gBAAgByE,SAAS5U,EAAO8V,KAAK/S,EAAKoa,aAChEpa,EAAKyd,mBAGT5b,EAAME,mBAGR+X,EAAAvgB,UAAA8kB,SAAA,SAASxc,GAAT,IAAA7B,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKhb,KAAK6kB,cAAa1jB,OAAAke,OAAA,CACnD/F,MAAO,QACP2B,WAAW,EACXlb,KAAM,CACJ0Z,KAAMzZ,KAAKgjB,gBAEVhjB,KAAKglB,aAGA7J,cAAcrU,WAAU,SAACnD,GAC7BA,IACF+C,EAAK0a,MAAQ1a,EAAK0a,MAAMhM,QAAO,SAAAmF,GAAK,OAAAA,EAAE7T,EAAKoa,cAAgBpa,EAAKsc,cAActc,EAAKoa,eACnFpa,EAAK0a,MAAMjc,KAAKxB,EAAO8V,MACvB/S,EAAKsc,cAAgB,KACrBtc,EAAK0b,aAAatO,IAAI,gBAAgByE,SAAS5U,EAAO8V,KAAK/S,EAAKoa,aAChEpa,EAAKyd,mBAGT5b,EAAME,mBAGR+X,EAAAvgB,UAAAmK,YAAA,WACEpK,KAAK4hB,aAAa1P,WAClBlS,KAAK2gB,cAAcsE,eAAejlB,KAAK4gB,gBArTH,GA6B/BJ,EAAAA,GAAAA,OAAS,yBAxCjBlgB,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,0BACVC,SAAA,w2CAEAykB,UAAW,CACT,CACEC,QAASC,EAAAA,oBACTC,YAAa5E,sJAjBV9G,EAAAA,mBAHA2L,EAAAA,oBASAnR,UAPWoR,EAAAA,kBAKXxJ,EAAAA,iBAJ8CyJ,EAAAA,UAAS5kB,WAAA,CAAA,CAAAC,KAyG3D0U,EAAAA,UAAQ,CAAA1U,KAAI4kB,EAAAA,iDAlFdpb,EAAAA,0BACAA,EAAAA,sBACAA,EAAAA,wBACAA,EAAAA,6BACAA,EAAAA,mCACAC,EAAAA,6BACAD,EAAAA,mBACAA,EAAAA,yBACAA,EAAAA,oBACAA,EAAAA,0BACAA,EAAAA,oBACAA,EAAAA,sBACAA,EAAAA,2BACAA,EAAAA,6BACAA,EAAAA,qBACAA,EAAAA,+BACAA,EAAAA,qBACAA,EAAAA,uBACAA,EAAAA,4BACAA,EAAAA,+BACAC,EAAAA,4BACAA,EAAAA,yBAyBAD,EAAAA,wBASAA,EAAAA,qBASAA,EAAAA,SAlEUmW,EAAAA,GAA2BC,GAAAze,EAAA,CAZvC0I,EAAAA,gBAYY8V,EAAAA,sBCFX,SAAAkF,EAAoBC,EAA8BC,GAA9B5lB,KAAA2lB,UAAAA,EAA8B3lB,KAAA4lB,OAAAA,EAZzC5lB,KAAA6lB,UAAY,MACZ7lB,KAAA2a,aAAe,IAEd3a,KAAA8lB,eAAiB,IAAI5f,EAAAA,aAGvBlG,KAAA+lB,MAAQ,EACR/lB,KAAAgmB,MAAQ,EACRhmB,KAAAimB,mBAAqBC,EAAAA,sBAErBlmB,KAAAmmB,WAAa,IAAItE,EAAAA,eAKzB6D,EAAAzlB,UAAAC,SAAA,WACEF,KAAKomB,qBAGPV,EAAAzlB,UAAAwG,gBAAA,WAAA,IAAAC,EAAA1G,KACEA,KAAK2lB,UAAU7C,aAAajc,KAC1Bwf,EAAAA,UAAUrmB,KAAKmmB,aACfrf,WAAU,SAACwf,GACPA,IACF5f,EAAK6f,MAAQ7f,EAAKif,UAAUY,MAAMC,cAClC9f,EAAKuf,mBAAqBvf,EAAK+f,wBAC/B/f,EAAKggB,8BAKXhB,EAAAzlB,UAAAmK,YAAA,WACEpK,KAAKmmB,WAAW3iB,MAAK,GACrBxD,KAAKmmB,WAAWjU,YAGlBwT,EAAAzlB,UAAAmmB,kBAAA,WACMpmB,KAAK6lB,UAAUc,YAAY,MAAQ,GACrC3mB,KAAK+lB,MAAQ,EACb/lB,KAAKgmB,MAASY,WAAW5mB,KAAK6lB,WAAa,MAG3C7lB,KAAK+lB,MAAQa,WAAW5mB,KAAK6lB,WAC7B7lB,KAAKgmB,MAAQ,IAIjBN,EAAAzlB,UAAAymB,uBAAA,WAAA,IAAAhgB,EAAA1G,KACE6mB,EAAAA,UAAU7mB,KAAKumB,MAAO,UAAU1f,KAC9Bwf,EAAAA,UAAUrmB,KAAKmmB,YACfxL,EAAAA,aAAa3a,KAAK2a,cAClBmM,EAAAA,KAAI,SAACve,GACH7B,EAAKqgB,kBAAkBxe,OAEzBzB,aAGJ4e,EAAAzlB,UAAA8mB,kBAAA,SAAkBxe,GAAlB,IAAA7B,EAAA1G,KACEA,KAAK4lB,OAAOoB,mBAAkB,WAC5B,IAAItgB,EAAKwL,SAAT,CAGA,IAAM+U,EAAyBvgB,EAAKif,UAAUjU,QAAQpP,OAChD4kB,EAAyBxgB,EAAKuf,mBAAqBgB,EACnDpB,EAA2B,IAAfnf,EAAKsf,MAAekB,EAAyBxgB,EAAKsf,MAAStf,EAAKqf,MAEzDrf,EAAK6f,MAAMY,aAAe5e,EAAMtG,OAAOmlB,UAExCvB,GAAcqB,GACpCxgB,EAAKkf,OAAOyB,KAAI,WAAM,OAAA3gB,EAAKof,eAAe7e,eAKhDye,EAAAzlB,UAAAwmB,sBAAA,WACE,OAAOG,WAAWU,iBAAiBtnB,KAAKumB,OAAOgB,UAAYrB,EAAAA,iDAhF9DsB,EAAAA,UAASjnB,KAAA,CAAC,CACTC,SAAU,mEALHinB,EAAAA,iBAD+CC,EAAAA,8CAUrDrd,EAAAA,4BACAA,EAAAA,wBACAA,EAAAA,8BACAC,EAAAA,4BCGC,SAAAqd,IACI3nB,KAAK4nB,eAAiB,IAAI1hB,EAAAA,oBAM9ByhB,EAAA1nB,UAAA4nB,gBAAA,WACI7nB,KAAK4nB,eAAe3gB,KAAKjH,KAAK8nB,qCAhBrCxnB,EAAAA,UAASC,KAAA,CAAC,CACPC,SAAU,qBACVC,SAAA,mpBAGC4J,EAAAA,8BACAC,EAAAA,4BCHL,SAAAyd,YAKIA,EAAA9nB,UAAA+nB,kBAAA,SAAkBC,GAKd,OAJWA,EAAUC,cAIP,KAHDD,EAAUE,WAAa,EAAK,GAAM,KAAOF,EAAUE,WAAa,GAAOF,EAAUE,WAAa,GAG/E,KAFjBF,EAAUG,UAAY,GAAM,IAAMH,EAAUG,UAAaH,EAAUG,YAQlFL,EAAA9nB,UAAAooB,QAAA,SAAQJ,GAEJ,OADWA,EAAUC,eAOzBH,EAAA9nB,UAAAqoB,MAAA,SAAML,GAEF,OADYA,EAAUE,WAAa,GAKvCJ,EAAA9nB,UAAAsoB,YAAA,SAAYN,GAMR,OALWA,EAAUC,cAKP,KAJDD,EAAUE,WAAa,EAAK,GAAM,KAAOF,EAAUE,WAAa,GAAOF,EAAUE,WAAa,GAI/E,KAHjBF,EAAUG,UAAY,GAAM,IAAMH,EAAUG,UAAaH,EAAUG,WAGrC,IAF9BH,EAAUO,8IArC5B7a,EAAAA,WAAUpN,KAAA,CAAC,CACRqN,WAAY,6BCWZ,SAAA6a,IAFAzoB,KAAAohB,MAAQ,IAAI9f,MAGRtB,KAAKghB,oBAAsB,IAAI9a,EAAAA,oBAMnCuiB,EAAAxoB,UAAAyoB,WAAA,WACI1oB,KAAKghB,oBAAoB/Z,KAAKjH,KAAKgjB,gBAIvCyF,EAAAxoB,UAAAC,SAAA,WACI,IAAK,IAAIyC,EAAI3C,KAAK2oB,YAAahmB,EAAI3C,KAAK4oB,UAAY,EAAGjmB,IACnD3C,KAAKohB,MAAMjc,KAAKxC,8BA1B3BrC,EAAAA,UAASC,KAAA,CAAC,CACPC,SAAU,kBACVC,SAAA,maAGC4J,EAAAA,yBACAA,EAAAA,mCACAC,EAAAA,8BACAD,EAAAA,gBChBL,aACkBwe,GAAAC,OAAiB,EACjBD,GAAAE,MAAgB,EAChBF,GAAAG,UAAoB,EACpBH,GAAAI,UAAoB,EACpBJ,GAAAK,UAAoB,EACpBL,GAAAM,WAAqB,EACrBN,GAAAO,WAAqB,EACrBP,GAAAQ,aAAuB,EACvBR,GAAAS,aAAuB,EACvBT,GAAAU,UAAoB,GACpBV,GAAAW,UAAoB,GACpBX,GAAAY,IAAc,GACdZ,GAAAa,SAAmB,GACnBb,GAAAc,UAAoB,GACpBd,GAAAe,WAAqB,GCdvC,OAAMC,GAASC,WASCC,GAAkBzmB,GAChC,IAAM0mB,EAAO,IAAIxZ,KACXzQ,EAAY,CAChBkqB,UAAaD,EACbE,QAAWF,EACXG,mBAAqB,GAEvB,OAAQ7mB,GACN,KAAKulB,GAASC,OACZ/oB,EAAKoqB,mBAAoB,EACzB,MAEF,KAAKtB,GAASE,MACZ,IAAI7V,EAAM2W,KACV9pB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,OAAOC,cACpCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,OAAOD,cAChC,MAEF,KAAKxB,GAASG,UACR9V,EAAM2W,KAASU,SAAS,EAAG,OAC/BxqB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,OAAOC,cACpCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,OAAOD,cAChC,MAEF,KAAKxB,GAASI,UACR/V,EAAM2W,KACV9pB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,WAAWC,cACxCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,WAAWD,cACpC,MAEF,KAAKxB,GAASK,UACRhW,EAAM2W,KAASU,SAAS,EAAG,QAC/BxqB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,WAAWC,cACxCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,WAAWD,cACpC,MAEF,KAAKxB,GAASM,WACRjW,EAAM2W,KACV9pB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,SAASC,cACtCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,SAASD,cAClC,MAEF,KAAKxB,GAASO,WACRlW,EAAM2W,KAASU,SAAS,EAAG,SAC/BxqB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,SAASC,cACtCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,SAASD,cAClC,MAEF,KAAKxB,GAASQ,aACRnW,EAAM2W,KACV9pB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,WAAWC,cACxCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,WAAWD,cACpC,MAEF,KAAKxB,GAASS,aACRpW,EAAM2W,KAASU,SAAS,EAAG,WAC/BxqB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,WAAWC,cACxCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,WAAWD,cACpC,MAEF,KAAKxB,GAASU,UACRrW,EAAM2W,KACV9pB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,QAAQC,cACrCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,QAAQD,cACjC,MAEF,KAAKxB,GAASW,UACRtW,EAAM2W,KAASU,SAAS,EAAG,QAC/BxqB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,QAAQC,cACrCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,QAAQD,cACjC,MAEF,KAAKxB,GAASa,SACRxW,EAAM2W,KAAS3I,IAAI,EAAG,OAC1BnhB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,OAAOC,cACpCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,OAAOD,cAChC,MAEF,KAAKxB,GAASc,UACRzW,EAAM2W,KAAS3I,IAAI,EAAG,QAC1BnhB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,WAAWC,cACxCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,WAAWD,cACpC,MAEF,KAAKxB,GAASe,WACR1W,EAAM2W,KAAS3I,IAAI,EAAG,SAC1BnhB,EAAKkqB,UAAY/W,EAAIkX,QAAQ,SAASC,cACtCtqB,EAAKmqB,QAAUhX,EAAIoX,MAAM,SAASD,cAClC,MAEF,QACEtqB,EAAKkqB,UAAY,GACjBlqB,EAAKmqB,QAAU,GAKnB,OAAOnqB,ECpFIyqB,EAAAA,IAAuBC,GAAA,WAoDlC,SAAAD,EACE9J,EAC2BG,EACnB6J,GADmB1qB,KAAA6gB,UAAAA,EACnB7gB,KAAA0qB,SAAAA,EApDD1qB,KAAA2qB,cAA6B,IAAIvQ,EAAAA,YAAY,IAC7Cpa,KAAA4qB,UAAmB,CAC1B,CAAEtnB,MAAOulB,GAASC,OAAQ+B,UAAW,UACrC,CAAEvnB,MAAOulB,GAASE,MAAO8B,UAAW,SACpC,CAAEvnB,MAAOulB,GAASG,UAAW6B,UAAW,aACxC,CAAEvnB,MAAOulB,GAASa,SAAUmB,UAAW,YACvC,CAAEvnB,MAAOulB,GAASI,UAAW4B,UAAW,aACxC,CAAEvnB,MAAOulB,GAASK,UAAW2B,UAAW,aACxC,CAAEvnB,MAAOulB,GAASc,UAAWkB,UAAW,aACxC,CAAEvnB,MAAOulB,GAASM,WAAY0B,UAAW,cACzC,CAAEvnB,MAAOulB,GAASO,WAAYyB,UAAW,cACzC,CAAEvnB,MAAOulB,GAASe,WAAYiB,UAAW,cACzC,CAAEvnB,MAAOulB,GAASQ,aAAcwB,UAAW,gBAC3C,CAAEvnB,MAAOulB,GAASS,aAAcuB,UAAW,gBAC3C,CAAEvnB,MAAOulB,GAASU,UAAWsB,UAAW,aACxC,CAAEvnB,MAAOulB,GAASW,UAAWqB,UAAW,aACxC,CAAEvnB,MAAOulB,GAASY,IAAKoB,UAAW,cAE3B7qB,KAAA8qB,SAAmB,YACnB9qB,KAAA+qB,OAAiB,UACjB/qB,KAAAgrB,WAAkB,SAClBhrB,KAAAirB,iBAA2B,EAI3BjrB,KAAAkrB,KAAkB,KAClBlrB,KAAA2e,UAAoB,kBAEpB3e,KAAAmrB,SAAmB,EAClBnrB,KAAAghB,oBAAsB,IAAI9a,EAAAA,aAC1BlG,KAAAuhB,gBAAkB,IAAIrb,EAAAA,aAGhClG,KAAA0hB,SAAgB,aAChB1hB,KAAA2hB,UAAiB,aAEjB3hB,KAAA4hB,aAAe,IAAIC,EAAAA,QACnB7hB,KAAA+hB,YAAc,kBACd/hB,KAAAmW,GAAK,mBAAmBsU,GAAwBjkB,SAChDxG,KAAAgiB,YAAc,GAQdhiB,KAAAorB,sBAAgC,EAuBxBprB,KAAAkiB,WAAY,EASZliB,KAAAmiB,WAAY,EAzBlBniB,KAAKoiB,aAAe1B,EAAYzI,MAAM,CACpCoK,aAAc,CAAC,QAGK,MAAlBriB,KAAK6gB,YACP7gB,KAAK6gB,UAAU2B,cAAgBxiB,aAjBnCmB,OAAAyB,eAAa4nB,EAAAvqB,UAAA,eAAY,KAAzB,SAA0BqD,GACxBtD,KAAK2qB,cAAcpS,SAASjV,GAC5BtD,KAAKqrB,eAAe/nB,oCAmBtBnC,OAAAyB,eACI4nB,EAAAvqB,UAAA,WAAQ,KADZ,WAC0B,OAAOD,KAAKkiB,eACtC,SAAa5e,GACXtD,KAAKoiB,aAAatO,IAAI,gBAAgB4O,cAActK,EAAAA,WAAWZ,UAC/DxX,KAAKkiB,UAAYS,EAAAA,sBAAsBrf,GACvCtD,KAAK4hB,aAAape,wCAIpBrC,OAAAyB,eACI4nB,EAAAvqB,UAAA,WAAQ,KADZ,WAC0B,OAAOD,KAAKmiB,eACtC,SAAa7e,GACXtD,KAAKmiB,UAAYQ,EAAAA,sBAAsBrf,GACvCtD,KAAKmiB,UAAYniB,KAAKoiB,aAAaQ,UAAY5iB,KAAKoiB,aAAaS,SACjE7iB,KAAK4hB,aAAape,wCAIpBrC,OAAAyB,eACI4nB,EAAAvqB,UAAA,QAAK,KADT,WAEE,OAAID,KAAKoiB,aAAalL,MACblX,KAAKoiB,aAAa9e,MAAM+e,aAE1B,QAET,SAAUtiB,GACRC,KAAKoiB,aAAa3J,WAAW,CAAE4J,aAActiB,GAAQ,KACrDC,KAAKmkB,eACLnkB,KAAK4hB,aAAape,wCAGpBgnB,EAAAvqB,UAAAqrB,mBAAA,6BACMC,EAAM,GASV,OARsB,QAAtBzc,EAAI9O,KAAKwrB,qBAAa,IAAA1c,OAAA,EAAAA,EAAEqb,qBAC6B,iBAA7B,QAAlBnb,EAAAhP,KAAKwrB,qBAAa,IAAAxc,OAAA,EAAAA,EAAEib,UAAUwB,iBAChCF,GAAO,MAAQvrB,KAAK0qB,SAASgB,UAAuC,QAA9Bxc,EAAmB,QAAnBD,EAACjP,KAAKwrB,qBAAa,IAAAvc,OAAA,EAAAA,EAAEgb,iBAAS,IAAA/a,OAAA,EAAAA,EAAEuc,gBAEvB,iBAA3B,QAAlBE,EAAA3rB,KAAKwrB,qBAAa,IAAAG,OAAA,EAAAA,EAAEzB,QAAQuB,iBAC9BF,GAAO,MAAQvrB,KAAK0qB,SAASgB,UAAqC,QAA5BE,EAAmB,QAAnBC,EAAC7rB,KAAKwrB,qBAAa,IAAAK,OAAA,EAAAA,EAAE3B,eAAO,IAAA0B,OAAA,EAAAA,EAAEH,iBAGjEF,GAGTf,EAAAvqB,UAAAqb,gBAAA,SAAgBvE,GACd/W,KAAKkrB,KAAKpX,IAAIiD,GAAOwB,SAAS,KAIhCiS,EAAAvqB,UAAA6rB,cAAA,SAAc/U,GACZ,OAAO/W,KAAKkrB,KAAKpX,IAAIiD,GAAOzT,OAG9BknB,EAAAvqB,UAAA8rB,cAAA,SAAchV,EAAezT,GAC3BtD,KAAKkrB,KAAKpX,IAAIiD,GAAOwB,SAASjV,IAGhCknB,EAAAvqB,UAAAorB,eAAA,SAAe/nB,GACb,IAAM0oB,EAAWjC,GAAkBzmB,GAC/B0oB,IACFhsB,KAAK+rB,cAAc/rB,KAAK8qB,SAAUkB,EAAS/B,WAC3CjqB,KAAK+rB,cAAc/rB,KAAK+qB,OAAQiB,EAAS9B,SACzClqB,KAAKorB,qBAAuBY,EAAS7B,oBAIzCK,EAAAvqB,UAAAkkB,aAAA,WACE,GAAkB,GAAdnkB,KAAKsD,MAAT,CAIA,IAAM2oB,EAAuBlC,GAAkB/pB,KAAKsD,OACpDtD,KAAKwrB,cAAgBS,EACrBjsB,KAAK0hB,SAAS1hB,KAAKsD,OACnBtD,KAAKghB,oBAAoB/Z,KAAKjH,KAAKgjB,eACnChjB,KAAKuhB,gBAAgBta,KAAKglB,QAPxBjsB,KAAKksB,OAAOlR,QAUhBwP,EAAAvqB,UAAAksB,gBAAA,SAAgBC,EAAkCC,GAChD,IAAMJ,EAAuB,CAC3BhC,UAAY,IAAIzZ,KAAK4b,EAAe9oB,OACpC4mB,QAAS,IAAI1Z,KAAK6b,EAAa/oB,OAC/B6mB,mBAAmB,GAErBnqB,KAAKwrB,cAAgBS,EACrBjsB,KAAK0hB,SAAS1hB,KAAKsD,OACnBtD,KAAKghB,oBAAoB/Z,KAAKjH,KAAKgjB,eACnChjB,KAAKuhB,gBAAgBta,KAAKglB,IAG5BzB,EAAAvqB,UAAAqsB,mBAAA,SAAmB/jB,KAGnBiiB,EAAAvqB,UAAAsjB,kBAAA,SAAkBC,GAChBxjB,KAAKgiB,YAAcwB,EAAIC,KAAK,MAG9B+G,EAAAvqB,UAAAyjB,iBAAA,SAAiBnb,GACfA,EAAME,mBAGR+hB,EAAAvqB,UAAA0jB,WAAA,SAAW5jB,GACTC,KAAKsD,MAAQvD,GAGfyqB,EAAAvqB,UAAA2jB,iBAAA,SAAiBC,GACf7jB,KAAK0hB,SAAWmC,GAGlB2G,EAAAvqB,UAAA6jB,kBAAA,SAAkBD,GAChB7jB,KAAK2hB,UAAYkC,GAGnB2G,EAAAvqB,UAAA8jB,iBAAA,SAAiBC,GACfhkB,KAAKikB,SAAWD,GAGlBwG,EAAAvqB,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACE8L,QAAQD,IAAI7L,KAAKkrB,MAEjBlrB,KAAK2qB,cAAcjQ,aACjB7T,KACE8T,EAAAA,aAAa,KACbC,EAAAA,uBACAxT,EAAAA,eAAepH,OACf8G,WAAU,SAAAxD,GAAS,OAAAoD,EAAK2kB,eAAe/nB,OAG7CknB,EAAAvqB,UAAAmK,YAAA,WACEpK,KAAK4hB,aAAa1P,cAnMc,GAsC3BsY,EAAAA,IAAAA,OAAS,0BAjDjBlqB,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,sBACVC,SAAA,0wFAEAykB,UAAW,CACT,CACEC,QAASC,EAAAA,oBACTC,YAAaoF,kEAhBY9Q,EAAAA,mBAAqC6L,EAAAA,UAAS5kB,WAAA,CAAA,CAAAC,KA0ExE0U,EAAAA,UAAQ,CAAA1U,KAAI4kB,EAAAA,cA5ER8G,EAAAA,gDAwBNhiB,EAAAA,UAAShK,KAAA,CAAC,iCACV8J,EAAAA,yBACAA,EAAAA,wBAiBAA,EAAAA,sBACAA,EAAAA,0BACAA,EAAAA,+BACAA,EAAAA,oBAIAA,EAAAA,yBACAA,EAAAA,6BACAA,EAAAA,uBACAA,EAAAA,mCACAC,EAAAA,gCACAA,EAAAA,6BAYAD,EAAAA,wBAqBAA,EAAAA,wBASAA,EAAAA,qBASAA,EAAAA,SApFUmgB,EAAAA,IAAuBC,GAAAzoB,EAAA,CAZnC0I,EAAAA,gBAYY8f,EAAAA,uBCVX,SAAAgC,IAJSxsB,KAAAyhB,WAAY,EACZzhB,KAAA0d,KAAO,UAKhB8O,EAAAvsB,UAAAC,SAAA,uCAbDI,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,aACVC,SAAA,iYAKC4J,EAAAA,oBACAA,EAAAA,uBACAA,EAAAA,gBCUH,kCAfCoiB,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CACZre,GACAC,IAEFqe,QAAS,CACPC,EAAAA,aACAC,EAAAA,kBACAC,EAAAA,eAEFC,QAAS,CACP1e,GACAC,QCbJ,IAAMzC,GAAM,IAAIR,GAAO,qCAOrB,SAAA2hB,EAAoBC,EACVC,GADUltB,KAAAitB,OAAAA,EACVjtB,KAAAktB,mBAAAA,SAEVF,EAAA/sB,UAAAktB,YAAA,SAAYC,EAA+BC,GACzC,OAAOrtB,KAAKstB,oBAAoBF,EAAOC,IAGzCL,EAAA/sB,UAAAstB,QAAA,SAAQH,EAA+BC,GACrC,OAAOrtB,KAAKstB,oBAAoBF,EAAOC,IAGzCL,EAAA/sB,UAAAqtB,oBAAA,SAAoBF,EAA+BC,GACjD,QAAIrtB,KAAKktB,mBAAmB/M,kBAI5BtU,GAAIH,MAAM,6DACV1L,KAAKitB,OAAOO,SAAS,CAAC,UAAW,CAAEC,YAAa,CAAEC,SAAUL,EAAM/c,KAAOqd,YAAY,KAC9E,iKAvBVhgB,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAPLggB,EAAAA,cACAtb,wBCcP,SAAAub,EAAoBX,EAAgDzX,GAAhDzV,KAAAktB,mBAAAA,EAAgDltB,KAAAyV,KAAAA,SAOpEoY,EAAA5tB,UAAA6tB,MAAA,SAAMC,GAAN,IAAArnB,EAAA1G,KACQD,EAAoB,GAC1B,OAAOC,KAAKyV,KACTX,YACAkB,KAAK,cAAe+X,GACpBlnB,KACCmnB,EAAAA,WAAU,SAAOC,GAAc,OAAAprB,EAAA6D,OAAA,OAAA,GAAA,mEAKP,OAJtBunB,EAAUjb,WAAaxC,KAAK0C,MAAgC,IAAvB+a,EAAUjb,WAC/CjT,EAAKgT,MAAQkb,EACbluB,EAAKqgB,KAAO,GACZpgB,KAAKktB,mBAAmBxa,eAAe3S,EAAMguB,EAAQpb,UAC/B,CAAA,EAAM3S,KAAKyV,KAAK3B,IAAI,oBAAoB+B,oBAG9D,OAHMqY,EAAgBpf,EAAAvK,OACtBxE,EAAKqgB,KAAO8N,MAAAA,OAAQ,EAARA,EAAU9N,KACtBpgB,KAAKktB,mBAAmBxa,eAAe3S,EAAMguB,EAAQpb,UACrD,CAAA,EAAO5S,eASf8tB,EAAA5tB,UAAAkuB,OAAA,WAGE,OADAnuB,KAAKktB,mBAAmBxa,iBACjByQ,EAAAA,IAAG,2JAtCbxV,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDARQ0E,UACb6B,yBCMT,SAAAia,0DAA2C1sB,EAAA0sB,EAAA7Z,GAElC6Z,EAAAnuB,UAAAouB,aAAA,SAAajB,GAClB,OAAO,GAGFgB,EAAAnuB,UAAAquB,MAAA,SAAMlB,EAA+BmB,KAErCH,EAAAnuB,UAAAuuB,aAAA,SAAapB,GAClB,OAAO,GAGFgB,EAAAnuB,UAAAwuB,SAAA,SAASrB,GACd,OAAO,MAGFgB,EAAAnuB,UAAAyuB,iBAAA,SAAiBC,EAAgCC,aAGtD,OAAOD,EAAOE,cAAgBD,EAAKC,aACjCzS,SAA0B,QAAlBtN,EAAA6f,EAAOE,mBAAW,IAAA/f,OAAA,EAAAA,EAAEggB,aACR,QAAlB9f,EAAA2f,EAAOE,mBAAW,IAAA7f,OAAA,EAAAA,EAAE8f,cAA8B,QAArB7f,EAAK2f,EAAKC,mBAAW,IAAA5f,OAAA,EAAAA,EAAE6f,gBArBjBC,EAAAA,uIAH1CphB,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,6BCMV,SAAAohB,IAFQhvB,KAAAivB,WAAa,IAAIpN,EAAAA,eAMzBmN,EAAA/uB,UAAAivB,MAAA,WACI,OAAOlvB,KAAKivB,WAAWE,gBAG3BH,EAAA/uB,UAAA2S,QAAA,SAAQ1Q,EAAanC,GACjBwN,aAAaqF,QAAQ1Q,EAAKnC,GAC1BC,KAAKivB,WAAWzrB,KAAK,CAAEtB,IAAKA,EAAKoB,MAAOvD,KAG5CivB,EAAA/uB,UAAAwS,QAAA,SAAQvQ,GACJ,OAAOqL,aAAakF,QAAQvQ,IAGhC8sB,EAAA/uB,UAAAmvB,WAAA,SAAWltB,GACP,IAAMnC,EAAOC,KAAKyS,QAAQvQ,GAC1BqL,aAAa6hB,WAAWltB,GACxBlC,KAAKivB,WAAWzrB,KAAK,CAAEtB,IAAKA,EAAKoB,MAAOvD,6HA1B/C4N,EAAAA,WAAUpN,KAAA,CAAC,CACRqN,WAAY,oECIZ,SAAAyhB,EAAoB5Z,GAAAzV,KAAAyV,KAAAA,SAWpB4Z,EAAApvB,UAAAqvB,IAAA,SAAIC,EAAc3Z,GACd,YADc,IAAAA,IAAAA,EAAA,IACP5V,KAAKyV,KACP3B,IAAIyb,EAAM,CAAE3Z,OAAQA,IACpBC,aAYTwZ,EAAApvB,UAAAuvB,KAAA,SAAKD,EAAcE,GAKf,OAJI,MAAQA,IACRA,EAAS,CAAEC,MAAS,UAGjB1vB,KAAKyV,KACPO,KAAKuZ,EAAME,GACX5Z,aAYTwZ,EAAApvB,UAAA0vB,QAAA,SAAQJ,EAAcE,GAKlB,OAJI,MAAQA,IACRA,EAAS,CAAEC,MAAS,UAGjB1vB,KAAKyV,KACPV,aACAiB,KAAKuZ,EAAME,GACX5Z,aAaTwZ,EAAApvB,UAAA2vB,IAAA,SAAIL,EAAcE,GAKd,OAJI,MAAQA,IACRA,EAAS,CAAEC,MAAS,UAGjB1vB,KAAKyV,KACPS,IAAIqZ,EAAME,GACV5Z,aAYTwZ,EAAApvB,UAAA4vB,MAAA,SAAMN,EAAcE,GAKhB,OAJI,MAAQA,IACRA,EAAS,CAAEC,MAAS,UAGjB1vB,KAAKyV,KACPqa,MAAMP,EAAME,GACZ5Z,aAWTwZ,EAAApvB,UAAA8vB,OAAA,SAAOR,GACH,OAAOvvB,KAAKyV,KACPY,OAAOkZ,GACP1Z,qJA/GZlI,EAAAA,WAAUpN,KAAA,CAAC,CACRqN,WAAY,qDATPuG,aCgET,kCA5BCsY,EAAAA,SAAQlsB,KAAA,CAAC,CACRwsB,QAAS,CACPiD,EAAAA,gBACAC,EAAAA,kBACAC,EAAAA,gBACAC,EAAAA,gBACAC,EAAAA,mBACAtD,EAAAA,cACAuD,EAAAA,eACAC,EAAAA,cACAC,EAAAA,cACAC,EAAAA,oBACAC,EAAAA,gBACAC,EAAAA,yBACAC,EAAAA,wBACAC,EAAAA,gBACAC,EAAAA,gBACAC,EAAAA,cACAC,EAAAA,eACAC,EAAAA,cACAC,EAAAA,iBACAC,EAAAA,eACAC,EAAAA,oBACAC,EAAAA,cACAC,EAAAA,iBACAC,EAAAA,kCC1BF,SAAoCC,GAElC,GAAIA,EACF,MAAM,IAAIplB,MAASolB,EAAY,+FA1BpC9E,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPC,EAAAA,aACA4E,EAAAA,iBACAC,EAAAA,aACAC,IAEFxM,UAAW,CACT,CACEC,QAASjQ,EAAAA,WACTyc,SAAUxd,IAEZ,CACEgR,QAAS4J,EAAAA,mBACT4C,SAAUvD,KAGdrB,QAAS,CACP2E,kDAKgDE,GAAUhxB,WAAA,CAAA,CAAAC,KAA/C0U,EAAAA,UAAQ,CAAA1U,KAAIgxB,EAAAA,qBCd3B,kCAhBCpF,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPmF,EAAAA,iBACAlF,EAAAA,aACAmF,IAEFrF,aAAc,CACZ7sB,GAEFktB,QAAS,CACPltB,GAEFmyB,gBAAiB,CACfnyB,cCGJ,kCAdC4sB,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPmF,EAAAA,iBACAlF,EAAAA,aACAqF,EAAAA,qBACAF,IAEFrF,aAAc,CACZ7mB,EAAAA,IAEFknB,QAAS,CACPlnB,EAAAA,eCEJ,kCAdC4mB,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPC,EAAAA,aACAkF,EAAAA,iBACAI,EAAAA,mBACAH,IAEFrF,aAAc,CACZ/hB,IAEFoiB,QAAS,CACPpiB,eCDJ,kCAXC8hB,EAAAA,SAAQlsB,KAAA,CAAC,CACNosB,QAAS,CACLC,EAAAA,aACAkF,EAAAA,iBACAC,IAEJrF,aAAc,CACV1Q,IAEJ+Q,QAAS,CAAC/Q,eCgBd,kCAlBCyQ,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAACjV,GAAyBmC,EAAAA,IACxC+S,QAAS,CACPC,EAAAA,aACAuF,EAAAA,YACAC,EAAAA,oBACAN,EAAAA,iBACAO,GACAC,GACAL,EAAAA,qBACAM,GACAR,IAEFhF,QAAS,CACPnT,EAAAA,IAEFoY,gBAAiB,CAACva,0BCdlB,SAAA+a,IANSxyB,KAAAyyB,UAAoB,IAE7BzyB,KAAA0yB,YAAsB,EAEtB1yB,KAAA2yB,aAAuB,SAIvBH,EAAAvyB,UAAAC,SAAA,WACEF,KAAK4yB,iBAGPJ,EAAAvyB,UAAA4yB,WAAA,WACE7yB,KAAK2yB,aAAe3yB,KAAK2yB,YACzB3yB,KAAK4yB,iBAGPJ,EAAAvyB,UAAA2yB,cAAA,WACE,IAAK5yB,KAAK8yB,MAAQ9yB,KAAK8yB,KAAKxwB,QAAUtC,KAAKyyB,UAIzC,OAHAzyB,KAAK+yB,YAAc/yB,KAAK8yB,KACxB9yB,KAAK2yB,aAAc,OACnB3yB,KAAK0yB,YAAa,GAGpB1yB,KAAK0yB,YAAa,EACM,GAApB1yB,KAAK2yB,YACP3yB,KAAK+yB,YAAc/yB,KAAK8yB,KAAKE,UAAU,EAAGhzB,KAAKyyB,WAAa,MAC/B,GAApBzyB,KAAK2yB,cACd3yB,KAAK+yB,YAAc/yB,KAAK8yB,iCAnC7BxyB,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,gBACVC,SAAA,uWAIC4J,EAAAA,yBACAA,EAAAA,gBCQH,kCAXCoiB,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC8F,IACf7F,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,kBAEF/E,QAAS,CACPyF,eCkBJ,kCApBC/F,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CACZ7N,GACAT,GACA0B,IAEF6M,QAAS,CACPC,EAAAA,aACAwF,EAAAA,oBACAH,EAAAA,qBACAH,EAAAA,iBACAS,GACAR,GACAkB,IAEFlG,QAAS,CACPlO,IAEFmT,gBAAiB,CAAC5T,eCNpB,kCAhBCqO,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPC,EAAAA,aACAwF,EAAAA,oBACAN,EAAAA,iBACAC,IAEFrF,aAAc,CACZlM,EAAAA,GACAkF,IAEFqH,QAAS,CACPvM,EAAAA,GACAkF,eCFJ,kCAVC+G,EAAAA,SAAQlsB,KAAA,CAAC,CACNosB,QAAS,CACLC,EAAAA,aACAuF,EAAAA,aAEJzF,aAAc,CACV/E,GAAkBc,IAEtBsE,QAAS,CAACpF,GAAkBc,QCdhC,OAMA,kCAJCgE,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,yBCcZ,kCAXChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAClC,EAAAA,KACfmC,QAAS,CACPC,EAAAA,aACAuG,GACArB,EAAAA,iBACAC,GACAK,EAAAA,qBAEFrF,QAAS,CAACvC,EAAAA,gBCFZ,kCAZCiC,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CACZF,IAEFG,QAAS,CACPC,EAAAA,aACA8D,EAAAA,0BAEF3D,QAAS,CACPP,QCXJ,OAMA,kCAJCC,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,yBCOZ,kCAPChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,GACdC,QAAS,CACPC,EAAAA,aACAwG,QCPJ,OAMA,kCAJC3G,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,yBCKZ,kCAPChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,GACdC,QAAS,CACPC,EAAAA,aACAyG,QCPJ,OAMA,kCAJC5G,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,kBCIA,IAAIpmB,GAAO,8BAAvB,IAEMiM,GAAqB,CACzBgc,QAAS,CACP9b,SAAU,oBAEZ+b,cAAe,CACb/b,SAAU,2BAUDgc,EAAAA,IAAkC,WAU7C,SAAAA,EAAoB7b,EACVD,EACAG,EACD/X,EACyBC,EACxB0V,GALUzV,KAAA2X,GAAAA,EACV3X,KAAA0X,qBAAAA,EACA1X,KAAA6X,aAAAA,EACD7X,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAAyV,KAAAA,EAERzV,KAAK+X,oBAICyb,EAAAvzB,UAAA8X,WAAA,WAGN/X,KAAKyzB,gBAAkBzzB,KAAK2X,GAAGM,MAAM,CACnC9B,GAAI,CAAC,IACLmd,QAAS,CAAC,GAAIlb,EAAAA,WAAWZ,UACzB+b,cAAe,CAAC,GAAInb,EAAAA,WAAWZ,aAKnCgc,EAAAvzB,UAAAC,SAAA,wBACuB,QAArB8O,EAAa,QAAbF,EAAI9O,KAAKD,YAAI,IAAA+O,OAAA,EAAAA,EAAE4kB,cAAM,IAAA1kB,OAAA,EAAAA,EAAEmH,MACrBnW,KAAK0zB,OAAS1zB,KAAKD,KAAK2zB,OACxB1zB,KAAKwY,YAAa,EAClBxY,KAAK2zB,aAA0B,QAAd1kB,EAAGjP,KAAK0zB,cAAM,IAAAzkB,OAAA,EAAAA,EAAE2kB,WACjC5zB,KAAK6zB,aAA0B,QAAd3kB,EAAGlP,KAAK0zB,cAAM,IAAAxkB,OAAA,EAAAA,EAAEkR,KACjCpgB,KAAKyzB,gBAAgBhb,WAAWzY,KAAK0zB,UAMzCF,EAAAvzB,UAAAsZ,OAAA,WAAA,IAAA7S,EAAA1G,KAGE,GAFAA,KAAKyzB,gBAAgBK,mBACrB9zB,KAAK+zB,wBAAyB,EAC1B/zB,KAAKyzB,gBAAgBvc,MAAO,CAC9BlX,KAAKg0B,iBAAkB,EACvB,IAAMje,EAAQ/V,KAAKyzB,gBAAgBnwB,OAEjCtD,KAAKwY,WACHxY,KAAKyV,KAAKS,IAAI,iCAAgCH,MAAAA,OAAK,EAALA,EAAOI,IAAMJ,GAC3D/V,KAAKyV,KAAKO,KAAK,+BAAgCD,IAEhDlP,KACCyc,EAAAA,UAAS,WAAM,OAAA5c,EAAKstB,iBAAkB,KACtC5sB,EAAAA,eAAepH,OACf8G,WAAU,SAAAnD,GACV+C,EAAKmR,aAAa7J,SAAS,kCAAmC,WAC9DtH,EAAK5G,UAAUM,MAAMuD,QAM7B6vB,EAAAvzB,UAAA2e,OAAA,WACE5e,KAAKF,UAAUM,SAIjBozB,EAAAvzB,UAAA6W,aAAA,SAAaC,GACX,OAAO/W,KAAK0X,qBAAqBZ,aAAaC,EAAO/W,KAAKyzB,gBAAiBzzB,KAAK+zB,yBAIlFP,EAAAvzB,UAAAoX,gBAAA,SAAgBN,GACd,OAAO/W,KAAK0X,qBAAqBL,gBAAgBN,EAAO/W,KAAKyzB,gBAAiBnc,KAGhFkc,EAAAvzB,UAAAmK,YAAA,eAhF6C,2BAL9C9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mCACVC,SAAA,q/DAvBkBkZ,EAAAA,mBAKX9C,UADA/I,UAHApN,EAAAA,6CAuCJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BAlCHoT,MAoBIqf,EAAAA,IAAkCxxB,EAAA,CAN9C0I,EAAAA,gBAMY8oB,EAAAA,YCHb,kCAbC/G,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC8G,EAAAA,KACf7G,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,iBACAM,EAAAA,oBACA6B,GACAC,GACAC,IAEFnC,gBAAiB,CAACwB,EAAAA,SCTpB,IAAM3nB,GAAM,IAAIR,GAAO,8BAQV+oB,EAAAA,IAAkC,WAqB7C,SAAAA,EACUva,EACApE,EACAwX,GAFAjtB,KAAA6Z,OAAAA,EACA7Z,KAAAyV,KAAAA,EACAzV,KAAAitB,OAAAA,EAtBVjtB,KAAAq0B,WAAoB,GACpBr0B,KAAAs0B,UAAuB,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACzDnI,KAAA2V,QAAe,CACbsJ,QAAS,mBAMXjf,KAAAu0B,eAA8B,IAAIna,EAAAA,YAAY,CAAC,QAAS,YAAa,mBAAoB,eAAgB,aAAc,YACvHpa,KAAAia,iBAA0B,GAC1Bja,KAAAw0B,wBAAiC,CAC/B,CAAEC,MAAO,EAAGnxB,MAAO,QAASoT,KAAM,SAClC,CAAE+d,MAAO,EAAGnxB,MAAO,YAAaoT,KAAM,QACtC,CAAE+d,MAAO,EAAGnxB,MAAO,mBAAoBoT,KAAM,cAC7C,CAAE+d,MAAO,EAAGnxB,MAAO,eAAgBoT,KAAM,WACzC,CAAE+d,MAAO,EAAGnxB,MAAO,UAAWoT,KAAM,mBAStC0d,EAAAn0B,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACEA,KAAKia,iBAAmBja,KAAKu0B,eAAejxB,MAC5CtD,KAAK00B,iBAED10B,KAAKkH,MACPlH,KAAKkH,KAAKC,WAAWN,KAAKO,EAAAA,eAAepH,OACtC8G,WAAU,SAACxD,GACVoD,EAAKiuB,WAAWrxB,OAKxBnC,OAAAyB,eAAIwxB,EAAAn0B,UAAA,kBAAe,KAAnB,WAAA,IAAAyG,EAAA1G,KACE,OAAOA,KAAKw0B,wBACTpf,QAAO,SAAAwf,GAAQ,OAAAluB,EAAK6tB,eAAejxB,MAAcuxB,MAAK,SAACta,GAAW,OAAAA,IAAMqa,EAAItxB,YAC5E4D,MAAK,SAACoW,EAAGpc,GAAM,OAACoc,EAAEmX,MAAQvzB,EAAEuzB,MAAS,EAAMvzB,EAAEuzB,MAAQnX,EAAEmX,OAAU,EAAI,KACrErQ,KAAI,SAAAwQ,GAAO,OAAAA,EAAItxB,0CAGpB8wB,EAAAn0B,UAAA60B,cAAA,WACE90B,KAAKia,iBAAmBja,KAAK+0B,iBAI/BX,EAAAn0B,UAAAy0B,eAAA,WAAA,IAAAhuB,EAAA1G,KACEA,KAAKyV,KAAK3B,IAAI,+BAAgC,CAAE8B,OAAMzU,OAAAke,OAAAle,OAAAke,OAAA,GAAOrf,KAAK2V,SAAY3V,KAAKs0B,aAChFztB,KAAKO,EAAAA,eAAepH,OACpB8G,WAAU,SAACnD,GACV+C,EAAK2tB,WAAa3tB,EAAK2tB,WAAWzuB,OAAOjC,EAAO5D,MAChD2G,EAAK4tB,UAAUpsB,KAAOvE,EAAO2b,aAC7B5Y,EAAK4tB,UAAUnsB,SAAWxE,EAAOmX,cAIvCsZ,EAAAn0B,UAAA+0B,aAAA,SAAazsB,GACXvI,KAAK2V,QAAOxU,OAAAke,OAAAle,OAAAke,OAAA,GACPrf,KAAK2V,SACLpN,GAELvI,KAAKuP,UAGP6kB,EAAAn0B,UAAAg1B,yBAAA,WAAA,IAAAvuB,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKwY,EAAAA,IAAoC,CACrEla,MAAO,QACP2B,WAAW,EACXlb,KAAM,KAGEob,cAAcrU,WAAU,SAACnD,GAC7BA,IACFkI,GAAIH,MAAM/H,GACV+C,EAAK6I,cAMX6kB,EAAAn0B,UAAAi1B,0BAAA,SAA0B3sB,EAAYmrB,GAAtC,IAAAhtB,EAAA1G,KACEuI,EAAME,kBACYzI,KAAK6Z,OAAOmB,KAAKwY,EAAAA,IAAoC,CACrEla,MAAO,QACP2B,WAAW,EACXlb,KAAM,CACJ2zB,OAAQA,KAIFvY,cAAcrU,WAAU,SAACnD,GAC7BA,IACFkI,GAAIH,MAAM/H,GACV+C,EAAK6I,cAKX6kB,EAAAn0B,UAAAk1B,4BAAA,SAA4B5sB,EAAYmrB,GAAxC,IAAAhtB,EAAA1G,KACEuI,EAAME,kBACYzI,KAAK6Z,OAAOmB,KAAKnb,EAAsB,CACvDyZ,MAAO,QACPvZ,KAAmB,CACjBmY,MAAO,sBACPjK,QAAS,6CAA6CylB,EAAOhd,KAAI,KAEnEuE,WAAW,IAGHE,cAAcrU,WAAU,SAAAnD,GAC5BA,GAEF+C,EAAK+O,KAAKY,OAAO,iCAAgCqd,MAAAA,OAAM,EAANA,EAAQvd,KACtDtP,KAAKO,EAAAA,eAAeV,IACpBI,WAAU,SAACnD,GACV+C,EAAK2tB,WAAa3tB,EAAK2tB,WAAWjf,QAAO,SAAAmF,GAAK,OAAAA,EAAEpE,KAAOud,EAAOvd,aAMxEie,EAAAn0B,UAAAoI,SAAA,WACMrI,KAAKs0B,UAAUnsB,SAAWnI,KAAKs0B,UAAUpsB,OAC3ClI,KAAKs0B,UAAUpsB,MAAQ,EACvBlI,KAAK00B,mBAITN,EAAAn0B,UAAA00B,WAAA,SAAWpsB,GACLA,EAAM6sB,YACRp1B,KAAK2V,QAAQsJ,QAAa1W,EAAM8sB,OAAM,IAAI9sB,EAAM6sB,UAChDp1B,KAAKuP,WAIT6kB,EAAAn0B,UAAAsP,OAAA,WACEvP,KAAKq0B,WAAa,GAClBr0B,KAAKs0B,UAAY,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACnDnI,KAAK00B,kBAIPN,EAAAn0B,UAAAmK,YAAA,eAnJ6C,2BAL9C9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mCACVC,SAAA,81HAjBOsb,EAAAA,iBAQA5H,UAHAyZ,EAAAA,4CAwBNrjB,EAAAA,UAAShK,KAAA,CAACiK,EAAAA,QAAS,CAAEC,QAAQ,OATnB2pB,EAAAA,IAAkCpyB,EAAA,CAN9C0I,EAAAA,gBAMY0pB,EAAAA,SCjBAkB,GAAQ,CACnBpd,MAAO,2BACPqd,YAAa,CACXC,KAAM,CAAC,aACPC,WAAY,MAIVC,GAAiB,CACrB,CACEC,KAAM,GACN7G,UAAWsF,EAAAA,IACXjH,YAAa,CAACH,IACdjtB,KAAMu1B,QAQV,kCAJC7I,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAASwC,KAChC3I,QAAS,CAAC0E,EAAAA,kBCrBZ,OAMA,kCAJChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,kBCICmE,EAAAA,IAAwC,WAMnD,SAAAA,EAAoBje,GAAA3X,KAAA2X,GAAAA,EAFV3X,KAAA61B,YAAc,IAAI3vB,EAAAA,aAG1BlG,KAAK+X,oBAGC6d,EAAA31B,UAAA8X,WAAA,WAGN/X,KAAK81B,iBAAmB91B,KAAK2X,GAAGM,MAAM,CACpCqb,QAAS,CAAC,IACVC,cAAe,CAAC,OAIpBqC,EAAA31B,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KAEEA,KAAK81B,iBAAiBpb,aAAa7T,KACjC8T,EAAAA,aAAa,KACbC,EAAAA,uBACAxT,EAAAA,eAAepH,OACf8G,WAAU,SAAAxD,GACVoD,EAAKmvB,YAAY5uB,KAAK3D,OAK1BsyB,EAAA31B,UAAAqb,gBAAA,SAAgBvE,GACd/W,KAAK81B,iBAAiBhiB,IAAIiD,GAAOwB,SAAS,KAG5Cqd,EAAA31B,UAAA6rB,cAAA,SAAc/U,GACZ,OAAO/W,KAAK81B,iBAAiBhiB,IAAIiD,GAAOzT,OAI1CsyB,EAAA31B,UAAAmK,YAAA,eAxCmD,2BALpD9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,0CACVC,SAAA,ilCAPkBkZ,EAAAA,wDAcjBrP,EAAAA,UAJUsrB,EAAAA,IAAwC5zB,EAAA,CANpD0I,EAAAA,gBAMYkrB,EAAAA,YCYb,kCAZCnJ,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAACkJ,EAAAA,KACfjJ,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,iBACAM,EAAAA,oBACA6B,GACA8B,IAEFhJ,QAAS,CAAC6I,EAAAA,gBCMZ,kCAdCnJ,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC0H,EAAAA,KACfzH,QAAS,CACPC,EAAAA,aACAqF,EAAAA,qBACAF,GACAD,EAAAA,iBACAM,EAAAA,oBACA4D,GACAC,GACAC,IAEFnJ,QAAS,CAACqH,EAAAA,SCtBZ,OAOA,kCALC3H,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,yBCMZ,kCAPChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,GACdC,QAAS,CACPC,EAAAA,aACAuJ,QCPJ,OAMA,kCAJC1J,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,kBCEZ,IAAMna,GAAqB,CACzBY,MAAO,CACLV,SAAU,qBAEZ4e,KAAM,CACJ5e,SAAU,oBAEZ6e,aAAc,CACZ7e,SAAU,0BAUD8e,EAAAA,IAAkC,WAU7C,SAAAA,EAAoB3e,EACVD,EACAG,EACD/X,EACyBC,EACxB0V,GALUzV,KAAA2X,GAAAA,EACV3X,KAAA0X,qBAAAA,EACA1X,KAAA6X,aAAAA,EACD7X,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAAyV,KAAAA,EAERzV,KAAK+X,oBAICue,EAAAr2B,UAAA8X,WAAA,WAGN/X,KAAKu2B,+BAAiCv2B,KAAK2X,GAAGM,MAAM,CAClD9B,GAAI,CAAC,IACL+B,MAAO,CAAC,GAAIE,EAAAA,WAAWmG,QAAQ,CAACnG,EAAAA,WAAWZ,YAC3C4e,KAAM,CAAC,GAAIhe,EAAAA,WAAWmG,QAAQ,CAACnG,EAAAA,WAAWZ,YAC1C6e,aAAc,CAAC,GAAIje,EAAAA,WAAWZ,UAC9Bgf,YAAa,CAAC,OAIlBF,EAAAr2B,UAAAC,SAAA,sBACqC,QAAnC4O,EAAI9O,KAAKD,KAAK02B,6BAAqB,IAAA3nB,OAAA,EAAAA,EAAEqH,MACnCnW,KAAKyhB,WAAY,EACjBzhB,KAAKy2B,sBAAiC,QAAZznB,EAAGhP,KAAKD,YAAI,IAAAiP,OAAA,EAAAA,EAAEynB,sBACxCz2B,KAAKwY,YAAa,EAClBxY,KAAK02B,mBAA8C,QAA1BznB,EAAAjP,KAAKy2B,6BAAqB,IAAAxnB,OAAA,EAAAA,EAAE0nB,YAAa,GAClE32B,KAAKu2B,+BAA+B9d,WAAWzY,KAAKy2B,yBAKxDH,EAAAr2B,UAAAsZ,OAAA,WAAA,IAAA7S,EAAA1G,KAGE,GAFAA,KAAKu2B,+BAA+BzC,mBACpC9zB,KAAK42B,uCAAwC,EACzC52B,KAAKu2B,+BAA+Brf,MAAO,CAC7ClX,KAAKg0B,iBAAkB,EACvB,IAAMje,EAAQ/V,KAAKu2B,+BAA+BjzB,OAEhDtD,KAAKwY,WACHxY,KAAKyV,KAAKS,IAAI,iCAAgCH,MAAAA,OAAK,EAALA,EAAOI,IAAMJ,GAC3D/V,KAAKyV,KAAKO,KAAK,+BAAgCD,IAEhDlP,KACCyc,EAAAA,UAAS,WAAM,OAAA5c,EAAKstB,iBAAkB,KACtC5sB,EAAAA,eAAepH,OACf8G,WAAU,SAAAnD,GACV+C,EAAKmR,aAAa7J,SAAS,gCAAiC,WAC5DtH,EAAK5G,UAAUM,MAAMuD,QAM7B2yB,EAAAr2B,UAAA2e,OAAA,WACE5e,KAAKF,UAAUM,SAKjBk2B,EAAAr2B,UAAA6W,aAAA,SAAaC,GACX,OAAO/W,KAAK0X,qBAAqBZ,aAAaC,EAAO/W,KAAKu2B,+BAAgCv2B,KAAK42B,wCAIjGN,EAAAr2B,UAAAoX,gBAAA,SAAgBN,GACd,OAAO/W,KAAK0X,qBAAqBL,gBAAgBN,EAAO/W,KAAKu2B,+BAAgCjf,KAG/Fgf,EAAAr2B,UAAAmK,YAAA,eAjF6C,2BAL9C9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mCACVC,SAAA,giFAvBkBkZ,EAAAA,mBAKX9C,UADA/I,UAHApN,EAAAA,6CAuCJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BAlCHoT,MAoBImiB,EAAAA,IAAkCt0B,EAAA,CAN9C0I,EAAAA,gBAMY4rB,EAAAA,YCAb,kCAdC7J,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC4J,EAAAA,KACf3J,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,iBACAM,EAAAA,oBACA6B,GACA4C,GACA1C,IAEFpH,QAAS,CAACuJ,EAAAA,KACVtE,gBAAiB,CAACsE,EAAAA,SCPPQ,EAAAA,IAAkC,WAyB7C,SAAAA,EACUjd,EACApE,GADAzV,KAAA6Z,OAAAA,EACA7Z,KAAAyV,KAAAA,EAzBVzV,KAAA+2B,0BAAmC,GACnC/2B,KAAAs0B,UAAuB,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACzDnI,KAAA2V,QAAe,CACbsJ,QAAS,kBACT+X,iBAAiB,EACjBC,UAAW,CAAC,cAEdj3B,KAAAma,OAAsB,IAAIC,EAAAA,YAAY,IAKtCpa,KAAAu0B,eAA8B,IAAIna,EAAAA,YAAY,CAAC,QAAS,QAAS,kBAAmB,cAAe,YACnGpa,KAAAia,iBAA0B,GAC1Bja,KAAAw0B,wBAAiC,CAC/B,CAAEC,MAAO,EAAGnxB,MAAO,QAASoT,KAAM,SAClC,CAAE+d,MAAO,EAAGnxB,MAAO,QAASoT,KAAM,SAClC,CAAE+d,MAAO,EAAGnxB,MAAO,OAAQoT,KAAM,QACjC,CAAE+d,MAAO,EAAGnxB,MAAO,kBAAmBoT,KAAM,aAC5C,CAAE+d,MAAO,EAAGnxB,MAAO,cAAeoT,KAAM,eACxC,CAAE+d,MAAO,EAAGnxB,MAAO,UAAWoT,KAAM,mBAQtCogB,EAAA72B,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACEA,KAAKia,iBAAmBja,KAAKu0B,eAAejxB,MAC5CtD,KAAK00B,iBACL10B,KAAKma,OAAOO,aAAa7T,KACvB8T,EAAAA,aAAa,KACbC,EAAAA,uBACAxT,EAAAA,eAAepH,OACf8G,WAAU,SAAAxD,GACVoD,EAAKiP,QAAQwE,OAAS7W,EACtBoD,EAAK6I,YAGHvP,KAAKkH,MACPlH,KAAKkH,KAAKC,WAAWN,KAAKO,EAAAA,eAAepH,OACtC8G,WAAU,SAACxD,GACVoD,EAAKiuB,WAAWrxB,OAKxBnC,OAAAyB,eAAIk0B,EAAA72B,UAAA,kBAAe,KAAnB,WAAA,IAAAyG,EAAA1G,KACE,OAAOA,KAAKw0B,wBACTpf,QAAO,SAAAwf,GAAQ,OAAAluB,EAAK6tB,eAAejxB,MAAcuxB,MAAK,SAACta,GAAW,OAAAA,IAAMqa,EAAItxB,YAC5E4D,MAAK,SAACoW,EAAGpc,GAAM,OAACoc,EAAEmX,MAAQvzB,EAAEuzB,MAAS,EAAMvzB,EAAEuzB,MAAQnX,EAAEmX,OAAU,EAAI,KACrErQ,KAAI,SAAAwQ,GAAO,OAAAA,EAAItxB,0CAGpBwzB,EAAA72B,UAAA60B,cAAA,WACE90B,KAAKia,iBAAmBja,KAAK+0B,iBAI/B+B,EAAA72B,UAAAy0B,eAAA,WAAA,IAAAhuB,EAAA1G,KACEA,KAAKyV,KAAK3B,IAAI,+BAAgC,CAAE8B,OAAMzU,OAAAke,OAAAle,OAAAke,OAAA,GAAOrf,KAAK2V,SAAY3V,KAAKs0B,aAChFztB,KAAKO,EAAAA,eAAepH,OACpB8G,WAAU,SAACnD,GACV+C,EAAKqwB,0BAA4BrwB,EAAKqwB,0BAA0BnxB,OAAOjC,EAAO5D,MAC9E2G,EAAK4tB,UAAUpsB,KAAOvE,EAAO2b,aAC7B5Y,EAAK4tB,UAAUnsB,SAAWxE,EAAOmX,cAIvCgc,EAAA72B,UAAAi3B,yBAAA,WAAA,IAAAxwB,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKsb,EAAAA,IAAoC,CACrEhd,MAAO,QACP2B,WAAW,EACXlb,KAAM,KAGEob,cAAcrU,WAAU,SAACnD,GAC7BA,GACF+C,EAAK6I,aAMXunB,EAAA72B,UAAAk3B,0BAAA,SAA0B5uB,EAAYkuB,GAAtC,IAAA/vB,EAAA1G,KACEuI,EAAME,kBACYzI,KAAK6Z,OAAOmB,KAAKsb,EAAAA,IAAoC,CACrEhd,MAAO,QACP2B,WAAW,EACXlb,KAAM,CACJ02B,sBAAuBA,KAIjBtb,cAAcrU,WAAU,SAACnD,GAC7BA,GACF+C,EAAK6I,aAKXunB,EAAA72B,UAAAm3B,4BAAA,SAA4B7uB,EAAYkuB,GAAxC,IAAA/vB,EAAA1G,KACEuI,EAAME,kBACYzI,KAAK6Z,OAAOmB,KAAKnb,EAAsB,CACvDyZ,MAAO,QACPvZ,KAAmB,CACjBmY,MAAO,oBACPjK,QAAS,iDAAiDwoB,EAAsBve,MAAK,KAEvF+C,WAAW,IAGHE,cAAcrU,WAAU,SAAAnD,GAC5BA,GAEF+C,EAAK+O,KAAKY,OAAO,iCAAgCogB,MAAAA,OAAqB,EAArBA,EAAuBtgB,KACrEtP,KAAKO,EAAAA,eAAeV,IACpBI,WAAU,SAACnD,GACV+C,EAAKqwB,0BAA4BrwB,EAAKqwB,0BAA0B3hB,QAAO,SAAAmF,GAAK,OAAAA,EAAEpE,KAAOsgB,EAAsBtgB,aAMrH2gB,EAAA72B,UAAAoI,SAAA,WACMrI,KAAKs0B,UAAUnsB,SAAWnI,KAAKs0B,UAAUpsB,OAC3ClI,KAAKs0B,UAAUpsB,MAAQ,EACvBlI,KAAK00B,mBAIToC,EAAA72B,UAAA00B,WAAA,SAAWpsB,GACLA,EAAM6sB,YACRp1B,KAAK2V,QAAQsJ,QAAa1W,EAAM8sB,OAAM,IAAI9sB,EAAM6sB,UAChDp1B,KAAKuP,WAITunB,EAAA72B,UAAAsP,OAAA,WACEvP,KAAK+2B,0BAA4B,GACjC/2B,KAAKs0B,UAAY,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACnDnI,KAAK00B,kBAGPoC,EAAA72B,UAAAmK,YAAA,eAnJ6C,2BAL9C9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mCACVC,SAAA,o1IAdOsb,EAAAA,iBAOA5H,wCAsBN5J,EAAAA,UAAShK,KAAA,CAACiK,EAAAA,QAAS,CAAEC,QAAQ,OAZnBqsB,EAAAA,IAAkC90B,EAAA,CAN9C0I,EAAAA,gBAMYosB,EAAAA,SCZAO,GAAQ,CACnBnf,MAAO,0BACPqd,YAAa,CACXC,KAAM,CAAC,gBACPC,WAAY,MAKVC,GAAiB,CACrB,CACEC,KAAM,GACN7G,UAAWgI,EAAAA,IACX3J,YAAa,CAACH,IACdjtB,KAAMs3B,QAQV,kCAJC5K,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAASwC,KAChC3I,QAAS,CAAC0E,EAAAA,yBCDZ,kCAbChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAACoK,EAAAA,KACfnK,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,iBACAM,EAAAA,oBACAH,EAAAA,qBACAqF,GACAC,IAEFxK,QAAS,CAAC+J,EAAAA,SCZCU,EAAAA,IAAiC,WAU5C,SAAAA,EACU/hB,GAAAzV,KAAAyV,KAAAA,EATVzV,KAAAy3B,cAAuB,GACvBz3B,KAAAs0B,UAAuB,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACzDnI,KAAA2V,QAAe,CACbsJ,QAAS,kBACT+X,iBAAiB,EACjBC,UAAW,4CAObO,EAAAv3B,UAAAC,SAAA,WACEF,KAAK03B,sBAGPF,EAAAv3B,UAAAy3B,mBAAA,WAAA,IAAAhxB,EAAA1G,KACEA,KAAKyV,KAAK3B,IAAI,+BAAgC,CAAE8B,OAAMzU,OAAAke,OAAAle,OAAAke,OAAA,GAAOrf,KAAK2V,SAAY3V,KAAKs0B,aAChFztB,KAAKO,EAAAA,eAAepH,OACpB8G,WAAU,SAACnD,GACV+C,EAAK+wB,cAAgB/wB,EAAK+wB,cAAc7xB,OAAOjC,EAAO5D,MACtD2G,EAAK4tB,UAAUpsB,KAAOvE,EAAO2b,aAC7B5Y,EAAK4tB,UAAUnsB,SAAWxE,EAAOmX,cAIvC0c,EAAAv3B,UAAAoI,SAAA,WACMrI,KAAKs0B,UAAUnsB,SAAWnI,KAAKs0B,UAAUpsB,OAC3ClI,KAAKs0B,UAAUpsB,MAAQ,EACvBlI,KAAK03B,uBAITF,EAAAv3B,UAAA6G,UAAA,SAAU6wB,GACR33B,KAAKyV,KAAKO,KAAK,kCAAmC,CAAEud,cAAeoE,MAAAA,OAAG,EAAHA,EAAKxhB,KACrEtP,KAAKO,EAAAA,eAAepH,OACpB8G,WAAU,SAACnD,GACVg0B,EAAIC,0BAA4Bj0B,MAAAA,OAAM,EAANA,EAAQ8V,SAI9C+d,EAAAv3B,UAAA43B,YAAA,SAAYF,SACV33B,KAAKyV,KAAKY,OAAO,iCAA8D,QAA9BvH,EAAA6oB,MAAAA,OAAG,EAAHA,EAAKC,iCAAyB,IAAA9oB,OAAA,EAAAA,EAAEqH,KAC9EtP,KAAKO,EAAAA,eAAepH,OACpB8G,WAAU,SAACzC,GACVszB,EAAIC,0BAA4B,SAKtCJ,EAAAv3B,UAAAsP,OAAA,WACEvP,KAAKy3B,cAAgB,GACrBz3B,KAAKs0B,UAAY,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACnDnI,KAAK03B,sBAGPF,EAAAv3B,UAAAmK,YAAA,eA1D4C,2BAL7C9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,kCACVC,SAAA,i0CANO0T,MASIqjB,EAAAA,IAAiCx1B,EAAA,CAN7C0I,EAAAA,gBAMY8sB,EAAAA,SCNAM,GAAQ,CACnBvC,YAAa,CACXC,KAAM,CAAC,kBAILE,GAAiB,CACrB,CACEC,KAAM,GACN7G,UAAW0I,EAAAA,IACXrK,YAAa,CAACH,IACdjtB,KAAM+3B,QAQV,kCAJCrL,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAASwC,KAChC3I,QAAS,CAAC0E,EAAAA,yBCDZ,kCAXChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC8K,EAAAA,KACf7K,QAAS,CACPC,EAAAA,aACAqF,EAAAA,qBACAF,GACAD,EAAAA,iBACAiG,IAEFhL,QAAS,CAACyK,EAAAA,2BCXV,SAAAQ,EAAoBviB,GAAAzV,KAAAyV,KAAAA,SAEpBuiB,EAAA/3B,UAAAg4B,mBAAA,SAAmBtiB,GACjB,OAAO3V,KAAKyV,KAAK3B,IAAI,uBAAwB,CAAE8B,OAAQD,IAAWE,aAGpEmiB,EAAA/3B,UAAAi4B,qBAAA,SAAqBC,GACnB,OAAOn4B,KAAKyV,KAAKO,KAAK,uBAAwBmiB,GAAgBtiB,aAGhEmiB,EAAA/3B,UAAAm4B,qBAAA,SAAqBD,GACnB,OAAOn4B,KAAKyV,KAAKS,IAAI,wBAAwBiiB,EAAehiB,GAAMgiB,GAAgBtiB,aAGpFmiB,EAAA/3B,UAAAo4B,qBAAA,SAAqBC,GACnB,OAAOt4B,KAAKyV,KAAKY,OAAO,wBAAwBiiB,GAAoBziB,aAGtEmiB,EAAA/3B,UAAAs4B,kBAAA,SAAkBD,GAChB,OAAOt4B,KAAKyV,KAAK3B,IAAI,wBAAwBwkB,GAAoBziB,aAGnEmiB,EAAA/3B,UAAAu4B,2BAAA,WACE,OAAOx4B,KAAKyV,KAAK3B,IAAI,qCAAqC+B,aAG5DmiB,EAAA/3B,UAAAw4B,uBAAA,SAAuBC,GACrB,OAAO14B,KAAKyV,KAAKO,KAAK,4BAA6B0iB,GAAoB7iB,aAGzEmiB,EAAA/3B,UAAA04B,yBAAA,WACE,OAAO34B,KAAKyV,KAAK3B,IAAI,oCAAoC+B,qJApC5DlI,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAJLuG,MCST,IAAMmD,GAAqB,CACzBY,MAAO,CACLV,SAAU,qBAEZohB,YAAa,CACXphB,SAAU,2BAEZqhB,QAAS,CACPrhB,SAAU,uBAEZgf,YAAa,CACXhf,SAAU,2BAEZshB,gBAAiB,CACfC,QAAS,0CAoBX,SAAAC,EACSl5B,EACyBC,EACxB4X,EACAD,EACAG,EACAohB,GALDj5B,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAA2X,GAAAA,EACA3X,KAAA0X,qBAAAA,EACA1X,KAAA6X,aAAAA,EACA7X,KAAAi5B,sBAAAA,EAfAj5B,KAAAk5B,OAAS,IAAIhzB,EAAAA,aAEvBlG,KAAAm5B,cAAwB,EAExBn5B,KAAAo5B,QAAmB,CACjB,CAAC,OAAQ,UACT,CAAC,gBAWDp5B,KAAK+X,oBAGCihB,EAAA/4B,UAAA8X,WAAA,WACN/X,KAAKq5B,mBAAqBr5B,KAAK2X,GAAGM,MAAM,CACtC9B,GAAI,IAAIiE,EAAAA,YAAY,IACpBlC,MAAO,IAAIkC,EAAAA,YAAY,GAAIhC,EAAAA,WAAWZ,UACtCgf,YAAa,IAAIpc,EAAAA,YAAY,GAAIhC,EAAAA,WAAWZ,UAC5CqhB,QAAS,IAAIze,EAAAA,YAAY,GAAIhC,EAAAA,WAAWZ,UACxCohB,YAAa,IAAIxe,EAAAA,YAAY,GAAIhC,EAAAA,WAAWZ,UAC5CshB,gBAAiB,IAAI1e,EAAAA,YAAY,GAAIhC,EAAAA,WAAWmG,QAAQ,CAACnG,EAAAA,WAAW2gB,QAAQ,8DAE1E/4B,KAAKD,KAAKu5B,wBACZt5B,KAAKm5B,cAAe,EACpBn5B,KAAKq5B,mBAAmB5gB,WAAWzY,KAAKD,KAAKu5B,yBAIjDN,EAAA/4B,UAAAC,SAAA,WACEF,KAAKu5B,OAAS,IAAIC,EAAAA,QAGdR,EAAA/4B,UAAAsZ,OAAA,mHACAvZ,KAAKq5B,mBAAmBniB,MAAxB,MAAA,CAAA,EAAA,GACEvT,OAAM,EACJoS,EAAQ/V,KAAKq5B,mBAAmB/1B,qDAG3BtD,KAAKm5B,aAAe,CAAA,EAAMn5B,KAAKi5B,sBAAsBb,qBAAqBriB,IAA1E,CAAA,EAAA,iBAAoBjH,EAAAE,EAAAzK,oBACzB,MAAA,CAAA,EAAMvE,KAAKi5B,sBAAsBf,qBAAqBniB,WAAtDjH,EAAAE,EAAAzK,+BADJZ,EAAMmL,EAEN9O,KAAK6X,aAAa7J,SAChB,yCACA,wCAGFhO,KAAK6X,aAAa7J,SAAS,+BAAgC,4BAEvDrK,GACF3D,KAAKF,UAAUM,MAAMuD,gCAM7Bq1B,EAAA/4B,UAAAqb,gBAAA,SAAgBvE,GACd/W,KAAKq5B,mBAAmBvlB,IAAIiD,GAAOwB,SAAS,KAG9CygB,EAAA/4B,UAAA6rB,cAAA,SAAc/U,GACZ,OAAO/W,KAAKq5B,mBAAmBvlB,IAAIiD,GAAOzT,OAI5C01B,EAAA/4B,UAAA6W,aAAA,SAAaC,GACX,OAAO/W,KAAK0X,qBAAqBZ,aAAaC,EAAO/W,KAAKq5B,oBAAoB,IAGhFL,EAAA/4B,UAAAoX,gBAAA,SAAgBN,GACd,OAAO/W,KAAK0X,qBAAqBL,gBAAgBN,EAAO/W,KAAKq5B,mBAAoB/hB,+BAlFpFhX,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,2BACVC,SAAA,2hHAvBOC,EAAAA,6CAuCJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BAzCH4Y,EAAAA,mBACA9C,UALA/I,UACAkqB,uCAiCN1tB,EAAAA,iBCVH,kCAhBCmiB,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAACsM,IACfrM,QAAS,CACPC,EAAAA,aACAwF,EAAAA,oBACAL,GACAD,EAAAA,iBACA2H,EAAAA,iBAEF1M,QAAS,CACPiM,IAEFhH,gBAAiB,CACfgH,QCFSU,EAAAA,IAA4B,WAkBvC,SAAAA,EACU7f,EACAhC,EACAohB,EACAthB,GAHA3X,KAAA6Z,OAAAA,EACA7Z,KAAA6X,aAAAA,EACA7X,KAAAi5B,sBAAAA,EACAj5B,KAAA2X,GAAAA,EArBV3X,KAAA25B,gBAAyB,GACzB35B,KAAAia,iBAA6B,CAC3B,QACA,QACA,UACA,cACA,kBACA,cACA,UACA,WAEFja,KAAAkI,KAAe,EAEflI,KAAAoI,QAAkB,GAClBpI,KAAAka,WAAqB,EASnBla,KAAK45B,gBAAkB55B,KAAK2X,GAAGM,MAAM,CACnCkC,OAAQ,IAAIC,EAAAA,YAAY,IACxBye,QAAS,IAAIze,EAAAA,YAAY,IACzB6E,QAAS,IAAI7E,EAAAA,YAAY,6BAI7Bsf,EAAAz5B,UAAAC,SAAA,WACEF,KAAKof,WACLpf,KAAK65B,iBAGPH,EAAAz5B,UAAA45B,cAAA,WAAA,IAAAnzB,EAAA1G,KACEA,KAAK45B,gBAAgBlf,aAAa7T,KAAK8T,EAAAA,aAAa,KAAMvT,EAAAA,eAAepH,OACtE8G,WAAU,SAAAe,GACTnB,EAAK6I,aAIXmqB,EAAAz5B,UAAAmK,YAAA,aAEMsvB,EAAAz5B,UAAAmf,SAAA,6GAMgB,8BAJlBpf,KAAKka,WAAY,GACbvE,EAAe3V,KAAK45B,gBAAgBt2B,OAChC8E,QAAUpI,KAAKoI,QACvBuN,EAAQzN,KAAOlI,KAAKkI,KACF,CAAA,EAAMlI,KAAKi5B,sBAAsBhB,mBACjDtiB,kBADEhS,EAAcmL,EAAAvK,OAGlBvE,KAAKmI,SAAWxE,EAAOmX,WAAa9a,KAAKkI,KACzClI,KAAK25B,gBAAkB35B,KAAK25B,gBAAgB/zB,OAAOjC,EAAO5D,mCAE1DC,KAAK6X,aAAa7J,SAAS,+BAAgC,4BAG3DhO,KAAKka,WAAY,+BAIrBwf,EAAAz5B,UAAAsP,OAAA,WACEvP,KAAK25B,gBAAkB,GACvB35B,KAAKkI,KAAO,EACPlI,KAAKka,WACRla,KAAKof,YAITsa,EAAAz5B,UAAAoI,SAAA,YACOrI,KAAKka,WAAala,KAAKkI,KAAOlI,KAAKmI,WACtCnI,KAAKkI,MAAQ,EACblI,KAAKof,aAITsa,EAAAz5B,UAAA65B,qBAAA,SAAqB/jB,GAArB,IAAArP,EAAA1G,KACoBA,KAAK6Z,OAAOmB,KAAKge,GAA6B,CAC9D1f,MAAO,QACPvZ,KAAM,CACJu5B,sBAAuBvjB,KAIjBoF,cAAcrU,WAAU,SAAAnD,GAC5BA,GACF+C,EAAK6I,aAKLmqB,EAAAz5B,UAAAo4B,qBAAA,SAAqBtiB,wFACP/V,KAAK6Z,OAAOmB,KAAKnb,EAAsB,CACvDyZ,MAAO,QACPvZ,KAAmB,CACjBmY,MAAO,gBACPjK,QAAS,uCAEXgN,WAAW,IAGHE,cAAcrU,WAAU,SAAMnD,GAAM,OAAAd,EAAA6D,OAAA,OAAA,GAAA,iEACxC/C,EAAA,MAAA,CAAA,EAAA,oBAGA,6BAAA,CAAA,EAAM3D,KAAKi5B,sBAAsBZ,qBAAqBtiB,EAAMI,mBAA5DrH,EAAAvK,OACAvE,KAAK6X,aAAa7J,SAChB,kCACA,WAEFhO,KAAKuP,sCAELvP,KAAK6X,aAAa7J,SAAS,+BAAgC,oDAMnE0rB,EAAAz5B,UAAAqb,gBAAA,SAAgBvE,GACd/W,KAAK45B,gBAAgB9lB,IAAIiD,GAAOwB,SAAS,KAG3CmhB,EAAAz5B,UAAA85B,WAAA,SAAWxxB,GACT,IAAI6sB,EAAY7sB,EAAM6sB,UAAU4E,WAAWxc,cAC3Cxd,KAAKi6B,aAAa1xB,EAAM8sB,OAAQD,IAGlCsE,EAAAz5B,UAAAg6B,aAAA,SAAaC,EAAQ9E,GACnB,OAAQ8E,GACN,IAAK,QACH,OAAOl6B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,SAAW6c,GAEjE,IAAK,cACH,OAAOp1B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,eAAiB6c,GAEvE,IAAK,UACH,OAAOp1B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,WAAa6c,GAEnE,QACE,OAAOp1B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,uBA9InB,2BALxCjY,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,4BACVC,SAAA,oqJAROsb,EAAAA,iBACAjO,UAJAkqB,UACare,EAAAA,eAaT+f,EAAAA,IAA4B13B,EAAA,CANxC0I,EAAAA,gBAMYgvB,EAAAA,KCfb,IAAMhE,GAAiB,CACrB,CAAEC,KAAM,GAAIF,WAAY,MAAO0E,UAAW,QAC1C,CAAExE,KAAM,MAAO7G,UAAW4K,EAAAA,KAG1B,CACE/D,KAAM,KACNF,WAAY,MACZ0E,UAAW,YAQf,kCAJC1N,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAASwC,KAChC3I,QAAS,CAAC0E,EAAAA,yBCQZ,kCAdChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAACgN,EAAAA,KACf/M,QAAS,CACPC,EAAAA,aACAwF,EAAAA,oBACAH,EAAAA,qBACAH,EAAAA,iBACAC,GACAQ,GACA6H,GACAC,GACApH,0BCRF,SAAAqH,EACSx6B,EACyBC,EACxBktB,GAFDjtB,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAAitB,OAAAA,SAGVqN,EAAAr6B,UAAAC,SAAA,WACEF,KAAKm4B,eAAiBn4B,KAAKD,KAAKo4B,eAChCn4B,KAAKu6B,WAAav6B,KAAKD,KAAKw6B,YAG9BD,EAAAr6B,UAAAG,MAAA,WACEJ,KAAKF,UAAUM,SAGjBk6B,EAAAr6B,UAAAu6B,kBAAA,WACEx6B,KAAKI,QACLJ,KAAKitB,OAAOO,SAAS,CAACxtB,KAAKu6B,WAAa,+CA1B3Cj6B,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,kBACVC,SAAA,krFANOC,EAAAA,6CAeJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BAbH6sB,EAAAA,UCaI6M,EAAAA,IAA8B,WAkBzC,SAAAA,EACU5gB,EACAof,EACAthB,EACAE,GAHA7X,KAAA6Z,OAAAA,EACA7Z,KAAAi5B,sBAAAA,EACAj5B,KAAA2X,GAAAA,EACA3X,KAAA6X,aAAAA,EArBV7X,KAAA25B,gBAAyB,GACzB35B,KAAAia,iBAA6B,CAC3B,QACA,QACA,UACA,cACA,kBACA,cACA,UACA,WAEFja,KAAAkI,KAAe,EAEflI,KAAAoI,QAAkB,GAClBpI,KAAAka,WAAqB,EASnBla,KAAK45B,gBAAkB55B,KAAK2X,GAAGM,MAAM,CACnCkC,OAAQ,IAAIC,EAAAA,YAAY,IACxBye,QAAS,IAAIze,EAAAA,YAAY,IACzB6E,QAAS,IAAI7E,EAAAA,YAAY,6BAI7BqgB,EAAAx6B,UAAAC,SAAA,WACEF,KAAKof,WACLpf,KAAK65B,gBACL75B,KAAK24B,4BAGP8B,EAAAx6B,UAAA45B,cAAA,WAAA,IAAAnzB,EAAA1G,KACEA,KAAK45B,gBAAgBlf,aAAa7T,KAAK8T,EAAAA,aAAa,KAAMvT,EAAAA,eAAepH,OACtE8G,WAAU,SAAAe,GACTnB,EAAK6I,aAIXkrB,EAAAx6B,UAAAmK,YAAA,aAEMqwB,EAAAx6B,UAAAmf,SAAA,6GAMgB,8BAJlBpf,KAAKka,WAAY,GACbvE,EAAe3V,KAAK45B,gBAAgBt2B,OAChC8E,QAAUpI,KAAKoI,QACvBuN,EAAQzN,KAAOlI,KAAKkI,KACF,CAAA,EAAMlI,KAAKi5B,sBAAsBhB,mBACjDtiB,kBADEhS,EAAcmL,EAAAvK,OAGlBvE,KAAKmI,SAAWxE,EAAOmX,WAAa9a,KAAKkI,KACzClI,KAAK25B,gBAAkB35B,KAAK25B,gBAAgB/zB,OAAOjC,EAAO5D,mCAE1DC,KAAK6X,aAAa7J,SAAS,+BAAgC,4BAG3DhO,KAAKka,WAAY,+BAIrBugB,EAAAx6B,UAAAsP,OAAA,WACEvP,KAAK25B,gBAAkB,GACvB35B,KAAKkI,KAAO,EACPlI,KAAKka,WACRla,KAAKof,YAITqb,EAAAx6B,UAAAoI,SAAA,YACOrI,KAAKka,WAAala,KAAKkI,KAAOlI,KAAKmI,WACtCnI,KAAKkI,MAAQ,EACblI,KAAKof,aAITqb,EAAAx6B,UAAAqb,gBAAA,SAAgBvE,GACd/W,KAAK45B,gBAAgB9lB,IAAIiD,GAAOwB,SAAS,KAG3CkiB,EAAAx6B,UAAA85B,WAAA,SAAWxxB,GACT,IAAI6sB,EAAY7sB,EAAM6sB,UAAU4E,WAAWxc,cAC3Cxd,KAAKi6B,aAAa1xB,EAAM8sB,OAAQD,IAGlCqF,EAAAx6B,UAAAg6B,aAAA,SAAaC,EAAQ9E,GACnB,OAAQ8E,GACN,IAAK,QACH,OAAOl6B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,SAAW6c,GAEjE,IAAK,cACH,OAAOp1B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,eAAiB6c,GAEvE,IAAK,UACH,OAAOp1B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,WAAa6c,GAEnE,QACE,OAAOp1B,KAAK45B,gBAAgB9lB,IAAI,WAAWyE,SAAS,qBAK1DkiB,EAAAx6B,UAAAy6B,eAAA,SAAevC,GACKn4B,KAAK6Z,OAAOmB,KAAKsf,GAAqB,CACtDhhB,MAAO,QACP2B,WAAW,EACXlb,KAAM,CACJo4B,eAAgBA,EAChBwC,eAAe,MAKfF,EAAAx6B,UAAA04B,yBAAA,qGAEF,6BAAA,CAAA,EAAM34B,KAAKi5B,sBAAsBN,0CAAjC7pB,EAAAvK,oCAEAvE,KAAK6X,aAAa7J,SAAS,+BAAgC,yCAzHtB,2BAL1C1N,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,8BACVC,SAAA,0zIAPOsb,EAAAA,iBAHAic,UACare,EAAAA,mBAHb7L,MAeI2sB,EAAAA,IAA8Bz4B,EAAA,CAN1C0I,EAAAA,gBAMY+vB,EAAAA,KCbb,IAAM/E,GAAiB,CACrB,CAAEC,KAAM,GAAIF,WAAY,iBAAkB0E,UAAW,QACrD,CAAExE,KAAM,iBAAkB7G,UAAW2L,EAAAA,KAGrC,CACE9E,KAAM,KACNF,WAAY,MACZ0E,UAAW,YAQf,kCAJC1N,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAASwC,KAChC3I,QAAS,CAAC0E,EAAAA,yBCMZ,kCAbChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPC,EAAAA,aACAwF,EAAAA,oBACAH,EAAAA,qBACAH,EAAAA,iBACAC,GACAQ,GACAU,GACA2H,IAEFlO,aAAc,CAAC+N,EAAAA,gBCAjB,kCAdChO,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC4N,IACf3N,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,kBAEF/E,QAAS,CACPuN,IAEFtI,gBAAiB,CACfsI,0BCAF,SAAAO,EACqC96B,EAC3B+6B,EACAjhB,EACAoT,EACAgM,EACAphB,GAL2B7X,KAAAD,KAAAA,EAC3BC,KAAA86B,YAAAA,EACA96B,KAAA6Z,OAAAA,EACA7Z,KAAAitB,OAAAA,EACAjtB,KAAAi5B,sBAAAA,EACAj5B,KAAA6X,aAAAA,EAXV7X,KAAA+6B,qBAA4B,GAC5B/6B,KAAAg7B,gBAAuB,UAavBH,EAAA56B,UAAAC,SAAA,iBACEF,KAAKm4B,eAAiBn4B,KAAKD,KAAKo4B,eAChCn4B,KAAKu6B,WAAav6B,KAAKD,KAAKw6B,WAC5Bv6B,KAAKi7B,qBAAwC,QAApBnsB,EAAC9O,KAAKm4B,sBAAc,IAAArpB,OAAA,EAAAA,EAAE0nB,cAGjDqE,EAAA56B,UAAAG,MAAA,WACEJ,KAAKy4B,yBACLz4B,KAAK86B,YAAYI,WAGnBL,EAAA56B,UAAAg7B,qBAAA,SAAqBzE,IACdA,GAAeA,EAAYl0B,QAAUtC,KAAK+6B,qBAC7C/6B,KAAKg7B,gBAAkBxE,EAGzBx2B,KAAKg7B,gBAAkBxE,EAAYxD,UAAU,EAAGhzB,KAAK+6B,sBAAwB,OAG/EF,EAAA56B,UAAAy6B,eAAA,WACE16B,KAAKI,QACaJ,KAAK6Z,OAAOmB,KAAKsf,GAAqB,CACtDhhB,MAAO,QACP2B,WAAW,EACXlb,KAAM,CACJo4B,eAAgBn4B,KAAKm4B,eACrBoC,WAAYv6B,KAAKD,KAAKw6B,eAK5BM,EAAA56B,UAAAu6B,kBAAA,WACEx6B,KAAKI,QACLJ,KAAKitB,OAAOO,SAAS,CAACxtB,KAAKu6B,WAAa,qBAGpCM,EAAA56B,UAAAw4B,uBAAA,iHAKgB,6BAHdC,EAAqB,CACvByC,UAA8B,QAArBrsB,EAAE9O,KAAKm4B,sBAAc,IAAArpB,OAAA,EAAAA,EAAEqH,IAEhB,CAAA,EAAMnW,KAAKi5B,sBAAsBR,uBAAuBC,kBAAxD1pB,EAAAzK,oCAGlBvE,KAAK6X,aAAa7J,SAAS,+BAAgC,iEAhEhE1N,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,4BACVC,SAAA,6hEAUGK,EAAAA,OAAMP,KAAA,CAACsN,EAAAA,6BAhBHutB,EAAAA,sBAFArf,EAAAA,iBAIA6R,EAAAA,cALAoK,UADAlqB,wBCeP,SAAAutB,EACUttB,EACAkrB,EACAphB,GAFA7X,KAAA+N,SAAAA,EACA/N,KAAAi5B,sBAAAA,EACAj5B,KAAA6X,aAAAA,EALD7X,KAAAu6B,WAAqB,2BAQ9Bc,EAAAp7B,UAAAC,SAAA,aAGAm7B,EAAAp7B,UAAAwG,gBAAA,WAAA,IAAAC,EAAA1G,KACEs7B,YAAW,SAAA/gB,GACT7T,EAAK60B,iBACJ,MAGCF,EAAAp7B,UAAAs7B,aAAA,2GAEgB,6BAAA,CAAA,EAAMv7B,KAAKi5B,sBAAsBT,4CAA/C70B,EAAcmL,EAAAvK,OAClBvE,KAAKm4B,eAAiBx0B,EAAO8V,KACzBzZ,KAAKm4B,gBACPn4B,KAAKw7B,0CAIP1vB,QAAQD,IAAI,8DAIhBwvB,EAAAp7B,UAAAu7B,WAAA,WACEx7B,KAAK+N,SAASK,kBAAkBysB,GAA8B,CAC5D96B,KAAM,CACJo4B,eAAgBn4B,KAAKm4B,eACrBoC,WAAYv6B,KAAKu6B,YAEnBkB,mBAAoB,QACpBC,iBAAkB,MAClBC,WAAY,CAAC,yCA7ClBr7B,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,sBACVC,SAAA,uGALO8N,EAAAA,mBAFAypB,UAGAlqB,2CASNzD,EAAAA,gBCaH,kCAhBCoiB,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC2O,GAAyBR,IACxClO,QAAS,CACPC,EAAAA,aACAmF,GACA6J,GACA9J,EAAAA,iBACAS,IAEFxF,QAAS,CACPsO,IAEFrJ,gBAAiB,CACf6I,0BCVF,SAAAgB,IAHS77B,KAAA0W,KAAe,cACf1W,KAAAD,KAAc,UAIvB87B,EAAA57B,UAAAC,SAAA,aAGA27B,EAAA57B,UAAA67B,YAAA,WACE,IAAMC,EAAc/7B,KAAK0W,KAAI,KAAI,IAAIlG,MAAOwrB,UAAS,QAC/CC,EAAKC,EAAAA,MAAWC,cAAcn8B,KAAKD,MAEnCq8B,EAAoBF,EAAAA,MAAWG,WACrCH,EAAAA,MAAWI,kBAAkBF,EAAIH,EAAI,UAGrCM,EAAAA,UAAeH,EAAIL,8BAvBtBz7B,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,0BACVC,SAAA,+KAKC4J,EAAAA,oBACAA,EAAAA,gBCIH,kCARCoiB,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAACmP,IACflP,QAAS,CACPC,EAAAA,aACAmF,IAEFhF,QAAS,CAAC8O,QCDCW,EAAAA,2BAA0B,WAMrC,SAAAA,EACS18B,EACyBC,EACxB0V,GAFDzV,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAAyV,KAAAA,EANVzV,KAAAy8B,kBAA4B,EAC5Bz8B,KAAA08B,WAAoB,UAQpBF,EAAAv8B,UAAAC,SAAA,WAAA,QAAAwG,EAAA1G,KACMA,KAAKD,MACPC,KAAKyV,KAAK3B,IAAI,2BAA4B,CACxC8B,OAAQ,CACN4I,WAAqB,QAAX1P,EAAE9O,KAAKD,YAAI,IAAA+O,OAAA,EAAAA,EAAEqQ,UACvBwd,SAAmB,QAAX3tB,EAAEhP,KAAKD,YAAI,IAAAiP,OAAA,EAAAA,EAAE4tB,WAEtB/1B,KACDO,EAAAA,eAAepH,OACf8G,WAAU,SAACnD,GACX+C,EAAKm2B,QAAUl5B,MAAAA,OAAM,EAANA,EAAQ8V,KACvB/S,EAAKo2B,4BAKXN,EAAAv8B,UAAA68B,sBAAA,WAAA,YAAAp2B,EAAA1G,OAC6C,aAAb,QAAZ8O,EAAA9O,KAAK68B,eAAO,IAAA/tB,OAAA,EAAAA,EAAE7I,QAAwB9E,OAAO6P,KAAiB,QAAbhC,EAAChP,KAAK68B,eAAO,IAAA7tB,OAAA,EAAAA,EAAEygB,QAAUtuB,OAAO6P,KAAuB,QAAnB9B,EAAa,QAAbD,EAACjP,KAAK68B,eAAO,IAAA5tB,OAAA,EAAAA,EAAElP,YAAI,IAAAmP,OAAA,EAAAA,EAAErH,WAAa,IACjIL,SAAQ,SAACtF,iBACT66B,EAAoB76B,EAAeiI,MAAM,KAAKia,KAAI,SAAA7J,GAAK,OAAAA,EAAEsB,OAAO,GAAG2B,cAAgBjD,EAAEyiB,MAAM,MAAIvZ,KAAK,KAC1G/c,EAAKg2B,WAAWv3B,KAAK,CAAE43B,iBAAkBA,EAAkBE,UAAW/6B,EAAKg7B,SAAoC,aAAb,QAAZpuB,EAAApI,EAAKm2B,eAAO,IAAA/tB,OAAA,EAAAA,EAAE7I,QAAwB,GAA8B,QAA5BgJ,EAAgB,QAAhBD,EAAItI,EAAKm2B,eAAO,IAAA7tB,OAAA,EAAAA,EAAEygB,OAAOvtB,UAAG,IAAA+M,EAAAA,EAAK,GAAKkuB,SAAsC,QAA9BxR,EAAc,QAAdzc,EAAExI,EAAKm2B,eAAO,IAAA3tB,OAAA,EAAAA,EAAEkuB,WAAWl7B,UAAG,IAAAypB,EAAAA,EAAK,SAInN6Q,EAAAv8B,UAAAG,MAAA,WACEJ,KAAKF,UAAUM,WArCoB,kDALtCE,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,qBACVC,SAAA,smDAROC,EAAAA,6CAmBJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BAjBHoT,MASIqoB,EAAAA,2BAA0Bx6B,EAAA,CANtC0I,EAAAA,gBAMY8xB,EAAAA,4BCCAa,EAAAA,4BAA2B,WAEtC,SAAAA,EACSv9B,EACyBC,EACxBktB,GAFDjtB,KAAAF,UAAAA,EACyBE,KAAAD,KAAAA,EACxBC,KAAAitB,OAAAA,SAGVoQ,EAAAp9B,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACEA,KAAKitB,OAAOqQ,OACTz2B,KAAKuO,EAAAA,QAAO,SAAA7M,GAAS,OAAAA,aAAiBg1B,EAAAA,iBAAgBn2B,EAAAA,eAAepH,OACrE8G,WAAU,SAAAzC,GAAK,OAAAqC,EAAK5G,UAAUM,cAXG,mDALvCE,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,4BACVC,SAAA,iYATOC,EAAAA,6CAgBJI,EAAAA,OAAMP,KAAA,CAACQ,EAAAA,0BAfY6sB,EAAAA,UAWXyP,EAAAA,4BAA2Br7B,EAAA,CANvC0I,EAAAA,gBAMY2yB,EAAAA,+CCIX,SAAAG,EACU3jB,GAAA7Z,KAAA6Z,OAAAA,EAHD7Z,KAAAy9B,QAA4B,gBAMrCD,EAAAv9B,UAAAC,SAAA,aAIAs9B,EAAAv9B,UAAAy9B,WAAA,WACoB19B,KAAK6Z,OAAOmB,KAAKwhB,EAAAA,2BAA4B,CAC7DljB,MAAO,QACP2B,WAAW,EACXlb,KAAM,CACJof,UAAWnf,KAAKmf,UAChByd,QAAS58B,KAAK48B,YAKpBY,EAAAv9B,UAAA09B,YAAA,WACoB39B,KAAK6Z,OAAOmB,KAAKqiB,EAAAA,4BAA6B,CAC9D/jB,MAAO,MACPskB,SAAU,QACV3iB,WAAW,EACXlb,KAAM,CACJof,UAAWnf,KAAKmf,UAChByd,QAAS58B,KAAK48B,sCArCrBt8B,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,0BACVC,SAAA,mdAPOsb,EAAAA,iDAYN1R,EAAAA,uBACAA,EAAAA,uBACAA,EAAAA,SCZH,OAMA,kCAJCoiB,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,kBCJZ,OAMA,kCAJChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,yBCYZ,kCAVChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC8P,EAAAA,4BACf7P,QAAS,CACPC,EAAAA,aACAiR,GACA/L,EAAAA,iBACAC,IAEFhF,QAAS,CAACyP,EAAAA,gCCdZ,OAMA,kCAJC/P,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,kBCJZ,OAMA,kCAJChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,kBCSCqM,EAAAA,sBAAqB,WAehC,SAAAA,EACUC,EACA9Q,EACD+Q,GAFCh+B,KAAA+9B,YAAAA,EACA/9B,KAAAitB,OAAAA,EACDjtB,KAAAg+B,UAAAA,EAhBTh+B,KAAAi+B,aAAsB,GAGbj+B,KAAAk+B,YAAsB,EACtBl+B,KAAAm+B,mBAA6B,EAGtCn+B,KAAAs0B,UAAuB,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACzDnI,KAAA2V,QAAe,CAAEsJ,QAAS,mBAC1Bjf,KAAAia,iBAA0B,CAAC,QAAS,KAAM,cAAe,YAAa,SAAU,UAAW,aAAc,qBAUzG6jB,EAAA79B,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KAEEA,KAAK00B,iBAED10B,KAAKkH,MACPlH,KAAKkH,KAAKC,WAAWN,KAAKO,EAAAA,eAAepH,OACtC8G,WAAU,SAACxD,GACVoD,EAAKiuB,WAAWrxB,OAMxBnC,OAAAyB,eAAIk7B,EAAA79B,UAAA,YAAS,KAAb,WACE,OAAID,KAAKi+B,aAAa37B,OAAS,EACtBtC,KAAKi+B,aAAa7Z,KAAI,SAAA3K,SAC3B,MAAO,CACL2kB,KAAQ3kB,MAAAA,OAAI,EAAJA,EAAM4kB,YACdC,OAAU7kB,MAAAA,OAAI,EAAJA,EAAMxT,OAChBs4B,KAAQptB,KAAKC,WAAUqI,MAAAA,OAAI,EAAJA,EAAM1Z,OAAQ,IACrCoB,OAAUgQ,KAAKC,WAAUqI,MAAAA,OAAI,EAAJA,EAAMgW,SAAU,IACzC+O,aAAcrtB,KAAKC,WAAUqI,MAAAA,OAAI,EAAJA,EAAM2jB,aAAc,IACjDqB,aAAc,IAAIjuB,KAAKiJ,MAAAA,OAAI,EAAJA,EAAMilB,YAAYC,eACzCC,aAAwB,QAAZ9vB,EAAE2K,MAAAA,OAAI,EAAJA,EAAM2G,YAAI,IAAAtR,OAAA,EAAAA,EAAE+vB,UAIzB,oCAGTf,EAAA79B,UAAA00B,WAAA,SAAWpsB,GACLA,EAAM6sB,YACRp1B,KAAK2V,QAAQsJ,QAAa1W,EAAM8sB,OAAM,IAAI9sB,EAAM6sB,UAChDp1B,KAAKuP,WAITuuB,EAAA79B,UAAA6+B,WAAA,SAAWjzB,GACT7L,KAAKitB,OAAOO,SAAS,CAAC,8BAA+B3hB,EAAIsK,MAIrD2nB,EAAA79B,UAAAy0B,eAAA,2GAUW,OATX10B,KAAK++B,aACP/+B,KAAK2V,QAAOxU,OAAAke,OAAAle,OAAAke,OAAA,GAAQrf,KAAK2V,SAAO,CAAE0oB,YAAar+B,KAAK++B,cAElD/+B,KAAKg/B,WACPh/B,KAAK2V,QAAOxU,OAAAke,OAAAle,OAAAke,OAAA,GAAQrf,KAAK2V,SAAO,CAAEspB,UAAWj/B,KAAKg/B,YAEhDh/B,KAAKk/B,SACPl/B,KAAK2V,QAAOxU,OAAAke,OAAAle,OAAAke,OAAA,GAAQrf,KAAK2V,SAAO,CAAE2d,QAAStzB,KAAKk/B,UAEnC,CAAA,EAAMl/B,KAAK+9B,YAAYzO,IAAI,iBAAgBnuB,OAAAke,OAAAle,OAAAke,OAAA,GAAOrf,KAAK2V,SAAY3V,KAAKs0B,2BAAjF3wB,EAASsL,EAAA1K,OACfvE,KAAKi+B,aAAej+B,KAAKi+B,aAAar4B,OAAOjC,EAAO5D,MACpDC,KAAKs0B,UAAUpsB,KAAOvE,EAAO2b,aAC7Btf,KAAKs0B,UAAUnsB,SAAWxE,EAAOmX,sBAGnCgjB,EAAA79B,UAAA+0B,aAAA,SAAazsB,GACPvI,KAAKk+B,aACPl+B,KAAK2V,QAAOxU,OAAAke,OAAAle,OAAAke,OAAAle,OAAAke,OAAA,GACPrf,KAAK2V,SACLpN,GAAK,CACR81B,YAAar+B,KAAK++B,aAAcx2B,MAAAA,OAAK,EAALA,EAAO81B,cAAe,GACtDY,UAAWj/B,KAAKg/B,UAAY,KAE9Bh/B,KAAKuP,WAITuuB,EAAA79B,UAAAoI,SAAA,WACMrI,KAAKs0B,UAAUnsB,SAAWnI,KAAKs0B,UAAUpsB,OAC3ClI,KAAKs0B,UAAUpsB,MAAQ,EACvBlI,KAAK00B,mBAIToJ,EAAA79B,UAAAsP,OAAA,WACEvP,KAAKi+B,aAAe,GACpBj+B,KAAKs0B,UAAY,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACnDnI,KAAK00B,kBAGPoJ,EAAA79B,UAAA68B,sBAAA,SAAsBjxB,WACpB,GAAa,QAAbiD,EAAIjD,MAAAA,OAAG,EAAHA,EAAK9L,YAAI,IAAA+O,OAAA,EAAAA,EAAEjH,QAAS,CACtB,IAAMA,EAAU1G,OAAO6P,KAAc,QAAVhC,EAACnD,MAAAA,OAAG,EAAHA,EAAK9L,YAAI,IAAAiP,OAAA,EAAAA,EAAEnH,UAAY,GAC/Cs3B,EAAQ,QAMZ,OALAt3B,EAAQL,SAAQ,SAACtF,WACT66B,EAAoB76B,EAAeiI,MAAM,KAAKia,KAAI,SAAA7J,GAAK,OAAAA,EAAEsB,OAAO,GAAG2B,cAAgBjD,EAAEyiB,MAAM,MAAIvZ,KAAK,KAC1G0b,EAAWA,EAAK,YAAYpC,EAAgB,+BAAiD,QAAnBjuB,EAAAjD,MAAAA,OAAG,EAAHA,EAAKuxB,WAAWl7B,UAAG,IAAA4M,EAAAA,EAAK,IAAE,gCAA8C,QAAfE,EAAAnD,MAAAA,OAAG,EAAHA,EAAK4jB,OAAOvtB,UAAG,IAAA8M,EAAAA,EAAK,IAAE,mBAE3JmwB,GAAgB,UAGlB,MAAO,IAGTrB,EAAA79B,UAAAmK,YAAA,eAtHgC,6CALjC9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,qBACVC,SAAA,w8IANO4uB,UAJAzB,EAAAA,cAKAwR,EAAAA,wEAWN/0B,EAAAA,0BACAA,EAAAA,0BACAA,EAAAA,iCACAA,EAAAA,sBACAA,EAAAA,oBAMAE,EAAAA,UAAShK,KAAA,CAACiK,EAAAA,QAAS,CAAEC,QAAQ,OAbnBqzB,EAAAA,sBAAqB97B,EAAA,CANjC0I,EAAAA,gBAMYozB,EAAAA,uBCbb,OAMA,sBCPgBuB,KACZ,OAAO,SAACC,GAEJ,IAAMC,EAAW,IAAI/uB,KAAK8uB,EAAQh8B,OAClC,OAAMg8B,EAAQh8B,OAAgB,gBAAPi8B,EACZ,CAAEC,aAAa,GAEnB,2BDJd/S,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,kBEMCgO,EAAAA,4BAA2B,WAStC,SAAAA,EAAoB9nB,EAAyBD,GAAzB1X,KAAA2X,GAAAA,EAAyB3X,KAAA0X,qBAAAA,EAFnC1X,KAAA61B,YAAc,IAAI3vB,EAAAA,aAG1BlG,KAAK+X,oBAGP5W,OAAAyB,eAAI68B,EAAAx/B,UAAA,mBAAgB,KAApB,WACE,QAASD,KAAKg/B,UAAYh/B,KAAK++B,6CAGzBU,EAAAx/B,UAAA8X,WAAA,WAGN/X,KAAK0/B,mBAAqB1/B,KAAK2X,GAAGM,MAAM,CACtComB,YAAa,CAAC,IACdp4B,OAAQ,CAAC,IACTlG,KAAM,CAAC,IACPmqB,QAAS,CAAC,GAAImV,MACdpV,UAAW,CAAC,GAAIoV,SAIpBI,EAAAx/B,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KAEEA,KAAK0/B,mBAAmBhlB,aAAa7T,KACnC8T,EAAAA,aAAa,KACbC,EAAAA,uBACAxT,EAAAA,eAAepH,OACf8G,WAAU,SAACxD,GACXA,EAAM2mB,UAAY3mB,EAAM2mB,UAAa3mB,EAAM2mB,UAAmBI,cAAgB,GAC9E/mB,EAAM4mB,QAAU5mB,EAAM4mB,QAAW5mB,EAAM4mB,QAAiBG,cAAgB,GACxE3jB,EAAKmvB,YAAY5uB,KAAK3D,OAK1Bm8B,EAAAx/B,UAAAqb,gBAAA,SAAgBvE,GACd/W,KAAK0/B,mBAAmB5rB,IAAIiD,GAAOwB,SAAS,KAG9CknB,EAAAx/B,UAAA6rB,cAAA,SAAc/U,GACZ,OAAO/W,KAAK0/B,mBAAmB5rB,IAAIiD,GAAOzT,OAG5Cm8B,EAAAx/B,UAAA6W,aAAA,SAAaC,GACX,OAAO/W,KAAK0X,qBAAqBZ,aAAaC,EAAO/W,KAAK0/B,oBAAoB,IAIhFD,EAAAx/B,UAAAmK,YAAA,eAxDsC,mDALvC9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,4BACVC,SAAA,6kFATkBkZ,EAAAA,mBAGX9C,oEAaNxM,EAAAA,0BACAA,EAAAA,2BAEAC,EAAAA,UAPUm1B,EAAAA,4BAA2Bz9B,EAAA,CANvC0I,EAAAA,gBAMY+0B,EAAAA,oCCUb,kCAZChT,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC+S,EAAAA,6BACf9S,QAAS,CACPC,EAAAA,aACA+S,GACA7N,EAAAA,iBACAM,EAAAA,oBACAL,GACAkC,IAEFlH,QAAS,CAAC0S,EAAAA,wCCMZ,kCAdChT,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAACoR,EAAAA,uBACfnR,QAAS,CACPC,EAAAA,aACAgT,GACAC,GACA/N,EAAAA,iBACAM,EAAAA,oBACAL,GACAE,EAAAA,qBACA6N,IAEF/S,QAAS,CAAC+Q,EAAAA,kCCNZ,kCAVCrR,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC2Q,EAAAA,6BACf1Q,QAAS,CACPC,EAAAA,aACAmT,GACAjO,EAAAA,iBACAkO,IAEFjT,QAAS,CAACsQ,EAAAA,wCCMZ,kCAZC5Q,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC8Q,IACf7Q,QAAS,CACPsT,GACAC,GACAtT,EAAAA,aACAuT,GACArO,EAAAA,iBACAC,IAEFhF,QAAS,CAACyQ,0BCJV,SAAA4C,EACUrC,EACA3Q,EACA9d,GAFAtP,KAAA+9B,YAAAA,EACA/9B,KAAAotB,MAAAA,EACAptB,KAAAsP,SAAAA,EANVtP,KAAAy8B,kBAA4B,EAC5Bz8B,KAAA08B,WAAoB,UAQpB0D,EAAAngC,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACEA,KAAKotB,MAAMiT,SAASv5B,WAAU,SAAA8O,GACxBA,EAAO9B,IAAI,MACbpN,EAAK45B,eAAe1qB,EAAO9B,IAAI,OAE/BpN,EAAK4I,SAASixB,WAKpBH,EAAAngC,UAAA68B,sBAAA,WAAA,YAAAp2B,EAAA1G,OAC6C,aAAb,QAAZ8O,EAAA9O,KAAK68B,eAAO,IAAA/tB,OAAA,EAAAA,EAAE7I,QAAwB9E,OAAO6P,KAAiB,QAAbhC,EAAChP,KAAK68B,eAAO,IAAA7tB,OAAA,EAAAA,EAAEygB,QAAUtuB,OAAO6P,KAAuB,QAAnB9B,EAAa,QAAbD,EAACjP,KAAK68B,eAAO,IAAA5tB,OAAA,EAAAA,EAAElP,YAAI,IAAAmP,OAAA,EAAAA,EAAErH,WAAa,IACjIL,SAAQ,SAACtF,iBACT66B,EAAoB76B,EAAeiI,MAAM,KAAKia,KAAI,SAAA7J,GAAK,OAAAA,EAAEsB,OAAO,GAAG2B,cAAgBjD,EAAEyiB,MAAM,MAAIvZ,KAAK,KAC1G/c,EAAKg2B,WAAWv3B,KAAK,CAAE43B,iBAAkBA,EAAkBE,UAAW/6B,EAAKg7B,SAAoC,aAAb,QAAZpuB,EAAApI,EAAKm2B,eAAO,IAAA/tB,OAAA,EAAAA,EAAE7I,QAAwB,GAA8B,QAA5BgJ,EAAgB,QAAhBD,EAAItI,EAAKm2B,eAAO,IAAA7tB,OAAA,EAAAA,EAAEygB,OAAOvtB,UAAG,IAAA+M,EAAAA,EAAK,GAAKkuB,SAAsC,QAA9BxR,EAAc,QAAdzc,EAAExI,EAAKm2B,eAAO,IAAA3tB,OAAA,EAAAA,EAAEkuB,WAAWl7B,UAAG,IAAAypB,EAAAA,EAAK,SAI7MyU,EAAAngC,UAAAqgC,eAAA,SAAeE,mGACJ,MAAA,CAAA,EAAMxgC,KAAK+9B,YAAYzO,IAAI,kBAAkBkR,kBAAtD78B,EAASkoB,EAAAtnB,OACfvE,KAAK68B,QAAUl5B,EAAO8V,KACtBzZ,KAAK88B,wBACL98B,KAAKygC,yBAGPL,EAAAngC,UAAAwgC,WAAA,qBACQC,EAAQC,EAAAA,KAA+B,QAAb7xB,EAAC9O,KAAK68B,eAAO,IAAA/tB,OAAA,EAAAA,EAAEsuB,WAAwB,QAAdpuB,EAAEhP,KAAK68B,eAAO,IAAA7tB,OAAA,EAAAA,EAAEygB,QACzEvS,SAASC,eAAe,YAAYyjB,UAAYC,EAAAA,WAAyBC,KAAKC,OAAOL,EAAmB,QAAdzxB,EAAEjP,KAAK68B,eAAO,IAAA5tB,OAAA,EAAAA,EAAEmuB,uCA5C7G98B,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,qBACVC,SAAA,m8DAJO4uB,UAHA2R,EAAAA,sBACAllB,EAAAA,YCCT,OAMA,kCAJC2Q,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAHF,KAIrBnG,QAAS,CAAC0E,EAAAA,yBCYZ,kCAVChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC0T,IACfzT,QAAS,CACPC,EAAAA,aACAqU,GACAnP,EAAAA,iBACAC,IAEFhF,QAAS,CAACqT,QCVZ,IAAM1K,GAAiB,CACrB,CAAEC,KAAM,WAAY7G,UAAWgP,EAAAA,sBAAuB3Q,YAAa,CAACH,KACpE,CAAE2I,KAAM,eAAgB7G,UAAWsR,GAAuBjT,YAAa,CAACH,KACxE,CAAE2I,KAAM,KAAMF,WAAY,WAAY0E,UAAW,YAOnD,kCAJC1N,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAASwC,KAChC3I,QAAS,CAAC0E,EAAAA,yBCIZ,kCAXChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,GAEdC,QAAS,CACPC,EAAAA,aACAsU,GACAlB,GACAmB,IAEFpU,QAAS,yBCNT,SAAAqU,YAEAA,EAAAnhC,UAAAC,SAAA,uCAVDI,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,qBACVC,SAAA,knCAIC4J,EAAAA,sBACAA,EAAAA,2BCeD,SAAAg3B,EACU3xB,EACA+F,GADAzV,KAAA0P,aAAAA,EACA1P,KAAAyV,KAAAA,EAbVzV,KAAAshC,UAAmB,GACnBthC,KAAAia,iBAA6B,CAC3B,QACA,cACA,OACA,iBAEFja,KAAAka,WAAqB,EAErBla,KAAAs0B,UAAuB,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,UAQzDk5B,EAAAphC,UAAAC,SAAA,WACMF,KAAKiI,OAAOs5B,cAAcC,YAC5BxhC,KAAKoV,OAAS,CACZoJ,WAAYxe,KAAKiI,OAAOs5B,cAAc1gC,OAG1Cb,KAAKof,YAGPiiB,EAAAphC,UAAAmf,SAAA,WAAA,IAAA1Y,EAAA1G,KACE,IACEA,KAAKka,WAAY,EACjBla,KAAKyV,KAAK3B,IAAI9T,KAAKiI,OAAOs5B,cAAc30B,OAAQ,CAAEgJ,OAAMzU,OAAAke,OAAAle,OAAAke,OAAA,GAAOrf,KAAKoV,QAAWpV,KAAKs0B,aAAextB,WAAU,SAACnD,GAC5G+C,EAAK46B,UAAY56B,EAAK46B,UAAU17B,OAAOjC,EAAO5D,MAC9C2G,EAAK4tB,UAAUpsB,KAAOvE,EAAO2b,aAC7B5Y,EAAK4tB,UAAUnsB,SAAWxE,EAAOmX,aAEnC,MAAOpV,GACP1F,KAAK0P,aAAahB,YAAYhJ,WAG9B1F,KAAKka,WAAY,IAIrBmnB,EAAAphC,UAAAoI,SAAA,WACMrI,KAAKs0B,UAAUnsB,SAAWnI,KAAKs0B,UAAUpsB,OAC3ClI,KAAKs0B,UAAUpsB,MAAQ,EACvBlI,KAAKof,aAITiiB,EAAAphC,UAAAsP,OAAA,WACEvP,KAAKshC,UAAY,GACjBthC,KAAKs0B,UAAY,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACnDnI,KAAKof,YAGPiiB,EAAAphC,UAAAmK,YAAA,uCA/DD9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,0BACVC,SAAA,szDARO+N,UAIA2F,uCASN9J,EAAAA,SCPH,IAAMiN,GAAqB,CACzBvI,SAAU,CACRyI,SAAU,uBACViqB,YAAa,kCAmBf,SAAAC,EACU/pB,EACAD,EACAiqB,EACDryB,GAHCtP,KAAA2X,GAAAA,EACA3X,KAAA0X,qBAAAA,EACA1X,KAAA2hC,kBAAAA,EACD3hC,KAAAsP,SAAAA,EATTtP,KAAA4hC,eAAwB,GACxB5hC,KAAA6hC,WAAoB,GACV7hC,KAAAk5B,OAAS,IAAIhzB,EAAAA,aACblG,KAAA8hC,WAAY,IAAI57B,EAAAA,aAQxBlG,KAAK+hC,iCAGPL,EAAAzhC,UAAAC,SAAA,WACEF,KAAK6hC,WAAa7hC,KAAKiI,OAAO45B,WAC9B7hC,KAAKgiC,mBAAmBhiC,KAAKD,KAAK,KAGpC2hC,EAAAzhC,UAAA8hC,wBAAA,WACE/hC,KAAKiiC,kBAAoBjiC,KAAK2X,GAAGM,MAAM,CACrCiqB,OAAQliC,KAAK2X,GAAGwqB,MAAM,OAI1BhhC,OAAAyB,eAAI8+B,EAAAzhC,UAAA,cAAW,KAAf,WACE,OAAOD,KAAKiiC,kBAAkBnuB,IAAI,2CAGpC4tB,EAAAzhC,UAAAmiC,YAAA,SAAYrrB,GAcV,OAb2B/W,KAAK2X,GAAGM,MAAM,CACvC9B,GAAI,IAAIiE,EAAAA,YAAYrD,EAAMZ,IAC1B7R,MAAO,IAAI8V,EAAAA,YAAYrD,EAAMzS,OAC7BhB,MAAO,IAAI8W,EAAAA,YAAYrD,EAAMzT,OAC7ByL,SAAU,IAAIqL,EAAAA,YAAYrD,EAAMhI,SAC9BqJ,EAAAA,WAAWmG,QACT,CACEnG,EAAAA,WAAWZ,YAIjB6qB,aAAc,IAAIjoB,EAAAA,YAAYrD,EAAMsrB,iBAKxCX,EAAAzhC,UAAA+hC,mBAAA,SAAmBjiC,GAAnB,IAAA2G,EAAA1G,KACE,IAAK,IAAIsiC,KAAKviC,EACZ,GAAIA,EAAKyB,eAAe8gC,GAAI,CAC1B,IAAIC,EAAY,CACdpsB,GAAI,GACJ7R,MAAOg+B,EACPh/B,MAAOvD,EAAKuiC,GACZvzB,SAAU,GACVszB,aAAc,IAEhBriC,KAAK4hC,eAAez8B,KAAKo9B,GAG7BviC,KAAK4hC,eAAep6B,SAAQ,SAACgB,EAAcg6B,GACzCh6B,EAAQ2N,GAAKqsB,EACb97B,EAAKm7B,WAAWxd,MAAK,SAACtV,EAAe6Q,GACnC,GAAI7Q,EAASzK,MAAMqgB,cAAc8d,SAASj6B,EAAQlE,MAAMqgB,eAGtD,OAFAnc,EAAQuG,SAAWA,EAASzL,MAC5BkF,EAAQ65B,aAAetzB,EAASlO,KACzB2H,SAMfk5B,EAAAzhC,UAAAuD,KAAA,WACExD,KAAKiiC,kBAAkBnO,mBAClB9zB,KAAKiiC,kBAAkB/qB,OAG5BlX,KAAKk5B,OAAOjyB,KAAKjH,KAAKiiC,kBAAkB3+B,QAI1Co+B,EAAAzhC,UAAA6W,aAAA,SAAaC,EAAemU,GAC1B,OAAOlrB,KAAK0X,qBAAqBZ,aAAaC,EAAOmU,IAIvDwW,EAAAzhC,UAAAoX,gBAAA,SAAgBN,EAAemU,GAC7B,OAAOlrB,KAAK0X,qBAAqBL,gBAAgBN,EAAOmU,EAAM5T,KAGhEoqB,EAAAzhC,UAAAwG,gBAAA,WAAA,IAAAC,EAAA1G,KAGEs7B,YAAW,SAAA/gB,GACT7T,EAAKk7B,eAAep6B,SAAQ,SAACgB,GAC3B9B,EAAKg8B,YAAYv9B,KAAKuB,EAAK07B,YAAY55B,OAEzC9B,EAAKi7B,kBAAkBgB,kBACtB,MAGLjB,EAAAzhC,UAAA2iC,mBAAA,SAAmBr6B,EAAYqX,GAC7B,IAAI7I,EAAQ/W,KAAK6hC,WAAWxd,MAAK,SAACtN,GAAe,OAAAA,EAAMzT,OAASiF,EAAMjF,SAClEyT,IACF/W,KAAK0iC,YAAYG,SAASjjB,GAAO9L,IAAI,gBAAgByE,SAASxB,EAAMlW,MACpEb,KAAK8iC,oBAITpB,EAAAzhC,UAAA6iC,gBAAA,WAAA,IAAAp8B,EAAA1G,KACEA,KAAK0iC,YAAYp/B,MAAMkE,SAAQ,SAACuP,EAAY6I,GAC1C,IAAI0f,EAAU54B,EAAKg8B,YAAYG,SAASjjB,GAAO9L,IAAI,aAC9BpN,EAAKg8B,YAAYp/B,MAAM+gB,MAAK,SAAA0e,GAC/C,OAAAA,EAAah0B,WAAauwB,EAAQh8B,OAC/By/B,EAAa5sB,IAAMzP,EAAKg8B,YAAYG,SAASjjB,GAAO9L,IAAI,MAAMxQ,SAQjEg8B,EAAQ0D,UAAU,MAHlB1D,EAAQ0D,UAAU,CAAEvB,aAAa,QAQvCC,EAAAzhC,UAAAgjC,YAAA,SAAYrjB,IACI,GAAVA,GAGJ5f,KAAK0iC,YAAYQ,SAAStjB,IAG5B8hB,EAAAzhC,UAAAkjC,SAAA,WACEnjC,KAAK8hC,WAAW76B,MAAK,8BAhJxB3G,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,oBACVC,SAAA,ihGAbkBkZ,EAAAA,mBAFX9C,UACAusB,EAAAA,yBAEAtnB,EAAAA,2CAkBNzR,EAAAA,sBACAA,EAAAA,sBAGAC,EAAAA,2BACAA,EAAAA,4BCbD,SAAA+4B,EACS/zB,GAAAtP,KAAAsP,SAAAA,EAHCtP,KAAA8hC,WAAa,IAAI57B,EAAAA,oBAM3Bm9B,EAAApjC,UAAAC,SAAA,aAGAmjC,EAAApjC,UAAAqjC,YAAA,SAAYriC,GACV,IAAI+oB,EAAO,IAAIxZ,KAAKvP,GACpB,OAAO+oB,aAAgBxZ,OAAS+yB,MAAMvZ,EAAKgS,YAG7CqH,EAAApjC,UAAAkjC,SAAA,WACEnjC,KAAK8hC,WAAW76B,MAAK,8BAvBxB3G,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,wBACVC,SAAA,43EALOqb,EAAAA,kDASNzR,EAAAA,8BACAA,EAAAA,0BACAC,EAAAA,UCKUk5B,EAAAA,mBAAkB,WA0D7B,SAAAA,EACU3rB,EACAnI,EACA+F,GAFAzV,KAAA6X,aAAAA,EACA7X,KAAA0P,aAAAA,EACA1P,KAAAyV,KAAAA,EAzDVzV,KAAAyjC,UAAmB,GACnBzjC,KAAAD,KAAc,GACdC,KAAA0jC,YAAsB,EACtB1jC,KAAA2jC,sBAAgC,EAEhC3jC,KAAA4jC,SAAkB,GAClB5jC,KAAA6jC,YAAqB,GACrB7jC,KAAA8jC,eAAwB,GACxB9jC,KAAA+jC,YAAmB,CACjB,CACE5tB,GAAI,EACJ5S,KAAM,EACN2U,MAAO,SACP8rB,cAAe,GACfC,oBAAqB,IAEvB,CACE9tB,GAAI,EACJ5S,KAAM,EACN2U,MAAO,iBACP8rB,cAAe,GACfC,oBAAqB,IAEvB,CACE9tB,GAAI,EACJ5S,KAAM,EACN2U,MAAO,kBACP8rB,cAAe,uBACfC,oBAAqB,8GAEvB,CACE9tB,GAAI,EACJ5S,KAAM,EACN2U,MAAO,2BACP8rB,cAAe,GACfC,oBAAqB,IAEvB,CACE9tB,GAAI,EACJ5S,KAAM,EACN2U,MAAO,iBACP8rB,cAAe,sBACfC,oBAAqB,0LAEvB,CACE9tB,GAAI,EACJ5S,KAAM,EACN2U,MAAO,8BACP8rB,cAAe,GACfC,oBAAqB,KAGzBjkC,KAAAkkC,YAAmB,EAOjBlkC,KAAKmkC,YAAc,CACjBvrB,OAAQ,OACRC,YAAa,gBACbC,OAAQ,CACNC,OAAQ,SAEVE,WAAY,OACZD,UAAU,EACVE,QAAS,GACTC,eAAgB,eAIpBqqB,EAAAvjC,UAAAC,SAAA,aAGAiB,OAAAyB,eAAI4gC,EAAAvjC,UAAA,OAAI,KAAR,WAAA,IAAAyG,EAAA1G,KACE,OAAOA,KAAK+jC,YAAY1f,MAAK,SAAA9gB,GAAQ,OAAAA,EAAK4S,IAAMzP,EAAKw9B,gDAGjDV,EAAAvjC,UAAAyZ,YAAA,SAAYnR,yFAyBhB,OAxBAvI,KAAKkkC,YAAc,EACnBlkC,KAAKyjC,UAAYl7B,EAEb67B,EAAe,KACfC,EAAW,KACTC,EAAS,IAAIC,WACbx5B,EAAO/K,KAAKyjC,UAAU,GAC5Ba,EAAOE,OAAS,SAACj8B,GACf,IAAMxI,EAAOukC,EAAO3gC,OACpBygC,EAAeK,EAAAA,KAAU1kC,EAAM,CAC7Bc,KAAM,SACN6jC,WAAW,IAEbL,EAAWD,EAAaO,WAAWC,QAAO,SAACC,EAASnuB,GAClD,IAAMouB,EAAQV,EAAaW,OAAOruB,GAKlC,OAJUwlB,EAAAA,MAAW8I,cAAcF,EAAO,CACxCG,OAAQ,EACRC,OAAQ,OAGT,IACHx+B,EAAKk9B,SAAWS,GAElBC,EAAOa,mBAAmBp6B,GAC1B,CAAA,UAGFy4B,EAAAvjC,UAAAmlC,iBAAA,SAAiB78B,GAAjB,IAAA7B,EAAA1G,KACEA,KAAKkkC,YAAc,EACnB5I,YAAW,SAAA/gB,GACT7T,EAAKo9B,eAAiBv7B,EAAM25B,OAC5B,IAAMmD,EAAel0B,KAAKE,MAAMF,KAAKC,UAAU1K,EAAKk9B,WACpDyB,EAAa79B,SAAQ,SAAAzH,GACnB,IAAK,IAAImC,KAAOnC,EAAM,CACpB,IAAIgX,EAAQxO,EAAM25B,OAAO7d,MAAK,SAACtN,GAAe,OAAAA,EAAMzS,OAASpC,KACzD6U,GACyB,QAAtBA,EAAMsrB,cAAgD,YAAtBtrB,EAAMsrB,eAA+B37B,EAAK48B,YAAY,IAAI9yB,KAAKzQ,EAAKgX,EAAMzS,SAI7GvE,EAAKgX,EAAMhI,UAAYhP,EAAKgX,EAAMzS,OAHlCvE,EAAKgX,EAAMhI,UAAa,IAAIyB,KAAKzQ,EAAKgX,EAAMzS,QAAiB+lB,qBAKxDtqB,EAAKmC,WAGLnC,EAAKmC,OAIlBwE,EAAK4+B,KAAKD,KACT,MAGC7B,EAAAvjC,UAAAqlC,KAAA,SAAKD,iFACT,IACErlC,KAAKyV,KAAKO,KAAKhW,KAAKiI,OAAO2E,OAAQ,CAAE7M,KAAMslC,IACxCx+B,KACCO,EAAAA,eAAepH,OACf8G,WAAU,SAACnD,GAEX+C,EAAKm9B,YAAclgC,EAAO4hC,aACtB7+B,EAAKm9B,YAAYvhC,QACnBoE,EAAKmR,aAAa7J,SAASrK,EAAOiL,IAAK,QAEnClI,EAAKm9B,YAAYvhC,OAAS,EAQ9BoE,EAAKw9B,YAAc,GAPnBx9B,EAAKw9B,YAAc,EACnB5I,YAAW,SAAA/gB,GACT7T,EAAKw9B,YAAc,EACnBx9B,EAAK/C,OAASA,IACb,SAMT,MAAO+B,GACe,MAAjBA,EAAM0J,QAAmC,MAAjB1J,EAAM0J,SAAmB1J,EAAMkJ,KAC1D5O,KAAK6X,aAAa7J,SAAStI,EAAMkJ,IAAK,WAExC5O,KAAK0P,aAAahB,YAAYhJ,GAC9B1F,KAAKmjC,4BAITK,EAAAvjC,UAAAqjC,YAAA,SAAYriC,GACV,OAAOA,aAAauP,OAAS+yB,MAAMtiC,EAAE+6B,YAGvCwH,EAAAvjC,UAAAkjC,SAAA,WACEnjC,KAAKD,KAAO,GACZC,KAAK4jC,SAAW,GAChB5jC,KAAKyjC,UAAY,GACjBzjC,KAAK6jC,YAAc,GACnB7jC,KAAK8jC,eAAiB,GACtB9jC,KAAKkkC,YAAc,KAlLQ,0CAL9B5jC,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,iBACVC,SAAA,o+HAROqN,UACAU,UAJA2F,yDAgBN9J,EAAAA,SAFUm5B,EAAAA,mBAAkBxhC,EAAA,CAP9B0I,EAAAA,gBAOY84B,EAAAA,sCCNX,SAAAgC,YAEAA,EAAAvlC,UAAAC,SAAA,uCAVDI,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,kBACVC,SAAA,4pg5CAIC4J,EAAAA,gBCkCH,kCA1BCoiB,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPC,EAAAA,aACAuF,EAAAA,YACAC,EAAAA,oBACAN,EAAAA,iBACAL,EAAAA,aACAM,GACAD,EAAAA,iBACAO,GACAC,GACAL,EAAAA,sBAEFvF,aAAc,CACZ8W,EAAAA,mBACA9B,GACA2B,GACAhC,GACAD,GACAoE,IAEFtgB,UAAW,GACX6H,QAAS,CACPyW,EAAAA,wBCzBSiC,EAAAA,6BAA4B,WAWvC,SAAAA,EACUhwB,EACAkC,GADA3X,KAAAyV,KAAAA,EACAzV,KAAA2X,GAAAA,EAXV3X,KAAA0lC,iBAA0B,GAC1B1lC,KAAAs0B,UAAuB,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACzDnI,KAAA2V,QAAe,CACbsJ,QAAS,mBAGXjf,KAAAia,iBAA0B,CAAC,QAAS,cAOlCja,KAAK2lC,kBAAoB3lC,KAAK2X,GAAGM,MAAM,CACrC9J,SAAY,CAAC,IACb8b,UAAa,CAAC,IACdC,QAAW,CAAC,aAIhBub,EAAAxlC,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACEA,KAAK2V,QAAQ2d,QAAUtzB,KAAKk/B,OAC5Bl/B,KAAK2lC,kBAAkBjrB,aACpB7T,KAAK8T,EAAAA,aAAa,KAAMC,EAAAA,uBAAwBxT,EAAAA,eAAepH,OAC/D8G,WAAU,SAACxD,GACVA,EAAM2mB,UAAY3mB,EAAM2mB,UAAa3mB,EAAM2mB,UAAmBI,cAAgB,GAC9E/mB,EAAM4mB,QAAU5mB,EAAM4mB,QAAW5mB,EAAM4mB,QAAiBG,cAAgB,GACxE3jB,EAAKsuB,aAAa1xB,MAEtBtD,KAAK00B,kBAGP+Q,EAAAxlC,UAAA2lC,iBAAA,SAAiB3Z,GACf,IAAIhC,GAAagC,MAAAA,OAAK,EAALA,EAAOhC,WAAY,IAAIzZ,KAAKyb,EAAMhC,WAAa,GAC5DC,GAAW+B,MAAAA,OAAK,EAALA,EAAO/B,SAAU,IAAI1Z,KAAKyb,EAAM/B,SAAW,GAC1DlqB,KAAK2lC,kBAAkBltB,WAAW,CAChCwR,UAASA,EACTC,QAAOA,KAIXub,EAAAxlC,UAAAy0B,eAAA,WAAA,IAAAhuB,EAAA1G,KACEA,KAAKyV,KAAK3B,IAAI,yBAA0B,CAAE8B,OAAMzU,OAAAke,OAAAle,OAAAke,OAAA,GAAOrf,KAAK2V,SAAY3V,KAAKs0B,aAC1EztB,KAAKO,EAAAA,eAAepH,OACpB8G,WAAU,SAACnD,GACV+C,EAAKg/B,iBAAmBh/B,EAAKg/B,iBAAiB9/B,OAAOjC,EAAO5D,MAC5D2G,EAAK4tB,UAAUpsB,KAAOvE,EAAO2b,aAC7B5Y,EAAK4tB,UAAUnsB,SAAWxE,EAAOmX,cAIvC2qB,EAAAxlC,UAAA+0B,aAAA,SAAazsB,GACXvI,KAAK2V,QAAOxU,OAAAke,OAAAle,OAAAke,OAAA,GACPrf,KAAK2V,SACLpN,GAELvI,KAAKuP,UAGPk2B,EAAAxlC,UAAAoI,SAAA,WACMrI,KAAKs0B,UAAUnsB,SAAWnI,KAAKs0B,UAAUpsB,OAC3ClI,KAAKs0B,UAAUpsB,MAAQ,EACvBlI,KAAK00B,mBAKT+Q,EAAAxlC,UAAAsP,OAAA,WACEvP,KAAK0lC,iBAAmB,GACxB1lC,KAAKs0B,UAAY,CAAEpsB,KAAM,EAAGE,QAAS,GAAID,SAAU,GACnDnI,KAAK00B,kBAGP+Q,EAAAxlC,UAAAmK,YAAA,eA3EuC,oDALxC9J,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,6BACVC,SAAA,4oDANO0T,UAHAwF,EAAAA,4EAqBNtP,EAAAA,SATUo7B,EAAAA,6BAA4BzjC,EAAA,CANxC0I,EAAAA,gBAMY+6B,EAAAA,8BCTb,IAAM/P,GAAiB,CACrB,CACEC,KAAM,GACN7G,UAAW2W,EAAAA,6BACXtY,YAAa,CAACH,SAQlB,kCAJCP,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CAAC8E,EAAAA,aAAayB,SAASwC,KAChC3I,QAAS,CAAC0E,EAAAA,yBCUZ,kCAbChF,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CAAC+Y,EAAAA,8BACf9Y,QAAS,CACPC,EAAAA,aACAiZ,GACA5T,EAAAA,qBACAF,GACAD,EAAAA,iBACAM,EAAAA,oBACA0T,IAEF/Y,QAAS,CAAC0Y,EAAAA,4CCVR,WACIzlC,KAAK+lC,YAAa,EAClB/lC,KAAKgmC,WAAY,EACjBhmC,KAAKimC,mBAAqB,CAACC,EAAAA,MAAOC,EAAAA,OAClCnmC,KAAKomC,YAAc,YACnBpmC,KAAK4M,OAAS,2BACd5M,KAAKqmC,aAAe,2BACpBrmC,KAAKsmC,cAAe,EACpBtmC,KAAKumC,aAAc,EACnBvmC,KAAKwmC,UAAW,GCFXC,EAAAA,oCAAmCC,GAAA,WAqK9C,SAAAD,EACU9lB,EACAC,EACA+lB,EACmCC,EAChB/lB,GAL7B,IAAAna,EAAA1G,KACUA,KAAA2gB,cAAAA,EACA3gB,KAAA4gB,YAAAA,EACA5gB,KAAA2mC,YAAAA,EACmC3mC,KAAA4mC,WAAAA,EAChB5mC,KAAA6gB,UAAAA,EAvK7B7gB,KAAA4hB,aAAe,IAAIC,EAAAA,QACnB7hB,KAAA8hB,SAAU,EACV9hB,KAAA+hB,YAAc,6BACd/hB,KAAAmW,GAAK,8BAA8BuwB,GAAoClgC,SAEvExG,KAAA0hB,SAAW,SAACrd,KACZrE,KAAA2hB,UAAY,aAEZ3hB,KAAA6mC,aAAe,IAAIzsB,EAAAA,YAKVpa,KAAAiI,OAA2C,IAAI6+B,GAOhD9mC,KAAA+mC,SAAkB,GAUjB/mC,KAAAgnC,WAAuB,GAyBxBhnC,KAAAkiB,WAAY,EAWZliB,KAAAmiB,WAAY,EAGZniB,KAAAinC,OAAgB,GAoGtBjnC,KAAK6mC,aAAansB,aACf5T,WAAU,SAAAogC,GACTxgC,EAAKygC,aAAeD,KAIxBvmB,EAAc2B,QAAQ1B,GAAa,GAAM9Z,WAAU,SAAAyb,GAC7C7b,EAAKob,UAAYS,GACnB7b,EAAKib,YAEPjb,EAAKob,UAAYS,EACjB7b,EAAKkb,aAAape,UAGE,MAAlBxD,KAAK6gB,YACP7gB,KAAK6gB,UAAU2B,cAAgBxiB,aAnKnCmB,OAAAyB,eACI6jC,EAAAxmC,UAAA,UAAO,KADX,WAEE,OAAOD,KAAK+mC,cAEd,SAAYzjC,GACVtD,KAAK+mC,SAAWzjC,mCAQlBnC,OAAAyB,eAAI6jC,EAAAxmC,UAAA,OAAI,KAAR,WAAA,IAAAyG,EAAA1G,KACE,OAAOA,KAAKonC,QAAQhyB,QAAO,SAAAmF,GAAK,OAAA7T,EAAKpD,MAAMuxB,MAAK,SAAA3wB,GAAK,OAAAA,GAAKqW,EAAEpE,0CAI9DhV,OAAAyB,eAAI6jC,EAAAxmC,UAAA,QAAK,KAAT,WACE,OAA4B,GAArBD,KAAKsD,MAAMhB,wCAGpBnB,OAAAyB,eAAI6jC,EAAAxmC,UAAA,mBAAgB,KAApB,WACE,OAAOD,KAAK8hB,UAAY9hB,KAAKyiB,OAASziB,KAAK6mC,aAAavjC,uCAG1DnC,OAAAyB,eACI6jC,EAAAxmC,UAAA,WAAQ,KADZ,WAEE,OAAOD,KAAKkiB,eAEd,SAAa5e,GACXtD,KAAKkiB,UAAYS,EAAAA,sBAAsBrf,GACvCtD,KAAK4hB,aAAape,wCAIpBrC,OAAAyB,eACI6jC,EAAAxmC,UAAA,WAAQ,KADZ,WAEE,OAAOD,KAAKmiB,eAEd,SAAa7e,GACXtD,KAAKmiB,UAAYQ,EAAAA,sBAAsBrf,GACvCtD,KAAKmiB,UAAYniB,KAAK6mC,aAAajkB,UAAY5iB,KAAK6mC,aAAahkB,SACjE7iB,KAAK4hB,aAAape,wCAMpBrC,OAAAyB,eACI6jC,EAAAxmC,UAAA,QAAK,KADT,WAEE,OAAOD,KAAKinC,YAEd,SAAUI,GACRrnC,KAAKinC,OAASI,GAAU,GACxBrnC,KAAK4hB,aAAape,wCAGpBrC,OAAAyB,eAAI6jC,EAAAxmC,UAAA,aAAU,KAAd,WACE,OAAOD,KAAK6mC,aAAatiB,OAASvkB,KAAKwX,UAAkC,GAArBxX,KAAKsD,MAAMhB,wCAGjEnB,OAAAyB,eACI6jC,EAAAxmC,UAAA,cAAW,KADf,WAEE,OAAOD,KAAKsnC,kBAEd,SAAgBhkC,GACdtD,KAAKsnC,aAAehkC,EACpBtD,KAAK4hB,aAAape,wCAKpBijC,EAAAxmC,UAAAC,SAAA,aAIAumC,EAAAxmC,UAAA2H,YAAA,SAAYC,GAAZ,IAAAnB,EAAA1G,KAG6B,GAAvBA,KAAKonC,QAAQ9kC,QACftC,KAAK2mC,YACFnyB,OAAOxU,KAAKiI,OAAOs+B,aACnBzyB,IAAI9T,KAAKiI,OAAO2E,OAAQ,CACvBgJ,OAAQ,CACNoxB,WAAYhnC,KAAKgnC,WAAWvjB,KAAK,KACjCrb,QAAS,UAEVvB,KACD8T,EAAAA,aAAa,KACbvT,EAAAA,eAAepH,OACf8G,WAAU,SAACnD,GACX+C,EAAK0gC,QAAUzjC,EAAO5D,QAKxBC,KAAK48B,SAAgC,GAArB58B,KAAKsD,MAAMhB,QAE7BtC,KAAK2mC,YACFnyB,OAAOxU,KAAKiI,OAAOs+B,aACnBzyB,IAAI9T,KAAKiI,OAAO2E,OAAQ,CACvBgJ,OAAQ,CACNoxB,WAAYhnC,KAAKgnC,WAAWvjB,KAAK,KACjCjF,WAAYxe,KAAKmf,UACjBwd,SAAU38B,KAAK48B,QACfx0B,QAAS,UAEVvB,KACD8T,EAAAA,aAAa,KACbvT,EAAAA,eAAepH,OACf8G,WAAU,SAACnD,GACX+C,EAAKpD,QAASK,MAAAA,OAAM,EAANA,EAAQ5D,OAAQ,IAAIqkB,KAAI,SAAC7J,GAAW,OAAAA,EAAEpE,MACpDzP,EAAKyd,mBAKbsiB,EAAAxmC,UAAAsnC,KAAA,WAAA,IAAA7gC,EAAA1G,KACMA,KAAK48B,SAAkC,GAAvB58B,KAAKonC,QAAQ9kC,QAE/BtC,KAAK2mC,YACFnyB,OAAOxU,KAAKiI,OAAOs+B,aACnBzyB,IAAI9T,KAAKiI,OAAO2E,OAAQ,CACvBgJ,OAAQ,CACNoxB,WAAYhnC,KAAKgnC,WAAWvjB,KAAK,KACjCjF,WAAYxe,KAAKmf,UACjBwd,SAAU38B,KAAK48B,WAEhB/1B,KACDO,EAAAA,eAAepH,OACf8G,WAAU,SAACnD,GACX+C,EAAK0gC,QAAUzjC,EAAO5D,SAK9BoB,OAAAyB,eAAI6jC,EAAAxmC,UAAA,eAAY,KAAhB,WACE,OAAOD,KAAKwnC,2CA6Bdf,EAAAxmC,UAAAsjB,kBAAA,SAAkBC,KAIlBijB,EAAAxmC,UAAAyjB,iBAAA,aAKM+iB,EAAAxmC,UAAAihB,IAAA,SAAI3Y,4GACFjF,GAASiF,EAAMjF,OAAS,IAAImkC,OAG7BznC,KAAKiI,OAAOu+B,UAAmC,IAAtBxmC,KAAKsD,MAAMhB,OAArC,MAAA,CAAA,EAAA,OACEgB,IAAStD,KAAKiI,OAAOq+B,aAArB,MAAA,CAAA,EAAA,MACIoB,EAAO1nC,KAAKonC,QACdO,EAAMD,EAAKrjB,MAAK,SAAC5K,GAAc,OAAAA,EAAKvB,MAAMyM,eAAiBrhB,EAAMqhB,iBACjE,MAAA,CAAA,EAAA,oBAGoB,6BAAA,CAAA,EAAM3kB,KAAK2mC,YAAY3wB,KAAKhW,KAAKiI,OAAOo+B,aAAc,CACxEnuB,MAAO5U,EACPkzB,YAAalzB,EACbskC,eAAiB5nC,KAAKgnC,WAAW1kC,OAAS,EAAMtC,KAAK6nC,sBAAwB7nC,KAAK6nC,sBAAwB7nC,KAAKgnC,WAAW,GAAM,KAC/HnxB,2BAJGlS,EAAcmL,EAAAvK,OAKpBojC,EAAMhkC,EAAO8V,kBAEb,gBAAA,CAAA,iBAEFzZ,KAAKonC,QAAQjiC,KAAKwiC,gBAGlB3nC,KAAK4K,OAAO+8B,oBAEd3nC,KAAKsD,MAAM6B,KAAKwiC,EAAIxxB,IACpBnW,KAAKmkB,uCAKT5b,EAAMu/B,MAAMxkC,MAAQ,GAEpBtD,KAAK6mC,aAAatuB,SAAS,kBAG7BkuB,EAAAxmC,UAAA2K,OAAA,SAAO+8B,GACL3nC,KAAKsD,MAAQtD,KAAKsD,MAAM8R,QAAO,SAAAmF,GAAK,OAAAA,IAAMotB,EAAIxxB,MAC9CnW,KAAKmkB,gBAGPsiB,EAAAxmC,UAAA+G,SAAA,SAASuB,GAEFvI,KAAKiI,OAAOu+B,UAAmC,IAAtBxmC,KAAKsD,MAAMhB,SAEvCtC,KAAK4K,OAAO,CAAEuL,GAAI5N,EAAMw/B,OAAOzkC,QAC/BtD,KAAKsD,MAAM6B,KAAKoD,EAAMw/B,OAAOzkC,OAC7BtD,KAAKmkB,gBAEPnkB,KAAKgoC,SAASxhB,cAAcljB,MAAQ,GACpCtD,KAAK6mC,aAAatuB,SAAS,OAGrBkuB,EAAAxmC,UAAAunC,QAAA,WAAA,IAAA9gC,EAAA1G,KACAknC,EAAclnC,KAAKmnC,aAAennC,KAAKmnC,aAAanN,WAAWrV,cAAgB,KAC/EsjB,EAAgBjoC,KAAKonC,QAAQhyB,QAAO,SAACuyB,GAAa,OAACjhC,EAAKpD,MAAMuxB,MAAK,SAACpb,GAAc,OAAAA,GAAQkuB,EAAIxxB,SACpG,OAAO+wB,EAAce,EAAc7yB,QAAO,SAACuyB,GAAa,OAAAA,EAAIzvB,MAAMyM,cAAc8d,SAASyE,MAAgBe,GAG3GxB,EAAAxmC,UAAA0jB,WAAA,SAAW0jB,GACTrnC,KAAKsD,MAAQ+jC,GAAU,IAGzBZ,EAAAxmC,UAAA2jB,iBAAA,SAAiBC,GACf7jB,KAAK0hB,SAAWmC,GAGlB4iB,EAAAxmC,UAAA6jB,kBAAA,SAAkBD,GAChB7jB,KAAK2hB,UAAYkC,GAGnB4iB,EAAAxmC,UAAA8jB,iBAAA,SAAiBC,GACfhkB,KAAKikB,SAAWD,GAGlByiB,EAAAxmC,UAAAkkB,aAAA,WACEnkB,KAAK0hB,SAAS1hB,KAAKsD,QAMrBmjC,EAAAxmC,UAAAmK,YAAA,WACEpK,KAAK4hB,aAAa1P,WAClBlS,KAAK2gB,cAAcsE,eAAejlB,KAAK4gB,gBA5RK,GAEvC6lB,EAAAA,oCAAAA,OAAS,0DARjBnmC,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,qCACVC,SAAA,q/BAEAykB,UAAW,CAAC,CAAEC,QAASC,EAAAA,oBAAqBC,YAAaqhB,yKAlBlDphB,EAAAA,oBAEWC,EAAAA,kBAQXpR,UAJA+zB,EAAAA,aAAYtnC,WAAA,CAAA,CAAAC,KAuLhB0U,EAAAA,UAAQ,CAAA1U,KAAIC,EAAAA,OAAMP,KAAA,CAAC4nC,EAAAA,yBA1LoB3iB,EAAAA,UAAS5kB,WAAA,CAAA,CAAAC,KA2LhD0U,EAAAA,UAAQ,CAAA1U,KAAI4kB,EAAAA,gFA7Jdlb,EAAAA,UAAShK,KAAA,CAAC,4BAGV8J,EAAAA,yBAEAA,EAAAA,uBAEAA,EAAAA,uBAIAA,EAAAA,0BASAA,EAAAA,qCAEAA,EAAAA,wBAeAA,EAAAA,wBAUAA,EAAAA,qBAaAA,EAAAA,2BAaAA,EAAAA,SAtFUo8B,EAAAA,oCAAmCC,GAAA1kC,EAAA,CAP/C0I,EAAAA,gBAOY+7B,EAAAA,+CCGb,kCAbCha,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CACZ+Z,EAAAA,qCAEF9Z,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,iBACAsW,EAAAA,sBACAhW,EAAAA,qBAEFrF,QAAS,CAAC0Z,EAAAA,yCCJC4B,EAAAA,mCAAkCC,GAAA,WAyG7C,SAAAD,EACU1nB,EACAC,EACA+lB,EACmCC,EAChB/lB,GAL7B,IAAAna,EAAA1G,KACUA,KAAA2gB,cAAAA,EACA3gB,KAAA4gB,YAAAA,EACA5gB,KAAA2mC,YAAAA,EACmC3mC,KAAA4mC,WAAAA,EAChB5mC,KAAA6gB,UAAAA,EA3GpB7gB,KAAAgnC,WAAuB,GACvBhnC,KAAAgZ,UAAoB,EACpBhZ,KAAAihB,cAAwB,EACjCjhB,KAAAuoC,gBAAkB,IAAInuB,EAAAA,YACbpa,KAAAwoC,aAAuB,EACvBxoC,KAAAyoC,sBAAgC,EAEzCzoC,KAAA0nC,KAAc,GAGd1nC,KAAA4hB,aAAe,IAAIC,EAAAA,QACnB7hB,KAAA8hB,SAAU,EACV9hB,KAAA+hB,YAAc,2BACd/hB,KAAAmW,GAAK,4BAA4BmyB,GAAmC9hC,SAEpExG,KAAA0hB,SAAW,SAACrd,KACZrE,KAAA2hB,UAAY,aA+BJ3hB,KAAAkiB,WAAY,EAWZliB,KAAAmiB,WAAY,EAoDlBxB,EAAc2B,QAAQ1B,GAAa,GAAM9Z,WAAU,SAAAyb,GAC7C7b,EAAKob,UAAYS,GACnB7b,EAAKib,YAEPjb,EAAKob,UAAYS,EACjB7b,EAAKkb,aAAape,UAGE,MAAlBxD,KAAK6gB,YACP7gB,KAAK6gB,UAAU2B,cAAgBxiB,aArGnCmB,OAAAyB,eAAIylC,EAAApoC,UAAA,SAAM,KAAV,iBACE,OAAID,KAAKwoC,YACA,4BAEe,QAAf15B,EAAA9O,KAAKgnC,kBAAU,IAAAl4B,OAAA,EAAAA,EAAExM,QAAS,EAC1B,uCAAyCtC,KAAKgnC,WAAWvjB,KAAK,KAG9D,oCAKXtiB,OAAAyB,eAAIylC,EAAApoC,UAAA,QAAK,KAAT,WACE,OAA4B,GAArBD,KAAKsD,MAAMhB,wCAGpBnB,OAAAyB,eAAIylC,EAAApoC,UAAA,mBAAgB,KAApB,WACE,OAAOD,KAAK8hB,UAAY9hB,KAAKyiB,uCAG/BthB,OAAAyB,eACIylC,EAAApoC,UAAA,WAAQ,KADZ,WAEE,OAAOD,KAAKkiB,eAEd,SAAa5e,GACXtD,KAAKkiB,UAAYS,EAAAA,sBAAsBrf,GACvCtD,KAAK4hB,aAAape,wCAIpBrC,OAAAyB,eACIylC,EAAApoC,UAAA,WAAQ,KADZ,WAEE,OAAOD,KAAKmiB,eAEd,SAAa7e,GACXtD,KAAKmiB,UAAYQ,EAAAA,sBAAsBrf,GACvCtD,KAAKmiB,UAAYniB,KAAKuoC,gBAAgB3lB,UAAY5iB,KAAKuoC,gBAAgB1lB,SACvE7iB,KAAK4hB,aAAape,wCAMpBrC,OAAAyB,eACIylC,EAAApoC,UAAA,QAAK,KADT,WAEE,OAAOD,KAAKinC,YAEd,SAAU1H,GACRv/B,KAAKinC,OAAS1H,EACdv/B,KAAKuoC,gBAAgBhwB,SAASgnB,GAC9Bv/B,KAAK4hB,aAAape,wCAGpBrC,OAAAyB,eAAIylC,EAAApoC,UAAA,aAAU,KAAd,WACE,OAAOD,KAAKuoC,gBAAgBhkB,OAASvkB,KAAKwX,UAAkC,GAArBxX,KAAKsD,MAAMhB,wCAGpEnB,OAAAyB,eACIylC,EAAApoC,UAAA,cAAW,KADf,WAEE,OAAOD,KAAKsnC,kBAEd,SAAgBhkC,GACdtD,KAAKsnC,aAAehkC,EACpBtD,KAAK4hB,aAAape,wCAKpB6kC,EAAApoC,UAAAC,SAAA,WAAA,IAAAwG,EAAA1G,KACMA,KAAKyoC,sBACPzoC,KAAK2mC,YAAY7yB,IAAI9T,KAAK4M,QACvB/F,KAAKO,EAAAA,eAAepH,OACpB8G,WAAU,SAAC4hC,GACVhiC,EAAKghC,KAAOgB,EAAI3oC,SAKxBsoC,EAAApoC,UAAAshB,gBAAA,SAAgBje,GACdtD,KAAKsD,MAAQA,EACbtD,KAAKmkB,gBAwBPkkB,EAAApoC,UAAAsjB,kBAAA,SAAkBC,KAIlB6kB,EAAApoC,UAAAyjB,iBAAA,aAIA2kB,EAAApoC,UAAA0jB,WAAA,SAAW4b,GACTv/B,KAAKsD,MAAQi8B,GAGf8I,EAAApoC,UAAA2jB,iBAAA,SAAiBC,GACf7jB,KAAK0hB,SAAWmC,GAGlBwkB,EAAApoC,UAAA6jB,kBAAA,SAAkBD,GAChB7jB,KAAK2hB,UAAYkC,GAGnBwkB,EAAApoC,UAAA8jB,iBAAA,SAAiBC,GACfhkB,KAAKikB,SAAWD,GAGlBqkB,EAAApoC,UAAAkkB,aAAA,WACEnkB,KAAK0hB,SAAS1hB,KAAKsD,QAMrB+kC,EAAApoC,UAAAmK,YAAA,WACEpK,KAAK4hB,aAAa1P,WAClBlS,KAAK2gB,cAAcsE,eAAejlB,KAAK4gB,gBA/JI,GAYtCynB,EAAAA,mCAAAA,OAAS,yDAlBjB/nC,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mCACVC,SAAA,6iBAEAykB,UAAW,CAAC,CAAEC,QAASC,EAAAA,oBAAqBC,YAAaijB,iGAflDhjB,EAAAA,oBAEWC,EAAAA,kBAMXpR,UAJA+zB,EAAAA,aAAYtnC,WAAA,CAAA,CAAAC,KA0HhB0U,EAAAA,UAAQ,CAAA1U,KAAIC,EAAAA,OAAMP,KAAA,CAAC4nC,EAAAA,yBA3HoB3iB,EAAAA,UAAS5kB,WAAA,CAAA,CAAAC,KA4HhD0U,EAAAA,UAAQ,CAAA1U,KAAI4kB,EAAAA,iFA3Gdpb,EAAAA,wBACAA,EAAAA,4BACAA,EAAAA,2BAEAA,EAAAA,oCACAA,EAAAA,wBAkCAA,EAAAA,wBAUAA,EAAAA,qBAaAA,EAAAA,2BAcAA,EAAAA,SA/EUg+B,EAAAA,mCAAkCC,GAAAtmC,EAAA,CAP9C0I,EAAAA,gBAOY29B,EAAAA,2CCUb,kCAfC5b,EAAAA,SAAQlsB,KAAA,CAAC,CACRmsB,aAAc,CACZ2b,EAAAA,oCAEF1b,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,iBACAsW,EAAAA,sBACAhW,EAAAA,oBACA6B,GACA3C,EAAAA,uBAEFvE,QAAS,CAACsb,EAAAA,0DCjBV,SAAAM,EAAoB5K,GAAA/9B,KAAA+9B,YAAAA,SAEpB4K,EAAA1oC,UAAA2oC,YAAA,WACE,OAAO5oC,KAAK+9B,YAAYzO,IAAI,iBAG9BqZ,EAAA1oC,UAAA4oC,eAAA,SAAe1yB,GACb,OAAOnW,KAAK+9B,YAAYzO,IAAI,eAAenZ,EAAE,aAG/CwyB,EAAA1oC,UAAA6oC,cAAA,SAAc3yB,GACZ,OAAOnW,KAAK+9B,YAAYzO,IAAI,eAAenZ,EAAE,oJAhBhDxI,EAAAA,WAAUpN,KAAA,CAAC,CACVqN,WAAY,qDAJLyhB,MCkBI0Z,EAAAA,gCAA+B,WAoB1C,SAAAA,EACUhL,EACAruB,EACAiI,EACAE,EACAgC,EACA9M,EACAi8B,GANAhpC,KAAA+9B,YAAAA,EACA/9B,KAAA0P,aAAAA,EACA1P,KAAA2X,GAAAA,EACA3X,KAAA6X,aAAAA,EACA7X,KAAA6Z,OAAAA,EACA7Z,KAAA+M,QAAAA,EACA/M,KAAAgpC,eAAAA,EAzBVhpC,KAAAipC,SAAkB,GAClBjpC,KAAAia,iBAA6B,CAC3B,QACA,UACA,cACA,WAGFja,KAAA+F,WAAa,IAAIC,EAAAA,mBAEjBhG,KAAAkI,KAAe,EAEflI,KAAAoI,QAAkB,GAElBpI,KAAAka,WAAqB,EAanBla,KAAK45B,gBAAkB55B,KAAK2X,GAAGM,MAAM,CACnCixB,UAAW,CAAC,aAIhBH,EAAA9oC,UAAAC,SAAA,WACEF,KAAKof,WACLpf,KAAKmpC,oBAGPJ,EAAA9oC,UAAAkpC,iBAAA,WAAA,IAAAziC,EAAA1G,KACEA,KAAK45B,gBAAgBlf,aAClB7T,KAAK8T,EAAAA,aAAa,KAAMvT,EAAAA,eAAepH,OACvC8G,WAAU,SAACe,GACVnB,EAAK6I,aAILw5B,EAAA9oC,UAAAmf,SAAA,+GAOO,8BAJTpf,KAAKka,WAAY,GACb9E,EAASpV,KAAK45B,gBAAgBt2B,OAC3B4E,KAAOlI,KAAKkI,KACnBkN,EAAOhN,QAAUpI,KAAKoI,QACb,CAAA,EAAMpI,KAAK+9B,YAAYzO,IAAI,eAAgBla,kBAApDzR,EAASmL,EAAAvK,OACTvE,KAAKipC,SAAWjpC,KAAKipC,SAASrjC,OAAOjC,EAAO5D,MAC5CC,KAAK+F,WAAa,IAAIC,EAAAA,mBAAmBhG,KAAKipC,UAEzCjpC,KAAK+M,QAAQ0F,QAAQ,aACxBzS,KAAKopC,WAAWppC,KAAKipC,UAGvBjpC,KAAKka,WAAY,iCAEjBla,KAAK0P,aAAahB,YAAY26B,uBAE9BrpC,KAAKka,WAAY,+BAIf6uB,EAAA9oC,UAAAqpC,eAAA,SAAe9gC,EAAS+gC,0FACxBn6B,EAAS5G,EAAU,MAAQ,KAEbxI,KAAK6Z,OAAOmB,KAAKnb,EAAsB,CACvDyZ,MAAO,QACPvZ,KAAmB,CACjBmY,MAAO,qBAAqB9I,EAAM,IAClCnB,QAAS,0BAA0Bs7B,EAAQrxB,MAAK,YAAY9I,KAItD+L,cAAcrU,WAAU,SAAMnD,GAAM,OAAAd,EAAA6D,OAAA,OAAA,GAAA,yEACxC/C,EAAA,MAAA,CAAA,EAAA,kDAEO6E,EACH,CAAA,EAAMxI,KAAKgpC,eAAeH,eAAeU,EAAQpzB,KAD9C,CAAA,EAAA,iBACHrH,EAAAE,EAAAzK,oBACA,MAAA,CAAA,EAAMvE,KAAKgpC,eAAeF,cAAcS,EAAQpzB,YAAhDrH,EAAAE,EAAAzK,+BAFAuK,iCAIJ9O,KAAK0P,aAAahB,YAAY86B,uBAE9BxpC,KAAK6X,aAAa7J,SAAS,wBAAwBoB,EAAM,gBAAgBm6B,EAAQrxB,MAAS,WAC1FlY,KAAKuP,SACLvP,KAAK+M,QAAQqiB,WAAW,YACxBpvB,KAAKopC,WAAWppC,KAAKipC,UACrBjpC,KAAKka,WAAY,iCAGnBla,KAAKuP,2DAKXw5B,EAAA9oC,UAAAmpC,WAAA,SAAWH,WACLQ,EAAgB,OACpB,IAAoB,IAAAC,EAAAtkC,EAAA6jC,GAAQU,EAAAD,EAAAlmC,QAAAmmC,EAAA/lC,KAAA+lC,EAAAD,EAAAlmC,OAAE,CAAzB,IAAI+lC,EAAOI,EAAArmC,MACTimC,EAAQK,eAKPL,EAAQK,eAAeC,YACzBJ,EAActkC,KAAKokC,EAAQnT,MALzBmT,EAAQO,oBACVL,EAActkC,KAAKokC,EAAQnT,wGASjCp2B,KAAK+M,QAAQ6F,QAAQ,WAAY62B,IAGnCV,EAAA9oC,UAAAsP,OAAA,WACEvP,KAAKipC,SAAW,GAChBjpC,KAAKkI,KAAO,EACPlI,KAAKka,WACRla,KAAKof,YAIT2pB,EAAA9oC,UAAAoI,SAAA,YACOrI,KAAKka,WAAala,KAAKkI,KAAOlI,KAAKmI,WACtCnI,KAAKkI,MAAQ,EACblI,KAAKof,aAIT2pB,EAAA9oC,UAAA85B,WAAA,SAAWxxB,GACT,IAAI6sB,EAAY7sB,EAAM6sB,UAAU4E,WAAWxc,cAC3Cxd,KAAKi6B,aAAa1xB,EAAM8sB,OAAQD,GAChCp1B,KAAKuP,UAGPw5B,EAAA9oC,UAAAg6B,aAAA,SAAaC,EAAQ9E,GACnB,OAAQ8E,GACN,IAAK,OACH,OAAOl6B,KAAK45B,gBACT9lB,IAAI,WACJyE,SAAS,cAAgB6c,GAE9B,IAAK,WACH,OAAOp1B,KAAK45B,gBACT9lB,IAAI,WACJyE,SAAS,cAAgB6c,OAtJQ,uDAL3C90B,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,+BACVC,SAAA,+/FAPO4uB,UACA7gB,UARAmL,EAAAA,mBASA7L,UARAiO,EAAAA,iBASAiT,UAPA2Z,MAcII,EAAAA,gCAA+B/mC,EAAA,CAN3C0I,EAAAA,gBAMYq+B,EAAAA,iCCdb,IAAMrT,GAAiB,CACrB,CACEC,KAAM,GACN7G,UAAWia,EAAAA,gCACX5b,YAAa,CAACH,MAIL+c,GAAwBtY,EAAAA,aAAayB,SAASwC,kBCEzD,SAAAsU,EAAoBryB,GAAA3X,KAAA2X,GAAAA,EAClB3X,KAAKiqC,YAAcjqC,KAAK2X,GAAGM,MAAM,CAC/BiyB,OAAQ,CAAC,aAIbF,EAAA/pC,UAAAC,SAAA,WACEF,KAAKiqC,YAAYn2B,IAAI,UAAUyE,SAASvY,KAAKsD,kCAlBhDhD,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,oBACVC,SAAA,8LAJOkZ,EAAAA,+CAUNtP,EAAAA,2BCGD,SAAA8/B,EACUC,EACApB,EACAt5B,EACA3C,GAHA/M,KAAAoqC,GAAAA,EACApqC,KAAAgpC,eAAAA,EACAhpC,KAAA0P,aAAAA,EACA1P,KAAA+M,QAAAA,EAPV/M,KAAAypC,cAAuB,UAWvBU,EAAAlqC,UAAAC,SAAA,WACOF,KAAK+M,QAAQ0F,QAAQ,YAGxBzS,KAAKqqC,yBAFLrqC,KAAK4oC,eAMHuB,EAAAlqC,UAAA2oC,YAAA,uHAEa,8BAAA,CAAA,EAAM5oC,KAAKgpC,eAAeJ,sBAArCK,EAAW/5B,EAAA3K,WAEf,IAAoBuK,EAAA1J,EAAA6jC,EAASlpC,MAAIiP,EAAAF,EAAAtL,QAAAwL,EAAApL,KAAAoL,EAAAF,EAAAtL,QAAxB+lC,EAAOv6B,EAAA1L,OACDsmC,eAKPL,EAAQK,eAAeC,YACzB7pC,KAAKypC,cAActkC,KAAKokC,EAAQnT,MAL9BmT,EAAQO,oBACV9pC,KAAKypC,cAActkC,KAAKokC,EAAQnT,8GAStCp2B,KAAK+M,QAAQ6F,QAAQ,WAAY5S,KAAKypC,8CAEtCzpC,KAAK0P,aAAahB,YAAY26B,uBAE9BrpC,KAAKqqC,sDAITF,EAAAlqC,UAAAoqC,uBAAA,WACE,IACiBrqC,KAAK+M,QAAQ0F,QAAQ,YACNtI,MAAM,KAEjBs4B,SAASziC,KAAKsqC,gBAC/BtqC,KAAKoqC,GAAG5jB,cAAclK,MAAMiuB,QAAU,OAEtCvqC,KAAKoqC,GAAG5jB,cAAc5b,SAGxB,MAAOlF,GACP1F,KAAK0P,aAAahB,YAAYhJ,+BA7DnC8hB,EAAAA,UAASjnB,KAAA,CAAC,CACTC,SAAU,yEANQ+kB,EAAAA,kBAGXojB,UAFAn6B,UACAwgB,+CAUN3kB,EAAAA,MAAK9J,KAAA,CAAC,oCCeT,kCAdCksB,EAAAA,SAAQlsB,KAAA,CAAC,CACRosB,QAAS,CACPC,EAAAA,aACAmF,GACAD,EAAAA,iBACAiY,GACAS,EAAAA,qBACArY,EAAAA,YACAC,EAAAA,oBACAH,EAAAA,sBAEFvF,aAAc,CAACqc,EAAAA,gCAAiCiB,GAAsBG,IACtEpd,QAAS,CAACgc,EAAAA,gCAAiCoB","sourcesContent":["export class ActionPopup {\r\n name: string;\r\n title: string;\r\n message: string;\r\n}","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ActionPopup } from './action-popup.model';\r\n\r\n@Component({\r\n selector: 'app-action-popup',\r\n templateUrl: './action-popup.component.html',\r\n styleUrls: ['./action-popup.component.scss']\r\n})\r\nexport class ActionPopupComponent implements OnInit {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ActionPopupComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: ActionPopup,\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n /**Method to close dialog box */\r\n closeDialog() {\r\n this.dialogRef.close();\r\n }\r\n\r\n /**Method to close dialog box with the data given from parent component\r\n */\r\n confirm() {\r\n this.dialogRef.close(this.data);\r\n }\r\n\r\n}\r\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(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, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n SimpleChanges,\r\n AfterViewInit,\r\n ViewChild\r\n} from \"@angular/core\";\r\n\r\nimport { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { DataTable } from './data-table.model';\r\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: \"app-data-table\",\r\n templateUrl: \"./data-table.component.html\",\r\n styleUrls: [\"./data-table.component.scss\"]\r\n})\r\nexport class DataTableComponent implements OnInit, OnChanges, AfterViewInit {\r\n\r\n trigger: MatMenuTrigger;\r\n\r\n @Input() data: any;\r\n\r\n @Input() config: DataTable;\r\n\r\n dataSource: MatTableDataSource<any> = new MatTableDataSource([]);\r\n\r\n @Input() selection: SelectionModel<any>;\r\n\r\n @Output() action = new EventEmitter();\r\n @Output() selctionChange = new EventEmitter();\r\n @Output() rowClick = new EventEmitter();\r\n @Output() tableScroll = new EventEmitter();\r\n @Output() sortChanged = new EventEmitter();\r\n\r\n page: number;\r\n lastPage: number;\r\n perPage: number;\r\n\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n static nextId = 0;\r\n @Input() elementId: string = `data-table-${DataTableComponent.nextId++}`;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() { }\r\n\r\n /**Life cycle hook method */\r\n ngAfterViewInit() {\r\n // Assign the data to the data source for the table to render\r\n this.dataSource = new MatTableDataSource(this.data);\r\n\r\n // Emit change in selection\r\n if (this.selection) {\r\n this.selection.changed.pipe().subscribe((change: any) => {\r\n if (this.selection.selected) {\r\n this.selctionChange.emit(this.selection.selected);\r\n }\r\n });\r\n }\r\n\r\n if (this.sort) {\r\n this.sort.sortChange.pipe(untilDestroyed(this))\r\n .subscribe((value: any) => {\r\n this.sortChanged.emit(value);\r\n })\r\n }\r\n }\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.dataSource.data.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n this.isAllSelected()\r\n ? this.clearSelection()\r\n : this.dataSource.data.forEach(row => this.selection.select(row));\r\n }\r\n\r\n /**clear selection*/\r\n clearSelection() {\r\n this.selection.clear();\r\n this.selctionChange.emit(this.selection.selected);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.initializeConfig(changes);\r\n if (changes.data && !changes.data.isFirstChange() && this.dataSource) {\r\n // If not first change\r\n this.dataSource.data = changes.data.currentValue;\r\n }\r\n }\r\n\r\n initializeConfig(changes: SimpleChanges) {\r\n if (changes.config && !changes.config.isFirstChange()) {\r\n this.config = changes.config.currentValue;\r\n }\r\n this.page = this.config.page || 1;\r\n this.lastPage = this.config.lastPage || this.page;\r\n this.perPage = this.config.perPage || 20;\r\n }\r\n\r\n onScroll() {\r\n if (this.page < this.lastPage) {\r\n this.page += 1;\r\n this.tableScroll.emit({ page: this.page, lastPage: this.lastPage, perPage: this.perPage });\r\n }\r\n }\r\n\r\n /**Method invokes when edit action icon is clickes */\r\n editClicked(event: any, element: any) {\r\n this.action.emit({ action: \"edit\", value: element });\r\n event.stopPropagation();\r\n }\r\n\r\n /**Method invokes when view action icon is clickes */\r\n viewClicked(event: any, element: any) {\r\n this.action.emit({ action: \"view\", value: element });\r\n event.stopPropagation();\r\n }\r\n\r\n /**Method invokes when edit action icon is clickes */\r\n deactivateClicked(event: any, element: any) {\r\n this.action.emit({ action: \"deactivate\", value: element });\r\n event.stopPropagation();\r\n }\r\n\r\n /**Method invokes when download action icon is clickes */\r\n downloadClicked(event: any, element: any) {\r\n this.action.emit({ action: \"download\", value: element });\r\n event.stopPropagation();\r\n }\r\n\r\n /**Method invokes when print action icon is clickes */\r\n printClicked(event: any, element: any) {\r\n\r\n this.action.emit({ action: 'print', value: element });\r\n event.stopPropagation();\r\n\r\n }\r\n\r\n /**Method invokes when a row is clicked */\r\n rowClicked(event: any, element: any) {\r\n this.rowClick.emit(element);\r\n event.stopPropagation();\r\n }\r\n\r\n /**Method invokes when menu action icon is hovered */\r\n actionMenuClick(event: any, element: any, menuValue: string) {\r\n this.action.emit({ action: menuValue, value: element });\r\n this.trigger.closeMenu();\r\n event.stopPropagation();\r\n }\r\n\r\n /**Method invokes when menu action icon is hovered and selects for particular action*/\r\n actionMenuTriggerClick(event: any, trigger: MatMenuTrigger) {\r\n this.trigger = trigger;\r\n event.stopPropagation();\r\n }\r\n\r\n checkEdit(ele: any) {\r\n if (this.config.editDisableFunction) {\r\n return this.config.editDisableFunction(ele);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n checkView(ele: any) {\r\n if (this.config.viewDisableFunction) {\r\n return this.config.viewDisableFunction(ele);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n checkPrint(ele: any) {\r\n if (this.config.printDisableFunction) {\r\n return this.config.printDisableFunction(ele);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n checkActions(ele: any) {\r\n if (this.config.actionsMenuFunction) {\r\n return this.config.actionsMenuFunction(ele);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n checkActionButton(ele: any, value: any) {\r\n if (this.config.actionsMenuButtonFunction) {\r\n return this.config.actionsMenuButtonFunction(ele, value);\r\n }\r\n return true;\r\n }\r\n\r\n getValue(ele: any, keyString: string) {\r\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\r\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\r\n const keyList = keyString.split(\".\");\r\n for (let i = 0, n = keyList.length; i < n; ++i) {\r\n const key = keyList[i];\r\n if (ele && key in ele) {\r\n ele = ele[key];\r\n } else {\r\n return;\r\n }\r\n }\r\n return ele;\r\n }\r\n\r\n ngOnDestroy() {\r\n //Until Destroy uses it.\r\n }\r\n}\r\n","export class DataTable {\r\n displayedColumns: string[];\r\n columnsConfig: ColumnConfig[];\r\n actionsConfig?: ActionConfig;\r\n enableRowClick?: boolean;\r\n disableElevation?: boolean;\r\n downloadLink?: string;\r\n actionsMenuFunction?: any;\r\n actionsMenuButtonFunction?: any;\r\n editDisableFunction?: any;\r\n viewDisableFunction?: any;\r\n printDisableFunction?: any;\r\n customActionLabel?: string;\r\n stickyHeader?: boolean;\r\n page?: number;\r\n lastPage?: number;\r\n perPage?: number;\r\n pageSizeOptions?: number[];\r\n style?: any;\r\n}\r\n\r\nclass ColumnConfig {\r\n title: string;\r\n value: string;\r\n sort?: boolean;\r\n dateField?: boolean;\r\n currencyField?: boolean;\r\n format?: string;\r\n}\r\n\r\nclass ActionConfig {\r\n edit?: boolean;\r\n view?: boolean;\r\n download?: boolean;\r\n print?: boolean;\r\n deactivate?: boolean;\r\n actionsMenu?: ActionsMenu[];\r\n}\r\n\r\nclass ActionsMenu {\r\n name: string;\r\n value: string;\r\n}\r\n\r\nexport class PageEvent {\r\n page: number;\r\n lastPage?: number;\r\n perPage: number;\r\n}\r\n","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\r\nimport { ViewerConfig } from './viewer-config.model';\r\n\r\n@Component({\r\n selector: 'app-document-viewer',\r\n templateUrl: './document-viewer.component.html',\r\n styleUrls: ['./document-viewer.component.css']\r\n})\r\nexport class DocumentViewerComponent implements OnInit {\r\n\r\n\r\n @Input() config!: ViewerConfig;\r\n\r\n @Input() file!: any;\r\n\r\n @Input() fileUrl!: any;\r\n\r\n @Input() disableEdit: boolean;\r\n\r\n @Output() remove = new EventEmitter();\r\n viewerType: any;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.initData();\r\n }\r\n\r\n removeFile() {\r\n this.remove.emit();\r\n }\r\n\r\n initData() {\r\n if (this.file) {\r\n var ext = this.getFileExtension(this.file);\r\n if (ext === 'ppt' || ext === 'pptx' || ext === 'doc' || ext === 'docx' || ext === 'xls' || ext === 'xlsx') {\r\n this.viewerType = \"office\";\r\n }\r\n else if (ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'gif') {\r\n this.viewerType = \"image\";\r\n }\r\n else if (ext === 'pdf') {\r\n this.viewerType = \"pdf\";\r\n }\r\n else {\r\n this.viewerType = null;\r\n }\r\n }\r\n }\r\n\r\n get fileName() {\r\n if (this.file) {\r\n let nameArray = this.file.split('/');\r\n if (nameArray.length === 2) {\r\n return nameArray[1];\r\n }\r\n return nameArray[0];\r\n }\r\n return '';\r\n }\r\n\r\n getFileExtension(file: any) {\r\n return file.split('.').pop();\r\n }\r\n\r\n}\r\n","/**\r\n * Simple logger system with the possibility of registering custom outputs.\r\n *\r\n * 4 different log levels are provided, with corresponding methods:\r\n * - debug : for debug information\r\n * - info : for informative status of the application (success, ...)\r\n * - warning : for non-critical errors that do not prevent normal application behavior\r\n * - error : for critical errors that prevent normal application behavior\r\n *\r\n * Example usage:\r\n * ```\r\n * import { Logger } from 'app/core/logger.service';\r\n *\r\n * const log = new Logger('myFile');\r\n * ...\r\n * log.debug('something happened');\r\n * ```\r\n *\r\n * To disable debug and info logs in production, add this snippet to your root component:\r\n * ```\r\n * export class AppComponent implements OnInit {\r\n * ngOnInit() {\r\n * if (environment.production) {\r\n * Logger.enableProductionMode();\r\n * }\r\n * ...\r\n * }\r\n * }\r\n *\r\n * If you want to process logs through other outputs than console, you can add LogOutput functions to Logger.outputs.\r\n */\r\n\r\n/**\r\n * The possible log levels.\r\n * LogLevel.Off is never emitted and only used with Logger.level property to disable logs.\r\n */\r\nexport enum LogLevel {\r\n Off = 0,\r\n Error,\r\n Warning,\r\n Info,\r\n Debug\r\n}\r\n\r\n/**\r\n * Log output handler function.\r\n */\r\nexport type LogOutput = (source: string | undefined, level: LogLevel, ...objects: any[]) => void;\r\n\r\nexport class Logger {\r\n\r\n /**\r\n * Current logging level.\r\n * Set it to LogLevel.Off to disable logs completely.\r\n */\r\n static level = LogLevel.Debug;\r\n\r\n /**\r\n * Additional log outputs.\r\n */\r\n static outputs: LogOutput[] = [];\r\n\r\n /**\r\n * Enables production mode.\r\n * Sets logging level to LogLevel.Warning.\r\n */\r\n static enableProductionMode() {\r\n Logger.level = LogLevel.Warning;\r\n }\r\n\r\n constructor(private source?: string) { }\r\n\r\n /**\r\n * Logs messages or objects with the debug level.\r\n * Works the same as console.log().\r\n */\r\n debug(...objects: any[]) {\r\n this.log(console.log, LogLevel.Debug, objects);\r\n }\r\n\r\n /**\r\n * Logs messages or objects with the info level.\r\n * Works the same as console.log().\r\n */\r\n info(...objects: any[]) {\r\n this.log(console.info, LogLevel.Info, objects);\r\n }\r\n\r\n /**\r\n * Logs messages or objects with the warning level.\r\n * Works the same as console.log().\r\n */\r\n warn(...objects: any[]) {\r\n this.log(console.warn, LogLevel.Warning, objects);\r\n }\r\n\r\n /**\r\n * Logs messages or objects with the error level.\r\n * Works the same as console.log().\r\n */\r\n error(...objects: any[]) {\r\n this.log(console.error, LogLevel.Error, objects);\r\n }\r\n\r\n private log(func: (...args: any[]) => void, level: LogLevel, objects: any[]) {\r\n if (level <= Logger.level) {\r\n const log = this.source ? ['[' + this.source + ']'].concat(objects) : objects;\r\n func.apply(console, log);\r\n Logger.outputs.forEach(output => output.apply(output, [this.source, level, ...objects]));\r\n }\r\n }\r\n\r\n}\r\n","export class ViewerConfig {\r\n imageStyle?: any;\r\n viewerStyle?: any;\r\n hideRemove?: boolean;\r\n}\r\n","/**\r\n * Class that stores the configuration data\r\n *\r\n * @author Joshua Kissoon\r\n * @since 20180724\r\n */\r\nexport class TechlifyConfig {\r\n projectKey: string = '';\r\n environment: string = '';\r\n authClientSecret: string = '';\r\n authGrantType: string = '';\r\n apiUrl: string = '';\r\n rawConfigs: any;\r\n storage: Storage;\r\n isLogoutWhileApiGetsFailed: boolean = false;\r\n\r\n constructor(data: any) {\r\n this.loadFromMap(data);\r\n }\r\n\r\n loadFromMap(data: any) {\r\n this.projectKey = data.projectKey;\r\n this.environment = data.environment;\r\n this.authClientSecret = data.authClientSecret;\r\n this.authGrantType = data.authGrantType;\r\n this.apiUrl = data.apiUrl;\r\n this.storage = data?.storage;\r\n this.rawConfigs = data;\r\n this.isLogoutWhileApiGetsFailed = data?.isLogoutWhileApiGetsFailed;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { TechlifyConfig } from \"./techlify-config.model\";\r\n\r\n/**\r\n * Service that provides settings for all other services\r\n *\r\n * @author Joshua Kissoon\r\n * @since 20170709\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConfigService {\r\n\r\n public static BASE_CREDENTIALS = \"credentials\";\r\n\r\n private config: TechlifyConfig;\r\n\r\n constructor(config: TechlifyConfig) {\r\n this.config = config;\r\n }\r\n\r\n getConfigsRaw() {\r\n return this.config.rawConfigs;\r\n }\r\n\r\n getProjectKey() {\r\n return this.config.projectKey;\r\n }\r\n\r\n getApiUrl() {\r\n return this.config.apiUrl;\r\n }\r\n\r\n getAuthClientSecret() {\r\n return this.config.authClientSecret;\r\n }\r\n\r\n getStorage() {\r\n return this.config.storage ? this.config.storage : localStorage;\r\n }\r\n\r\n getAuthGrantType() {\r\n return this.config.authGrantType;\r\n }\r\n\r\n getCredentialsKey() {\r\n return this.config.projectKey + \"_\" + ConfigService.BASE_CREDENTIALS;\r\n }\r\n\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\r\n\r\n@Component({\r\n selector: 'snack-bar-component-example-snack',\r\n templateUrl: 'success-snack.html',\r\n styleUrls: ['./snack.scss'],\r\n})\r\nexport class SuccessSnackComponent {\r\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\r\n}\r\n@Component({\r\n selector: 'snack-bar-component-example-snack',\r\n templateUrl: 'error-snack.html',\r\n styleUrls: ['./snack.scss'],\r\n})\r\nexport class ErrorSnackComponent {\r\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { ErrorSnackComponent, SuccessSnackComponent } from './snack/snack.component';\r\n\r\n/**\r\n * Service used to manage alerts in the entire system frontend\r\n * \r\n * @author Gokula Prasanna\r\n * @since 20210131\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n constructor(public snackBar: MatSnackBar) { }\r\n\r\n addAlert(message: string, alertType: string, duration = 3) {\r\n if (alertType == \"success\") {\r\n this.snackBar.openFromComponent(SuccessSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n else {\r\n this.snackBar.openFromComponent(ErrorSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n }\r\n}\r\n","import { TechlifyConfig } from './techlify-config.model';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AlertService } from \"./alert.service\";\r\n\r\n\r\n/**\r\n * Service used to handle errors from the request\r\n *\r\n * @author Joshua Kissoon\r\n * @since 20171202\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerService {\r\n\r\n constructor(private alerter: AlertService,\r\n private config: TechlifyConfig,\r\n ) {\r\n }\r\n\r\n handleError(errorResponse: any, msg: string = '') {\r\n // 1 - Create empty array to store errors\r\n const errors = [];\r\n\r\n // 2 - check if the error object is present in the response\r\n if (errorResponse?.error) {\r\n\r\n // 3 - Check for Laravel form validation error messages object\r\n if (errorResponse?.error?.errors) {\r\n\r\n // 4 - For each error property (which is a form field)\r\n for (const property in errorResponse.error.errors) {\r\n\r\n if (errorResponse.error.errors?.hasOwnProperty(property)) {\r\n\r\n // 5 - Extract it's array of errors\r\n const propertyErrors: Array<string> = errorResponse?.error?.errors[property];\r\n\r\n // 6 - Push all errors in the array to the errors array\r\n propertyErrors.forEach(error => errors.push(error));\r\n }\r\n\r\n }\r\n }\r\n\r\n if (errors.length === 0) {\r\n // 7 - Push the main error message to the array of errors if there is no validation error\r\n errors.push(errorResponse.error.message ? errorResponse.error.message : errorResponse.error?.error);\r\n }\r\n }\r\n var errMessage = errors.length ? errors[0] : msg;\r\n this.alerter.addAlert(\"Error: \" + errMessage, \"warning\");\r\n\r\n if (errorResponse.status == 403 && this.config.isLogoutWhileApiGetsFailed) {\r\n sessionStorage.clear();\r\n localStorage.clear();\r\n location.reload();\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { Logger } from './logger.service';\r\nimport { ConfigService } from './config.service';\r\nimport { ErrorHandlerService } from './error-handler.service';\r\n\r\nconst log = new Logger('ErrorHandlerInterceptor');\r\n\r\n/**\r\n * Adds a default error handler to all requests.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerInterceptor implements HttpInterceptor {\r\n\r\n constructor(private configService: ConfigService, private errorHandler: ErrorHandlerService) { }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return next.handle(request).pipe(catchError(error => this.handleError(error)));\r\n }\r\n\r\n // Customize the default error handler here if needed\r\n private handleError(error: HttpErrorResponse): Observable<HttpEvent<any>> {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // client-side error\r\n errorMessage = `Client Error: ${this.configService?.getProjectKey()}: ${error.error.message}`;\r\n } else {\r\n // server-side error\r\n errorMessage = `Server Error: ${this.configService?.getProjectKey()}`;\r\n try {\r\n this.errorHandler.handleError(error, 'Unexpected Server Error, try later or contact service team');\r\n } catch (e) {\r\n console.log(\"Unable to handle server error\", e);\r\n }\r\n }\r\n return throwError(error);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { ConfigService } from './config.service';\r\nimport { Logger } from './logger.service';\r\n\r\nconst log = new Logger('HttpCacheService');\r\n\r\n\r\nexport interface HttpCacheEntry {\r\n lastUpdated: Date;\r\n data: HttpResponse<any>;\r\n}\r\n\r\n/**\r\n * Provides a cache facility for HTTP requests with configurable persistence policy.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpCacheService {\r\n\r\n private cachedData: { [key: string]: HttpCacheEntry; } = {};\r\n private storage: Storage | any | null;\r\n private cachePersistenceKey: String | any;\r\n\r\n constructor(private configService: ConfigService) {\r\n this.storage = this.configService.getStorage();\r\n this.cachePersistenceKey = this.configService.getProjectKey() + '_HTTP_CACHE';\r\n this.loadCacheData();\r\n }\r\n\r\n /**\r\n * Sets the cache data for the specified request.\r\n * @param {!string} url The request URL.\r\n * @param {ResponseOptions} data The received data.\r\n * @param {Date=} lastUpdated The cache last update, current date is used if not specified.\r\n */\r\n setCacheData(url: string, data: HttpResponse<any>, lastUpdated?: Date) {\r\n this.cachedData[url] = {\r\n lastUpdated: lastUpdated || new Date(),\r\n data: data\r\n };\r\n log.debug(`Cache set for key: \"${url}\"`);\r\n this.saveCacheData();\r\n }\r\n\r\n /**\r\n * Gets the cached data for the specified request.\r\n * @param {!string} url The request URL.\r\n * @return {?ResponseOptions} The cached data or null if no cached data exists for this request.\r\n */\r\n getCacheData(url: string): HttpResponse<any> | null {\r\n const cacheEntry = this.cachedData[url];\r\n\r\n if (cacheEntry) {\r\n log.debug(`Cache hit for key: \"${url}\"`);\r\n return cacheEntry.data;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the cached entry for the specified request.\r\n * @param {!string} url The request URL.\r\n * @return {?HttpCacheEntry} The cache entry or null if no cache entry exists for this request.\r\n */\r\n getHttpCacheEntry(url: string): HttpCacheEntry | null {\r\n return this.cachedData[url] || null;\r\n }\r\n\r\n /**\r\n * Clears the cached entry (if exists) for the specified request.\r\n * @param {!string} url The request URL.\r\n */\r\n clearCache(url: string): void {\r\n delete this.cachedData[url];\r\n log.debug(`Cache cleared for key: \"${url}\"`);\r\n this.saveCacheData();\r\n }\r\n\r\n /**\r\n * Cleans cache entries older than the specified date.\r\n * @param {date=} expirationDate The cache expiration date. If no date is specified, all cache is cleared.\r\n */\r\n cleanCache(expirationDate?: Date) {\r\n if (expirationDate) {\r\n Object(this.cachedData).keys.forEach((key: string) => {\r\n if (expirationDate >= this.cachedData[key]?.lastUpdated) {\r\n delete this.cachedData[key];\r\n }\r\n });\r\n } else {\r\n this.cachedData = {};\r\n }\r\n this.saveCacheData();\r\n }\r\n\r\n /**\r\n * Sets the cache persistence policy.\r\n * Note that changing the cache persistence will also clear the cache from its previous storage.\r\n * @param {'local'|'session'=} persistence How the cache should be persisted, it can be either local or session\r\n * storage, or if no value is provided it will be only in-memory (default).\r\n */\r\n setPersistence(persistence?: 'local' | 'session') {\r\n this.cleanCache();\r\n this.storage = persistence === 'local' ? localStorage : persistence === 'session' ? sessionStorage : null;\r\n this.loadCacheData();\r\n }\r\n\r\n private saveCacheData() {\r\n if (this.storage) {\r\n this.storage[this.cachePersistenceKey] = JSON.stringify(this.cachedData);\r\n }\r\n }\r\n\r\n private loadCacheData() {\r\n const data = this.storage ? this.storage[this.cachePersistenceKey] : null;\r\n this.cachedData = data ? JSON.parse(data) : {};\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { HttpCacheService } from './http-cache.service';\r\nimport { Observable, Subscriber } from 'rxjs';\r\n\r\n/**\r\n * Caches HTTP requests.\r\n * Use ExtendedHttpClient fluent API to configure caching for each request.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CacheInterceptor implements HttpInterceptor {\r\n\r\n private forceUpdate = false;\r\n\r\n constructor(private httpCacheService: HttpCacheService) { }\r\n\r\n /**\r\n * Configures interceptor options\r\n * @param {{update: boolean}} options If update option is enabled, forces request to be made and updates cache entry.\r\n * @return {CacheInterceptor} The configured instance.\r\n */\r\n configure(options?: { update?: boolean } | null): CacheInterceptor {\r\n const instance = new CacheInterceptor(this.httpCacheService);\r\n if (options && options.update) {\r\n instance.forceUpdate = true;\r\n }\r\n return instance;\r\n }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (request.method !== 'GET') {\r\n return next.handle(request);\r\n }\r\n\r\n return new Observable((subscriber: Subscriber<HttpEvent<any>>) => {\r\n const cachedData = this.forceUpdate ? null : this.httpCacheService.getCacheData(request.urlWithParams);\r\n if (cachedData !== null) {\r\n // Create new response to avoid side-effects\r\n subscriber.next(new HttpResponse(cachedData as Object));\r\n subscriber.complete();\r\n } else {\r\n next.handle(request)\r\n .subscribe(\r\n event => {\r\n if (event instanceof HttpResponse) {\r\n this.httpCacheService.setCacheData(request.urlWithParams, event);\r\n }\r\n subscriber.next(event);\r\n },\r\n error => subscriber.error(error),\r\n () => subscriber.complete()\r\n );\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { ConfigService } from './config.service';\r\n\r\n/**\r\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ApiPrefixInterceptor implements HttpInterceptor {\r\n\r\n constructor(private configService: ConfigService) { }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (!/^(http|https):/i.test(request.url)) {\r\n request = request.clone({ url: this.configService.getApiUrl() + request.url });\r\n }\r\n return next.handle(request);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ConfigService } from './config.service';\r\n\r\nexport interface Credentials {\r\n // Customize received credentials here\r\n user: any;\r\n token: any;\r\n}\r\n\r\n/**\r\n * Provides storage for authentication credentials.\r\n * The Credentials interface should be replaced with proper implementation.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CredentialsService {\r\n\r\n private _credentials: Credentials | null = null;\r\n\r\n constructor(private configService: ConfigService) {\r\n }\r\n\r\n /**\r\n * Checks is the user is authenticated.\r\n * @return True if the user is authenticated.\r\n */\r\n get isAuthenticated(): boolean {\r\n return !!this.credentials;\r\n }\r\n\r\n /**\r\n * Gets the user credentials.\r\n * @return The user credentials or null if the user is not authenticated.\r\n */\r\n get credentials(): Credentials | null {\r\n if (!this._credentials) {\r\n this._credentials = JSON.parse(sessionStorage.getItem(this.configService.getCredentialsKey()) || localStorage.getItem(this.configService.getCredentialsKey()));\r\n }\r\n return this._credentials;\r\n }\r\n\r\n /**\r\n * Sets the user credentials.\r\n * The credentials may be persisted across sessions by setting the `remember` parameter to true.\r\n * Otherwise, the credentials are only persisted for the current session.\r\n * @param credentials The user credentials.\r\n * @param remember True to remember credentials across sessions.\r\n */\r\n setCredentials(credentials?: Credentials, remember?: boolean) {\r\n this._credentials = credentials || null;\r\n\r\n if (credentials) {\r\n (remember ? localStorage : sessionStorage).setItem(this.configService.getCredentialsKey(), JSON.stringify(credentials));\r\n } else {\r\n sessionStorage.clear();\r\n localStorage.clear();\r\n this._credentials = null;\r\n }\r\n }\r\n\r\n getAccessToken(): string | null {\r\n const expiration = this.credentials?.token?.expires_in || '';\r\n const token = this.credentials?.token?.access_token || '';\r\n\r\n if (!token || !expiration) {\r\n return null;\r\n }\r\n\r\n if (Date.now() > parseInt(expiration)) {\r\n this.setCredentials();\r\n return null;\r\n }\r\n\r\n return token;\r\n }\r\n\r\n getExpiration(): string {\r\n return this.credentials?.token?.expires_in || '';\r\n }\r\n\r\n getRefreshToken(): string {\r\n return this.credentials?.token?.refresh_token || '';\r\n }\r\n\r\n refresh(): CredentialsService {\r\n this._credentials = null;\r\n return this;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { CredentialsService } from './credentials.service';\r\n\r\n\r\n/**\r\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenInterceptor implements HttpInterceptor {\r\n\r\n constructor(private credentials: CredentialsService) { }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n request = request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${this.credentials.getAccessToken() || ''}`\r\n }\r\n });\r\n return next.handle(request);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n\r\n/**\r\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HeaderInterceptor implements HttpInterceptor {\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n request = request.clone({\r\n setHeaders: {\r\n 'Content-Type': request.headers.get('Content-Type') || 'application/json',\r\n }\r\n });\r\n return next.handle(request);\r\n }\r\n}\r\n","import { Inject, Injectable, InjectionToken, Injector, Optional } from '@angular/core';\r\nimport { HttpClient, HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\r\nimport { CacheInterceptor } from './cache.interceptor';\r\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\r\nimport { TokenInterceptor } from './token.interceptor';\r\nimport { HeaderInterceptor } from './header.interceptor';\r\n\r\n\r\n// Augment HttpClient with the added configuration methods from HttpService, to allow in-place replacement of\r\n// HttpClient with HttpService using dependency injection\r\nexport interface HttpCustomClient {\r\n\r\n /**\r\n * Enables caching for this request.\r\n * @param {boolean} forceUpdate Forces request to be made and updates cache entry.\r\n * @return {HttpCustomClient} The new instance.\r\n */\r\n cache(forceUpdate?: boolean): HttpCustomClient;\r\n\r\n /**\r\n * Skips default error handler for this request.\r\n * @return {HttpCustomClient} The new instance.\r\n */\r\n skipErrorHandler(): HttpCustomClient;\r\n\r\n /**\r\n * Skips default API Prefix for this request.\r\n * @return {HttpCustomClient} The new instance.\r\n */\r\n skipApiPrefix(): HttpCustomClient;\r\n\r\n\r\n /**\r\n * Skips default Token Interceptor for this request.\r\n * @return {HttpCustomClient} The new instance.\r\n */\r\n skipToken(): HttpCustomClient;\r\n\r\n /**\r\n* Skips default Header Interceptor for this request.\r\n* @return {HttpCustomClient} The new instance.\r\n*/\r\n skipHeader(): HttpCustomClient;\r\n\r\n}\r\n\r\n\r\n// From @angular/common/http/src/interceptor: allows to chain interceptors\r\nclass HttpInterceptorHandler implements HttpHandler {\r\n\r\n constructor(private next: HttpHandler, private interceptor: HttpInterceptor) { }\r\n\r\n handle(request: HttpRequest<any>): Observable<HttpEvent<any>> {\r\n return this.interceptor.intercept(request, this.next);\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Allows to override default dynamic interceptors that can be disabled with the HttpService extension.\r\n * Except for very specific needs, you should better configure these interceptors directly in the constructor below\r\n * for better readability.\r\n *\r\n * For static interceptors that should always be enabled (like ApiPrefixInterceptor), use the standard\r\n * HTTP_INTERCEPTORS token.\r\n */\r\nexport const HTTP_DYNAMIC_INTERCEPTORS = new InjectionToken<HttpInterceptor>('HTTP_DYNAMIC_INTERCEPTORS');\r\n\r\n/**\r\n * Extends HttpClient with per request configuration using dynamic interceptors.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService extends HttpClient implements HttpCustomClient {\r\n\r\n constructor(private httpHandler: HttpHandler,\r\n private injector: Injector,\r\n @Optional() @Inject(HTTP_DYNAMIC_INTERCEPTORS) private interceptors: HttpInterceptor[] = []) {\r\n super(httpHandler);\r\n\r\n if (!this.interceptors) {\r\n // Configure default interceptors that can be disabled here\r\n this.interceptors = [this.injector.get(ApiPrefixInterceptor), this.injector.get(HeaderInterceptor), this.injector.get(TokenInterceptor), this.injector.get(ErrorHandlerInterceptor)];\r\n }\r\n }\r\n\r\n cache(forceUpdate?: boolean): HttpService {\r\n const cacheInterceptor = this.injector.get(CacheInterceptor).configure({ update: forceUpdate });\r\n return this.addInterceptor(cacheInterceptor);\r\n }\r\n\r\n skipErrorHandler(): HttpService {\r\n return this.removeInterceptor(ErrorHandlerInterceptor);\r\n }\r\n\r\n skipApiPrefix(): HttpService {\r\n return this.removeInterceptor(ApiPrefixInterceptor);\r\n }\r\n\r\n skipToken(): HttpService {\r\n return this.removeInterceptor(TokenInterceptor);\r\n }\r\n\r\n skipHeader(): HttpService {\r\n return this.removeInterceptor(HeaderInterceptor);\r\n }\r\n\r\n // Override the original method to wire interceptors when triggering the request.\r\n request(method?: any, url?: any, options?: any): any {\r\n const handler = this.interceptors.reduceRight(\r\n (next, interceptor) => new HttpInterceptorHandler(next, interceptor),\r\n this.httpHandler\r\n );\r\n return new HttpClient(handler).request(method, url, options);\r\n }\r\n\r\n private removeInterceptor(interceptorType: Function): HttpService {\r\n return new HttpService(\r\n this.httpHandler,\r\n this.injector,\r\n this.interceptors.filter(i => !(i instanceof interceptorType))\r\n );\r\n }\r\n\r\n private addInterceptor(interceptor: HttpInterceptor): HttpService {\r\n return new HttpService(\r\n this.httpHandler,\r\n this.injector,\r\n this.interceptors.concat([interceptor])\r\n );\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from '../core/http.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EntityFileService {\r\n\r\n constructor(private http: HttpService) { }\r\n\r\n getEntityFiles(filters: any) {\r\n return this.http.get(`api/entity-files`, { params: filters }).toPromise();\r\n }\r\n\r\n createEntityFile(model: any) {\r\n return this.http.post(\"api/entity-files\", model).toPromise();\r\n }\r\n\r\n updateEntityFile(model: any) {\r\n return this.http.put(`api/entity-files/${model.id}`, model).toPromise();\r\n }\r\n\r\n deleteEntityFile(model: any) {\r\n return this.http.delete(`api/entity-files/${model.id}`).toPromise();\r\n }\r\n\r\n uploadEntityFile(file: File, params?: any) {\r\n const formData: FormData = new FormData();\r\n formData.append(\"fileData\", file, file.name);\r\n if (params?.entity_id) {\r\n formData.append('entity_id', params.entity_id);\r\n formData.append('entity_type', params.entity_type);\r\n }\r\n return this.http\r\n .skipHeader()\r\n .post(\r\n \"api/entity-files-upload\",\r\n formData,\r\n ).toPromise();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormValidatorService {\r\n\r\n constructor() { }\r\n\r\n /**Method to evaluate form fields*/\r\n isFieldValid(field: string, formGroup: FormGroup | any, firstAttempt?: boolean) {\r\n return (!formGroup.get(field).valid && formGroup.get(field).touched) ||\r\n (!formGroup.get(field).valid && formGroup.get(field).untouched && firstAttempt);\r\n }\r\n\r\n /**Method to find error in form fields*/\r\n getErrorMessage(field: string, formGroup: FormGroup | any, errorMessages: any, errorField?: string) {\r\n const error = Object.keys(formGroup.get(field).errors);\r\n return (error.length > 0) ? (errorMessages[errorField || field][error[0]] ? errorMessages[errorField || field][error[0]] : '') : '';\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Inject } from \"@angular/core\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\r\nimport { EntityFileService } from '../entity-file.service';\r\nimport { FileDropperConfig } from '../../file-dropper/file-dropper.model';\r\nimport { ViewerConfig } from '../../document-viewer/viewer-config.model';\r\nimport { FormValidatorService } from '../../core/form-validator.service';\r\nimport { AlertService } from \"../../core/alert.service\";\r\n\r\nconst errorMessages: any = {\r\n url: {\r\n required: \"File is required\"\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'entity-file-form',\r\n templateUrl: './entity-file-form.component.html',\r\n styleUrls: ['./entity-file-form.component.css']\r\n})\r\nexport class EntityFileFormComponent implements OnInit {\r\n\r\n entityFileGroup: FormGroup;\r\n assignmentFileFirstAttempt: boolean;\r\n updateMode: boolean;\r\n fileConfig: FileDropperConfig;\r\n fileList: any[] = [];\r\n viewerConfig: ViewerConfig;\r\n hideTitleAndDetails: boolean;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<EntityFileFormComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private formValidatorService: FormValidatorService,\r\n private fb: FormBuilder,\r\n private entityFileService: EntityFileService,\r\n private alertService: AlertService\r\n ) {\r\n this.createForm();\r\n }\r\n\r\n /** Method to create a form **/\r\n private createForm() {\r\n //TODO: Finialize and add more validations.\r\n this.entityFileGroup = this.fb.group({\r\n id: [''],\r\n title: [''],\r\n details: [''],\r\n entity_type: [''],\r\n entity_id: [],\r\n file: ['', Validators.required],\r\n url: ['', Validators.required],\r\n file_size: ['', Validators.required],\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.data.entity) {\r\n this.entityFileGroup.get('entity_type').setValue(this.data.entity.entity_type);\r\n this.entityFileGroup.get('entity_id').setValue(this.data.entity.entity_id);\r\n }\r\n if (this.data.file) {\r\n this.updateMode = true;\r\n this.entityFileGroup.patchValue(this.data.file);\r\n }\r\n\r\n if (this.data?.hideTitleAndDetails) {\r\n this.hideTitleAndDetails = this.data?.hideTitleAndDetails;\r\n }\r\n\r\n //File dropper config\r\n this.fileConfig = {\r\n fileId: \"subjectFile\",\r\n containerId: \"subjectFileContainer\",\r\n styles: {\r\n height: \"200px\"\r\n },\r\n multiple: false,\r\n acceptFile: \"*\",\r\n maxSize: 10,\r\n acceptFileText: \"All Files\"\r\n };\r\n\r\n this.viewerConfig = {\r\n viewerStyle: {\r\n height: '200px',\r\n width: '100%'\r\n }\r\n }\r\n }\r\n\r\n\r\n //Method to trigger submit\r\n async submit() {\r\n this.assignmentFileFirstAttempt = true;\r\n if (!this.entityFileGroup.valid) {\r\n return;\r\n }\r\n const model = this.entityFileGroup.value;\r\n\r\n if (this.hideTitleAndDetails) {\r\n model.title = model.file;\r\n }\r\n\r\n const result: any = this.updateMode\r\n ? await this.entityFileService.updateEntityFile(model)\r\n : await this.entityFileService.createEntityFile(model);\r\n this.dialogRef.close(result.item);\r\n this.alertService.addAlert(\r\n \"File submitted successfully\",\r\n \"success\"\r\n );\r\n\r\n }\r\n\r\n async fileChanged(event: any) {\r\n this.fileList = event;\r\n\r\n if (this.fileList.length > 0) {\r\n\r\n const result: any = await this.entityFileService.uploadEntityFile(\r\n this.fileList[0],\r\n );\r\n this.entityFileGroup.patchValue(result.item);;\r\n this.fileList = [];\r\n }\r\n }\r\n\r\n\r\n async removeFile() {\r\n if (this.entityFileGroup.value.file) {\r\n try {\r\n this.entityFileGroup.patchValue({\r\n file: \"\",\r\n url: \"\"\r\n });\r\n } catch (error) {\r\n this.alertService.addAlert(\"Unable to remove file, try later\", \"warn\");\r\n }\r\n }\r\n }\r\n\r\n /**Method to evaluate form fields*/\r\n isFieldValid(field: string) {\r\n return this.formValidatorService.isFieldValid(\r\n field,\r\n this.entityFileGroup,\r\n this.assignmentFileFirstAttempt\r\n );\r\n }\r\n\r\n /**Method to find error in form fields*/\r\n getErrorMessage(field: string) {\r\n return this.formValidatorService.getErrorMessage(\r\n field,\r\n this.entityFileGroup,\r\n errorMessages\r\n );\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\r\nimport { EntityFileService } from './entity-file.service';\r\nimport { ActionPopup } from '../action-popup/action-popup.model';\r\nimport { FormControl } from '@angular/forms';\r\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { AlertService } from '../core/alert.service';\r\nimport { ActionPopupComponent } from '../action-popup/action-popup.component';\r\nimport { ViewerConfig } from '../document-viewer/viewer-config.model';\r\nimport { FileDropperConfig } from '../file-dropper';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-entity-files-view-all',\r\n templateUrl: './entity-files-view-all.component.html',\r\n styleUrls: ['./entity-files-view-all.component.css']\r\n})\r\nexport class EntityFilesViewAllComponent implements OnInit {\r\n @Input() entityId: number;\r\n @Input() entityType: string;\r\n @Input() viewOnly: boolean = false;\r\n @Input() removeSearch: boolean;\r\n @Input() hideTitleAndDetails: boolean;\r\n @Input() displayMode: boolean;\r\n @Input() allowMultipleFiles: boolean = false;\r\n viewerConfig: ViewerConfig;\r\n @Input() title: string = \"File\";\r\n filters: any = {};\r\n entityFiles: any[] = [];\r\n displayedColumns = [\r\n 'index',\r\n 'title',\r\n 'details',\r\n 'file_size',\r\n 'uploaded_on',\r\n ];\r\n isWorking: boolean = false;\r\n search: FormControl = new FormControl('');\r\n page: number = 1;\r\n perPage: number = 25;\r\n lastPage: number = 0;\r\n fileConfig: FileDropperConfig;\r\n fileList: any[] = [];\r\n\r\n constructor(\r\n private entityFileService: EntityFileService,\r\n public location: Location,\r\n private alertService: AlertService,\r\n private dialog: MatDialog,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n //File dropper config\r\n this.fileConfig = {\r\n fileId: \"entityDashboardDropper\",\r\n containerId: \"entityDashboardDropperContainer\",\r\n styles: {\r\n height: \"500px\"\r\n },\r\n multiple: this.allowMultipleFiles,\r\n acceptFile: \"*\",\r\n maxSize: 10,\r\n acceptFileText: \"All Files\"\r\n };\r\n\r\n this.viewerConfig = {\r\n imageStyle: {\r\n height: '200px',\r\n width: '200px'\r\n },\r\n viewerStyle: {\r\n height: ' 160px',\r\n width: '200px'\r\n },\r\n hideRemove: true\r\n };\r\n\r\n if (this.hideTitleAndDetails) {\r\n this.displayedColumns = this.displayedColumns.filter(x => (x !== 'details') && (x !== 'title'));\r\n }\r\n\r\n this.filters = {\r\n entity_type: this.entityType,\r\n entity_id: this.entityId,\r\n title: \"\"\r\n };\r\n this.search.valueChanges.pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => {\r\n this.filters.title = value;\r\n this.reload();\r\n })\r\n this.fetchEntityFilesDetails();\r\n if (!this.viewOnly) {\r\n this.displayedColumns.push('actions');\r\n }\r\n }\r\n\r\n async fetchEntityFilesDetails() {\r\n this.filters.page = this.page;\r\n this.filters.perPage = this.perPage;\r\n this.isWorking = true;\r\n const result: any = await this.entityFileService.getEntityFiles(this.filters);\r\n this.lastPage = result.last_page || this.page;\r\n this.entityFiles = this.entityFiles.concat(result.data);\r\n this.isWorking = false;\r\n }\r\n\r\n addEntityFile() {\r\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\r\n width: \"700px\",\r\n data: {\r\n entity: this.filters,\r\n hideTitleAndDetails: this.hideTitleAndDetails\r\n },\r\n autoFocus: false,\r\n restoreFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(async result => {\r\n if (result) {\r\n const files = [...this.entityFiles];\r\n files.push(result);\r\n this.entityFiles = files;\r\n }\r\n });\r\n }\r\n\r\n editEntityFile(file: any) {\r\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\r\n width: \"700px\",\r\n autoFocus: false,\r\n data: {\r\n file: file,\r\n hideTitleAndDetails: this.hideTitleAndDetails\r\n } // Any data passed here will be injected into the model\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.reload();\r\n }\r\n });\r\n }\r\n\r\n deleteEntityFile(file: any) {\r\n const dialogRef = this.dialog.open(ActionPopupComponent, {\r\n width: \"400px\",\r\n data: <ActionPopup>{\r\n title: \"Delete File\",\r\n message: `Are you sure to proceed delete the file ${file.title}?`\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(async result => {\r\n if (result) {\r\n //Action confirmed\r\n const result = await this.entityFileService.deleteEntityFile(\r\n file\r\n );\r\n this.alertService.addAlert(\r\n \"File successfully deleted\",\r\n \"success\"\r\n );\r\n this.reload();\r\n\r\n }\r\n });\r\n }\r\n\r\n onScroll() {\r\n if (this.page < this.lastPage && !this.isWorking) {\r\n this.page += 1;\r\n this.fetchEntityFilesDetails();\r\n }\r\n }\r\n\r\n reload() {\r\n this.entityFiles = [];\r\n this.page = 1;\r\n if (!this.isWorking) {\r\n this.fetchEntityFilesDetails();\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n resetFieldValue() {\r\n this.search.setValue(\"\");\r\n }\r\n\r\n sizeOf(bytes) {\r\n if (!bytes) { return \"0.00 B\"; }\r\n var e = Math.floor(Math.log(bytes) / Math.log(1024));\r\n return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';\r\n }\r\n\r\n async fileChanged(event: any) {\r\n this.fileList = event;\r\n if (this.fileList.length > 0) {\r\n\r\n await this.fileList.forEach(async file => {\r\n const result: any = await this.entityFileService.uploadEntityFile(\r\n file,\r\n {\r\n entity_type: this.entityType,\r\n entity_id: this.entityId,\r\n }\r\n );\r\n });\r\n this.fileList = [];\r\n this.alertService.addAlert('Successfull uploaded', 'success');\r\n this.reload();\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\";\r\nimport { AlertService } from \"../core/alert.service\";\r\nimport { FileDropperConfig } from './file-dropper.model';\r\n\r\n\r\n@Component({\r\n selector: \"app-file-dropper\",\r\n templateUrl: \"./file-dropper.component.html\",\r\n styleUrls: [\"./file-dropper.component.scss\"]\r\n})\r\nexport class FileDropperComponent implements OnInit {\r\n @Input() fileArray: any[] = [];\r\n\r\n @Input() config: FileDropperConfig;\r\n\r\n @Output() fileChanged: any = new EventEmitter();\r\n\r\n border = \"1px dashed #989898\";\r\n\r\n @Input() styles: any;\r\n\r\n isSingleMode: boolean;\r\n\r\n constructor(private alertService: AlertService) { }\r\n\r\n /**Life cycle hook method */\r\n ngOnInit() {\r\n this.isSingleMode = !Boolean(this.config.multiple);\r\n }\r\n\r\n /**Method for dragging event */\r\n dragEnter(event: any) {\r\n event.target.style.background = this.config.dragColor || \"#c0c0c0\";\r\n\r\n event.target.style.border = \"1px dashed black\";\r\n\r\n event.preventDefault();\r\n }\r\n\r\n /**Method for drag over event */\r\n dragOver(event: any) {\r\n event.preventDefault();\r\n }\r\n\r\n /**Method for drag leave event */\r\n dragLeave(event: any) {\r\n event.target.style.background = \"\";\r\n event.target.style.border = this.border;\r\n\r\n event.preventDefault();\r\n }\r\n\r\n /**Method for drop event */\r\n dropEvent(event: any) {\r\n event.target.style.background = \"\";\r\n event.target.style.border = this.border;\r\n const droppedFiles: FileList = event.dataTransfer.files;\r\n if (droppedFiles.length > 0) {\r\n const fileArray = Array.from(droppedFiles);\r\n this.addFiles(fileArray);\r\n }\r\n event.preventDefault();\r\n }\r\n\r\n /**Method to list files selected */\r\n onFileChange(event: any) {\r\n if (event.target.files && event.target.files.length) {\r\n const fileArray = Array.from(event.target.files);\r\n this.addFiles(fileArray);\r\n const fileInput = document.getElementById(\r\n this.config.fileId\r\n ) as HTMLInputElement;\r\n fileInput.value = \"\";\r\n }\r\n }\r\n\r\n /**Method to add files in the array */\r\n addFiles(fileArray: any) {\r\n if (!this.isSingleMode) {\r\n fileArray.forEach((file: any) => {\r\n this.fileArray = this.fileArray.filter(\r\n (item: any) => item.name !== file.name\r\n );\r\n if (this.fileSizeAllowed(file)) {\r\n this.fileArray.push(file);\r\n }\r\n });\r\n\r\n this.fileArray.sort(this.sortFiles);\r\n this.fileChanged.emit(this.fileArray);\r\n } else {\r\n // Single Mode\r\n if (this.fileArray.length === 0) {\r\n if (this.fileSizeAllowed(fileArray[0])) {\r\n this.fileArray.push(fileArray[0]);\r\n this.fileArray.sort(this.sortFiles);\r\n this.fileChanged.emit(this.fileArray);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**Method to sort the files in asc */\r\n sortFiles(a: any, b: any) {\r\n const nameA = a.name.toUpperCase();\r\n const nameB = b.name.toUpperCase();\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**Method tp validate the file size */\r\n fileSizeAllowed(file: any): boolean {\r\n if (!Boolean(this.config.maxSize)) {\r\n return true;\r\n } else if (file.size / (1024 * 1024) < this.config.maxSize) {\r\n return true;\r\n } else {\r\n this.alertService.addAlert(\r\n `The size of the file exceeds the limit ${this.config.maxSize} MB, kindly upload a file with size ${this.config.maxSize} MB or below`,\r\n \"warn\"\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n /**Method invokes when the drop box is clicked to upload the file */\r\n clickEvent(event: any) {\r\n if (!(this.isSingleMode && this.fileArray.length > 0)) {\r\n document.getElementById(this.config.fileId).click();\r\n }\r\n event.preventDefault();\r\n }\r\n}\r\n","export class FileDropperConfig {\r\n containerId: string;\r\n fileId: string;\r\n styles?: any;\r\n multiple?: boolean;\r\n dragColor?: boolean;\r\n acceptFile: string; // use '*' to accept all file types.\r\n maxSize?: number; // size in MB\r\n acceptFileText?: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from '../core/http.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NoteService {\r\n\r\n constructor(private http: HttpService) { }\r\n\r\n getNotes(filterModel: any) {\r\n return this.http.get('api/notes', { params: filterModel }).toPromise();\r\n }\r\n\r\n addNote(note: any) {\r\n return this.http.post('api/notes', note).toPromise();\r\n }\r\n\r\n editNote(note: any) {\r\n return this.http.put(`api/notes/${note.id}`, note).toPromise();\r\n }\r\n\r\n deleteNote(note: any) {\r\n return this.http.delete(`api/notes/${note.id}`).toPromise();\r\n }\r\n}\r\n","import { Component, OnInit, Inject } from \"@angular/core\";\r\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\nimport { NoteService } from \"../note.service\";\r\nimport { FormValidatorService } from '../../core/form-validator.service';\r\nimport { AlertService } from \"../../core/alert.service\";\r\n\r\nconst errorMessages: any = {\r\n note: {\r\n required: \"Note is required\"\r\n }\r\n};\r\n\r\n@Component({\r\n selector: 'app-note-form',\r\n templateUrl: './note-form.component.html',\r\n styleUrls: ['./note-form.component.css']\r\n})\r\nexport class NoteFormComponent implements OnInit {\r\n\r\n updateMode: boolean;\r\n noteFormGroup: FormGroup;\r\n noteFormFirstAttempt: boolean;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<NoteFormComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private fb: FormBuilder,\r\n private formValidatorService: FormValidatorService,\r\n private alertService: AlertService,\r\n private noteService: NoteService\r\n ) {\r\n this.createForm();\r\n }\r\n\r\n /** Method to create a form **/\r\n private createForm() {\r\n //TODO: Finialize and add more validations.\r\n this.noteFormGroup = this.fb.group({\r\n id: [\"\"],\r\n note: [\"\", Validators.compose([Validators.required])],\r\n model_type: [\"\"],\r\n related_model_id: [\"\"],\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.data.update) {\r\n this.updateMode = true;\r\n }\r\n this.noteFormGroup.patchValue(this.data.note);\r\n }\r\n\r\n //Method to trigger login\r\n async submit() {\r\n this.noteFormFirstAttempt = true;\r\n if (this.noteFormGroup.valid) {\r\n const model = this.noteFormGroup.value;\r\n const result = this.updateMode\r\n ? await this.noteService.editNote(model)\r\n : await this.noteService.addNote(model);\r\n\r\n this.alertService.addAlert(\r\n `${this.data?.labelText} saved successfully`,\r\n \"success\"\r\n );\r\n this.dialogRef.close(result);\r\n }\r\n }\r\n\r\n cancel() {\r\n this.dialogRef.close();\r\n }\r\n\r\n /**Method to evaluate form fields*/\r\n isFieldValid(field: string) {\r\n return this.formValidatorService.isFieldValid(\r\n field,\r\n this.noteFormGroup,\r\n this.noteFormFirstAttempt\r\n );\r\n }\r\n\r\n /**Method to find error in form fields*/\r\n getErrorMessage(field: string) {\r\n return this.formValidatorService.getErrorMessage(\r\n field,\r\n this.noteFormGroup,\r\n errorMessages\r\n );\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { NoteService } from '../note.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NoteFormComponent } from '../note-form/note-form.component';\r\nimport { ActionPopupComponent } from '../../action-popup/action-popup.component';\r\nimport { ActionPopup } from '../../action-popup/action-popup.model';\r\n\r\n@Component({\r\n selector: 'app-note-list',\r\n templateUrl: './note-list.component.html',\r\n styleUrls: ['./note-list.component.css']\r\n})\r\nexport class NoteListComponent implements OnInit {\r\n\r\n @Input() relatedModelId !: any;\r\n @Input() modelType !: any;\r\n @Input() readonly: boolean = false;\r\n @Input() labelText: string = 'Note';\r\n @Input() commentsView: boolean = false;\r\n\r\n notes: any[] = [];\r\n filters: any;\r\n displayedColumns = [\r\n 'index',\r\n 'note',\r\n 'actions'\r\n ];\r\n\r\n page = 1;\r\n lastPage = 1;\r\n\r\n constructor(private noteService: NoteService,\r\n private dialog: MatDialog\r\n ) {\r\n this.filters = {};\r\n this.filters.sort_by = \"created_at|DESC\";\r\n }\r\n\r\n ngOnInit() {\r\n if (this.readonly) {\r\n this.displayedColumns = this.displayedColumns.filter(x => x !== 'actions');\r\n }\r\n this.filters.related_model_id = this.relatedModelId;\r\n this.filters.model_type = this.modelType;\r\n this.loadData();\r\n }\r\n\r\n async loadData() {\r\n\r\n const result: any = await this.noteService.getNotes({ ...this.filters, page: this.page });\r\n this.notes = this.notes.concat(result.data);\r\n this.page = result.current_page;\r\n this.lastPage = result.last_page;\r\n }\r\n\r\n addNote() {\r\n const dialogRef = this.dialog.open(NoteFormComponent, {\r\n width: \"400px\",\r\n data: {\r\n note: { related_model_id: this.relatedModelId, model_type: this.modelType },\r\n labelText: this.labelText,\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.resetScroll();\r\n this.loadData();\r\n }\r\n });\r\n }\r\n\r\n editNote(note: any) {\r\n const dialogRef = this.dialog.open(NoteFormComponent, {\r\n width: \"400px\",\r\n data: {\r\n note: note,\r\n update: true,\r\n labelText: this.labelText\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.resetScroll();\r\n this.loadData();\r\n }\r\n });\r\n }\r\n\r\n async deleteNote(note: any) {\r\n const dialogRef = this.dialog.open(ActionPopupComponent, {\r\n width: \"400px\",\r\n data: <ActionPopup>{\r\n title: `Delete ${this.labelText}`,\r\n message: `Are you sure to delete?`\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(async result => {\r\n if (result) {\r\n //Action confirmed\r\n\r\n const result = await this.noteService.deleteNote(note);\r\n this.notes = this.notes.filter((item: any) => item.id !== note.id);\r\n\r\n }\r\n });\r\n }\r\n\r\n resetScroll() {\r\n this.page = 1;\r\n this.lastPage = 1;\r\n this.notes = [];\r\n }\r\n\r\n onScroll() {\r\n if (this.page < this.lastPage) {\r\n this.page += 1;\r\n this.loadData();\r\n }\r\n }\r\n\r\n commentAction(event: any) {\r\n if (event.type === \"save\") {\r\n if (event.value.id) {\r\n this.editComment(event.value);\r\n return;\r\n }\r\n this.addComment(event.value);\r\n return;\r\n }\r\n this.deleteNote(event.value);\r\n }\r\n\r\n async editComment(comment: any) {\r\n const result: any = await this.noteService.editNote(comment);\r\n let index = this.notes.findIndex(\r\n (x: any) => x.id === comment.id\r\n );\r\n if (index !== -1) {\r\n this.notes[index] = result.item;\r\n }\r\n }\r\n\r\n async addComment(comment: any) {\r\n comment.related_model_id = this.relatedModelId;\r\n comment.model_type = this.modelType;\r\n const result: any = await this.noteService.addNote(comment);\r\n this.notes.push(result.item);\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnDestroy\r\n} from \"@angular/core\";\r\nimport { FormGroup, FormBuilder } from \"@angular/forms\";\r\nimport { CredentialsService } from \"../../core/credentials.service\";\r\n\r\n@Component({\r\n selector: \"app-comment-form\",\r\n templateUrl: \"./comment-form.component.html\",\r\n styleUrls: [\"./comment-form.component.scss\"]\r\n})\r\nexport class CommentFormComponent implements OnInit, OnDestroy {\r\n commentFormGroup: FormGroup;\r\n view: boolean;\r\n _commentData: any;\r\n\r\n @Input() set commentData(data: any) {\r\n this.view = !!data;\r\n this._commentData = data;\r\n this.commentFormGroup.patchValue(data);\r\n }\r\n\r\n @Output() action = new EventEmitter();\r\n\r\n constructor(private fb: FormBuilder,\r\n private credentialService: CredentialsService\r\n ) {\r\n this.createForm();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n get isLoggedIn() {\r\n return this.credentialService.isAuthenticated;\r\n }\r\n\r\n get currentUser() {\r\n return this.credentialService.credentials.user;\r\n }\r\n\r\n private createForm() {\r\n //TODO: Finialize and add more validations.\r\n this.commentFormGroup = this.fb.group({\r\n id: [\"\"],\r\n note: [\"\"],\r\n model_type: [\"\"],\r\n related_model_id: [\"\"],\r\n });\r\n }\r\n\r\n submit() {\r\n if (this.commentFormGroup.get(\"note\").value) {\r\n if (this._commentData) {\r\n this.view = !this.view;\r\n }\r\n this.action.emit({ type: \"save\", value: this.commentFormGroup.value });\r\n this.commentFormGroup.reset();\r\n } else if (this.commentFormGroup.get(\"id\").value) {\r\n this.deleteComment();\r\n }\r\n }\r\n\r\n hideEdit() {\r\n if (this.commentFormGroup.get(\"id\").value) {\r\n this.view = !this.view;\r\n }\r\n }\r\n\r\n editComment() {\r\n this.view = !this.view;\r\n this.commentFormGroup.patchValue(this._commentData);\r\n }\r\n\r\n deleteComment() {\r\n this.action.emit({ type: \"delete\", value: this.commentFormGroup.value });\r\n }\r\n\r\n ngOnDestroy() { }\r\n}\r\n","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Component, ElementRef, Input, OnDestroy, OnInit, Optional, Self, Output, EventEmitter, TemplateRef } from '@angular/core';\r\nimport { FormBuilder, FormGroup, ControlValueAccessor, NgControl, Validators } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject, of, from } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, startWith, switchMap, finalize } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ComponentType } from '@angular/cdk/portal';\r\nimport { HttpService } from '../core/http.service';\r\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-searchable-selector',\r\n templateUrl: './searchable-selector.component.html',\r\n styleUrls: ['./searchable-selector.component.scss'],\r\n providers: [\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: SearchableSelectorComponent\r\n }\r\n ]\r\n})\r\nexport class SearchableSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n @Input() valueField: string = 'id';\r\n @Input() titleField: string = 'title';\r\n @Input() apiUrl!: string;\r\n @Input() multiple: boolean = false;\r\n @Input() selectedValue: any;\r\n @Output() selectedValueChange = new EventEmitter();\r\n @Input() enableSearch: boolean = true;\r\n @Input() add: boolean = false;\r\n @Input() addConfig: any;\r\n @Input() edit: boolean = false;\r\n @Input() editConfig: any;\r\n @Input() sort: boolean = true;\r\n @Input() sortBy: string;\r\n @Input() searchField: string;\r\n @Input() itemComponent: ComponentType<unknown> | TemplateRef<unknown>;\r\n @Input() items: any[] = [];\r\n @Input() apiDataProperty: string = 'data';\r\n @Input() cache: boolean = false;\r\n @Input() perPage: number = 25;\r\n @Input() inDataSearch: boolean = false;\r\n @Output() selectionChange = new EventEmitter();\r\n @Output() itemsChange = new EventEmitter();\r\n\r\n\r\n isLoading: boolean = false;\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n static nextId = 0;\r\n selectorForm: FormGroup;\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n controlType = 'searchable-selctor';\r\n id = `searchable-selctor-${SearchableSelectorComponent.nextId++}`;\r\n describedBy = '';\r\n filters: any;\r\n cachedItems: any[] = [];\r\n\r\n\r\n get empty() {\r\n const { value: { select_value } } = this.selectorForm;\r\n return !select_value;\r\n }\r\n\r\n get shouldLabelFloat() { return this.focused || !this.empty; }\r\n\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: boolean) {\r\n this.selectorForm.get('select_value').setValidators(Validators.required);\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();\r\n this.stateChanges.next();\r\n }\r\n private _disabled = false;\r\n\r\n @Input()\r\n get value(): any {\r\n if (this.selectorForm.valid) {\r\n return this.selectorForm.value.select_value;\r\n }\r\n return '';\r\n }\r\n set value(data: any) {\r\n this.selectorForm.patchValue({ select_value: data || '' });\r\n this.stateChanges.next();\r\n }\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n private _focusMonitor: FocusMonitor,\r\n private http: HttpService,\r\n private _elementRef: ElementRef<HTMLElement>,\r\n private dialog: MatDialog,\r\n @Optional() @Self() public ngControl: NgControl) {\r\n\r\n this.selectorForm = formBuilder.group({\r\n select_value: [null],\r\n search: ''\r\n });\r\n\r\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\r\n if (this.focused && !origin) {\r\n this.onTouched();\r\n }\r\n this.focused = !!origin;\r\n this.stateChanges.next();\r\n });\r\n\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n openedChange(event: any) {\r\n if (this.dataItems.length === 0 && this.selectorForm.get('search').value) {\r\n this.selectorForm.get('search').setValue('');\r\n }\r\n }\r\n\r\n get dataItems(): any[] {\r\n let items: any[] = [];\r\n if (this.multiple && this.selectedValue && (this.selectedValue.length > 0))\r\n items = [...this.selectedValue, ...this.items];\r\n else if ((!this.multiple) && this.selectedValue)\r\n items = [this.selectedValue, ...this.items];\r\n else\r\n items = this.items;\r\n items = items.filter((v, i, a) => a.findIndex(v => v[this.valueField] === a[i][this.valueField]) === i);\r\n //Emit the items to any child component\r\n this.itemsChange.emit(items);\r\n return items;\r\n }\r\n\r\n ngOnInit() {\r\n this.selectorForm.get('search').valueChanges\r\n .pipe(\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n untilDestroyed(this)\r\n ).subscribe(value => {\r\n if (this.enableSearch)\r\n this.search(value);\r\n });\r\n\r\n this.filters = {\r\n perPage: this.perPage,\r\n search: '',\r\n page: 1,\r\n lastPage: 1\r\n }\r\n if (this.sort) {\r\n this.filters.sort_by = this.sortBy || `${this.titleField}|asc`;\r\n }\r\n\r\n //Fetch Items only if it is not present, can be used in places where we load many entries.\r\n if (this.items.length === 0) {\r\n this.fetchItemList();\r\n }\r\n }\r\n\r\n fetchItemList() {\r\n this.isLoading = true;\r\n let request = this.http.get(this.apiUrl, { params: this.filters })\r\n if (this.cache) {\r\n request = this.http.cache().get(this.apiUrl, { params: this.filters })\r\n }\r\n of().pipe(\r\n startWith(true),\r\n switchMap((_) => from(request)),\r\n finalize(() => this.isLoading = false),\r\n untilDestroyed(this)\r\n ).subscribe((result: any) => {\r\n this.items = this.items.concat(result[this.apiDataProperty]);\r\n if (this.cache) {\r\n this.cachedItems = this.items;\r\n }\r\n this.filters.page = result?.current_page || 1;\r\n this.filters.lastPage = result?.last_page || 1;\r\n });\r\n }\r\n\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n onContainerClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n }\r\n\r\n writeValue(data: any): void {\r\n this.value = data;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n getPropertyValue(ele: any, keyString: string) {\r\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\r\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\r\n const keyList = keyString.split(\".\");\r\n for (let i = 0, n = keyList.length; i < n; ++i) {\r\n const key = keyList[i];\r\n if (ele && key in ele) {\r\n ele = ele[key];\r\n } else {\r\n return;\r\n }\r\n }\r\n return ele;\r\n }\r\n\r\n _handleInput(): void {\r\n this.onChange(this.value);\r\n if (this.multiple)\r\n this.selectedValue = (this.value as []).map(x => this.dataItems.find(y => y[this.valueField] === x));\r\n else\r\n this.selectedValue = this.dataItems.find(x => x[this.valueField] === this.value);\r\n this.selectedValueChange.emit(this.selectedValue);\r\n this.selectionChange.emit(this.value);\r\n }\r\n\r\n get errorState(): boolean {\r\n return (this.ngControl && this.ngControl.invalid && (this.ngControl.touched || this.ngControl.dirty));\r\n }\r\n\r\n static ngAcceptInputType_disabled: boolean | string | null | undefined;\r\n static ngAcceptInputType_required: boolean | string | null | undefined;\r\n\r\n onScroll() {\r\n if (this.filters.lastPage > this.filters.page) {\r\n this.filters.page += 1;\r\n this.fetchItemList();\r\n }\r\n }\r\n\r\n reloadData() {\r\n this.items = [];\r\n this.filters.page = 1;\r\n this.filters.lastPage = 1;\r\n this.fetchItemList();\r\n }\r\n\r\n search(event: any) {\r\n if (this.searchField) {\r\n this.filters[this.searchField] = event;\r\n } else {\r\n this.filters.search = event;\r\n }\r\n // we need search field to search in data\r\n if (this.inDataSearch && this.searchField) {\r\n this.filterItems(event);\r\n } else {\r\n this.reloadData();\r\n }\r\n }\r\n\r\n filterItems(event: string) {\r\n if (event) {\r\n this.items = this.cachedItems.filter((value: any) => {\r\n return (value[this.searchField] as string).toLowerCase().search(event.toLowerCase()) != -1\r\n })\r\n } else {\r\n this.items = this.cachedItems;\r\n }\r\n }\r\n\r\n addItem(event: any) {\r\n const dialogRef = this.dialog.open(this.itemComponent, {\r\n width: '400px',\r\n autoFocus: false,\r\n data: {},\r\n ...this.addConfig\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n this.items.push(result.item);\r\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\r\n this._handleInput();\r\n }\r\n });\r\n event.stopPropagation();\r\n }\r\n\r\n editItem(event: any) {\r\n const dialogRef = this.dialog.open(this.itemComponent, {\r\n width: '400px',\r\n autoFocus: false,\r\n data: {\r\n item: this.selectedValue\r\n },\r\n ...this.editConfig\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n this.items = this.items.filter(x => x[this.valueField] !== this.selectedValue[this.valueField]);\r\n this.items.push(result.item);\r\n this.selectedValue = null;\r\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\r\n this._handleInput();\r\n }\r\n });\r\n event.stopPropagation();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stateChanges.complete();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n }\r\n\r\n}\r\n","import { AfterViewInit, Directive, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MatSelect, SELECT_ITEM_HEIGHT_EM } from '@angular/material/select';\r\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\r\nimport { fromEvent, Subject } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[msInfiniteScroll]'\r\n})\r\nexport class MatSelectInfiniteScrollDirective implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n @Input() threshold = '15%';\r\n @Input() debounceTime = 150;\r\n @Input() complete: boolean;\r\n @Output() infiniteScroll = new EventEmitter<void>();\r\n\r\n private panel: Element;\r\n private thrPx = 0;\r\n private thrPc = 0;\r\n private singleOptionHeight = SELECT_ITEM_HEIGHT_EM;\r\n\r\n private destroyed$ = new Subject<boolean>();\r\n\r\n constructor(private matSelect: MatSelect, private ngZone: NgZone) {\r\n }\r\n\r\n ngOnInit() {\r\n this.evaluateThreshold();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.matSelect.openedChange.pipe(\r\n takeUntil(this.destroyed$)\r\n ).subscribe((opened) => {\r\n if (opened) {\r\n this.panel = this.matSelect.panel.nativeElement;\r\n this.singleOptionHeight = this.getSelectItemHeightPx();\r\n this.registerScrollListener();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyed$.next(true);\r\n this.destroyed$.complete();\r\n }\r\n\r\n evaluateThreshold() {\r\n if (this.threshold.lastIndexOf('%') > -1) {\r\n this.thrPx = 0;\r\n this.thrPc = (parseFloat(this.threshold) / 100);\r\n\r\n } else {\r\n this.thrPx = parseFloat(this.threshold);\r\n this.thrPc = 0;\r\n }\r\n }\r\n\r\n registerScrollListener() {\r\n fromEvent(this.panel, 'scroll').pipe(\r\n takeUntil(this.destroyed$),\r\n debounceTime(this.debounceTime),\r\n tap((event) => {\r\n this.handleScrollEvent(event);\r\n })\r\n ).subscribe();\r\n }\r\n\r\n handleScrollEvent(event) {\r\n this.ngZone.runOutsideAngular(() => {\r\n if (this.complete) {\r\n return;\r\n }\r\n const countOfRenderedOptions = this.matSelect.options.length;\r\n const infiniteScrollDistance = this.singleOptionHeight * countOfRenderedOptions;\r\n const threshold = this.thrPc !== 0 ? (infiniteScrollDistance * this.thrPc) : this.thrPx;\r\n\r\n const scrolledDistance = this.panel.clientHeight + event.target.scrollTop;\r\n\r\n if ((scrolledDistance + threshold) >= infiniteScrollDistance) {\r\n this.ngZone.run(() => this.infiniteScroll.emit());\r\n }\r\n });\r\n }\r\n\r\n getSelectItemHeightPx(): number {\r\n return parseFloat(getComputedStyle(this.panel).fontSize) * SELECT_ITEM_HEIGHT_EM;\r\n }\r\n\r\n}","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\n\r\n/**\r\n * Component to generate a num items selector\r\n * \r\n * @author Floyd Kissoon\r\n * @since 20170817\r\n */\r\n@Component({\r\n selector: \"num-items-selector\",\r\n templateUrl: \"./num-items-selector.html\"\r\n})\r\nexport class NumItemsSelector {\r\n @Input() numItems: number;\r\n @Output() numItemsChange: EventEmitter<number>;\r\n\r\n constructor() {\r\n this.numItemsChange = new EventEmitter<number>();\r\n }\r\n\r\n /**\r\n * Called when an item has been selected\r\n */\r\n numItemsChanged() {\r\n this.numItemsChange.emit(this.numItems);\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Service that provides utility functions for dates\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20170726\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DateUtils {\r\n\r\n /**\r\n * Takes in a date object and outputs the string value\r\n */\r\n getYYYYMMDDString(inputDate: Date): string {\r\n var year = inputDate.getFullYear();\r\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\r\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\r\n\r\n return year + \"-\" + month + \"-\" + date;\r\n }\r\n\r\n /**\r\n * Takes in a date object and outputs the year\r\n */\r\n getYYYY(inputDate: Date): number {\r\n var year = inputDate.getFullYear();\r\n return year;\r\n }\r\n\r\n /**\r\n * Takes in a date object and outputs the Month\r\n */\r\n getMM(inputDate: Date): number {\r\n var month = inputDate.getMonth() + 1;\r\n return month;\r\n }\r\n // var n = this.rfidCardUseManualEntry.manual_date.toLocaleTimeString();\r\n\r\n getDateTime(inputDate: Date): string {\r\n var year = inputDate.getFullYear();\r\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\r\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\r\n var time = inputDate.toLocaleTimeString();\r\n\r\n return year + \"-\" + month + \"-\" + date + \" \" + time;\r\n }\r\n\r\n}","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\r\n\r\n/**\r\n * Component to generate a number selector\r\n * \r\n * @author Floyd Kissoon\r\n * @since 20180628\r\n */\r\n@Component({\r\n selector: \"number-selector\",\r\n templateUrl: \"./number-selector.html\"\r\n})\r\nexport class NumberSelector implements OnInit {\r\n @Input() start_value: number;\r\n @Input() end_value: number\r\n @Output() selectedValueChange: EventEmitter<number>;\r\n @Input() selectedValue: number;\r\n\r\n items = new Array();\r\n\r\n constructor() {\r\n this.selectedValueChange = new EventEmitter<number>();\r\n }\r\n\r\n /**\r\n * Called when an item has been selected\r\n */\r\n numChanged() {\r\n this.selectedValueChange.emit(this.selectedValue);\r\n }\r\n\r\n\r\n ngOnInit() {\r\n for (var i = this.start_value; i < this.end_value + 1; i++) {\r\n this.items.push(i);\r\n }\r\n }\r\n}\r\n","export class Timeline {\r\n public static CUSTOM: number = 1;\r\n public static TODAY: number = 2;\r\n public static YESTERDAY: number = 3;\r\n public static THIS_WEEK: number = 4;\r\n public static LAST_WEEK: number = 5;\r\n public static THIS_MONTH: number = 6;\r\n public static LAST_MONTH: number = 7;\r\n public static THIS_QUARTER: number = 8;\r\n public static LAST_QUARTER: number = 9;\r\n public static THIS_YEAR: number = 10;\r\n public static LAST_YEAR: number = 11;\r\n public static ALL: number = 12;\r\n public static TOMMOROW: number = 13;\r\n public static NEXT_WEEK: number = 14;\r\n public static NEXT_MONTH: number = 15;\r\n}\r\n","import * as moment_ from 'moment';\r\nconst moment = moment_;\r\nimport { Timeline } from \"./timeline.model\";\r\n\r\n\r\nexport interface TimelineValue {\r\n date_from: Date,\r\n date_to: Date,\r\n show_custom_field: boolean\r\n}\r\nexport function calculateTimeline(value: any) {\r\n const date = new Date();\r\n const data: any = {\r\n 'date_from': date,\r\n 'date_to': date,\r\n 'show_custom_field': false\r\n };\r\n switch (value) {\r\n case Timeline.CUSTOM: { //Custom\r\n data.show_custom_field = true;\r\n break;\r\n }\r\n case Timeline.TODAY: { // Today\r\n let now = moment();\r\n data.date_from = now.startOf('day').toISOString();\r\n data.date_to = now.endOf('day').toISOString();\r\n break;\r\n }\r\n case Timeline.YESTERDAY: { // Yesterday\r\n let now = moment().subtract(1, 'day');\r\n data.date_from = now.startOf('day').toISOString();\r\n data.date_to = now.endOf('day').toISOString();\r\n break;\r\n }\r\n case Timeline.THIS_WEEK: { // This Week\r\n let now = moment();\r\n data.date_from = now.startOf('isoWeek').toISOString();\r\n data.date_to = now.endOf('isoWeek').toISOString();\r\n break;\r\n }\r\n case Timeline.LAST_WEEK: { // Last Week\r\n let now = moment().subtract(1, 'week');\r\n data.date_from = now.startOf('isoWeek').toISOString();\r\n data.date_to = now.endOf('isoWeek').toISOString();\r\n break;\r\n }\r\n case Timeline.THIS_MONTH: { //This Month\r\n let now = moment();\r\n data.date_from = now.startOf('month').toISOString();\r\n data.date_to = now.endOf('month').toISOString();\r\n break;\r\n }\r\n case Timeline.LAST_MONTH: { // Last Month\r\n let now = moment().subtract(1, 'month');\r\n data.date_from = now.startOf('month').toISOString();\r\n data.date_to = now.endOf('month').toISOString();\r\n break;\r\n }\r\n case Timeline.THIS_QUARTER: { // This Quarter\r\n let now = moment();\r\n data.date_from = now.startOf('quarter').toISOString();\r\n data.date_to = now.endOf('quarter').toISOString();\r\n break;\r\n }\r\n case Timeline.LAST_QUARTER: { // Last Quarter\r\n let now = moment().subtract(1, 'quarter');\r\n data.date_from = now.startOf('quarter').toISOString();\r\n data.date_to = now.endOf('quarter').toISOString();\r\n break;\r\n }\r\n case Timeline.THIS_YEAR: { // This Year\r\n let now = moment();\r\n data.date_from = now.startOf('year').toISOString();\r\n data.date_to = now.endOf('year').toISOString();\r\n break;\r\n }\r\n case Timeline.LAST_YEAR: { // Last Year\r\n let now = moment().subtract(1, 'year');\r\n data.date_from = now.startOf('year').toISOString();\r\n data.date_to = now.endOf('year').toISOString();\r\n break;\r\n }\r\n case Timeline.TOMMOROW: {\r\n let now = moment().add(1, 'day');\r\n data.date_from = now.startOf('day').toISOString();\r\n data.date_to = now.endOf('day').toISOString();\r\n break;\r\n }\r\n case Timeline.NEXT_WEEK: {\r\n let now = moment().add(1, 'week');\r\n data.date_from = now.startOf('isoWeek').toISOString();\r\n data.date_to = now.endOf('isoWeek').toISOString();\r\n break;\r\n }\r\n case Timeline.NEXT_MONTH: {\r\n let now = moment().add(1, 'month');\r\n data.date_from = now.startOf('month').toISOString();\r\n data.date_to = now.endOf('month').toISOString();\r\n break;\r\n }\r\n default: { // All\r\n data.date_from = '';\r\n data.date_to = '';\r\n break;\r\n }\r\n\r\n }\r\n return data;\r\n}\r\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { DatePipe } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Optional, Output, Self, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormBuilder, FormControl, FormGroup, NgControl, Validators } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\r\nimport { TimelineValue, calculateTimeline } from './calculate-timeline';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { Timeline } from './timeline.model';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-timeline-filter',\r\n templateUrl: './timeline-filter.component.html',\r\n styleUrls: ['./timeline-filter.component.scss'],\r\n providers: [\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: TimelineFilterComponent\r\n }\r\n ]\r\n})\r\nexport class TimelineFilterComponent implements OnInit, ControlValueAccessor {\r\n\r\n @ViewChild('picker') picker;\r\n @Input() timelineValue: FormControl = new FormControl('');\r\n @Input() timelines: any[] = [\r\n { value: Timeline.CUSTOM, viewValue: 'Custom' },\r\n { value: Timeline.TODAY, viewValue: 'Today' },\r\n { value: Timeline.YESTERDAY, viewValue: 'Yesterday' },\r\n { value: Timeline.TOMMOROW, viewValue: 'Tomorrow' },\r\n { value: Timeline.THIS_WEEK, viewValue: 'This Week' },\r\n { value: Timeline.LAST_WEEK, viewValue: 'Last Week' },\r\n { value: Timeline.NEXT_WEEK, viewValue: 'Next Week' },\r\n { value: Timeline.THIS_MONTH, viewValue: 'This Month' },\r\n { value: Timeline.LAST_MONTH, viewValue: 'Last Month' },\r\n { value: Timeline.NEXT_MONTH, viewValue: 'Next Month' },\r\n { value: Timeline.THIS_QUARTER, viewValue: 'This Quarter' },\r\n { value: Timeline.LAST_QUARTER, viewValue: 'Last Quarter' },\r\n { value: Timeline.THIS_YEAR, viewValue: 'This Year' },\r\n { value: Timeline.LAST_YEAR, viewValue: 'Last Year' },\r\n { value: Timeline.ALL, viewValue: 'All dates' },\r\n ];\r\n @Input() dateFrom: string = 'date_from';\r\n @Input() dateTo: string = 'date_to';\r\n @Input() appearance: any = \"legacy\"\r\n @Input() showClearbutton: boolean = false;\r\n /**\r\n * @deprecated The form input is deprated\r\n */\r\n @Input() form: FormGroup = null;\r\n @Input() labelText: string = 'Select Timeline';\r\n @Input() selectedValue: any;\r\n @Input() touchUi: boolean = true;\r\n @Output() selectedValueChange = new EventEmitter();\r\n @Output() selectionChange = new EventEmitter();\r\n\r\n selectorForm: FormGroup;\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n controlType = 'timeline-filter';\r\n id = `timeline-filter-${TimelineFilterComponent.nextId++}`;\r\n describedBy = '';\r\n\r\n selectedRange: TimelineValue;\r\n @Input() set defaultValue(value: any) {\r\n this.timelineValue.setValue(value);\r\n this.changeTimeline(value);\r\n }\r\n\r\n showCustomDateFields: boolean = false;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n @Optional() @Self() public ngControl: NgControl,\r\n private datePipe: DatePipe\r\n ) {\r\n this.selectorForm = formBuilder.group({\r\n select_value: [null],\r\n });\r\n\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: boolean) {\r\n this.selectorForm.get('select_value').setValidators(Validators.required);\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();\r\n this.stateChanges.next();\r\n }\r\n private _disabled = false;\r\n\r\n @Input()\r\n get value(): any {\r\n if (this.selectorForm.valid) {\r\n return this.selectorForm.value.select_value;\r\n }\r\n return '';\r\n }\r\n set value(data: any) {\r\n this.selectorForm.patchValue({ select_value: data || '' });\r\n this._handleInput();\r\n this.stateChanges.next();\r\n }\r\n\r\n getDateRangeString() {\r\n let str = \"\";\r\n if (this.selectedRange?.show_custom_field) {\r\n if (this.selectedRange?.date_from.toUTCString() != 'Invalid Date') {\r\n str += ' - ' + this.datePipe.transform(this.selectedRange?.date_from?.toUTCString())\r\n }\r\n if (this.selectedRange?.date_to.toUTCString() != 'Invalid Date') {\r\n str += ' - ' + this.datePipe.transform(this.selectedRange?.date_to?.toUTCString())\r\n }\r\n }\r\n return str;\r\n }\r\n\r\n resetFieldValue(field: string) {\r\n this.form.get(field).setValue('');\r\n }\r\n\r\n\r\n getFieldValue(field: string) {\r\n return this.form.get(field).value;\r\n }\r\n\r\n setFieldValue(field: string, value: any) {\r\n this.form.get(field).setValue(value);\r\n }\r\n\r\n changeTimeline(value: any) {\r\n const timeline = calculateTimeline(value);\r\n if (timeline) {\r\n this.setFieldValue(this.dateFrom, timeline.date_from)\r\n this.setFieldValue(this.dateTo, timeline.date_to)\r\n this.showCustomDateFields = timeline.show_custom_field;\r\n }\r\n }\r\n\r\n _handleInput(): void {\r\n if (this.value == 1) {\r\n this.picker.open();\r\n return;\r\n }\r\n const range: TimelineValue = calculateTimeline(this.value);\r\n this.selectedRange = range;\r\n this.onChange(this.value);\r\n this.selectedValueChange.emit(this.selectedValue);\r\n this.selectionChange.emit(range);\r\n }\r\n\r\n dateRangeChange(dateRangeStart: HTMLInputElement, dateRangeEnd: HTMLInputElement) {\r\n const range: TimelineValue = {\r\n date_from : new Date(dateRangeStart.value),\r\n date_to: new Date(dateRangeEnd.value),\r\n show_custom_field: true\r\n }\r\n this.selectedRange = range;\r\n this.onChange(this.value);\r\n this.selectedValueChange.emit(this.selectedValue);\r\n this.selectionChange.emit(range);\r\n }\r\n\r\n onCustomDateChange(event: any) {\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n onContainerClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n }\r\n\r\n writeValue(data: any): void {\r\n this.value = data;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n ngOnInit(): void {\r\n console.log(this.form);\r\n\r\n this.timelineValue.valueChanges.\r\n pipe(\r\n debounceTime(100),\r\n distinctUntilChanged(),\r\n untilDestroyed(this)\r\n ).subscribe(value => this.changeTimeline(value));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stateChanges.complete();\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loader',\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.scss']\r\n})\r\nexport class LoaderComponent implements OnInit {\r\n\r\n @Input() isLoading = false;\r\n @Input() size = 0.6;\r\n @Input() message: string | undefined;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() { }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { SuccessSnackComponent, ErrorSnackComponent } from './snack.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@NgModule({\r\n declarations: [\r\n SuccessSnackComponent,\r\n ErrorSnackComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatSnackBarModule,\r\n MatIconModule\r\n ],\r\n exports: [\r\n SuccessSnackComponent,\r\n ErrorSnackComponent,\r\n ]\r\n})\r\nexport class SnackModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { CredentialsService } from './credentials.service';\r\nimport { Logger } from './logger.service';\r\n\r\nconst log = new Logger('AuthenticationGuard');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationGuard implements CanActivate {\r\n\r\n constructor(private router: Router,\r\n private credentialsService: CredentialsService) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n return this.isUserAuthenticated(route, state);\r\n }\r\n\r\n canLoad(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n return this.isUserAuthenticated(route, state);\r\n }\r\n\r\n isUserAuthenticated(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n if (this.credentialsService.isAuthenticated) {\r\n return true;\r\n }\r\n\r\n log.debug('Not authenticated, redirecting and adding redirect url...');\r\n this.router.navigate(['/login'], { queryParams: { redirect: state.url }, replaceUrl: true });\r\n return false;\r\n }\r\n\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { concatMap, map } from 'rxjs/operators';\r\nimport { Credentials, CredentialsService } from './credentials.service';\r\nimport { HttpService } from './http.service';\r\n\r\n/**\r\n * Provides a base for authentication workflow.\r\n * The login/logout methods should be replaced with proper implementation.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n\r\n constructor(private credentialsService: CredentialsService, private http: HttpService) { }\r\n\r\n /**\r\n * Authenticates the user.\r\n * @param context The login parameters.\r\n * @return The user credentials.\r\n */\r\n login(context: any): Observable<Credentials> {\r\n const data = <Credentials>{};\r\n return this.http\r\n .skipToken()\r\n .post('oauth/token', context)\r\n .pipe(\r\n concatMap(async (tokenInfo: any) => {\r\n tokenInfo.expires_in = Date.now() + (tokenInfo.expires_in * 1000);\r\n data.token = tokenInfo;\r\n data.user = {};\r\n this.credentialsService.setCredentials(data, context.remember);\r\n const userInfo: any = await this.http.get('api/user/current').toPromise();\r\n data.user = userInfo?.user;\r\n this.credentialsService.setCredentials(data, context.remember);\r\n return data;\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * Logs out the user and clear credentials.\r\n * @return True if the user was logged out successfully.\r\n */\r\n logout(): Observable<boolean> {\r\n\r\n this.credentialsService.setCredentials();\r\n return of(true);\r\n }\r\n\r\n}\r\n","import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * A route strategy allowing for explicit route reuse.\r\n * Used as a workaround for https://github.com/angular/angular/issues/18374\r\n * To reuse a given route, add `data: { reuse: true }` to the route definition.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RouteReusableStrategy extends RouteReuseStrategy {\r\n\r\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\r\n return false;\r\n }\r\n\r\n public store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle | null): void { }\r\n\r\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\r\n return false;\r\n }\r\n\r\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\r\n return null;\r\n }\r\n\r\n public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\r\n // Reuse the route if the RouteConfig is the same, or if both routes use the\r\n // same component, because the latter can have different RouteConfigs.\r\n return future.routeConfig === curr.routeConfig ||\r\n Boolean(future.routeConfig?.component &&\r\n future.routeConfig?.component === curr.routeConfig?.component);\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Service used to manage Local Storage\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20190623\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n private storageSub = new Subject<any>();\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n watch(): Observable<any> {\r\n return this.storageSub.asObservable();\r\n }\r\n\r\n setItem(key: string, data: any) {\r\n localStorage.setItem(key, data);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n\r\n getItem(key: string) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n removeItem(key: string) {\r\n const data = this.getItem(key);\r\n localStorage.removeItem(key);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from './http.service';\r\n\r\n/**\r\n * Service that provides a wrapper for retrieving data from the server\r\n * @deprecated use HttpService Instead\r\n * @author Joshua Kissoon\r\n * @since 20170709\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataManager {\r\n\r\n constructor(private http: HttpService) { }\r\n\r\n /**\r\n * Callback wrapper for the HTTP GET Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n * @updated 20170711 to add parameters\r\n */\r\n GET(urlq: string, params = {}): any {\r\n return this.http\r\n .get(urlq, { params: params })\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POST(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POSTRAW(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .skipHeader()\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n\r\n /**\r\n * Callback wrapper for the HTTP PUT Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n PUT(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .put(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP PATCH Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20161107\r\n */\r\n PATCH(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .patch(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP DELETE Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n DELETE(urlq: string): any {\r\n return this.http\r\n .delete(urlq)\r\n .toPromise();\r\n }\r\n\r\n}","import { MatTooltipModule } from '@angular/material/tooltip';\r\n/*\r\n * This module imports and re-exports all Angular Material modules for convenience,\r\n * so only 1 module import is needed in your feature modules.\r\n * See https://material.angular.io/guide/getting-started#step-3-import-the-component-modules.\r\n *\r\n * To optimize your production builds, you should only import the components used in your app.\r\n */\r\n\r\nimport { NgModule } from \"@angular/core\";\r\nimport {\r\n MatCommonModule,\r\n MatLineModule,\r\n MatNativeDateModule,\r\n MatOptionModule,\r\n MatPseudoCheckboxModule,\r\n MatRippleModule\r\n} from \"@angular/material/core\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatSortModule } from \"@angular/material/sort\";\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatCardModule } from \"@angular/material/card\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatChipsModule } from \"@angular/material/chips\";\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatListModule } from '@angular/material/list'\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\n\r\n\r\n@NgModule({\r\n exports: [\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatCommonModule,\r\n MatDialogModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatLineModule,\r\n MatMenuModule,\r\n MatNativeDateModule,\r\n MatOptionModule,\r\n MatProgressSpinnerModule,\r\n MatPseudoCheckboxModule,\r\n MatRippleModule,\r\n MatSelectModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatCardModule,\r\n MatDividerModule,\r\n MatChipsModule,\r\n MatDatepickerModule,\r\n MatListModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule\r\n ]\r\n})\r\nexport class MaterialModule { }\r\n","import { NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule, HttpClient } from '@angular/common/http';\r\nimport { RouteReuseStrategy, RouterModule } from '@angular/router';\r\n\r\nimport { RouteReusableStrategy } from './route-reusable-strategy';\r\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\r\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\r\nimport { HttpService } from './http.service';\r\nimport { TokenInterceptor } from './token.interceptor';\r\nimport { CacheInterceptor } from './cache.interceptor';\r\nimport { SnackModule } from './snack/snack.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n RouterModule,\r\n SnackModule\r\n ],\r\n providers: [\r\n {\r\n provide: HttpClient,\r\n useClass: HttpService\r\n },\r\n {\r\n provide: RouteReuseStrategy,\r\n useClass: RouteReusableStrategy\r\n }\r\n ],\r\n exports: [\r\n SnackModule\r\n ]\r\n})\r\nexport class CoreModule {\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: CoreModule) {\r\n // Import guard\r\n if (parentModule) {\r\n throw new Error(`${parentModule} has already been loaded. Import Core module in the root module only.`);\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ActionPopupComponent } from './action-popup.component';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n@NgModule({\r\n imports: [\r\n FlexLayoutModule,\r\n CommonModule,\r\n MaterialModule\r\n ],\r\n declarations: [\r\n ActionPopupComponent\r\n ],\r\n exports: [\r\n ActionPopupComponent\r\n ],\r\n entryComponents: [\r\n ActionPopupComponent\r\n ]\r\n})\r\nexport class ActionPopupModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { DataTableComponent } from './data-table.component';\r\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\r\nimport { MaterialModule } from '../material.module';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n FlexLayoutModule,\r\n CommonModule,\r\n InfiniteScrollModule,\r\n MaterialModule\r\n ],\r\n declarations: [\r\n DataTableComponent\r\n ],\r\n exports: [\r\n DataTableComponent\r\n ]\r\n})\r\nexport class DataTableModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { DocumentViewerComponent } from './document-viewer.component';\r\nimport { NgxDocViewerModule } from 'ngx-doc-viewer';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n NgxDocViewerModule,\r\n MaterialModule\r\n ],\r\n declarations: [\r\n DocumentViewerComponent\r\n ],\r\n exports: [\r\n DocumentViewerComponent\r\n ]\r\n})\r\nexport class DocumentViewerModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FileDropperComponent } from './file-dropper.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n MaterialModule\r\n ],\r\n declarations: [\r\n FileDropperComponent\r\n ],\r\n exports: [FileDropperComponent]\r\n})\r\nexport class FileDropperModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\r\nimport { EntityFilesViewAllComponent } from './entity-files-view-all.component';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { FileDropperModule } from '../file-dropper/file-dropper.module';\r\nimport { DocumentViewerModule } from '../document-viewer/document-viewer.module';\r\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [EntityFileFormComponent, EntityFilesViewAllComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FlexLayoutModule,\r\n FileDropperModule,\r\n DocumentViewerModule,\r\n InfiniteScrollModule,\r\n ActionPopupModule,\r\n MaterialModule\r\n ],\r\n exports: [\r\n EntityFilesViewAllComponent\r\n ],\r\n entryComponents: [EntityFileFormComponent]\r\n})\r\nexport class EntityFilesViewAllModule { }\r\n","import { Component, OnInit, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"app-read-more\",\r\n templateUrl: \"./read-more.component.html\",\r\n styleUrls: [\"./read-more.component.scss\"]\r\n})\r\nexport class ReadMoreComponent implements OnInit {\r\n @Input() text: string;\r\n @Input() maxLength: number = 100;\r\n currentText: string;\r\n hideToggle: boolean = true;\r\n\r\n isCollapsed: boolean = true;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n this.determineView();\r\n }\r\n\r\n toggleView() {\r\n this.isCollapsed = !this.isCollapsed;\r\n this.determineView();\r\n }\r\n\r\n determineView() {\r\n if (!this.text || this.text.length <= this.maxLength) {\r\n this.currentText = this.text;\r\n this.isCollapsed = false;\r\n this.hideToggle = true;\r\n return;\r\n }\r\n this.hideToggle = false;\r\n if (this.isCollapsed == true) {\r\n this.currentText = this.text.substring(0, this.maxLength) + \"...\";\r\n } else if (this.isCollapsed == false) {\r\n this.currentText = this.text;\r\n }\r\n }\r\n}\r\n","import { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../material.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReadMoreComponent } from './read-more.component';\r\n\r\n@NgModule({\r\n declarations: [ReadMoreComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule\r\n ],\r\n exports: [\r\n ReadMoreComponent\r\n ]\r\n})\r\nexport class ReadMoreModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NoteListComponent } from './note-list/note-list.component';\r\nimport { NoteFormComponent } from './note-form/note-form.component';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\r\nimport { MaterialModule } from '../material.module';\r\nimport { CommentFormComponent } from './comment-form/comment-form.component';\r\nimport { ReadMoreModule } from '../read-more/read-more.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n NoteListComponent,\r\n NoteFormComponent,\r\n CommentFormComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InfiniteScrollModule,\r\n FlexLayoutModule,\r\n ActionPopupModule,\r\n MaterialModule,\r\n ReadMoreModule\r\n ],\r\n exports: [\r\n NoteListComponent\r\n ],\r\n entryComponents: [NoteFormComponent]\r\n})\r\nexport class NoteModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SearchableSelectorComponent } from './searchable-selector.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatSelectInfiniteScrollDirective } from './mat-select-infinite-scroll.directive';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FlexLayoutModule,\r\n MaterialModule\r\n ],\r\n declarations: [\r\n SearchableSelectorComponent,\r\n MatSelectInfiniteScrollDirective\r\n ],\r\n exports: [\r\n SearchableSelectorComponent,\r\n MatSelectInfiniteScrollDirective\r\n ]\r\n})\r\nexport class SearchableSelectorModule { }\r\n","import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/* Selectors */\r\nimport { NumItemsSelector } from './num-items-selector.component';\r\nimport { NumberSelector } from './number-selector.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ],\r\n declarations: [\r\n NumItemsSelector, NumberSelector,\r\n ],\r\n exports: [NumItemsSelector, NumberSelector]\r\n})\r\nexport class UtilityModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class TimelineFilterRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { TimelineFilterRoutingModule } from './timeline-filter-routing.module';\r\nimport { TimelineFilterComponent } from './timeline-filter.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [TimelineFilterComponent],\r\n imports: [\r\n CommonModule,\r\n TimelineFilterRoutingModule,\r\n FlexLayoutModule,\r\n MaterialModule,\r\n ReactiveFormsModule\r\n ],\r\n exports: [TimelineFilterComponent]\r\n})\r\nexport class TimelineFilterModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LoaderComponent } from './loader.component';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@NgModule({\r\n declarations: [\r\n LoaderComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatProgressSpinnerModule\r\n ],\r\n exports: [\r\n LoaderComponent\r\n ]\r\n})\r\nexport class LoaderModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionRoutingModule } from './email-subscription-routing.module';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n EmailSubscriptionRoutingModule\r\n ]\r\n})\r\nexport class EmailSubscriptionModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionUserRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionUserRoutingModule } from './email-subscription-user-routing.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n EmailSubscriptionUserRoutingModule\r\n ]\r\n})\r\nexport class EmailSubscriptionUserModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionUserFormRoutingModule { }\r\n","\r\nimport { Component, Inject, OnInit, TemplateRef } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { AlertService } from '../../../core/alert.service';\r\nimport { FormValidatorService } from '../../../core/form-validator.service';\r\nimport { HttpService } from '../../../core/http.service';\r\nimport { Logger } from '../../../core/logger.service';\r\n\r\nconst log = new Logger('EmailSubscriptionUser Form');\r\n\r\nconst errorMessages: any = {\r\n user_id: {\r\n required: \"User is required\"\r\n },\r\n email_type_id: {\r\n required: \"Email Type is required\"\r\n },\r\n};\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-email-subscription-user-form',\r\n templateUrl: './email-subscription-user-form.component.html',\r\n styleUrls: ['./email-subscription-user-form.component.scss']\r\n})\r\nexport class EmailSubscriptionUserFormComponent implements OnInit {\r\n\r\n updateMode: boolean;\r\n esUserFormGroup: FormGroup;\r\n esUserFormFirstAttempt: boolean;\r\n esUser: any;\r\n isSubmitLoading: boolean;\r\n selectedUser: any;\r\n selectedType: any;\r\n\r\n constructor(private fb: FormBuilder,\r\n private formValidatorService: FormValidatorService,\r\n private alertService: AlertService,\r\n public dialogRef: MatDialogRef<EmailSubscriptionUserFormComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private http: HttpService\r\n ) {\r\n this.createForm();\r\n }\r\n\r\n /** Method to create a form **/\r\n private createForm() {\r\n\r\n //TODO: Finialize and add more validations.\r\n this.esUserFormGroup = this.fb.group({\r\n id: [''],\r\n user_id: ['', Validators.required],\r\n email_type_id: ['', Validators.required],\r\n });\r\n }\r\n\r\n\r\n ngOnInit() {\r\n if (this.data?.esUser?.id) {\r\n this.esUser = this.data.esUser;\r\n this.updateMode = true;\r\n this.selectedType = this.esUser?.email_type;\r\n this.selectedUser = this.esUser?.user;\r\n this.esUserFormGroup.patchValue(this.esUser);\r\n }\r\n\r\n }\r\n\r\n //Method to trigger login\r\n submit() {\r\n this.esUserFormGroup.markAllAsTouched();\r\n this.esUserFormFirstAttempt = true;\r\n if (this.esUserFormGroup.valid) {\r\n this.isSubmitLoading = true;\r\n const model = this.esUserFormGroup.value;\r\n (\r\n this.updateMode ?\r\n this.http.put(`api/email-subscription-users/${model?.id}`, model) :\r\n this.http.post(`api/email-subscription-users`, model)\r\n )\r\n .pipe(\r\n finalize(() => this.isSubmitLoading = false),\r\n untilDestroyed(this)\r\n ).subscribe(result => {\r\n this.alertService.addAlert(\"Subscription saved successfully\", \"success\");\r\n this.dialogRef.close(result);\r\n });\r\n }\r\n }\r\n\r\n\r\n cancel() {\r\n this.dialogRef.close();\r\n }\r\n\r\n /**Method to evaluate form fields*/\r\n isFieldValid(field: string) {\r\n return this.formValidatorService.isFieldValid(field, this.esUserFormGroup, this.esUserFormFirstAttempt);\r\n }\r\n\r\n /**Method to find error in form fields*/\r\n getErrorMessage(field: string) {\r\n return this.formValidatorService.getErrorMessage(field, this.esUserFormGroup, errorMessages);\r\n }\r\n\r\n ngOnDestroy() {\r\n // Needed for automatic unsubscribe with untilDestroyed\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionUserFormRoutingModule } from './email-subscription-user-form-routing.module';\r\nimport { EmailSubscriptionUserFormComponent } from './email-subscription-user-form.component';\r\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../../../material.module';\r\nimport { LoaderModule } from '../../../loader/loader.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [EmailSubscriptionUserFormComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n SearchableSelectorModule,\r\n EmailSubscriptionUserFormRoutingModule,\r\n LoaderModule\r\n ],\r\n entryComponents: [EmailSubscriptionUserFormComponent]\r\n})\r\nexport class EmailSubscriptionUserFormModule { }\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormControl } from '@angular/forms';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { EmailSubscriptionUserFormComponent } from '../email-subscription-user-form/email-subscription-user-form.component';\r\nimport { Router } from '@angular/router';\r\nimport { Logger } from '../../../core/logger.service';\r\nimport { PageEvent } from '../../../data-table/data-table.model';\r\nimport { HttpService } from '../../../core/http.service';\r\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\r\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\r\n\r\nconst log = new Logger('EmailSubscriptionUser list');\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-email-subscription-user-list',\r\n templateUrl: './email-subscription-user-list.component.html',\r\n styleUrls: ['./email-subscription-user-list.component.scss']\r\n})\r\nexport class EmailSubscriptionUserListComponent implements OnInit {\r\n\r\n esUserList: any[] = [];\r\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n filters: any = {\r\n sort_by: 'created_at|desc',\r\n };\r\n\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n displayColumns: FormControl = new FormControl(['index', 'user.name', 'email_type.title', 'creator.name', 'created_at', 'actions']);\r\n displayedColumns: any[] = [];\r\n availableDisplayColumns: any[] = [\r\n { order: 1, value: 'index', name: 'Index' },\r\n { order: 2, value: 'user.name', name: 'User' },\r\n { order: 3, value: 'email_type.title', name: 'Email Type' },\r\n { order: 4, value: 'creator.name', name: 'Creator' },\r\n { order: 5, value: 'actions', name: 'Actions' }\r\n ];\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private http: HttpService,\r\n private router: Router,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.displayedColumns = this.displayColumns.value;\r\n this.initializeData();\r\n\r\n if (this.sort) {\r\n this.sort.sortChange.pipe(untilDestroyed(this))\r\n .subscribe((value: any) => {\r\n this.changeSort(value);\r\n })\r\n }\r\n }\r\n\r\n get selectedColumns(): string[] {\r\n return this.availableDisplayColumns\r\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\r\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\r\n .map(col => col.value);\r\n }\r\n\r\n columnsChange() {\r\n this.displayedColumns = this.selectedColumns;\r\n }\r\n\r\n\r\n initializeData() {\r\n this.http.get(`api/email-subscription-users`, { params: { ...this.filters, ...this.pageEvent } })\r\n .pipe(untilDestroyed(this))\r\n .subscribe((result: any) => {\r\n this.esUserList = this.esUserList.concat(result.data);\r\n this.pageEvent.page = result.current_page;\r\n this.pageEvent.lastPage = result.last_page;\r\n });\r\n }\r\n\r\n filterChange(event: any) {\r\n this.filters = {\r\n ...this.filters,\r\n ...event\r\n };\r\n this.reload();\r\n }\r\n\r\n addEmailSubscriptionUser() {\r\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\r\n width: '800px',\r\n autoFocus: false,\r\n data: {} // Any data passed here will be injected into the model\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n log.debug(result);\r\n this.reload();\r\n }\r\n });\r\n }\r\n\r\n\r\n editEmailSubscriptionUser(event: any, esUser: any) {\r\n event.stopPropagation();\r\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\r\n width: '800px',\r\n autoFocus: false,\r\n data: {\r\n esUser: esUser\r\n } // Any data passed here will be injected into the model\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n log.debug(result);\r\n this.reload();\r\n }\r\n });\r\n }\r\n\r\n deleteEmailSubscriptionUser(event: any, esUser: any) {\r\n event.stopPropagation();\r\n const dialogRef = this.dialog.open(ActionPopupComponent, {\r\n width: '400px',\r\n data: <ActionPopup>{\r\n title: 'Delete Subscription',\r\n message: `Are you sure to proceed delete the esUser ${esUser.name}?`\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n //Action confirmed\r\n this.http.delete(`api/email-subscription-users/${esUser?.id}`)\r\n .pipe(untilDestroyed(this))\r\n .subscribe((result: any) => {\r\n this.esUserList = this.esUserList.filter(x => x.id !== esUser.id);\r\n });\r\n }\r\n });\r\n }\r\n\r\n onScroll() {\r\n if (this.pageEvent.lastPage > this.pageEvent.page) {\r\n this.pageEvent.page += 1;\r\n this.initializeData();\r\n }\r\n }\r\n\r\n changeSort(event: any) {\r\n if (event.direction) {\r\n this.filters.sort_by = `${event.active}|${event.direction}`;\r\n this.reload();\r\n }\r\n }\r\n\r\n reload() {\r\n this.esUserList = [];\r\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n this.initializeData();\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n //Until destroyed uses it\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\r\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\r\n\r\nexport const esulr = {\r\n title: 'Email Subscription Users',\r\n permissions: {\r\n only: ['app_admin'],\r\n redirectTo: '/'\r\n }\r\n};\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: EmailSubscriptionUserListComponent,\r\n canActivate: [AuthenticationGuard],\r\n data: esulr\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionUserListRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionUserListFilterRoutingModule { }\r\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\r\nimport { FormGroup, FormBuilder } from '@angular/forms';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-email-subscription-user-list-filter',\r\n templateUrl: './email-subscription-user-list-filter.component.html',\r\n styleUrls: ['./email-subscription-user-list-filter.component.scss']\r\n})\r\nexport class EmailSubscriptionUserListFilterComponent implements OnInit {\r\n\r\n esUserFilterForm: FormGroup;\r\n\r\n @Output() valueChange = new EventEmitter();\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.createForm();\r\n }\r\n\r\n private createForm() {\r\n\r\n //TODO: Finialize and add more validations.\r\n this.esUserFilterForm = this.fb.group({\r\n user_id: [''],\r\n email_type_id: [''],\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.esUserFilterForm.valueChanges.pipe(\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n untilDestroyed(this)\r\n ).subscribe(value => {\r\n this.valueChange.emit(value);\r\n })\r\n }\r\n\r\n\r\n resetFieldValue(field: string) {\r\n this.esUserFilterForm.get(field).setValue('');\r\n }\r\n\r\n getFieldValue(field: string) {\r\n return this.esUserFilterForm.get(field).value;\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionUserListFilterRoutingModule } from './email-subscription-user-list-filter-routing.module';\r\nimport { EmailSubscriptionUserListFilterComponent } from './email-subscription-user-list-filter.component';\r\nimport { MaterialModule } from '../../../material.module';\r\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\n\r\n@NgModule({\r\n declarations: [EmailSubscriptionUserListFilterComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n SearchableSelectorModule,\r\n EmailSubscriptionUserListFilterRoutingModule\r\n ],\r\n exports: [EmailSubscriptionUserListFilterComponent]\r\n})\r\nexport class EmailSubscriptionUserListFilterModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionUserListRoutingModule } from './email-subscription-user-list-routing.module';\r\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\r\nimport { EmailSubscriptionUserListFilterModule } from '../email-subscription-user-list-filter/email-subscription-user-list-filter.module';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { EmailSubscriptionUserFormModule } from '../email-subscription-user-form/email-subscription-user-form.module';\r\nimport { MaterialModule } from '../../../material.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\n\r\n@NgModule({\r\n declarations: [EmailSubscriptionUserListComponent],\r\n imports: [\r\n CommonModule,\r\n InfiniteScrollModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n EmailSubscriptionUserListRoutingModule,\r\n EmailSubscriptionUserFormModule,\r\n EmailSubscriptionUserListFilterModule\r\n ],\r\n exports: [EmailSubscriptionUserListComponent]\r\n})\r\nexport class EmailSubscriptionUserListModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\n\r\nexport class EmailSubscriptionTypeRoutingModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionTypeRoutingModule } from './email-subscription-type-routing.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n EmailSubscriptionTypeRoutingModule\r\n ]\r\n})\r\nexport class EmailSubscriptionTypeModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionTypeFormRoutingModule { }\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { AlertService } from '../../../core/alert.service';\r\nimport { FormValidatorService } from '../../../core/form-validator.service';\r\nimport { HttpService } from '../../../core/http.service';\r\n\r\nconst errorMessages: any = {\r\n title: {\r\n required: \"Title is required\"\r\n },\r\n code: {\r\n required: \"Code is required\"\r\n },\r\n frequency_id: {\r\n required: \"Frequency is required\"\r\n },\r\n};\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-email-subscription-type-form',\r\n templateUrl: './email-subscription-type-form.component.html',\r\n styleUrls: ['./email-subscription-type-form.component.scss']\r\n})\r\nexport class EmailSubscriptionTypeFormComponent implements OnInit {\r\n\r\n updateMode: boolean;\r\n emailSubscriptionTypeFormGroup: FormGroup;\r\n emailSubscriptionTypeFormFirstAttempt: boolean;\r\n emailSubscriptionType: any;\r\n selectedFrequency: any;\r\n isLoading: boolean;\r\n isSubmitLoading: boolean;\r\n\r\n constructor(private fb: FormBuilder,\r\n private formValidatorService: FormValidatorService,\r\n private alertService: AlertService,\r\n public dialogRef: MatDialogRef<EmailSubscriptionTypeFormComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private http: HttpService\r\n ) {\r\n this.createForm();\r\n }\r\n\r\n /** Method to create a form **/\r\n private createForm() {\r\n\r\n //TODO: Finialize and add more validations.\r\n this.emailSubscriptionTypeFormGroup = this.fb.group({\r\n id: [''],\r\n title: ['', Validators.compose([Validators.required])],\r\n code: ['', Validators.compose([Validators.required])],\r\n frequency_id: ['', Validators.required],\r\n description: [''],\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.data.emailSubscriptionType?.id) {\r\n this.isLoading = true;\r\n this.emailSubscriptionType = this.data?.emailSubscriptionType;\r\n this.updateMode = true;\r\n this.selectedFrequency = this.emailSubscriptionType?.frequency || {};\r\n this.emailSubscriptionTypeFormGroup.patchValue(this.emailSubscriptionType);\r\n }\r\n }\r\n\r\n //Method to trigger login\r\n submit() {\r\n this.emailSubscriptionTypeFormGroup.markAllAsTouched();\r\n this.emailSubscriptionTypeFormFirstAttempt = true;\r\n if (this.emailSubscriptionTypeFormGroup.valid) {\r\n this.isSubmitLoading = true;\r\n const model = this.emailSubscriptionTypeFormGroup.value;\r\n (\r\n this.updateMode ?\r\n this.http.put(`api/email-subscription-types/${model?.id}`, model) :\r\n this.http.post(`api/email-subscription-types`, model)\r\n )\r\n .pipe(\r\n finalize(() => this.isSubmitLoading = false),\r\n untilDestroyed(this)\r\n ).subscribe(result => {\r\n this.alertService.addAlert(\"Email Type saved successfully\", \"success\");\r\n this.dialogRef.close(result);\r\n });\r\n }\r\n }\r\n\r\n\r\n cancel() {\r\n this.dialogRef.close();\r\n }\r\n\r\n\r\n /**Method to evaluate form fields*/\r\n isFieldValid(field: string) {\r\n return this.formValidatorService.isFieldValid(field, this.emailSubscriptionTypeFormGroup, this.emailSubscriptionTypeFormFirstAttempt);\r\n }\r\n\r\n /**Method to find error in form fields*/\r\n getErrorMessage(field: string) {\r\n return this.formValidatorService.getErrorMessage(field, this.emailSubscriptionTypeFormGroup, errorMessages);\r\n }\r\n\r\n ngOnDestroy() {\r\n // Needed for automatic unsubscribe with untilDestroyed\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionTypeFormRoutingModule } from './email-subscription-type-form-routing.module';\r\nimport { EmailSubscriptionTypeFormComponent } from './email-subscription-type-form.component';\r\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../../../material.module';\r\nimport { LoaderModule } from '../../../loader/loader.module';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [EmailSubscriptionTypeFormComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n SearchableSelectorModule,\r\n EmailSubscriptionTypeFormRoutingModule,\r\n LoaderModule\r\n ],\r\n exports: [EmailSubscriptionTypeFormComponent],\r\n entryComponents: [EmailSubscriptionTypeFormComponent]\r\n})\r\nexport class EmailSubscriptionTypeFormModule { }\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormControl } from '@angular/forms';\r\nimport { distinctUntilChanged, debounceTime } from 'rxjs/operators';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { EmailSubscriptionTypeFormComponent } from '../email-subscription-type-form/email-subscription-type-form.component';\r\nimport { PageEvent } from '../../../data-table/data-table.model';\r\nimport { HttpService } from '../../../core/http.service';\r\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\r\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-email-subscription-type-list',\r\n templateUrl: './email-subscription-type-list.component.html',\r\n styleUrls: ['./email-subscription-type-list.component.scss']\r\n})\r\nexport class EmailSubscriptionTypeListComponent implements OnInit {\r\n\r\n emailSubscriptionTypeList: any[] = [];\r\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n filters: any = {\r\n sort_by: 'created_at|desc',\r\n isLoadRelations: true,\r\n relations: ['frequency']\r\n };\r\n search: FormControl = new FormControl('');\r\n\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n displayColumns: FormControl = new FormControl(['index', 'title', 'frequency.title', 'description', 'actions']);\r\n displayedColumns: any[] = [];\r\n availableDisplayColumns: any[] = [\r\n { order: 1, value: 'index', name: 'Index' },\r\n { order: 2, value: 'title', name: 'Title' },\r\n { order: 3, value: 'code', name: 'Code' },\r\n { order: 4, value: 'frequency.title', name: 'Frequency' },\r\n { order: 5, value: 'description', name: 'Description' },\r\n { order: 6, value: 'actions', name: 'Actions' }\r\n ];\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private http: HttpService,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.displayedColumns = this.displayColumns.value;\r\n this.initializeData();\r\n this.search.valueChanges.pipe(\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n untilDestroyed(this)\r\n ).subscribe(value => {\r\n this.filters.search = value;\r\n this.reload();\r\n });\r\n\r\n if (this.sort) {\r\n this.sort.sortChange.pipe(untilDestroyed(this))\r\n .subscribe((value: any) => {\r\n this.changeSort(value);\r\n })\r\n }\r\n }\r\n\r\n get selectedColumns(): string[] {\r\n return this.availableDisplayColumns\r\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\r\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\r\n .map(col => col.value);\r\n }\r\n\r\n columnsChange() {\r\n this.displayedColumns = this.selectedColumns;\r\n }\r\n\r\n\r\n initializeData() {\r\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\r\n .pipe(untilDestroyed(this))\r\n .subscribe((result: any) => {\r\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.concat(result.data);\r\n this.pageEvent.page = result.current_page;\r\n this.pageEvent.lastPage = result.last_page;\r\n });\r\n }\r\n\r\n addEmailSubscriptionType() {\r\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\r\n width: '400px',\r\n autoFocus: false,\r\n data: {} // Any data passed here will be injected into the model\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n this.reload();\r\n }\r\n });\r\n }\r\n\r\n\r\n editEmailSubscriptionType(event: any, emailSubscriptionType: any) {\r\n event.stopPropagation();\r\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\r\n width: '400px',\r\n autoFocus: false,\r\n data: {\r\n emailSubscriptionType: emailSubscriptionType\r\n } // Any data passed here will be injected into the model\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n this.reload();\r\n }\r\n });\r\n }\r\n\r\n deleteEmailSubscriptionType(event: any, emailSubscriptionType: any) {\r\n event.stopPropagation();\r\n const dialogRef = this.dialog.open(ActionPopupComponent, {\r\n width: '400px',\r\n data: <ActionPopup>{\r\n title: 'Delete Email Type',\r\n message: `Are you sure to proceed delete the Email Type ${emailSubscriptionType.title}?`\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n //Action confirmed\r\n this.http.delete(`api/email-subscription-types/${emailSubscriptionType?.id}`)\r\n .pipe(untilDestroyed(this))\r\n .subscribe((result: any) => {\r\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.filter(x => x.id !== emailSubscriptionType.id);\r\n });\r\n }\r\n });\r\n }\r\n\r\n onScroll() {\r\n if (this.pageEvent.lastPage > this.pageEvent.page) {\r\n this.pageEvent.page += 1;\r\n this.initializeData();\r\n }\r\n }\r\n\r\n changeSort(event: any) {\r\n if (event.direction) {\r\n this.filters.sort_by = `${event.active}|${event.direction}`;\r\n this.reload();\r\n }\r\n }\r\n\r\n reload() {\r\n this.emailSubscriptionTypeList = [];\r\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n this.initializeData();\r\n }\r\n\r\n ngOnDestroy() {\r\n //Until destroyed uses it\r\n }\r\n\r\n}","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\r\n\r\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\r\n\r\nexport const estlr = {\r\n title: 'Email Subscription Type',\r\n permissions: {\r\n only: ['client_admin'],\r\n redirectTo: '/'\r\n }\r\n};\r\n\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: EmailSubscriptionTypeListComponent,\r\n canActivate: [AuthenticationGuard],\r\n data: estlr\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionTypeListRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionTypeListRoutingModule } from './email-subscription-type-list-routing.module';\r\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\r\nimport { EmailSubscriptionTypeFormModule } from '../email-subscription-type-form/email-subscription-type-form.module';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../../../material.module';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\n\r\n@NgModule({\r\n declarations: [EmailSubscriptionTypeListComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n InfiniteScrollModule,\r\n EmailSubscriptionTypeFormModule,\r\n EmailSubscriptionTypeListRoutingModule\r\n ],\r\n exports: [EmailSubscriptionTypeListComponent]\r\n})\r\nexport class EmailSubscriptionTypeListModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { HttpService } from '../../core/http.service';\r\nimport { PageEvent } from '../../data-table/data-table.model';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-email-subscription-for-user',\r\n templateUrl: './email-subscription-for-user.component.html',\r\n styleUrls: ['./email-subscription-for-user.component.scss']\r\n})\r\nexport class EmailSubscriptionForUserComponent implements OnInit {\r\n\r\n subscriptions: any[] = [];\r\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n filters: any = {\r\n sort_by: 'created_at|desc',\r\n isLoadRelations: true,\r\n relations: 'frequency,currentUserSubscription'\r\n };\r\n\r\n constructor(\r\n private http: HttpService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.fetchSubscriptions();\r\n }\r\n\r\n fetchSubscriptions() {\r\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\r\n .pipe(untilDestroyed(this))\r\n .subscribe((result: any) => {\r\n this.subscriptions = this.subscriptions.concat(result.data);\r\n this.pageEvent.page = result.current_page;\r\n this.pageEvent.lastPage = result.last_page;\r\n });\r\n }\r\n\r\n onScroll() {\r\n if (this.pageEvent.lastPage > this.pageEvent.page) {\r\n this.pageEvent.page += 1;\r\n this.fetchSubscriptions();\r\n }\r\n }\r\n\r\n subscribe(sub: any) {\r\n this.http.post(`api/email-subscription-for-user`, { email_type_id: sub?.id })\r\n .pipe(untilDestroyed(this))\r\n .subscribe((result: any) => {\r\n sub.current_user_subscription = result?.item;\r\n });\r\n }\r\n\r\n unsubscribe(sub: any) {\r\n this.http.delete(`api/email-subscription-users/${sub?.current_user_subscription?.id}`)\r\n .pipe(untilDestroyed(this))\r\n .subscribe((_: any) => {\r\n sub.current_user_subscription = null;\r\n });\r\n }\r\n\r\n\r\n reload() {\r\n this.subscriptions = [];\r\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n this.fetchSubscriptions();\r\n }\r\n\r\n ngOnDestroy() {\r\n //Until destroyed uses it\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AuthenticationGuard } from '../../core/authentication.guard';\r\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\r\n\r\nexport const esfur = {\r\n permissions: {\r\n only: ['client_admin']\r\n }\r\n};\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: EmailSubscriptionForUserComponent,\r\n canActivate: [AuthenticationGuard],\r\n data: esfur\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EmailSubscriptionForUserRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EmailSubscriptionForUserRoutingModule } from './email-subscription-for-user-routing.module';\r\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../../material.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [EmailSubscriptionForUserComponent],\r\n imports: [\r\n CommonModule,\r\n InfiniteScrollModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n EmailSubscriptionForUserRoutingModule\r\n ],\r\n exports: [EmailSubscriptionForUserComponent]\r\n})\r\nexport class EmailSubscriptionForUserModule { }\r\n","import { HttpService } from '../core/http.service';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TechlifyUpdateService {\r\n\r\n constructor(private http: HttpService) { }\r\n\r\n getTechlifyUpdates(filters: any) {\r\n return this.http.get(`api/techlify-updates`, { params: filters }).toPromise();\r\n }\r\n\r\n createTechlifyUpdate(techlifyUpdate: any) {\r\n return this.http.post(`api/techlify-updates`, techlifyUpdate).toPromise();\r\n }\r\n\r\n updateTechlifyUpdate(techlifyUpdate: any) {\r\n return this.http.put(`api/techlify-updates/${techlifyUpdate.id}`, techlifyUpdate).toPromise();\r\n }\r\n\r\n deleteTechlifyUpdate(techlifyUpdateId: any) {\r\n return this.http.delete(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\r\n }\r\n\r\n getTechlifyUpdate(techlifyUpdateId: any) {\r\n return this.http.get(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\r\n }\r\n\r\n getNewUpdateForCurrentUser() {\r\n return this.http.get(`api/current-user-techlify-updates`).toPromise();\r\n }\r\n\r\n createUpdateViewRecord(techlifyUpdateView: any) {\r\n return this.http.post(`api/techlify-update-views`, techlifyUpdateView).toPromise();\r\n }\r\n\r\n updateCurrentUserUpdates() {\r\n return this.http.get(`api/techlify-updates/update-view`).toPromise();\r\n }\r\n}\r\n","import { AlertService } from \"../../core/alert.service\";\r\nimport { TechlifyUpdateService } from './../techlify-update.service';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { FormValidatorService } from '../../core/form-validator.service';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Editor, Toolbar } from 'ngx-editor';\r\n\r\nconst errorMessages: any = {\r\n title: {\r\n required: \"Title is required\",\r\n },\r\n released_on: {\r\n required: \"Released On is required\",\r\n },\r\n version: {\r\n required: \"Version is required\",\r\n },\r\n description: {\r\n required: \"Description is required\",\r\n },\r\n learn_more_link: {\r\n pattern: \"Please enter valid link\",\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-techlify-update-form',\r\n templateUrl: './techlify-update-form.component.html',\r\n styleUrls: ['./techlify-update-form.component.scss']\r\n})\r\nexport class TechlifyUpdateFormComponent implements OnInit {\r\n\r\n @Output() onSave = new EventEmitter<any>();\r\n techlifyUpdateForm: FormGroup;\r\n isUpdateMode: boolean = false;\r\n editor: Editor;\r\n toolbar: Toolbar = [\r\n ['bold', 'italic'],\r\n ['bullet_list'],\r\n ];\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<TechlifyUpdateFormComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private fb: FormBuilder,\r\n private formValidatorService: FormValidatorService,\r\n private alertService: AlertService,\r\n private techlifyUpdateService: TechlifyUpdateService\r\n ) {\r\n this.createForm();\r\n }\r\n\r\n private createForm() {\r\n this.techlifyUpdateForm = this.fb.group({\r\n id: new FormControl(''),\r\n title: new FormControl('', Validators.required),\r\n description: new FormControl('', Validators.required),\r\n version: new FormControl('', Validators.required),\r\n released_on: new FormControl('', Validators.required),\r\n learn_more_link: new FormControl('', Validators.compose([Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?')])),\r\n });\r\n if (this.data.techlifyUpdateDetails) {\r\n this.isUpdateMode = true;\r\n this.techlifyUpdateForm.patchValue(this.data.techlifyUpdateDetails);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.editor = new Editor();\r\n }\r\n\r\n async submit() {\r\n if (this.techlifyUpdateForm.valid) {\r\n let result;\r\n const model = this.techlifyUpdateForm.value;\r\n\r\n try {\r\n result = this.isUpdateMode ? await this.techlifyUpdateService.updateTechlifyUpdate(model)\r\n : await this.techlifyUpdateService.createTechlifyUpdate(model);\r\n this.alertService.addAlert(\r\n \"Techlify app update saved successfully\",\r\n \"success\"\r\n );\r\n } catch (error) {\r\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\r\n } finally {\r\n if (result) {\r\n this.dialogRef.close(result);\r\n }\r\n }\r\n }\r\n }\r\n\r\n resetFieldValue(field: string) {\r\n this.techlifyUpdateForm.get(field).setValue('');\r\n }\r\n\r\n getFieldValue(field: string) {\r\n return this.techlifyUpdateForm.get(field).value;\r\n }\r\n\r\n /** Method to evaluate form fields*/\r\n isFieldValid(field: string) {\r\n return this.formValidatorService.isFieldValid(field, this.techlifyUpdateForm, true);\r\n }\r\n /** Method to find error in form fields*/\r\n getErrorMessage(field: string) {\r\n return this.formValidatorService.getErrorMessage(field, this.techlifyUpdateForm, errorMessages);\r\n }\r\n\r\n}\r\n","import { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from './../../material.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TechlifyUpdateFormComponent } from './techlify-update-form.component';\r\nimport { NgxEditorModule } from 'ngx-editor';\r\n\r\n@NgModule({\r\n declarations: [TechlifyUpdateFormComponent],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n NgxEditorModule,\r\n ],\r\n exports: [\r\n TechlifyUpdateFormComponent\r\n ],\r\n entryComponents: [\r\n TechlifyUpdateFormComponent\r\n ]\r\n})\r\nexport class TechlifyUpdateFormModule { }\r\n","import { UntilDestroy } from '@ngneat/until-destroy';\r\nimport { untilDestroyed } from '@ngneat/until-destroy';\r\nimport { ActionPopup } from './../../action-popup/action-popup.model';\r\nimport { ActionPopupComponent } from './../../action-popup/action-popup.component';\r\nimport { TechlifyUpdateFormComponent } from './../techlify-update-form/techlify-update-form.component';\r\nimport { TechlifyUpdateService } from './../techlify-update.service';\r\nimport { FormControl, FormBuilder } from '@angular/forms';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AlertService } from '../../core/alert.service';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-techlify-updates-list',\r\n templateUrl: './techlify-updates-list.component.html',\r\n styleUrls: ['./techlify-updates-list.component.scss']\r\n})\r\nexport class TechlifyUpdatesListComponent implements OnInit {\r\n techlifyUpdates: any[] = [];\r\n displayedColumns: string[] = [\r\n 'index',\r\n 'title',\r\n 'version',\r\n 'released_on',\r\n 'learn_more_link',\r\n 'description',\r\n 'creator',\r\n 'actions'\r\n ];\r\n page: number = 1;\r\n lastPage: number;\r\n perPage: number = 25;\r\n isWorking: boolean = false;\r\n filterFormGroup: FormGroup;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private alertService: AlertService,\r\n private techlifyUpdateService: TechlifyUpdateService,\r\n private fb: FormBuilder,\r\n ) {\r\n this.filterFormGroup = this.fb.group({\r\n search: new FormControl(''),\r\n version: new FormControl(''),\r\n sort_by: new FormControl('released_on|DESC'),\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.loadData();\r\n this.listenChanges();\r\n }\r\n\r\n listenChanges() {\r\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\r\n .subscribe(changes => {\r\n this.reload();\r\n });\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n async loadData() {\r\n try {\r\n this.isWorking = true;\r\n var filters: any = this.filterFormGroup.value;\r\n filters.perPage = this.perPage;\r\n filters.page = this.page;\r\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\r\n filters\r\n );\r\n this.lastPage = result.last_page || this.page;\r\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\r\n } catch (error) {\r\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\r\n }\r\n finally {\r\n this.isWorking = false;\r\n }\r\n }\r\n\r\n reload() {\r\n this.techlifyUpdates = [];\r\n this.page = 1;\r\n if (!this.isWorking) {\r\n this.loadData();\r\n }\r\n }\r\n\r\n onScroll() {\r\n if (!this.isWorking && this.page < this.lastPage) {\r\n this.page += 1;\r\n this.loadData();\r\n }\r\n }\r\n\r\n modifyTechlifyUpdate(model?: any) {\r\n const dialogRef = this.dialog.open(TechlifyUpdateFormComponent, {\r\n width: \"600px\",\r\n data: {\r\n techlifyUpdateDetails: model,\r\n }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.reload();\r\n }\r\n });\r\n }\r\n\r\n async deleteTechlifyUpdate(model: any) {\r\n const dialogRef = this.dialog.open(ActionPopupComponent, {\r\n width: \"400px\",\r\n data: <ActionPopup>{\r\n title: \"Delete Update\",\r\n message: `Are you sure to delete this update?`\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(async result => {\r\n if (result) {\r\n //Action confirmed\r\n try {\r\n await this.techlifyUpdateService.deleteTechlifyUpdate(model.id);\r\n this.alertService.addAlert(\r\n \"Successfully deleted the update\",\r\n \"success\"\r\n );\r\n this.reload();\r\n } catch (error) {\r\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n resetFieldValue(field: string) {\r\n this.filterFormGroup.get(field).setValue(\"\");\r\n }\r\n\r\n sortColumn(event) {\r\n var direction = event.direction.toString().toUpperCase();\r\n this.assignFilter(event.active, direction);\r\n }\r\n\r\n assignFilter(column, direction) {\r\n switch (column) {\r\n case 'title': {\r\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\r\n }\r\n case 'released_on': {\r\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\r\n }\r\n case 'version': {\r\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\r\n }\r\n default: {\r\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: 'all', pathMatch: 'full' },\r\n { path: 'all', component: TechlifyUpdatesListComponent },\r\n\r\n //fallback\r\n {\r\n path: '**',\r\n redirectTo: 'all',\r\n pathMatch: 'full'\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class TechlifyUpdateRoutingModule { }\r\n","import { ReadMoreModule } from '../read-more/read-more.module';\r\nimport { TechlifyUpdateFormModule } from './techlify-update-form/techlify-update-form.module';\r\nimport { TechlifyUpdateRoutingModule } from './techlify-update-routing.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../material.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\r\n\r\n@NgModule({\r\n declarations: [TechlifyUpdatesListComponent],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InfiniteScrollModule,\r\n FlexLayoutModule,\r\n MaterialModule,\r\n ActionPopupModule,\r\n TechlifyUpdateRoutingModule,\r\n TechlifyUpdateFormModule,\r\n ReadMoreModule,\r\n ]\r\n})\r\nexport class TechlifyUpdateModule { }\r\n","import { Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-update-view',\r\n templateUrl: './update-view.component.html',\r\n styleUrls: ['./update-view.component.scss']\r\n})\r\nexport class UpdateViewComponent implements OnInit {\r\n techlifyUpdate: any;\r\n rootNavUrl: any;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<UpdateViewComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private router: Router\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.techlifyUpdate = this.data.techlifyUpdate;\r\n this.rootNavUrl = this.data.rootNavUrl;\r\n }\r\n\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n\r\n openUpdateHistory(): void {\r\n this.close();\r\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\r\n }\r\n\r\n}\r\n","import { UntilDestroy } from '@ngneat/until-destroy';\r\nimport { untilDestroyed } from '@ngneat/until-destroy';\r\nimport { AlertService } from './../../core/alert.service';\r\nimport { UpdateViewComponent } from './../update-view/update-view.component';\r\nimport { TechlifyUpdateService } from './../techlify-update.service';\r\nimport { FormControl, FormBuilder } from '@angular/forms';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-techlify-update-history',\r\n templateUrl: './techlify-update-history.component.html',\r\n styleUrls: ['./techlify-update-history.component.scss']\r\n})\r\nexport class TechlifyUpdateHistoryComponent implements OnInit {\r\n techlifyUpdates: any[] = [];\r\n displayedColumns: string[] = [\r\n 'index',\r\n 'title',\r\n 'version',\r\n 'released_on',\r\n 'learn_more_link',\r\n 'description',\r\n 'creator',\r\n 'actions'\r\n ];\r\n page: number = 1;\r\n lastPage: number;\r\n perPage: number = 25;\r\n isWorking: boolean = false;\r\n filterFormGroup: FormGroup;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private techlifyUpdateService: TechlifyUpdateService,\r\n private fb: FormBuilder,\r\n private alertService: AlertService\r\n ) {\r\n this.filterFormGroup = this.fb.group({\r\n search: new FormControl(''),\r\n version: new FormControl(''),\r\n sort_by: new FormControl('released_on|DESC'),\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.loadData();\r\n this.listenChanges();\r\n this.updateCurrentUserUpdates();\r\n }\r\n\r\n listenChanges() {\r\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\r\n .subscribe(changes => {\r\n this.reload();\r\n });\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n async loadData() {\r\n try {\r\n this.isWorking = true;\r\n var filters: any = this.filterFormGroup.value;\r\n filters.perPage = this.perPage;\r\n filters.page = this.page;\r\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\r\n filters\r\n );\r\n this.lastPage = result.last_page || this.page;\r\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\r\n } catch (error) {\r\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\r\n }\r\n finally {\r\n this.isWorking = false;\r\n }\r\n }\r\n\r\n reload() {\r\n this.techlifyUpdates = [];\r\n this.page = 1;\r\n if (!this.isWorking) {\r\n this.loadData();\r\n }\r\n }\r\n\r\n onScroll() {\r\n if (!this.isWorking && this.page < this.lastPage) {\r\n this.page += 1;\r\n this.loadData();\r\n }\r\n }\r\n\r\n resetFieldValue(field: string) {\r\n this.filterFormGroup.get(field).setValue(\"\");\r\n }\r\n\r\n sortColumn(event) {\r\n var direction = event.direction.toString().toUpperCase();\r\n this.assignFilter(event.active, direction);\r\n }\r\n\r\n assignFilter(column, direction) {\r\n switch (column) {\r\n case 'title': {\r\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\r\n }\r\n case 'released_on': {\r\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\r\n }\r\n case 'version': {\r\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\r\n }\r\n default: {\r\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\r\n }\r\n };\r\n }\r\n\r\n openUpdateView(techlifyUpdate: any): void {\r\n const dialogRef = this.dialog.open(UpdateViewComponent, {\r\n width: \"800px\",\r\n autoFocus: false,\r\n data: {\r\n techlifyUpdate: techlifyUpdate,\r\n isFromHistory: true,\r\n } // Any data passed here will be injected into the model\r\n });\r\n }\r\n\r\n async updateCurrentUserUpdates() {\r\n try {\r\n await this.techlifyUpdateService.updateCurrentUserUpdates();\r\n } catch (error) {\r\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\r\n }\r\n }\r\n}\r\n","import { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: 'update-history', pathMatch: 'full' },\r\n { path: 'update-history', component: TechlifyUpdateHistoryComponent },\r\n\r\n //fallback\r\n {\r\n path: '**',\r\n redirectTo: 'all',\r\n pathMatch: 'full'\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class TechlifyUpdateHistoryRoutingModule { }\r\n","import { ReactiveFormsModule } from '@angular/forms';\r\nimport { TechlifyUpdateHistoryRoutingModule } from './techlify-update-history-routing.module';\r\nimport { ReadMoreModule } from '../../read-more/read-more.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { MaterialModule } from '../../material.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ActionPopupModule } from '../../action-popup/action-popup.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InfiniteScrollModule,\r\n FlexLayoutModule,\r\n MaterialModule,\r\n ActionPopupModule,\r\n ReadMoreModule,\r\n TechlifyUpdateHistoryRoutingModule\r\n ],\r\n declarations: [TechlifyUpdateHistoryComponent]\r\n})\r\nexport class TechlifyUpdateHistoryModule { }\r\n","import { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from './../../material.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UpdateViewComponent } from './update-view.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [UpdateViewComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule\r\n ],\r\n exports: [\r\n UpdateViewComponent\r\n ],\r\n entryComponents: [\r\n UpdateViewComponent\r\n ]\r\n})\r\nexport class UpdateViewModule { }\r\n","import { AlertService } from './../../../core/alert.service';\r\nimport { TechlifyUpdateService } from './../../techlify-update.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Component, EmbeddedViewRef, Inject, OnInit } from '@angular/core';\r\nimport { MatSnackBarRef, MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\r\nimport { UpdateViewComponent } from '../../update-view/update-view.component';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-update-notifier-snack',\r\n templateUrl: './update-notifier-snack.component.html',\r\n styleUrls: ['./update-notifier-snack.component.scss']\r\n})\r\nexport class UpdateNotifierSnackComponent implements OnInit {\r\n maxDescriptionLength: any = 70;\r\n descriptionText: any = '';\r\n techlifyUpdate: any;\r\n rootNavUrl: any;\r\n\r\n constructor(\r\n @Inject(MAT_SNACK_BAR_DATA) public data: any,\r\n private snackBarRef: MatSnackBarRef<EmbeddedViewRef<any>>,\r\n private dialog: MatDialog,\r\n private router: Router,\r\n private techlifyUpdateService: TechlifyUpdateService,\r\n private alertService: AlertService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.techlifyUpdate = this.data.techlifyUpdate;\r\n this.rootNavUrl = this.data.rootNavUrl;\r\n this.determineDescription(this.techlifyUpdate?.description)\r\n }\r\n\r\n close(): void {\r\n this.createUpdateViewRecord();\r\n this.snackBarRef.dismiss();\r\n }\r\n\r\n determineDescription(description: any) {\r\n if (!description || description.length <= this.maxDescriptionLength) {\r\n this.descriptionText = description;\r\n return;\r\n }\r\n this.descriptionText = description.substring(0, this.maxDescriptionLength) + \"...\";\r\n }\r\n\r\n openUpdateView(): void {\r\n this.close();\r\n const dialogRef = this.dialog.open(UpdateViewComponent, {\r\n width: \"800px\",\r\n autoFocus: false,\r\n data: {\r\n techlifyUpdate: this.techlifyUpdate,\r\n rootNavUrl: this.data.rootNavUrl\r\n } // Any data passed here will be injected into the model\r\n });\r\n }\r\n\r\n openUpdateHistory(): void {\r\n this.close();\r\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\r\n }\r\n\r\n async createUpdateViewRecord() {\r\n try {\r\n var techlifyUpdateView = {\r\n update_id: this.techlifyUpdate?.id\r\n };\r\n let result: any = await this.techlifyUpdateService.createUpdateViewRecord(techlifyUpdateView);\r\n }\r\n catch (error) {\r\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\r\n }\r\n }\r\n}\r\n","import { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\r\nimport { TechlifyUpdateService } from './../techlify-update.service';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { AlertService } from '../../core/alert.service';\r\n\r\n@Component({\r\n selector: 'app-update-notifier',\r\n templateUrl: './update-notifier.component.html',\r\n styleUrls: ['./update-notifier.component.scss']\r\n})\r\nexport class UpdateNotifierComponent implements OnInit {\r\n techlifyUpdate: any;\r\n @Input() rootNavUrl: string = '/techlify-updates';\r\n\r\n constructor(\r\n private snackBar: MatSnackBar,\r\n private techlifyUpdateService: TechlifyUpdateService,\r\n private alertService: AlertService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(x => {\r\n this.getNewUpdate();\r\n }, 5000);\r\n }\r\n\r\n async getNewUpdate() {\r\n try {\r\n let result: any = await this.techlifyUpdateService.getNewUpdateForCurrentUser();\r\n this.techlifyUpdate = result.item;\r\n if (this.techlifyUpdate) {\r\n this.showUpdate();\r\n }\r\n }\r\n catch (error) {\r\n console.log(\"Current user updates failed\");\r\n }\r\n }\r\n\r\n showUpdate() {\r\n this.snackBar.openFromComponent(UpdateNotifierSnackComponent, {\r\n data: {\r\n techlifyUpdate: this.techlifyUpdate,\r\n rootNavUrl: this.rootNavUrl\r\n },\r\n horizontalPosition: 'right',\r\n verticalPosition: 'top',\r\n panelClass: ['white-bg']\r\n });\r\n }\r\n\r\n}\r\n","import { ActionPopupModule } from './../../action-popup/action-popup.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from './../../material.module';\r\nimport { UpdateViewModule } from './../update-view/update-view.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UpdateNotifierComponent } from './update-notifier.component';\r\nimport { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [UpdateNotifierComponent, UpdateNotifierSnackComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n UpdateViewModule,\r\n FlexLayoutModule,\r\n ActionPopupModule\r\n ],\r\n exports: [\r\n UpdateNotifierComponent,\r\n ],\r\n entryComponents: [\r\n UpdateNotifierSnackComponent\r\n ]\r\n})\r\nexport class UpdateNotifierModule { }\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport * as XLSX from 'xlsx';\r\n\r\n@Component({\r\n selector: 'app-export-excel-button',\r\n templateUrl: './export-excel-button.component.html',\r\n styleUrls: ['./export-excel-button.component.scss']\r\n})\r\nexport class ExportExcelButtonComponent implements OnInit {\r\n\r\n @Input() name: string = 'Export_Data';\r\n @Input() data: any[] = [];\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n exportExcel() {\r\n const fileName = `${this.name}_${new Date().getTime()}.xlsx`;\r\n const ws = XLSX.utils.json_to_sheet(this.data);\r\n /* generate workbook and add the worksheet */\r\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\r\n\r\n /* save to file */\r\n XLSX.writeFile(wb, fileName);\r\n }\r\n\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ExportExcelButtonComponent } from './export-excel-button/export-excel-button.component';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [ExportExcelButtonComponent],\r\n imports: [\r\n CommonModule,\r\n MaterialModule\r\n ],\r\n exports: [ExportExcelButtonComponent]\r\n})\r\nexport class ExportExcelModule { }\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { HttpService } from '../../core/http.service';\r\n\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-audit-log-view',\r\n templateUrl: './audit-log-view-model.component.html',\r\n styleUrls: ['./audit-log-view-model.component.scss']\r\n})\r\nexport class AuditLogViewModelComponent implements OnInit {\r\n\r\n logInfo: any;\r\n showDeltaChanges: boolean = false;\r\n changeList: any[] = [];\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private http: HttpService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n if (this.data) {\r\n this.http.get(`api/recent-log-for-model`, {\r\n params: {\r\n model_type: this.data?.modelType,\r\n model_id: this.data?.modelId\r\n }\r\n }).pipe(\r\n untilDestroyed(this)\r\n ).subscribe((result: any) => {\r\n this.logInfo = result?.item;\r\n this.getTransformedChanges();\r\n });\r\n }\r\n }\r\n\r\n getTransformedChanges() {\r\n const changes = ((this.logInfo?.action === 'deleted') ? Object.keys(this.logInfo?.object) : Object.keys(this.logInfo?.data?.changes)) || [];\r\n changes.forEach((key: any) => {\r\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\r\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (this.logInfo?.action === 'deleted') ? '' : (this.logInfo?.object[key] ?? ''), oldValue: this.logInfo?.pre_object[key] ?? '' });\r\n });\r\n }\r\n\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { filter } from 'rxjs/operators';\r\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-audit-logs-view-model',\r\n templateUrl: './audit-logs-view-model.component.html',\r\n styleUrls: ['./audit-logs-view-model.component.scss']\r\n})\r\nexport class AuditLogsViewModelComponent implements OnInit {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private router: Router\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.router.events\r\n .pipe(filter(event => event instanceof NavigationEnd), untilDestroyed(this))\r\n .subscribe(_ => this.dialogRef.close());\r\n }\r\n\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\r\nimport { AuditLogsViewModelComponent } from '../audit-logs-view-model/audit-logs-view-model.component';\r\n\r\n\r\n@Component({\r\n selector: 'app-audit-log-for-model',\r\n templateUrl: './audit-log-for-model.component.html',\r\n styleUrls: ['./audit-log-for-model.component.scss']\r\n})\r\nexport class AuditLogForModelComponent implements OnInit {\r\n\r\n @Input() modelType: string;\r\n @Input() modelId: any;\r\n @Input() logView: 'recent' | 'all' = 'recent';\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n getLogView() {\r\n const dialogRef = this.dialog.open(AuditLogViewModelComponent, {\r\n width: '800px',\r\n autoFocus: false,\r\n data: {\r\n modelType: this.modelType,\r\n modelId: this.modelId\r\n } // Any data passed here will be injected into the model\r\n });\r\n }\r\n\r\n getLogsView() {\r\n const dialogRef = this.dialog.open(AuditLogsViewModelComponent, {\r\n width: '95%',\r\n maxWidth: 'unset',\r\n autoFocus: false,\r\n data: {\r\n modelType: this.modelType,\r\n modelId: this.modelId\r\n } // Any data passed here will be injected into the model\r\n });\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AuditLogForModelRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AuditLogViewModelRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AuditLogViewModelRoutingModule } from './audit-log-view-model-routing.module';\r\nimport { AuditLogViewModelComponent } from './audit-log-view-model.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../../material.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [AuditLogViewModelComponent],\r\n imports: [\r\n CommonModule,\r\n AuditLogViewModelRoutingModule,\r\n FlexLayoutModule,\r\n MaterialModule\r\n ],\r\n exports: [AuditLogViewModelComponent]\r\n})\r\nexport class AuditLogViewModelModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AuditLogsViewModelRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AuditLogListRoutingModule { }\r\n","import { Component, OnInit, OnDestroy, Input, ViewChild } from '@angular/core';\r\n\r\n\r\nimport { Router } from '@angular/router';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { PageEvent } from '../../data-table/data-table.model';\r\nimport { DataManager } from '../../core/dataManager.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-audit-log-list',\r\n templateUrl: './audit-log-list.component.html',\r\n styleUrls: ['./audit-log-list.component.scss'],\r\n})\r\nexport class AuditLogListComponent implements OnInit, OnDestroy {\r\n\r\n auditLogList: any[] = [];\r\n @Input() objectId: any;\r\n @Input() objectType: any;\r\n @Input() showFilter: boolean = true;\r\n @Input() showExportButtons: boolean = true;\r\n @Input() userId: any;\r\n\r\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n filters: any = { sort_by: 'created_at|desc' };\r\n displayedColumns: any[] = ['index', 'id', 'object_type', 'object_id', 'action', 'changes', 'created_at', 'user.email'];\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n constructor(\r\n private dataManager: DataManager,\r\n private router: Router,\r\n public sanitizer: DomSanitizer\r\n ) { }\r\n\r\n ngOnInit() {\r\n\r\n this.initializeData();\r\n\r\n if (this.sort) {\r\n this.sort.sortChange.pipe(untilDestroyed(this))\r\n .subscribe((value: any) => {\r\n this.changeSort(value);\r\n })\r\n }\r\n\r\n }\r\n\r\n get excelData(): any[] {\r\n if (this.auditLogList.length > 0) {\r\n return this.auditLogList.map(item => {\r\n return {\r\n 'Type': item?.object_type,\r\n 'Action': item?.action,\r\n 'Data': JSON.stringify(item?.data || {}),\r\n 'Object': JSON.stringify(item?.object || {}),\r\n 'Pre-Object': JSON.stringify(item?.pre_object || {}),\r\n 'Created At': new Date(item?.created_at).toDateString(),\r\n 'Created By': item?.user?.email\r\n };\r\n });\r\n }\r\n return [];\r\n }\r\n\r\n changeSort(event: any) {\r\n if (event.direction) {\r\n this.filters.sort_by = `${event.active}|${event.direction}`;\r\n this.reload();\r\n }\r\n }\r\n\r\n logClicked(log: any) {\r\n this.router.navigate(['/system/audit-logs/log-view', log.id]);\r\n }\r\n\r\n\r\n async initializeData() {\r\n if (this.objectType) {\r\n this.filters = { ...this.filters, object_type: this.objectType }\r\n }\r\n if (this.objectId) {\r\n this.filters = { ...this.filters, object_id: this.objectId }\r\n }\r\n if (this.userId) {\r\n this.filters = { ...this.filters, user_id: this.userId }\r\n }\r\n const result = await this.dataManager.GET(`api/audit-logs`, { ...this.filters, ...this.pageEvent });\r\n this.auditLogList = this.auditLogList.concat(result.data);\r\n this.pageEvent.page = result.current_page;\r\n this.pageEvent.lastPage = result.last_page;\r\n }\r\n\r\n filterChange(event: any) {\r\n if (this.showFilter) {\r\n this.filters = {\r\n ...this.filters,\r\n ...event,\r\n object_type: this.objectType || event?.object_type || '',\r\n object_id: this.objectId || '',\r\n };\r\n this.reload();\r\n }\r\n }\r\n\r\n onScroll() {\r\n if (this.pageEvent.lastPage > this.pageEvent.page) {\r\n this.pageEvent.page += 1;\r\n this.initializeData();\r\n }\r\n }\r\n\r\n reload() {\r\n this.auditLogList = [];\r\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n this.initializeData();\r\n }\r\n\r\n getTransformedChanges(log: any) {\r\n if (log?.data?.changes) {\r\n const changes = Object.keys(log?.data?.changes) || [];\r\n let value = '<div>';\r\n changes.forEach((key: any) => {\r\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\r\n value = `${value} <div><b>${displayAttribute}:</b> <span id=\"old-value\">${log?.pre_object[key] ?? ''}</span><span id=\"new-value\">${log?.object[key] ?? ''}</span></div>`;\r\n });\r\n value = `${value} </div>`;\r\n return value;\r\n }\r\n return '';\r\n }\r\n\r\n ngOnDestroy() {\r\n // Needed for automatic unsubscribe with untilDestroyed\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AuditLogListFilterRoutingModule { }\r\n","import { FormControl } from \"@angular/forms\";\r\n\r\nexport function DateValidator(): any {\r\n return (control: FormControl): { [key: string]: any } => {\r\n\r\n const val: any = new Date(control.value);\r\n if (!!control.value && val == 'Invalid Date') {\r\n return { invalidDate: true };\r\n }\r\n return null;\r\n };\r\n}","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\r\nimport { FormGroup, FormBuilder } from '@angular/forms';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { FormValidatorService } from '../../core/form-validator.service';\r\nimport { DateValidator } from '../../date-validator';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-audit-log-list-filter',\r\n templateUrl: './audit-log-list-filter.component.html',\r\n styleUrls: ['./audit-log-list-filter.component.scss']\r\n})\r\nexport class AuditLogListFilterComponent implements OnInit {\r\n\r\n auditLogFilterForm: FormGroup;\r\n\r\n @Input() objectId: any;\r\n @Input() objectType: any;\r\n\r\n @Output() valueChange = new EventEmitter();\r\n\r\n constructor(private fb: FormBuilder, private formValidatorService: FormValidatorService) {\r\n this.createForm();\r\n }\r\n\r\n get showObjectFilter() {\r\n return !(this.objectId || this.objectType);\r\n }\r\n\r\n private createForm() {\r\n\r\n //TODO: Finialize and add more validations.\r\n this.auditLogFilterForm = this.fb.group({\r\n object_type: [''],\r\n action: [''],\r\n data: [''],\r\n date_to: ['', DateValidator()],\r\n date_from: ['', DateValidator()]\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.auditLogFilterForm.valueChanges.pipe(\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n untilDestroyed(this)\r\n ).subscribe((value: any) => {\r\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\r\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\r\n this.valueChange.emit(value);\r\n })\r\n }\r\n\r\n\r\n resetFieldValue(field: string) {\r\n this.auditLogFilterForm.get(field).setValue('');\r\n }\r\n\r\n getFieldValue(field: string) {\r\n return this.auditLogFilterForm.get(field).value;\r\n }\r\n\r\n isFieldValid(field: string) {\r\n return this.formValidatorService.isFieldValid(field, this.auditLogFilterForm, true);\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AuditLogListFilterRoutingModule } from './audit-log-list-filter-routing.module';\r\nimport { AuditLogListFilterComponent } from './audit-log-list-filter.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../../material.module';\r\nimport { SearchableSelectorModule } from '../../searchable-selector/searchable-selector.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [AuditLogListFilterComponent],\r\n imports: [\r\n CommonModule,\r\n AuditLogListFilterRoutingModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n MaterialModule,\r\n SearchableSelectorModule,\r\n ],\r\n exports: [AuditLogListFilterComponent]\r\n})\r\nexport class AuditLogListFilterModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AuditLogListRoutingModule } from './audit-log-list-routing.module';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { AuditLogListComponent } from './audit-log-list.component';\r\nimport { AuditLogListFilterModule } from '../audit-log-list-filter/audit-log-list-filter.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { ExportExcelModule } from '../../export-excel/export-excel.module';\r\nimport { MaterialModule } from '../../material.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [AuditLogListComponent],\r\n imports: [\r\n CommonModule,\r\n AuditLogListRoutingModule,\r\n ExportExcelModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n MaterialModule,\r\n InfiniteScrollModule,\r\n AuditLogListFilterModule\r\n ],\r\n exports: [AuditLogListComponent]\r\n})\r\nexport class AuditLogListModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AuditLogsViewModelRoutingModule } from './audit-logs-view-model-routing.module';\r\nimport { AuditLogsViewModelComponent } from './audit-logs-view-model.component';\r\nimport { AuditLogListModule } from '../audit-log-list/audit-log-list.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\n\r\n@NgModule({\r\n declarations: [AuditLogsViewModelComponent],\r\n imports: [\r\n CommonModule,\r\n AuditLogsViewModelRoutingModule,\r\n FlexLayoutModule,\r\n AuditLogListModule\r\n ],\r\n exports: [AuditLogsViewModelComponent]\r\n})\r\nexport class AuditLogsViewModelModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AuditLogForModelRoutingModule } from './audit-log-for-model-routing.module';\r\nimport { AuditLogForModelComponent } from './audit-log-for-model.component';\r\nimport { AuditLogViewModelModule } from '../audit-log-view-model/audit-log-view-model.module';\r\nimport { AuditLogsViewModelModule } from '../audit-logs-view-model/audit-logs-view-model.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../../material.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [AuditLogForModelComponent],\r\n imports: [\r\n AuditLogViewModelModule,\r\n AuditLogsViewModelModule,\r\n CommonModule,\r\n AuditLogForModelRoutingModule,\r\n FlexLayoutModule,\r\n MaterialModule,\r\n ],\r\n exports: [AuditLogForModelComponent]\r\n})\r\nexport class AuditLogForModelModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Location } from '@angular/common';\r\nimport * as jsondiffpatch from \"jsondiffpatch\"\r\nimport { DataManager } from '../../core/dataManager.service';\r\n\r\n@Component({\r\n selector: 'app-audit-log-view',\r\n templateUrl: './audit-log-view.component.html',\r\n styleUrls: ['./audit-log-view.component.scss']\r\n})\r\nexport class AuditLogViewComponent implements OnInit {\r\n\r\n logInfo: any;\r\n showDeltaChanges: boolean = false;\r\n changeList: any[] = [];\r\n\r\n constructor(\r\n private dataManager: DataManager,\r\n private route: ActivatedRoute,\r\n private location: Location\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.route.paramMap.subscribe(params => {\r\n if (params.get('id')) {\r\n this.fetchLogDetail(params.get('id'));\r\n } else {\r\n this.location.back();\r\n }\r\n });\r\n }\r\n\r\n getTransformedChanges() {\r\n const changes = ((this.logInfo?.action === 'deleted') ? Object.keys(this.logInfo?.object) : Object.keys(this.logInfo?.data?.changes)) || [];\r\n changes.forEach((key: any) => {\r\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\r\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (this.logInfo?.action === 'deleted') ? '' : (this.logInfo?.object[key] ?? ''), oldValue: this.logInfo?.pre_object[key] ?? '' });\r\n });\r\n }\r\n\r\n async fetchLogDetail(logId: any) {\r\n const result = await this.dataManager.GET(`api/audit-logs/${logId}`);\r\n this.logInfo = result.item;\r\n this.getTransformedChanges();\r\n this.patchDelta();\r\n }\r\n\r\n patchDelta() {\r\n const delta = jsondiffpatch.diff(this.logInfo?.pre_object, this.logInfo?.object);\r\n document.getElementById('jsondiff').innerHTML = jsondiffpatch.formatters.html.format(delta, this.logInfo?.pre_object);\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AuditLogViewRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AuditLogViewRoutingModule } from './audit-log-view-routing.module';\r\nimport { AuditLogViewComponent } from './audit-log-view.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MaterialModule } from '../../material.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [AuditLogViewComponent],\r\n imports: [\r\n CommonModule,\r\n AuditLogViewRoutingModule,\r\n FlexLayoutModule,\r\n MaterialModule\r\n ],\r\n exports: [AuditLogViewComponent]\r\n})\r\nexport class AuditLogViewModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AuthenticationGuard } from '../core/authentication.guard';\r\nimport { AuditLogListComponent } from './audit-log-list/audit-log-list.component';\r\nimport { AuditLogViewComponent } from './audit-log-view/audit-log-view.component';\r\n\r\n\r\nconst routes: Routes = [\r\n { path: 'log-list', component: AuditLogListComponent, canActivate: [AuthenticationGuard] },\r\n { path: 'log-view/:id', component: AuditLogViewComponent, canActivate: [AuthenticationGuard] },\r\n { path: '**', redirectTo: 'log-list', pathMatch: 'full' }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AuditLogRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AuditLogRoutingModule } from './audit-log-routing.module';\r\nimport { AuditLogListModule } from './audit-log-list/audit-log-list.module';\r\nimport { AuditLogViewModule } from './audit-log-view/audit-log-view.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n AuditLogRoutingModule,\r\n AuditLogListModule,\r\n AuditLogViewModule\r\n ],\r\n exports: []\r\n})\r\nexport class AuditLogModule { }\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { ImportCsvConfig } from '../import-csv-config';\r\n\r\n@Component({\r\n selector: 'app-import-success',\r\n templateUrl: './import-success.component.html',\r\n styleUrls: ['./import-success.component.scss']\r\n})\r\nexport class ImportSuccessComponent implements OnInit {\r\n @Input() data: any;\r\n @Input() config: ImportCsvConfig;\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { ErrorHandlerService } from './../../core/error-handler.service';\r\nimport { PageEvent } from './../../data-table/data-table.model';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { ImportCsvConfig } from '../import-csv-config';\r\nimport { HttpService } from '../../core/http.service';\r\n\r\n@Component({\r\n selector: 'app-import-history-list',\r\n templateUrl: './import-history-list.component.html',\r\n styleUrls: ['./import-history-list.component.scss']\r\n})\r\nexport class ImportHistoryListComponent implements OnInit {\r\n\r\n @Input() config: ImportCsvConfig;\r\n histories: any[] = [];\r\n displayedColumns: string[] = [\r\n 'index',\r\n 'imported_by',\r\n 'date',\r\n 'no_of_records'\r\n ];\r\n isWorking: boolean = false;\r\n filter: any;\r\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n\r\n constructor(\r\n private errorHandler: ErrorHandlerService,\r\n private http: HttpService,\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.config.importHistory.isEnabled) {\r\n this.filter = {\r\n model_type: this.config.importHistory.type,\r\n };\r\n }\r\n this.loadData();\r\n }\r\n\r\n loadData() {\r\n try {\r\n this.isWorking = true;\r\n this.http.get(this.config.importHistory.apiUrl, { params: { ...this.filter, ...this.pageEvent } }).subscribe((result: any) => {\r\n this.histories = this.histories.concat(result.data);\r\n this.pageEvent.page = result.current_page;\r\n this.pageEvent.lastPage = result.last_page;\r\n });\r\n } catch (error) {\r\n this.errorHandler.handleError(error);\r\n }\r\n finally {\r\n this.isWorking = false;\r\n }\r\n }\r\n\r\n onScroll() {\r\n if (this.pageEvent.lastPage > this.pageEvent.page) {\r\n this.pageEvent.page += 1;\r\n this.loadData();\r\n }\r\n }\r\n\r\n reload() {\r\n this.histories = [];\r\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n this.loadData();\r\n }\r\n\r\n ngOnDestroy() {\r\n //Until destroyed uses it\r\n }\r\n\r\n}\r\n","import { FormValidatorService } from '../../core/form-validator.service';\r\nimport { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Location } from '@angular/common';\r\nimport { ImportCsvConfig } from '../import-csv-config';\r\n\r\nconst errorMessages: any = {\r\n property: {\r\n required: \"Property is required\",\r\n unavailable: \"Duplicate entry\"\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'app-field-mapping',\r\n templateUrl: './field-mapping.component.html',\r\n styleUrls: ['./field-mapping.component.scss']\r\n})\r\nexport class FieldMappingComponent implements OnInit {\r\n\r\n importMappingForm: FormGroup;\r\n @Input() data: any[];\r\n @Input() config: ImportCsvConfig;\r\n firstDataArray: any[] = [];\r\n properties: any[] = [];\r\n @Output() onSave = new EventEmitter();\r\n @Output() onReUpload= new EventEmitter();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private formValidatorService: FormValidatorService,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n public location: Location\r\n ) {\r\n this.createImportMappingForm();\r\n }\r\n\r\n ngOnInit() {\r\n this.properties = this.config.properties;;\r\n this.reFectorAttributes(this.data[0]);\r\n }\r\n\r\n createImportMappingForm() {\r\n this.importMappingForm = this.fb.group({\r\n fields: this.fb.array([]),\r\n });\r\n }\r\n\r\n get fieldsArray(): FormArray {\r\n return this.importMappingForm.get('fields') as FormArray;\r\n }\r\n\r\n createField(field: any): FormGroup {\r\n var fieldForm: FormGroup = this.fb.group({\r\n id: new FormControl(field.id),\r\n label: new FormControl(field.label),\r\n value: new FormControl(field.value),\r\n property: new FormControl(field.property,\r\n Validators.compose(\r\n [\r\n Validators.required\r\n ]\r\n )\r\n ),\r\n propertyType: new FormControl(field.propertyType)\r\n });\r\n return fieldForm;\r\n }\r\n\r\n reFectorAttributes(data) {\r\n for (var k in data) {\r\n if (data.hasOwnProperty(k)) {\r\n var dataValue = {\r\n id: '',\r\n label: k,\r\n value: data[k],\r\n property: '',\r\n propertyType: ''\r\n };\r\n this.firstDataArray.push(dataValue);\r\n }\r\n }\r\n this.firstDataArray.forEach((element: any, mainIndex: any) => {\r\n element.id = mainIndex;\r\n this.properties.find((property: any, index: any) => {\r\n if (property.label.toLowerCase().includes(element.label.toLowerCase())) {\r\n element.property = property.value;\r\n element.propertyType = property.type;\r\n return element;\r\n }\r\n });\r\n });\r\n }\r\n\r\n next() {\r\n this.importMappingForm.markAllAsTouched();\r\n if (!this.importMappingForm.valid) {\r\n return;\r\n }\r\n this.onSave.emit(this.importMappingForm.value);\r\n }\r\n\r\n /** Method to evaluate form fields*/\r\n isFieldValid(field: string, form: any) {\r\n return this.formValidatorService.isFieldValid(field, form);\r\n }\r\n\r\n /** Method to find error in form fields*/\r\n getErrorMessage(field: string, form: any) {\r\n return this.formValidatorService.getErrorMessage(field, form, errorMessages);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.\r\n //Add 'implements AfterViewInit' to the class.\r\n setTimeout(x => {\r\n this.firstDataArray.forEach((element: any) => {\r\n this.fieldsArray.push(this.createField(element));\r\n });\r\n this.changeDetectorRef.detectChanges();\r\n }, 500);\r\n }\r\n\r\n updatePropertyType(event: any, index: any): void {\r\n var field = this.properties.find((field: any) => field.value == event.value);\r\n if (field) {\r\n this.fieldsArray.controls[index].get('propertyType').setValue(field.type);\r\n this.uniqueValidator();\r\n }\r\n }\r\n\r\n uniqueValidator() {\r\n this.fieldsArray.value.forEach((field: any, index: any) => {\r\n var control = this.fieldsArray.controls[index].get('property');\r\n const isNameUnique = this.fieldsArray.value.find(propertyData =>\r\n propertyData.property === control.value\r\n && propertyData.id != this.fieldsArray.controls[index].get('id').value\r\n )\r\n ? false\r\n : true;\r\n if (!isNameUnique) {\r\n control.setErrors({ unavailable: true });\r\n }\r\n else {\r\n control.setErrors(null);\r\n }\r\n });\r\n }\r\n\r\n removeField(index: number) {\r\n if (index == -1) {\r\n return;\r\n }\r\n this.fieldsArray.removeAt(index);\r\n }\r\n\r\n reUpload() {\r\n this.onReUpload.emit(true);\r\n }\r\n\r\n}\r\n","import { Location } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-failed-items-list',\r\n templateUrl: './failed-items-list.component.html',\r\n styleUrls: ['./failed-items-list.component.scss']\r\n})\r\nexport class FailedItemsListComponent implements OnInit {\r\n @Input() failedItems: any[];\r\n @Input() selectedFields: any[];\r\n @Output() onReUpload = new EventEmitter();\r\n\r\n constructor(\r\n public location: Location\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n isValidDate(d: any): boolean {\r\n var date = new Date(d);\r\n return date instanceof Date && !isNaN(date.getTime());\r\n }\r\n\r\n reUpload() {\r\n this.onReUpload.emit(true);\r\n }\r\n\r\n}\r\n","import { ViewerConfig } from '../document-viewer/viewer-config.model';\r\nimport { FileDropperConfig } from '../file-dropper/file-dropper.model';\r\nimport { HttpService } from '../core/http.service';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { AlertService } from '../core/alert.service';\r\nimport { ErrorHandlerService } from '../core/error-handler.service';\r\nimport * as XLSX from 'xlsx';\r\nimport { ImportCsvConfig } from './import-csv-config';\r\n@UntilDestroy()\r\n\r\n@Component({\r\n selector: 'app-import-csv',\r\n templateUrl: './import-csv.component.html',\r\n styleUrls: ['./import-csv.component.scss']\r\n})\r\nexport class ImportCsvComponent implements OnInit {\r\n result: any;\r\n @Input() config: ImportCsvConfig;\r\n filesConfig: FileDropperConfig;\r\n filesList: any[] = [];\r\n data: any[] = [];\r\n isUploaded: boolean = false;\r\n isImportTypeSelected: boolean = false;\r\n viewerConfig: ViewerConfig;\r\n fileData: any[] = [];\r\n failedItems: any[] = [];\r\n selectedFields: any[] = [];\r\n importSteps: any = [\r\n {\r\n id: 1,\r\n step: 1,\r\n title: 'Upload',\r\n progressTitle: '',\r\n progressDescription: ''\r\n },\r\n {\r\n id: 2,\r\n step: 2,\r\n title: 'Field Mappings',\r\n progressTitle: '',\r\n progressDescription: ''\r\n },\r\n {\r\n id: 3,\r\n step: 3,\r\n title: 'Data Validation',\r\n progressTitle: 'Data Being Validated',\r\n progressDescription: 'The data is currently being validated and checked for errors, please do not navigate away from this page. '\r\n },\r\n {\r\n id: 4,\r\n step: 3,\r\n title: 'Data Validation & Errors',\r\n progressTitle: '',\r\n progressDescription: ''\r\n },\r\n {\r\n id: 5,\r\n step: 4,\r\n title: 'Data Importing',\r\n progressTitle: 'Data Being Imported',\r\n progressDescription: 'The data is currently being imported and saved, please do not navigate away from this page. After the import is completed, you will be redirected to a page with the imported records.'\r\n },\r\n {\r\n id: 6,\r\n step: 5,\r\n title: 'Success Page & Data Preview',\r\n progressTitle: '',\r\n progressDescription: ''\r\n },\r\n ];\r\n currentStep: any = 1;\r\n\r\n constructor(\r\n private alertService: AlertService,\r\n private errorHandler: ErrorHandlerService,\r\n private http: HttpService,\r\n ) {\r\n this.filesConfig = {\r\n fileId: \"file\",\r\n containerId: \"fileContainer\",\r\n styles: {\r\n height: \"200px\"\r\n },\r\n acceptFile: '.csv',\r\n multiple: false,\r\n maxSize: 10,\r\n acceptFileText: \".csv\"\r\n };\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n get step() {\r\n return this.importSteps.find(step => step.id == this.currentStep);\r\n }\r\n\r\n async fileChanged(event: any) {\r\n this.currentStep = 2;\r\n this.filesList = event;\r\n\r\n let selectedFile = null;\r\n let jsonData = null;\r\n const reader = new FileReader();\r\n const file = this.filesList[0];\r\n reader.onload = (event) => {\r\n const data = reader.result;\r\n selectedFile = XLSX.read(data, {\r\n type: 'binary',\r\n cellDates: true,\r\n });\r\n jsonData = selectedFile.SheetNames.reduce((initial, name) => {\r\n const sheet = selectedFile.Sheets[name];\r\n initial = XLSX.utils.sheet_to_json(sheet, {\r\n header: 0,\r\n defval: \"\",\r\n });\r\n return initial;\r\n }, {});\r\n this.fileData = jsonData;\r\n }\r\n reader.readAsBinaryString(file);\r\n return;\r\n }\r\n\r\n mappingProcessed(event: any) {\r\n this.currentStep = 3;\r\n setTimeout(x => {\r\n this.selectedFields = event.fields;\r\n const tempFileData = JSON.parse(JSON.stringify(this.fileData));\r\n tempFileData.forEach(data => {\r\n for (var key in data) {\r\n var field = event.fields.find((field: any) => field.label == key);\r\n if (field) {\r\n if ((field.propertyType == 'date' || field.propertyType == 'dateTime') && this.isValidDate(new Date(data[field.label]))) {\r\n data[field.property] = (new Date(data[field.label]) as Date).toISOString();\r\n }\r\n else {\r\n data[field.property] = data[field.label];\r\n }\r\n delete data[key];\r\n }\r\n else {\r\n delete data[key];\r\n }\r\n }\r\n });\r\n this.save(tempFileData);\r\n }, 2000);\r\n }\r\n\r\n async save(tempFileData: any) {\r\n try {\r\n this.http.post(this.config.apiUrl, { data: tempFileData })\r\n .pipe(\r\n untilDestroyed(this)\r\n ).subscribe((result: any) => {\r\n\r\n this.failedItems = result.failed_items;\r\n if (this.failedItems.length) {\r\n this.alertService.addAlert(result.msg, 'warn');\r\n }\r\n if (!(this.failedItems.length > 0)) {\r\n this.currentStep = 5;\r\n setTimeout(x => {\r\n this.currentStep = 6;\r\n this.result = result;\r\n }, 2000);\r\n }\r\n else {\r\n this.currentStep = 4;\r\n }\r\n });\r\n } catch (error) {\r\n if ((error.status === 422 || error.status === 400) && error.msg) {\r\n this.alertService.addAlert(error.msg, \"warning\");\r\n }\r\n this.errorHandler.handleError(error);\r\n this.reUpload();\r\n }\r\n }\r\n\r\n isValidDate(d: any) {\r\n return d instanceof Date && !isNaN(d.getTime());\r\n }\r\n\r\n reUpload() {\r\n this.data = [];\r\n this.fileData = [];\r\n this.filesList = [];\r\n this.failedItems = [];\r\n this.selectedFields = [];\r\n this.currentStep = 1;\r\n }\r\n\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-data-import',\r\n templateUrl: './data-import.component.html',\r\n styleUrls: ['./data-import.component.scss']\r\n})\r\nexport class DataImportComponent implements OnInit {\r\n @Input() step: any;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { DocumentViewerModule } from './../document-viewer/document-viewer.module';\r\nimport { FileDropperModule } from './../file-dropper/file-dropper.module';\r\nimport { MaterialModule } from './../material.module';\r\nimport { ImportSuccessComponent } from './import-success/import-success.component';\r\nimport { ImportHistoryListComponent } from './import-history-list/import-history-list.component';\r\nimport { FieldMappingComponent } from './field-mapping/field-mapping.component';\r\nimport { FailedItemsListComponent } from './failed-items-list/failed-items-list.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ImportCsvComponent } from './import-csv.component';\r\nimport { RouterModule } from '@angular/router';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { DataImportComponent } from './data-import/data-import.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FlexLayoutModule,\r\n RouterModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n FileDropperModule,\r\n DocumentViewerModule,\r\n InfiniteScrollModule\r\n ],\r\n declarations: [\r\n ImportCsvComponent,\r\n FieldMappingComponent,\r\n FailedItemsListComponent,\r\n ImportHistoryListComponent,\r\n ImportSuccessComponent,\r\n DataImportComponent\r\n ],\r\n providers: [],\r\n exports: [\r\n ImportCsvComponent\r\n ],\r\n})\r\nexport class ImportCsvModule { }\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { PageEvent } from '../data-table/data-table.model';\r\nimport { HttpService } from '../core/http.service';\r\nimport { TimelineValue } from '../timeline-filter';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-login-history-for-user',\r\n templateUrl: './login-history-for-user.component.html',\r\n styleUrls: ['./login-history-for-user.component.scss']\r\n})\r\nexport class LoginHistoryForUserComponent implements OnInit {\r\n\r\n loginHistoryList: any[] = [];\r\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n filters: any = {\r\n sort_by: 'created_at|desc',\r\n };\r\n historyFilterForm: FormGroup;\r\n displayedColumns: any[] = ['index', 'created_at'];\r\n @Input() userId: any;\r\n\r\n constructor(\r\n private http: HttpService,\r\n private fb: FormBuilder,\r\n ) {\r\n this.historyFilterForm = this.fb.group({\r\n 'duration': [''],\r\n 'date_from': [''],\r\n 'date_to': ['']\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.filters.user_id = this.userId;\r\n this.historyFilterForm.valueChanges\r\n .pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this))\r\n .subscribe((value: any) => {\r\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\r\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\r\n this.filterChange(value);\r\n });\r\n this.initializeData();\r\n }\r\n\r\n onTimelineChange(range: TimelineValue) {\r\n let date_from = range?.date_from ? new Date(range.date_from) : '';\r\n let date_to = range?.date_to ? new Date(range.date_to) : '';\r\n this.historyFilterForm.patchValue({\r\n date_from,\r\n date_to\r\n });\r\n }\r\n\r\n initializeData() {\r\n this.http.get(`api/user-login-history`, { params: { ...this.filters, ...this.pageEvent } })\r\n .pipe(untilDestroyed(this))\r\n .subscribe((result: any) => {\r\n this.loginHistoryList = this.loginHistoryList.concat(result.data);\r\n this.pageEvent.page = result.current_page;\r\n this.pageEvent.lastPage = result.last_page;\r\n });\r\n }\r\n\r\n filterChange(event: any) {\r\n this.filters = {\r\n ...this.filters,\r\n ...event\r\n };\r\n this.reload();\r\n }\r\n\r\n onScroll() {\r\n if (this.pageEvent.lastPage > this.pageEvent.page) {\r\n this.pageEvent.page += 1;\r\n this.initializeData();\r\n }\r\n }\r\n\r\n\r\n reload() {\r\n this.loginHistoryList = [];\r\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\r\n this.initializeData();\r\n }\r\n\r\n ngOnDestroy() {\r\n //Until destroyed uses it\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AuthenticationGuard } from '../core/authentication.guard';\r\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: LoginHistoryForUserComponent,\r\n canActivate: [AuthenticationGuard]\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class LoginHistoryForUserRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { LoginHistoryForUserRoutingModule } from './login-history-for-user-routing.module';\r\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../material.module';\r\nimport { TimelineFilterModule } from '../timeline-filter/timeline-filter.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [LoginHistoryForUserComponent],\r\n imports: [\r\n CommonModule,\r\n LoginHistoryForUserRoutingModule,\r\n InfiniteScrollModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n TimelineFilterModule\r\n ],\r\n exports: [LoginHistoryForUserComponent]\r\n})\r\nexport class LoginHistoryForUserModule { }\r\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\r\n\r\nexport class TechlifyTaggerTagFormConfigModel {\r\n selectable: boolean;\r\n removable: boolean;\r\n separatorKeysCodes: number[];\r\n placeholder: string;\r\n apiUrl: string;\r\n isCreateable: boolean;\r\n createApiUrl: string;\r\n isCacheTags: boolean;\r\n isSingle: boolean;\r\n\r\n constructor() {\r\n this.selectable = true;\r\n this.removable = true;\r\n this.separatorKeysCodes = [ENTER, COMMA];\r\n this.placeholder = 'New Tag..';\r\n this.apiUrl = 'api/techlify-tagger-tags';\r\n this.createApiUrl = 'api/techlify-tagger-tags';\r\n this.isCreateable = true;\r\n this.isCacheTags = false;\r\n this.isSingle = false;\r\n }\r\n}","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Component, ElementRef, ViewChild, OnInit, Input, OnDestroy, Inject, Optional, Self, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\r\nimport { MatChipInputEvent } from '@angular/material/chips';\r\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { HttpService } from '../core/http.service';\r\nimport { TechlifyTaggerTagFormConfigModel } from './techlify-tagger-tag-form-config.model';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-techlify-tagger-tag-form-field',\r\n templateUrl: './techlify-tagger-tag-form-field.component.html',\r\n styleUrls: ['./techlify-tagger-tag-form-field.component.scss'],\r\n providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent }],\r\n})\r\nexport class TechlifyTaggerTagFormFieldComponent implements OnInit, ControlValueAccessor, MatFormFieldControl<any>, OnDestroy, OnChanges {\r\n\r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n controlType = 'techlify-tagger-form-field';\r\n id = `techlify-tagger-form-field-${TechlifyTaggerTagFormFieldComponent.nextId++}`;\r\n\r\n onChange = (_: any) => { };\r\n onTouched = () => { };\r\n\r\n tagInputCtrl = new FormControl();\r\n filterString: any;\r\n @ViewChild('tagInput') tagInput: ElementRef<HTMLInputElement>;\r\n\r\n /**Pass the configuration for Techlify Tagger */\r\n @Input() config: TechlifyTaggerTagFormConfigModel = new TechlifyTaggerTagFormConfigModel();\r\n /**Pass the Model Type for Techlify Tagger, Required */\r\n @Input() modelType!: string;\r\n /**Pass the Model ID for Techlify Tagger */\r\n @Input() modelId: string;\r\n\r\n /**Pass the default list of tags */\r\n private _allTags: any[] = [];\r\n @Input()\r\n get allTags() {\r\n return this._allTags;\r\n }\r\n set allTags(value) {\r\n this._allTags = value;\r\n }\r\n\r\n /**Pass the Categories to filter for a model */\r\n @Input() categories: string[] = [];\r\n /**Pass default category to be used for assigning the tags, when we filter by more than one category */\r\n @Input() defaultCreateCategory: string;\r\n\r\n get tags() {\r\n return this.allTags.filter(x => this.value.some(y => y == x.id));\r\n }\r\n\r\n //Default Getter and Setters for a Form Field Implementation\r\n get empty() {\r\n return this.value.length == 0;\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty || this.tagInputCtrl.value;\r\n }\r\n\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.tagInputCtrl.disable() : this.tagInputCtrl.enable();\r\n this.stateChanges.next();\r\n }\r\n private _disabled = false;\r\n\r\n\r\n private _value: any[] = [];\r\n @Input()\r\n get value(): any[] {\r\n return this._value;\r\n }\r\n set value(tagIds: any[]) {\r\n this._value = tagIds || [];\r\n this.stateChanges.next();\r\n }\r\n\r\n get errorState(): boolean {\r\n return this.tagInputCtrl.dirty && this.required && (this.value.length == 0);\r\n }\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string;\r\n\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n\r\n //API to load all tags for the model type\r\n if (this.allTags.length == 0) {\r\n this.httpService\r\n .cache(!this.config.isCacheTags)\r\n .get(this.config.apiUrl, {\r\n params: {\r\n categories: this.categories.join(','),\r\n perPage: '1000'\r\n }\r\n }).pipe(\r\n debounceTime(500),\r\n untilDestroyed(this)\r\n ).subscribe((result: any) => {\r\n this.allTags = result.data;\r\n });\r\n }\r\n\r\n //API to load only the selected tags for the model\r\n if (this.modelId && this.value.length == 0) {\r\n //Model Id is passed and no tags are present, so we query db for the avilable tags for the model ID.\r\n this.httpService\r\n .cache(!this.config.isCacheTags)\r\n .get(this.config.apiUrl, {\r\n params: {\r\n categories: this.categories.join(','),\r\n model_type: this.modelType,\r\n model_id: this.modelId,\r\n perPage: '1000'\r\n }\r\n }).pipe(\r\n debounceTime(500),\r\n untilDestroyed(this)\r\n ).subscribe((result: any) => {\r\n this.value = (result?.data || []).map((x: any) => x.id);\r\n this._handleInput();\r\n });\r\n }\r\n }\r\n\r\n init() {\r\n if (this.modelId && this.allTags.length == 0) {\r\n //Model Id is passed and no tags are passed, so we query db for the avilable tags for the model ID.\r\n this.httpService\r\n .cache(!this.config.isCacheTags)\r\n .get(this.config.apiUrl, {\r\n params: {\r\n categories: this.categories.join(','),\r\n model_type: this.modelType,\r\n model_id: this.modelId\r\n }\r\n }).pipe(\r\n untilDestroyed(this)\r\n ).subscribe((result: any) => {\r\n this.allTags = result.data;\r\n });\r\n }\r\n }\r\n\r\n get filteredTags(): any[] {\r\n return this._filter();\r\n }\r\n\r\n constructor(\r\n private _focusMonitor: FocusMonitor,\r\n private _elementRef: ElementRef<HTMLElement>,\r\n private httpService: HttpService,\r\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\r\n @Optional() @Self() public ngControl: NgControl) {\r\n\r\n this.tagInputCtrl.valueChanges\r\n .subscribe(filterValue => {\r\n this.filterString = filterValue;\r\n });\r\n\r\n //Set Focus Monitor\r\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\r\n if (this.focused && !origin) {\r\n this.onTouched();\r\n }\r\n this.focused = !!origin;\r\n this.stateChanges.next();\r\n });\r\n\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n // Just a empty implementation for Mat Form Field Interface\r\n }\r\n\r\n onContainerClick() {\r\n // Just a empty implementation for Mat Form Field Interface\r\n }\r\n\r\n\r\n async add(event: MatChipInputEvent) {\r\n const value = (event.value || '').trim();\r\n // Add our tag\r\n // Validate for single mode\r\n if (!this.config.isSingle || (this.value.length === 0)) {\r\n if (value && this.config.isCreateable) {\r\n const tags = this.allTags;\r\n let tag = tags.find((item: any) => item.title.toLowerCase() == value.toLowerCase());\r\n if (!tag) {\r\n //No tag present in the list\r\n try {\r\n const result: any = await this.httpService.post(this.config.createApiUrl, {\r\n title: value,\r\n description: value,\r\n category_title: (this.categories.length > 0) ? (this.defaultCreateCategory ? this.defaultCreateCategory : this.categories[0]) : ''\r\n }).toPromise();\r\n tag = result.item;\r\n } catch (error) {\r\n return;\r\n }\r\n this.allTags.push(tag);\r\n } else {\r\n //Optionally clean the existing value, to avoid duplicate\r\n this.remove(tag);\r\n }\r\n this.value.push(tag.id);\r\n this._handleInput();\r\n }\r\n }\r\n\r\n // Clear the input value\r\n event.input.value = '';\r\n\r\n this.tagInputCtrl.setValue(null);\r\n }\r\n\r\n remove(tag: any): void {\r\n this.value = this.value.filter(x => x !== tag.id);\r\n this._handleInput();\r\n }\r\n\r\n selected(event: MatAutocompleteSelectedEvent): void {\r\n // Validate for single mode\r\n if (!this.config.isSingle || (this.value.length === 0)) {\r\n //Clean the existing value, to avoid duplicate\r\n this.remove({ id: event.option.value });\r\n this.value.push(event.option.value);\r\n this._handleInput();\r\n }\r\n this.tagInput.nativeElement.value = '';\r\n this.tagInputCtrl.setValue(null);\r\n }\r\n\r\n private _filter(): any[] {\r\n const filterValue = this.filterString ? this.filterString.toString().toLowerCase() : null;\r\n const availableTags = this.allTags.filter((tag: any) => !this.value.some((item: any) => item == tag.id));\r\n return filterValue ? availableTags.filter((tag: any) => tag.title.toLowerCase().includes(filterValue)) : availableTags;\r\n }\r\n\r\n writeValue(tagIds: any[]): void {\r\n this.value = tagIds || [];\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n _handleInput(): void {\r\n this.onChange(this.value);\r\n }\r\n\r\n static ngAcceptInputType_disabled: BooleanInput;\r\n static ngAcceptInputType_required: BooleanInput;\r\n\r\n ngOnDestroy() {\r\n this.stateChanges.complete();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TechlifyTaggerTagFormFieldComponent } from './techlify-tagger-tag-form-field.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n TechlifyTaggerTagFormFieldComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n MatAutocompleteModule,\r\n ReactiveFormsModule\r\n ],\r\n exports: [TechlifyTaggerTagFormFieldComponent]\r\n})\r\nexport class TechlifyTaggerTagFormFieldModule { }\r\n","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Component, ElementRef, OnInit, Input, OnDestroy, Inject, Optional, Self } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { HttpService } from '../core/http.service';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-techlify-tagger-tag-selector',\r\n templateUrl: './techlify-tagger-tag-selector.component.html',\r\n styleUrls: ['./techlify-tagger-tag-selector.component.scss'],\r\n providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagSelectorComponent }],\r\n})\r\nexport class TechlifyTaggerTagSelectorComponent implements OnInit, ControlValueAccessor, MatFormFieldControl<any>, OnDestroy {\r\n\r\n /**Pass the Categories to filter for a model */\r\n @Input() categories: string[] = [];\r\n @Input() multiple: boolean = false;\r\n @Input() enableSearch: boolean = true;\r\n tagSelectorCtrl = new FormControl();\r\n @Input() showAllTags: boolean = false;\r\n @Input() useSelectButtonStyle: boolean = false;\r\n\r\n tags: any[] = [];\r\n\r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n controlType = 'techlify-tagger-selector';\r\n id = `techlify-tagger-selector-${TechlifyTaggerTagSelectorComponent.nextId++}`;\r\n\r\n onChange = (_: any) => { };\r\n onTouched = () => { };\r\n\r\n get apiUrl() {\r\n if (this.showAllTags) {\r\n return 'api/techlify-tagger-tags'\r\n }\r\n else if (this.categories?.length > 0) {\r\n return 'api/techlify-tagger-tags?categories=' + this.categories.join(',');\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n\r\n //Default Getter and Setters for a Form Field Implementation\r\n get empty() {\r\n return this.value.length == 0;\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.tagSelectorCtrl.disable() : this.tagSelectorCtrl.enable();\r\n this.stateChanges.next();\r\n }\r\n private _disabled = false;\r\n\r\n\r\n private _value: any;\r\n @Input()\r\n get value(): any {\r\n return this._value;\r\n }\r\n set value(val: any) {\r\n this._value = val;\r\n this.tagSelectorCtrl.setValue(val);\r\n this.stateChanges.next();\r\n }\r\n\r\n get errorState(): boolean {\r\n return this.tagSelectorCtrl.dirty && this.required && (this.value.length == 0);\r\n }\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string;\r\n\r\n\r\n ngOnInit(): void {\r\n if (this.useSelectButtonStyle) {\r\n this.httpService.get(this.apiUrl)\r\n .pipe(untilDestroyed(this))\r\n .subscribe((res: any) => {\r\n this.tags = res.data;\r\n })\r\n }\r\n }\r\n\r\n selectionChange(value: any) {\r\n this.value = value;\r\n this._handleInput();\r\n }\r\n\r\n constructor(\r\n private _focusMonitor: FocusMonitor,\r\n private _elementRef: ElementRef<HTMLElement>,\r\n private httpService: HttpService,\r\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\r\n @Optional() @Self() public ngControl: NgControl) {\r\n\r\n //Set Focus Monitor\r\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\r\n if (this.focused && !origin) {\r\n this.onTouched();\r\n }\r\n this.focused = !!origin;\r\n this.stateChanges.next();\r\n });\r\n\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n // Just a empty implementation for Mat Form Field Interface\r\n }\r\n\r\n onContainerClick() {\r\n // Just a empty implementation for Mat Form Field Interface\r\n }\r\n\r\n writeValue(val: any): void {\r\n this.value = val;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n _handleInput(): void {\r\n this.onChange(this.value);\r\n }\r\n\r\n static ngAcceptInputType_disabled: BooleanInput;\r\n static ngAcceptInputType_required: BooleanInput;\r\n\r\n ngOnDestroy() {\r\n this.stateChanges.complete();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TechlifyTaggerTagSelectorComponent } from './techlify-tagger-tag-selector.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MaterialModule } from '../material.module';\r\nimport { SearchableSelectorModule } from '../searchable-selector/searchable-selector.module';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n TechlifyTaggerTagSelectorComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n MatAutocompleteModule,\r\n ReactiveFormsModule,\r\n SearchableSelectorModule,\r\n MatButtonToggleModule\r\n ],\r\n exports: [TechlifyTaggerTagSelectorComponent]\r\n})\r\nexport class TechlifyTaggerTagSelectorModule { }\r\n","import { DataManager } from './../core/dataManager.service';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TechlifyFeatureService {\r\n\r\n constructor(private dataManager: DataManager) { }\r\n\r\n getFeatures() {\r\n return this.dataManager.GET(`api/features`);\r\n }\r\n\r\n disableFeature(id: any) {\r\n return this.dataManager.GET(`api/feature/${id}/disable`);\r\n }\r\n\r\n enableFeature(id: any) {\r\n return this.dataManager.GET(`api/feature/${id}/enable`);\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { TechlifyFeatureService } from './techlify-feature.service';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { ActionPopup, ActionPopupComponent } from '../action-popup';\r\nimport { DataManager } from '../core/dataManager.service';\r\nimport { ErrorHandlerService } from '../core/error-handler.service';\r\nimport { AlertService } from '../core/alert.service';\r\nimport { StorageService } from '../core/storage.service';\r\n@UntilDestroy()\r\n@Component({\r\n selector: 'app-techlify-listing-feature',\r\n templateUrl: './techlify-feature-listing.component.html',\r\n styleUrls: ['./techlify-feature-listing.component.scss']\r\n})\r\nexport class TechlifyFeatureListingComponent implements OnInit {\r\n\r\n features: any[] = []\r\n displayedColumns: string[] = [\r\n 'index',\r\n 'feature',\r\n 'description',\r\n 'actions',\r\n ]\r\n\r\n dataSource = new MatTableDataSource()\r\n\r\n page: number = 1;\r\n lastPage: number;\r\n perPage: number = 25;\r\n\r\n isWorking: boolean = false\r\n filterFormGroup: FormGroup;\r\n featureToggleForm: FormGroup;\r\n\r\n constructor(\r\n private dataManager: DataManager,\r\n private errorHandler: ErrorHandlerService,\r\n private fb: FormBuilder,\r\n private alertService: AlertService,\r\n private dialog: MatDialog,\r\n private storage: StorageService,\r\n private featureService: TechlifyFeatureService\r\n ) {\r\n this.filterFormGroup = this.fb.group({\r\n num_items: [\"\"]\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.loadData()\r\n this.listenForChanges()\r\n }\r\n\r\n listenForChanges() {\r\n this.filterFormGroup.valueChanges\r\n .pipe(debounceTime(500), untilDestroyed(this))\r\n .subscribe((changes) => {\r\n this.reload()\r\n })\r\n }\r\n\r\n async loadData() {\r\n let result;\r\n try {\r\n this.isWorking = true\r\n var filter = this.filterFormGroup.value\r\n filter.page = this.page;\r\n filter.perPage = this.perPage;\r\n result = await this.dataManager.GET(`api/features`, filter);\r\n this.features = this.features.concat(result.data);\r\n this.dataSource = new MatTableDataSource(this.features);\r\n\r\n if (!this.storage.getItem('features')) {\r\n this.setStorage(this.features);\r\n }\r\n\r\n this.isWorking = false\r\n } catch (error) {\r\n this.errorHandler.handleError(error);\r\n } finally {\r\n this.isWorking = false;\r\n }\r\n }\r\n\r\n async toggeleFeature(element, feature) {\r\n let status = element ? 'Off' : \"On\";\r\n let data;\r\n const dialogRef = this.dialog.open(ActionPopupComponent, {\r\n width: \"400px\",\r\n data: <ActionPopup>{\r\n title: `Turn this feature ${status}?`,\r\n message: `Would you like to turn ${feature.title} feature ${status}`\r\n }\r\n })\r\n\r\n dialogRef.afterClosed().subscribe(async result => {\r\n if (result) {\r\n try {\r\n data = element\r\n ? await this.featureService.disableFeature(feature.id)\r\n : await this.featureService.enableFeature(feature.id);\r\n } catch (error) {\r\n this.errorHandler.handleError(error);\r\n } finally {\r\n this.alertService.addAlert(`You have just turned ${status} the feature ${feature.title}`, 'success');\r\n this.reload();\r\n this.storage.removeItem('features');\r\n this.setStorage(this.features);\r\n this.isWorking = false;\r\n }\r\n } else {\r\n this.reload();\r\n }\r\n })\r\n }\r\n\r\n setStorage(features) {\r\n let localFeatures = [];\r\n for (let feature of features) {\r\n if (!feature.client_feature) {\r\n if (feature.is_enabled_default) {\r\n localFeatures.push(feature.code);\r\n }\r\n } else {\r\n if (feature.client_feature.is_enabled) {\r\n localFeatures.push(feature.code);\r\n }\r\n }\r\n\r\n }\r\n this.storage.setItem(\"features\", localFeatures);\r\n }\r\n\r\n reload() {\r\n this.features = [];\r\n this.page = 1;\r\n if (!this.isWorking) {\r\n this.loadData();\r\n }\r\n }\r\n\r\n onScroll() {\r\n if (!this.isWorking && this.page < this.lastPage) {\r\n this.page += 1;\r\n this.loadData();\r\n }\r\n }\r\n\r\n sortColumn(event) {\r\n var direction = event.direction.toString().toUpperCase()\r\n this.assignFilter(event.active, direction)\r\n this.reload()\r\n }\r\n\r\n assignFilter(column, direction) {\r\n switch (column) {\r\n case 'name': {\r\n return this.filterFormGroup\r\n .get('sort_by')\r\n .setValue('first_name|' + direction)\r\n }\r\n case 'added_on': {\r\n return this.filterFormGroup\r\n .get('sort_by')\r\n .setValue('created_at|' + direction)\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import { AuthenticationGuard } from './../core/authentication.guard';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { TechlifyFeatureListingComponent } from './techlify-feature-listing.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: TechlifyFeatureListingComponent,\r\n canActivate: [AuthenticationGuard]\r\n },\r\n];\r\n\r\nexport const TechlifyFeatureRoutes = RouterModule.forChild(routes);\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-on-off-switch',\r\n templateUrl: './on-off-switch.component.html',\r\n styleUrls: ['./on-off-switch.component.scss']\r\n})\r\n\r\nexport class OnOffSwitchComponent implements OnInit {\r\n\r\n @Input() value: boolean;\r\n slideToggle: FormGroup;\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.slideToggle = this.fb.group({\r\n toggle: [\"\"]\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.slideToggle.get('toggle').setValue(this.value);\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, Input } from '@angular/core';\r\nimport { ErrorHandlerService } from '../core/error-handler.service';\r\nimport { StorageService } from '../core/storage.service';\r\nimport { TechlifyFeatureService } from './techlify-feature.service';\r\n\r\n@Directive({\r\n selector: '[techlifyFeatureEnabled]'\r\n})\r\nexport class TechlifyFeatureEnabledDirective {\r\n\r\n features: any;\r\n localFeatures: any[] = [];\r\n @Input('techlifyFeatureEnabled') enabledFeature: any;\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private featureService: TechlifyFeatureService,\r\n private errorHandler: ErrorHandlerService,\r\n private storage: StorageService) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.storage.getItem('features')) {\r\n this.getFeatures();\r\n } else {\r\n this.checkForFeatureEnabled();\r\n }\r\n }\r\n\r\n async getFeatures() {\r\n try {\r\n let features = await this.featureService.getFeatures();\r\n\r\n for (let feature of features.data) {\r\n if (!feature.client_feature) {\r\n if (feature.is_enabled_default) {\r\n this.localFeatures.push(feature.code);\r\n }\r\n } else {\r\n if (feature.client_feature.is_enabled) {\r\n this.localFeatures.push(feature.code);\r\n }\r\n }\r\n\r\n }\r\n this.storage.setItem(\"features\", this.localFeatures);\r\n } catch (error) {\r\n this.errorHandler.handleError(error);\r\n } finally {\r\n this.checkForFeatureEnabled()\r\n }\r\n }\r\n\r\n checkForFeatureEnabled() {\r\n try {\r\n let features = this.storage.getItem('features');\r\n let features_split = features.split(',');\r\n\r\n if (features_split.includes(this.enabledFeature)) {\r\n this.el.nativeElement.style.display = \"show\";\r\n } else {\r\n this.el.nativeElement.remove();\r\n }\r\n\r\n } catch (error) {\r\n this.errorHandler.handleError(error);\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TechlifyFeatureListingComponent } from './techlify-feature-listing.component';\r\n\r\nimport { TechlifyFeatureRoutes } from './techlify-feature.routing';\r\nimport { OnOffSwitchComponent } from './on-off-switch/on-off-switch.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { TechlifyFeatureEnabledDirective } from './techlify-feature-enabled.directive';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../material.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n FlexLayoutModule,\r\n TechlifyFeatureRoutes,\r\n MatSlideToggleModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n InfiniteScrollModule\r\n ],\r\n declarations: [TechlifyFeatureListingComponent, OnOffSwitchComponent, TechlifyFeatureEnabledDirective],\r\n exports: [TechlifyFeatureListingComponent, TechlifyFeatureEnabledDirective]\r\n})\r\nexport class TechlifyFeatureModule { }\r\n"]}