ngx-techlify-core 11.2.4

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 (313) hide show
  1. package/README.md +24 -0
  2. package/bundles/ngx-techlify-core.umd.js +6602 -0
  3. package/bundles/ngx-techlify-core.umd.js.map +1 -0
  4. package/bundles/ngx-techlify-core.umd.min.js +17 -0
  5. package/bundles/ngx-techlify-core.umd.min.js.map +1 -0
  6. package/esm2015/lib/action-popup/action-popup.component.js +32 -0
  7. package/esm2015/lib/action-popup/action-popup.model.js +3 -0
  8. package/esm2015/lib/action-popup/action-popup.module.js +26 -0
  9. package/esm2015/lib/action-popup/index.js +3 -0
  10. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.js +12 -0
  11. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.component.js +49 -0
  12. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.module.js +25 -0
  13. package/esm2015/lib/audit-log/audit-log-list/audit-log-list-routing.module.js +12 -0
  14. package/esm2015/lib/audit-log/audit-log-list/audit-log-list.component.js +132 -0
  15. package/esm2015/lib/audit-log/audit-log-list/audit-log-list.module.js +29 -0
  16. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.js +12 -0
  17. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.js +67 -0
  18. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.js +25 -0
  19. package/esm2015/lib/audit-log/audit-log-routing.module.js +19 -0
  20. package/esm2015/lib/audit-log/audit-log-view/audit-log-view-routing.module.js +12 -0
  21. package/esm2015/lib/audit-log/audit-log-view/audit-log-view.component.js +62 -0
  22. package/esm2015/lib/audit-log/audit-log-view/audit-log-view.module.js +21 -0
  23. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.js +12 -0
  24. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.component.js +59 -0
  25. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.module.js +21 -0
  26. package/esm2015/lib/audit-log/audit-log.module.js +20 -0
  27. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.js +12 -0
  28. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.js +35 -0
  29. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.js +21 -0
  30. package/esm2015/lib/core/alert.service.js +40 -0
  31. package/esm2015/lib/core/api-prefix.interceptor.js +28 -0
  32. package/esm2015/lib/core/authentication.guard.js +39 -0
  33. package/esm2015/lib/core/authentication.service.js +59 -0
  34. package/esm2015/lib/core/cache.interceptor.js +60 -0
  35. package/esm2015/lib/core/config.service.js +47 -0
  36. package/esm2015/lib/core/core.module.js +42 -0
  37. package/esm2015/lib/core/credentials.service.js +84 -0
  38. package/esm2015/lib/core/dataManager.service.js +121 -0
  39. package/esm2015/lib/core/error-handler.interceptor.js +53 -0
  40. package/esm2015/lib/core/error-handler.service.js +49 -0
  41. package/esm2015/lib/core/form-validator.service.js +23 -0
  42. package/esm2015/lib/core/header.interceptor.js +22 -0
  43. package/esm2015/lib/core/http-cache.service.js +110 -0
  44. package/esm2015/lib/core/http.service.js +82 -0
  45. package/esm2015/lib/core/index.js +21 -0
  46. package/esm2015/lib/core/logger.service.js +100 -0
  47. package/esm2015/lib/core/route-reusable-strategy.js +35 -0
  48. package/esm2015/lib/core/snack/snack.component.js +33 -0
  49. package/esm2015/lib/core/snack/snack.module.js +25 -0
  50. package/esm2015/lib/core/storage.service.js +37 -0
  51. package/esm2015/lib/core/techlify-config.model.js +26 -0
  52. package/esm2015/lib/core/token.interceptor.js +30 -0
  53. package/esm2015/lib/data-table/data-table.component.js +190 -0
  54. package/esm2015/lib/data-table/data-table.model.js +11 -0
  55. package/esm2015/lib/data-table/data-table.module.js +25 -0
  56. package/esm2015/lib/data-table/index.js +3 -0
  57. package/esm2015/lib/date-validator.js +10 -0
  58. package/esm2015/lib/document-viewer/document-viewer.component.js +58 -0
  59. package/esm2015/lib/document-viewer/document-viewer.module.js +25 -0
  60. package/esm2015/lib/document-viewer/index.js +3 -0
  61. package/esm2015/lib/document-viewer/viewer-config.model.js +3 -0
  62. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.js +26 -0
  63. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.js +72 -0
  64. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.js +23 -0
  65. package/esm2015/lib/email-subscription/email-subscription-for-user/index.js +2 -0
  66. package/esm2015/lib/email-subscription/email-subscription-routing.module.js +12 -0
  67. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.js +12 -0
  68. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.js +102 -0
  69. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.js +28 -0
  70. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.js +2 -0
  71. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.js +28 -0
  72. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.js +153 -0
  73. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.js +27 -0
  74. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.js +2 -0
  75. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.js +12 -0
  76. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type.module.js +15 -0
  77. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.js +12 -0
  78. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.js +99 -0
  79. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.js +27 -0
  80. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.js +2 -0
  81. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.js +28 -0
  82. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.js +155 -0
  83. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.js +29 -0
  84. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.js +2 -0
  85. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.js +12 -0
  86. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.js +50 -0
  87. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.js +25 -0
  88. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.js +2 -0
  89. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.js +12 -0
  90. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user.module.js +15 -0
  91. package/esm2015/lib/email-subscription/email-subscription.module.js +15 -0
  92. package/esm2015/lib/entity-files/entity-file-form/entity-file-form.component.js +141 -0
  93. package/esm2015/lib/entity-files/entity-file.service.js +38 -0
  94. package/esm2015/lib/entity-files/entity-files-view-all.component.js +161 -0
  95. package/esm2015/lib/entity-files/entity-files-view-all.module.js +34 -0
  96. package/esm2015/lib/entity-files/index.js +3 -0
  97. package/esm2015/lib/export-excel/export-excel-button/export-excel-button.component.js +32 -0
  98. package/esm2015/lib/export-excel/export-excel.module.js +17 -0
  99. package/esm2015/lib/file-dropper/file-dropper.component.js +122 -0
  100. package/esm2015/lib/file-dropper/file-dropper.model.js +3 -0
  101. package/esm2015/lib/file-dropper/file-dropper.module.js +21 -0
  102. package/esm2015/lib/file-dropper/index.js +3 -0
  103. package/esm2015/lib/import-csv/failed-items/failed-items-routing.module.js +12 -0
  104. package/esm2015/lib/import-csv/failed-items/failed-items.component.js +23 -0
  105. package/esm2015/lib/import-csv/failed-items/failed-items.module.js +21 -0
  106. package/esm2015/lib/import-csv/import-config.js +3 -0
  107. package/esm2015/lib/import-csv/import-csv-routing.module.js +12 -0
  108. package/esm2015/lib/import-csv/import-csv.component.js +111 -0
  109. package/esm2015/lib/import-csv/import-csv.module.js +27 -0
  110. package/esm2015/lib/import-csv/import-items/import-items-routing.module.js +12 -0
  111. package/esm2015/lib/import-csv/import-items/import-items.component.js +139 -0
  112. package/esm2015/lib/import-csv/import-items/import-items.module.js +23 -0
  113. package/esm2015/lib/loader/index.js +2 -0
  114. package/esm2015/lib/loader/loader.component.js +22 -0
  115. package/esm2015/lib/loader/loader.module.js +21 -0
  116. package/esm2015/lib/login-history-for-user/login-history-for-user-routing.module.js +20 -0
  117. package/esm2015/lib/login-history-for-user/login-history-for-user.component.js +79 -0
  118. package/esm2015/lib/login-history-for-user/login-history-for-user.module.js +27 -0
  119. package/esm2015/lib/material.module.js +58 -0
  120. package/esm2015/lib/note/index.js +3 -0
  121. package/esm2015/lib/note/note-form/note-form.component.js +80 -0
  122. package/esm2015/lib/note/note-list/note-list.component.js +120 -0
  123. package/esm2015/lib/note/note.module.js +32 -0
  124. package/esm2015/lib/note/note.service.js +31 -0
  125. package/esm2015/lib/searchable-selector/index.js +3 -0
  126. package/esm2015/lib/searchable-selector/mat-select-infinite-scroll.directive.js +81 -0
  127. package/esm2015/lib/searchable-selector/searchable-selector.component.js +267 -0
  128. package/esm2015/lib/searchable-selector/searchable-selector.module.js +28 -0
  129. package/esm2015/lib/techlify-update/read-more/read-more.component.js +43 -0
  130. package/esm2015/lib/techlify-update/read-more/read-more.module.js +21 -0
  131. package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.component.js +114 -0
  132. package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.module.js +28 -0
  133. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.js +22 -0
  134. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.component.js +143 -0
  135. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.module.js +28 -0
  136. package/esm2015/lib/techlify-update/techlify-update-routing.module.js +22 -0
  137. package/esm2015/lib/techlify-update/techlify-update.module.js +30 -0
  138. package/esm2015/lib/techlify-update/techlify-update.service.js +43 -0
  139. package/esm2015/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.js +161 -0
  140. package/esm2015/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.js +82 -0
  141. package/esm2015/lib/techlify-update/update-notifier/update-notifier.component.js +62 -0
  142. package/esm2015/lib/techlify-update/update-notifier/update-notifier.module.js +29 -0
  143. package/esm2015/lib/techlify-update/update-view/update-view.component.js +36 -0
  144. package/esm2015/lib/techlify-update/update-view/update-view.module.js +24 -0
  145. package/esm2015/lib/timeline-filter/calculate-timeline.js +90 -0
  146. package/esm2015/lib/timeline-filter/index.js +4 -0
  147. package/esm2015/lib/timeline-filter/timeline-filter-routing.module.js +12 -0
  148. package/esm2015/lib/timeline-filter/timeline-filter.component.js +57 -0
  149. package/esm2015/lib/timeline-filter/timeline-filter.module.js +23 -0
  150. package/esm2015/lib/timeline-filter/timeline.model.js +15 -0
  151. package/esm2015/lib/utility/date-utils.service.js +48 -0
  152. package/esm2015/lib/utility/index.js +4 -0
  153. package/esm2015/lib/utility/num-items-selector.component.js +30 -0
  154. package/esm2015/lib/utility/number-selector.component.js +38 -0
  155. package/esm2015/lib/utility/utility.module.js +21 -0
  156. package/esm2015/ngx-techlify-core.js +52 -0
  157. package/esm2015/public-api.js +91 -0
  158. package/fesm2015/ngx-techlify-core.js +5575 -0
  159. package/fesm2015/ngx-techlify-core.js.map +1 -0
  160. package/lib/action-popup/action-popup.component.d.ts +14 -0
  161. package/lib/action-popup/action-popup.model.d.ts +5 -0
  162. package/lib/action-popup/action-popup.module.d.ts +2 -0
  163. package/lib/action-popup/index.d.ts +2 -0
  164. package/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.d.ts +2 -0
  165. package/lib/audit-log/audit-log-for-model/audit-log-for-model.component.d.ts +12 -0
  166. package/lib/audit-log/audit-log-for-model/audit-log-for-model.module.d.ts +2 -0
  167. package/lib/audit-log/audit-log-list/audit-log-list-routing.module.d.ts +2 -0
  168. package/lib/audit-log/audit-log-list/audit-log-list.component.d.ts +32 -0
  169. package/lib/audit-log/audit-log-list/audit-log-list.module.d.ts +2 -0
  170. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.d.ts +2 -0
  171. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.d.ts +19 -0
  172. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.d.ts +2 -0
  173. package/lib/audit-log/audit-log-routing.module.d.ts +2 -0
  174. package/lib/audit-log/audit-log-view/audit-log-view-routing.module.d.ts +2 -0
  175. package/lib/audit-log/audit-log-view/audit-log-view.component.d.ts +17 -0
  176. package/lib/audit-log/audit-log-view/audit-log-view.module.d.ts +2 -0
  177. package/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.d.ts +2 -0
  178. package/lib/audit-log/audit-log-view-model/audit-log-view-model.component.d.ts +15 -0
  179. package/lib/audit-log/audit-log-view-model/audit-log-view-model.module.d.ts +2 -0
  180. package/lib/audit-log/audit-log.module.d.ts +2 -0
  181. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.d.ts +2 -0
  182. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.d.ts +11 -0
  183. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.d.ts +2 -0
  184. package/lib/core/alert.service.d.ts +12 -0
  185. package/lib/core/api-prefix.interceptor.d.ts +11 -0
  186. package/lib/core/authentication.guard.d.ts +10 -0
  187. package/lib/core/authentication.service.d.ts +23 -0
  188. package/lib/core/cache.interceptor.d.ts +21 -0
  189. package/lib/core/config.service.d.ts +19 -0
  190. package/lib/core/core.module.d.ts +3 -0
  191. package/lib/core/credentials.service.d.ts +36 -0
  192. package/lib/core/dataManager.service.d.ts +70 -0
  193. package/lib/core/error-handler.interceptor.d.ts +14 -0
  194. package/lib/core/error-handler.service.d.ts +12 -0
  195. package/lib/core/form-validator.service.d.ts +8 -0
  196. package/lib/core/header.interceptor.d.ts +8 -0
  197. package/lib/core/http-cache.service.d.ts +54 -0
  198. package/lib/core/http.service.d.ts +56 -0
  199. package/lib/core/index.d.ts +20 -0
  200. package/lib/core/logger.service.d.ts +85 -0
  201. package/lib/core/route-reusable-strategy.d.ts +13 -0
  202. package/lib/core/snack/snack.component.d.ts +8 -0
  203. package/lib/core/snack/snack.module.d.ts +2 -0
  204. package/lib/core/storage.service.d.ts +15 -0
  205. package/lib/core/techlify-config.model.d.ts +17 -0
  206. package/lib/core/token.interceptor.d.ts +11 -0
  207. package/lib/data-table/data-table.component.d.ts +60 -0
  208. package/lib/data-table/data-table.model.d.ts +46 -0
  209. package/lib/data-table/data-table.module.d.ts +2 -0
  210. package/lib/data-table/index.d.ts +2 -0
  211. package/lib/date-validator.d.ts +1 -0
  212. package/lib/document-viewer/document-viewer.component.d.ts +16 -0
  213. package/lib/document-viewer/document-viewer.module.d.ts +2 -0
  214. package/lib/document-viewer/index.d.ts +2 -0
  215. package/lib/document-viewer/viewer-config.model.d.ts +5 -0
  216. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.d.ts +7 -0
  217. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.d.ts +17 -0
  218. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.d.ts +2 -0
  219. package/lib/email-subscription/email-subscription-for-user/index.d.ts +1 -0
  220. package/lib/email-subscription/email-subscription-routing.module.d.ts +2 -0
  221. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.d.ts +2 -0
  222. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.d.ts +32 -0
  223. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.d.ts +2 -0
  224. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.d.ts +1 -0
  225. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.d.ts +9 -0
  226. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.d.ts +30 -0
  227. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.d.ts +2 -0
  228. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.d.ts +1 -0
  229. package/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.d.ts +2 -0
  230. package/lib/email-subscription/email-subscription-type/email-subscription-type.module.d.ts +2 -0
  231. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.d.ts +2 -0
  232. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.d.ts +32 -0
  233. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.d.ts +2 -0
  234. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.d.ts +1 -0
  235. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.d.ts +9 -0
  236. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.d.ts +32 -0
  237. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.d.ts +2 -0
  238. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.d.ts +1 -0
  239. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.d.ts +2 -0
  240. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.d.ts +13 -0
  241. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.d.ts +2 -0
  242. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.d.ts +1 -0
  243. package/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.d.ts +2 -0
  244. package/lib/email-subscription/email-subscription-user/email-subscription-user.module.d.ts +2 -0
  245. package/lib/email-subscription/email-subscription.module.d.ts +2 -0
  246. package/lib/entity-files/entity-file-form/entity-file-form.component.d.ts +34 -0
  247. package/lib/entity-files/entity-file.service.d.ts +10 -0
  248. package/lib/entity-files/entity-files-view-all.component.d.ts +38 -0
  249. package/lib/entity-files/entity-files-view-all.module.d.ts +2 -0
  250. package/lib/entity-files/index.d.ts +2 -0
  251. package/lib/export-excel/export-excel-button/export-excel-button.component.d.ts +8 -0
  252. package/lib/export-excel/export-excel.module.d.ts +2 -0
  253. package/lib/file-dropper/file-dropper.component.d.ts +33 -0
  254. package/lib/file-dropper/file-dropper.model.d.ts +10 -0
  255. package/lib/file-dropper/file-dropper.module.d.ts +2 -0
  256. package/lib/file-dropper/index.d.ts +2 -0
  257. package/lib/import-csv/failed-items/failed-items-routing.module.d.ts +2 -0
  258. package/lib/import-csv/failed-items/failed-items.component.d.ts +8 -0
  259. package/lib/import-csv/failed-items/failed-items.module.d.ts +2 -0
  260. package/lib/import-csv/import-config.d.ts +5 -0
  261. package/lib/import-csv/import-csv-routing.module.d.ts +2 -0
  262. package/lib/import-csv/import-csv.component.d.ts +26 -0
  263. package/lib/import-csv/import-csv.module.d.ts +2 -0
  264. package/lib/import-csv/import-items/import-items-routing.module.d.ts +2 -0
  265. package/lib/import-csv/import-items/import-items.component.d.ts +30 -0
  266. package/lib/import-csv/import-items/import-items.module.d.ts +2 -0
  267. package/lib/loader/index.d.ts +1 -0
  268. package/lib/loader/loader.component.d.ts +8 -0
  269. package/lib/loader/loader.module.d.ts +2 -0
  270. package/lib/login-history-for-user/login-history-for-user-routing.module.d.ts +2 -0
  271. package/lib/login-history-for-user/login-history-for-user.component.d.ts +21 -0
  272. package/lib/login-history-for-user/login-history-for-user.module.d.ts +2 -0
  273. package/lib/material.module.d.ts +2 -0
  274. package/lib/note/index.d.ts +2 -0
  275. package/lib/note/note-form/note-form.component.d.ts +27 -0
  276. package/lib/note/note-list/note-list.component.d.ts +25 -0
  277. package/lib/note/note.module.d.ts +2 -0
  278. package/lib/note/note.service.d.ts +9 -0
  279. package/lib/searchable-selector/index.d.ts +2 -0
  280. package/lib/searchable-selector/mat-select-infinite-scroll.directive.d.ts +23 -0
  281. package/lib/searchable-selector/searchable-selector.component.d.ts +75 -0
  282. package/lib/searchable-selector/searchable-selector.module.d.ts +2 -0
  283. package/lib/techlify-update/read-more/read-more.component.d.ts +12 -0
  284. package/lib/techlify-update/read-more/read-more.module.d.ts +2 -0
  285. package/lib/techlify-update/techlify-update-form/techlify-update-form.component.d.ts +30 -0
  286. package/lib/techlify-update/techlify-update-form/techlify-update-form.module.d.ts +2 -0
  287. package/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.d.ts +2 -0
  288. package/lib/techlify-update/techlify-update-history/techlify-update-history.component.d.ts +31 -0
  289. package/lib/techlify-update/techlify-update-history/techlify-update-history.module.d.ts +2 -0
  290. package/lib/techlify-update/techlify-update-routing.module.d.ts +2 -0
  291. package/lib/techlify-update/techlify-update.module.d.ts +2 -0
  292. package/lib/techlify-update/techlify-update.service.d.ts +13 -0
  293. package/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.d.ts +31 -0
  294. package/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.d.ts +25 -0
  295. package/lib/techlify-update/update-notifier/update-notifier.component.d.ts +16 -0
  296. package/lib/techlify-update/update-notifier/update-notifier.module.d.ts +2 -0
  297. package/lib/techlify-update/update-view/update-view.component.d.ts +14 -0
  298. package/lib/techlify-update/update-view/update-view.module.d.ts +2 -0
  299. package/lib/timeline-filter/calculate-timeline.d.ts +1 -0
  300. package/lib/timeline-filter/index.d.ts +3 -0
  301. package/lib/timeline-filter/timeline-filter-routing.module.d.ts +2 -0
  302. package/lib/timeline-filter/timeline-filter.component.d.ts +14 -0
  303. package/lib/timeline-filter/timeline-filter.module.d.ts +2 -0
  304. package/lib/timeline-filter/timeline.model.d.ts +14 -0
  305. package/lib/utility/date-utils.service.d.ts +21 -0
  306. package/lib/utility/index.d.ts +3 -0
  307. package/lib/utility/num-items-selector.component.d.ts +16 -0
  308. package/lib/utility/number-selector.component.d.ts +20 -0
  309. package/lib/utility/utility.module.d.ts +2 -0
  310. package/ngx-techlify-core.d.ts +51 -0
  311. package/ngx-techlify-core.metadata.json +1 -0
  312. package/package.json +36 -0
  313. package/public-api.d.ts +87 -0
@@ -0,0 +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/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/calculate-timeline.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline.model.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/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/read-more/read-more.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/read-more/read-more.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-csv-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-config.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"],"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","__read","o","m","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","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","errMessage","ErrorHandlerInterceptor","configService","errorHandler","intercept","request","handle","catchError","ErrorEvent","_b","throwError","HttpCacheService","cachedData","cachePersistenceKey","loadCacheData","setCacheData","url","lastUpdated","Date","saveCacheData","getCacheData","cacheEntry","getHttpCacheEntry","clearCache","cleanCache","expirationDate","keys","setPersistence","persistence","sessionStorage","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","_d","_c","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","FormValidatorService","isFieldValid","field","formGroup","firstAttempt","valid","touched","untouched","getErrorMessage","errorMessages","errorField","required","EntityFileFormComponent","formValidatorService","fb","entityFileService","alertService","fileList","createForm","entityFileGroup","group","title","details","entity_type","entity_id","Validators","entity","setValue","updateMode","patchValue","hideTitleAndDetails","fileConfig","fileId","containerId","styles","height","multiple","acceptFile","maxSize","acceptFileText","viewerConfig","viewerStyle","width","submit","assignmentFileFirstAttempt","item","fileChanged","FormBuilder","EntityFilesViewAllComponent","location","dialog","viewOnly","entityFiles","displayedColumns","isWorking","search","FormControl","imageStyle","hideRemove","x","entityType","entityId","valueChanges","debounceTime","distinctUntilChanged","reload","fetchEntityFilesDetails","last_page","addEntityFile","open","autoFocus","restoreFocus","afterClosed","files","editEntityFile","resetFieldValue","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","cancel","NoteListComponent","readonly","notes","sort_by","relatedModelId","modelType","loadData","assign","current_page","resetScroll","SearchableSelectorComponent","SearchableSelectorComponent_1","formBuilder","_focusMonitor","_elementRef","ngControl","valueField","titleField","selectedValueChange","enableSearch","add","edit","selectionChange","isLoading","onChange","onTouched","stateChanges","Subject","focused","controlType","describedBy","items","_required","_disabled","selectorForm","select_value","monitor","origin","valueAccessor","empty","setValidators","coerceBooleanProperty","disable","enable","openedChange","dataItems","selectedValue","findIndex","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","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","calculateTimeline","date_from","date","date_to","show_custom_field","yesterday","setDate","first","getDay","last","to","setTime","getTime","setHours","quarter","Math","floor","startFullQuarter","endFullQuarter","Timeline","CUSTOM","TODAY","YESTERDAY","THIS_WEEK","LAST_WEEK","THIS_MONTH","LAST_MONTH","THIS_QUARTER","LAST_QUARTER","THIS_YEAR","LAST_YEAR","ALL","TimelineFilterComponent","timelines","viewValue","showCustomDateFields","changeTimeline","form","getFieldValue","setFieldValue","timeline","LoaderComponent","NgModule","declarations","imports","CommonModule","MatSnackBarModule","MatIconModule","exports","AuthenticationGuard","router","credentialsService","canActivate","route","state","isUserAuthenticated","canLoad","isAuthenticated","navigate","queryParams","redirect","replaceUrl","Router","AuthenticationService","login","context","concatMap","tokenInfo","user","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","parentModule","HttpClientModule","RouterModule","SnackModule","useClass","CoreModule","SkipSelf","FlexLayoutModule","MaterialModule","entryComponents","InfiniteScrollModule","NgxDocViewerModule","FormsModule","ReactiveFormsModule","FileDropperModule","DocumentViewerModule","ActionPopupModule","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","ReadMoreComponent","maxLength","hideToggle","isCollapsed","determineView","toggleView","text","currentText","substring","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","ReadMoreModule","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","ws","XLSX.utils","json_to_sheet","wb","book_new","book_append_sheet","XLSX.writeFile","AuditLogViewModelComponent","showDeltaChanges","changeList","model_id","modelId","logInfo","getTransformedChanges","displayAttribute","charAt","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","toISOString","AuditLogListFilterRoutingModule","AuditLogListRoutingModule","ExportExcelModule","AuditLogListFilterModule","AuditLogsViewModelRoutingModule","AuditLogListModule","AuditLogViewModelModule","AuditLogsViewModelModule","AuditLogForModelRoutingModule","AuditLogViewComponent","paramMap","fetchLogDetail","back","logId","_e","patchDelta","delta","jsondiffpatch.diff","innerHTML","jsondiffpatch.formatters","html","format","ActivatedRoute","AuditLogViewRoutingModule","AuditLogRoutingModule","AuditLogViewModule","ImportCsvComponent","filesList","fileData","failedItems","selectedFields","filesConfig","reset","jsonData","reader","FileReader","onload","selectedFile","XLSX.read","cellDates","SheetNames","reduce","initial","sheet","Sheets","sheet_to_json","readAsBinaryString","mappingProcessed","fields","tempFileData","propertyType","isValidDate","save","importConfig","postUrl","failed_items","isNaN","unavailable","ImportItemsComponent","changeDetectorRef","firstDataArray","properties","createImportMappingForm","mapOutDataColumns","importMappingForm","array","createField","dataValue","mainIndex","toLowerCase","includes","fieldsArray","detectChanges","updatePropertyType","index","controls","uniqueValidator","propertyData","setErrors","removeField","removeAt","ChangeDetectorRef","ImportItemsRoutingModule","FailedItemsComponent","FailedItemsRoutingModule","ImportCsvRoutingModule","ImportItemsModule","FailedItemsModule","LoginHistoryForUserComponent","loginHistoryList","historyFilterForm","LoginHistoryForUserRoutingModule","TimelineFilterModule"],"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\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 }\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 { 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 }\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 - Push the main error message to the array of errors\r\n errors.push(errorResponse.error.message ? errorResponse.error.message : errorResponse.error?.error);\r\n\r\n // 4 - Check for Laravel form validation error messages object\r\n if (errorResponse.error.errors) {\r\n\r\n // 5 - 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 // 6 - Extract it's array of errors\r\n const propertyErrors: Array<string> = errorResponse.error.errors[property];\r\n\r\n // 7 - 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 var errMessage = errors.length ? errors[0] : msg;\r\n this.alerter.addAlert(\"Error: \" + errMessage, \"warning\");\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) {\n const formData: FormData = new FormData();\n formData.append(\"fileData\", file, file.name);\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 });\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\n .get(\"file\")\n .setValue(result.item.file);\n this.entityFileGroup\n .get(\"url\")\n .setValue(result.item.url);\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';\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\n filters: any = {};\n entityFiles: any[] = [];\n displayedColumns = ['index', 'title', 'details', 'file',];\n isWorking: boolean = false;\n search: FormControl = new FormControl('');\n page: number = 1;\n perPage: number = 25;\n lastPage: number = 0;\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\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.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","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 \"Note 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';\nimport { AlertService } from '../../core/alert.service';\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\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 alertService: AlertService,\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 },\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 },\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 Note\",\n message: `Are you sure to delete the note?`\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}\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('value') _value: any;\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 @Output() selectionChange = new EventEmitter();\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 items: any[] = [];\n filters: 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 return items.filter((v, i, a) => a.findIndex(v => v[this.valueField] === a[i][this.valueField]) === i);\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: 25,\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 this.fetchItemList();\n }\n\n fetchItemList() {\n this.isLoading = true;\n of().pipe(\n startWith(true),\n switchMap((_) => from(this.http.get(this.apiUrl, { params: this.filters }))),\n finalize(() => this.isLoading = false),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.items = this.items.concat(result.data);\n this.filters.page = result.current_page;\n this.filters.lastPage = result.last_page;\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 this.reloadData();\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 function calculateTimeline(value: any) {\n var data: any = {\n 'date_from': date,\n 'date_to': date,\n 'show_custom_field': false\n };\n var date = new Date();\n switch (value) {\n case 1: { //Custom\n data.show_custom_field = true;\n break;\n }\n case 2: { // Today\n data.date_from = date;\n data.date_to = date;\n break;\n }\n case 3: { // Yesterday\n const yesterday = new Date(date)\n yesterday.setDate(yesterday.getDate() - 1)\n data.date_from = yesterday;\n data.date_to = yesterday;\n break;\n }\n case 4: { // This Week\n var first = date.getDate() - date.getDay() + 1; // First day is the day of the month - the day of the week\n var last = first + 6; // last day is the first day + 6 \n data.date_from = new Date(date.setDate(first));\n data.date_to = new Date(date.setDate(last));\n break;\n }\n case 5: { // Last Week\n var d = new Date();\n var to = d.setTime(d.getTime() - (d.getDay() ? d.getDay() : 7) * 24 * 60 * 60 * 1000);\n var from = d.setTime(d.getTime() - 6 * 24 * 60 * 60 * 1000);\n data.date_from = new Date(from);\n data.date_to = new Date(to);\n break;\n }\n case 6: { //This Month\n data.date_from = new Date(date.getFullYear(), date.getMonth(), 1);\n data.date_to = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n }\n case 7: { // Last Month\n var d = new Date(); // current date\n d.setDate(1); // going to 1st of the month\n d.setHours(-1);\n data.date_from = new Date(date.getFullYear(), date.getMonth() - 1, 1);\n data.date_to = d;\n break;\n }\n case 8: { // This Quarter\n const quarter = Math.floor((date.getMonth() / 3));\n const startFullQuarter = new Date(date.getFullYear(), quarter * 3, 1);\n const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0);\n data.date_from = startFullQuarter;\n data.date_to = endFullQuarter;\n break;\n }\n case 9: { // Last Quarter\n const quarter = Math.floor((date.getMonth() / 3));\n const startFullQuarter = new Date(date.getFullYear(), quarter * 3 - 3, 1);\n const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0)\n data.date_from = startFullQuarter;\n data.date_to = endFullQuarter;\n break;\n }\n case 10: { // This Year\n data.date_from = new Date(\"1/1/\" + (new Date()).getFullYear());;\n data.date_to = new Date(\"12/31/\" + (new Date()).getFullYear());\n break;\n }\n case 11: { // Last Year\n data.date_from = new Date(\"1/1/\" + (new Date().getFullYear() - 1));;\n data.date_to = new Date(\"12/31/\" + (new Date().getFullYear() - 1));\n break;\n break;\n }\n default: { // All\n data.date_from = '';\n data.date_to = '';\n break;\n }\n\n }\n return data;\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}","import { Component, Input, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { calculateTimeline } from './calculate-timeline';\n\n@Component({\n selector: 'app-timeline-filter',\n templateUrl: './timeline-filter.component.html',\n styleUrls: ['./timeline-filter.component.scss']\n})\nexport class TimelineFilterComponent implements OnInit {\n\n @Input() timelines: any[] = [\n { value: 1, viewValue: 'Custom' },\n { value: 2, viewValue: 'Today' },\n { value: 3, viewValue: 'Yesterday' },\n { value: 4, viewValue: 'This Week' },\n { value: 5, viewValue: 'Last Week' },\n { value: 6, viewValue: 'This Month' },\n { value: 7, viewValue: 'Last Month' },\n { value: 8, viewValue: 'This Quarter' },\n { value: 9, viewValue: 'Last Quarter' },\n { value: 10, viewValue: 'This Year' },\n { value: 11, viewValue: 'Last Year' },\n { value: 12, viewValue: 'All dates' },\n ];\n\n @Input() form: FormGroup;\n\n @Input() set defaultValue(value: any) {\n this.changeTimeline(value);\n }\n\n showCustomDateFields: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\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('date_from', timeline.date_from)\n this.setFieldValue('date_to', timeline.date_to)\n this.showCustomDateFields = timeline.show_custom_field;\n }\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'\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 ]\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 { 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';\n\n@NgModule({\n declarations: [\n NoteListComponent,\n NoteFormComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n ActionPopupModule,\n MaterialModule\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 { 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 { }\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 this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\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 if (this.logInfo?.data?.changes) {\n const changes = 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?.object[key] ?? '', oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\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 if (this.logInfo?.data?.changes) {\n const changes = 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?.object[key] ?? '', oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\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 { 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 ImportCsvRoutingModule { }\n","import { Component, Input, OnInit } from '@angular/core';\nimport * as XLSX from 'xlsx';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { ImportConfig } from './import-config';\nimport { Location } from '@angular/common';\nimport { FileDropperConfig } from '../file-dropper/file-dropper.model';\nimport { ViewerConfig } from '../document-viewer/viewer-config.model';\nimport { AlertService } from '../core/alert.service';\nimport { HttpService } from '../core/http.service';\n\n@UntilDestroy()\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\n @Input() importConfig: ImportConfig;\n\n filesConfig: FileDropperConfig;\n filesList: any[] = [];\n viewerConfig: ViewerConfig;\n fileData: any[] = [];\n failedItems: any[] = [];\n selectedFields: any[] = [];\n\n constructor(\n private alertService: AlertService,\n private http: HttpService,\n private location: Location\n ) {\n this.filesConfig = {\n fileId: \"file\",\n containerId: \"fileContainer\",\n styles: {\n height: \"600px\"\n },\n acceptFile: '.csv',\n multiple: false,\n maxSize: 100,\n acceptFileText: \".csv\"\n };\n\n }\n\n ngOnInit() {\n }\n\n reset() {\n this.filesList = [];\n this.failedItems = [];\n this.selectedFields = [];\n this.fileData = [];\n }\n\n fileChanged(event: any) {\n this.filesList = event;\n\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 const selectedFile = XLSX.read(data, { type: 'binary', cellDates: true });\n jsonData = selectedFile.SheetNames.reduce((initial, name) => {\n const sheet = selectedFile.Sheets[name];\n initial = XLSX.utils.sheet_to_json(sheet);\n return initial;\n }, []);\n this.fileData = jsonData;\n }\n reader.readAsBinaryString(file);\n return;\n }\n\n mappingProcessed(event: any) {\n this.selectedFields = event.fields;\n const tempFileData = JSON.parse(JSON.stringify(this.fileData));\n tempFileData.forEach((data: any) => {\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 }\n\n save(tempFileData: any) {\n this.http.post(this.importConfig?.postUrl, { data: tempFileData })\n .pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.failedItems = result?.failed_items || [];\n if (this.failedItems.length === 0) {\n this.alertService.addAlert(\"File Import Success\", \"success\");\n this.location.back();\n }\n });\n }\n\n isValidDate(d: any) {\n return d instanceof Date && !isNaN(d.getTime());\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 ImportItemsRoutingModule { }\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { ImportConfig } from '../import-config';\n\nconst errorMessages: any = {\n property: {\n required: \"Property is required\",\n unavailable: \"Duplicate entry\"\n },\n};\n\n@Component({\n selector: 'app-import-items',\n templateUrl: './import-items.component.html',\n styleUrls: ['./import-items.component.scss']\n})\nexport class ImportItemsComponent implements OnInit {\n importMappingForm: FormGroup;\n @Input() data: any[];\n @Input() importConfig: ImportConfig;\n firstDataArray: any[] = [];\n properties: any[] = [];\n @Output() onSave = new EventEmitter();\n\n constructor(\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.createImportMappingForm();\n }\n\n ngOnInit() {\n this.properties = this.importConfig.properties;\n this.mapOutDataColumns(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 mapOutDataColumns(data: any[]) {\n for (var key in data) {\n if (data.hasOwnProperty(key)) {\n var dataValue = {\n id: '',\n label: key,\n value: data[key],\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) => {\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 submit() {\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((_: any) => {\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: any) =>\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}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ImportItemsRoutingModule } from './import-items-routing.module';\nimport { ImportItemsComponent } from './import-items.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [ImportItemsComponent],\n imports: [\n CommonModule,\n FlexLayoutModule,\n MaterialModule,\n ReactiveFormsModule,\n ImportItemsRoutingModule\n ],\n exports: [ImportItemsComponent]\n})\nexport class ImportItemsModule { }\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 FailedItemsRoutingModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-failed-items',\n templateUrl: './failed-items.component.html',\n styleUrls: ['./failed-items.component.scss']\n})\nexport class FailedItemsComponent implements OnInit {\n\n @Input() failedItems: any[];\n @Input() selectedFields: any[];\n constructor() { }\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}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FailedItemsRoutingModule } from './failed-items-routing.module';\nimport { FailedItemsComponent } from './failed-items.component';\nimport { MaterialModule } from '../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\n\n\n@NgModule({\n declarations: [FailedItemsComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n FailedItemsRoutingModule\n ],\n exports: [FailedItemsComponent]\n})\nexport class FailedItemsModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ImportCsvRoutingModule } from './import-csv-routing.module';\nimport { ImportCsvComponent } from './import-csv.component';\nimport { ImportItemsModule } from './import-items/import-items.module';\nimport { FailedItemsModule } from './failed-items/failed-items.module';\nimport { MaterialModule } from '../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FileDropperModule } from '../file-dropper/file-dropper.module';\n\n\n@NgModule({\n declarations: [ImportCsvComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n FileDropperModule,\n ImportCsvRoutingModule,\n ImportItemsModule,\n FailedItemsModule\n ],\n exports: [ImportCsvComponent]\n})\nexport class ImportCsvModule { }\n","export class ImportConfig {\n postUrl: string;\n properties: any[];\n importType: string;\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';\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 '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 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"]}