cat-documents-ng 1.0.5 → 1.0.6

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 (211) hide show
  1. package/README.md +322 -322
  2. package/ng-package.json +10 -0
  3. package/package.json +5 -11
  4. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.html +3 -0
  5. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.scss +13 -0
  6. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.spec.ts +70 -0
  7. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.ts +133 -0
  8. package/src/Shared/components/table-primary/table-primary.component.html +66 -0
  9. package/src/Shared/components/table-primary/table-primary.component.scss +227 -0
  10. package/src/Shared/components/table-primary/table-primary.component.spec.ts +23 -0
  11. package/src/Shared/components/table-primary/table-primary.component.ts +143 -0
  12. package/src/Shared/components/table-primary/table-primary.model.ts +21 -0
  13. package/src/Shared/constant/ERROR.ts +55 -0
  14. package/src/Shared/constant/PERMISSIONS.ts +17 -0
  15. package/src/Shared/constant/SHARED.ts +936 -0
  16. package/{Shared/constant/URLS.d.ts → src/Shared/constant/URLS.ts} +31 -25
  17. package/src/Shared/services/app-config.service.spec.ts +19 -0
  18. package/src/Shared/services/app-config.service.ts +73 -0
  19. package/{Shared/services/global-error.handler.d.ts → src/Shared/services/global-error.handler.ts} +11 -9
  20. package/src/Shared/services/session.service.spec.ts +16 -0
  21. package/src/Shared/services/session.service.ts +76 -0
  22. package/src/Shared/shared.module.ts +25 -0
  23. package/src/lib/document/components/csv-viewer/csv-viewer.component.ts +1 -0
  24. package/src/lib/document/components/document-actions/document-actions.component.html +59 -0
  25. package/src/lib/document/components/document-actions/document-actions.component.scss +362 -0
  26. package/src/lib/document/components/document-actions/document-actions.component.spec.ts +297 -0
  27. package/src/lib/document/components/document-actions/document-actions.component.ts +163 -0
  28. package/src/lib/document/components/document-container/document-container.component.html +36 -0
  29. package/src/lib/document/components/document-container/document-container.component.scss +144 -0
  30. package/src/lib/document/components/document-container/document-container.component.spec.ts +110 -0
  31. package/src/lib/document/components/document-container/document-container.component.ts +363 -0
  32. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.html +332 -0
  33. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.scss +1877 -0
  34. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.spec.ts +258 -0
  35. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.ts +664 -0
  36. package/src/lib/document/components/document-history/document-history.component.html +96 -0
  37. package/src/lib/document/components/document-history/document-history.component.scss +392 -0
  38. package/src/lib/document/components/document-history/document-history.component.spec.ts +93 -0
  39. package/src/lib/document/components/document-history/document-history.component.ts +373 -0
  40. package/src/lib/document/components/document-list/document-list.component.html +46 -0
  41. package/src/lib/document/components/document-list/document-list.component.scss +513 -0
  42. package/src/lib/document/components/document-list/document-list.component.spec.ts +486 -0
  43. package/src/lib/document/components/document-list/document-list.component.ts +682 -0
  44. package/src/lib/document/components/document-list-item/document-list-item.component.html +36 -0
  45. package/src/lib/document/components/document-list-item/document-list-item.component.scss +34 -0
  46. package/src/lib/document/components/document-list-item/document-list-item.component.spec.ts +75 -0
  47. package/src/lib/document/components/document-list-item/document-list-item.component.ts +40 -0
  48. package/src/lib/document/components/document-search/document-search.component.html +64 -0
  49. package/src/lib/document/components/document-search/document-search.component.scss +206 -0
  50. package/src/lib/document/components/document-search/document-search.component.spec.ts +82 -0
  51. package/src/lib/document/components/document-search/document-search.component.ts +163 -0
  52. package/src/lib/document/components/document-status/document-status.component.html +31 -0
  53. package/src/lib/document/components/document-status/document-status.component.scss +192 -0
  54. package/src/lib/document/components/document-status/document-status.component.spec.ts +23 -0
  55. package/src/lib/document/components/document-status/document-status.component.ts +87 -0
  56. package/src/lib/document/components/document-upload/document-upload.component.html +160 -0
  57. package/src/lib/document/components/document-upload/document-upload.component.scss +235 -0
  58. package/src/lib/document/components/document-upload/document-upload.component.spec.ts +95 -0
  59. package/src/lib/document/components/document-upload/document-upload.component.ts +668 -0
  60. package/src/lib/document/components/document-viewer/document-viewer.component.html +50 -0
  61. package/src/lib/document/components/document-viewer/document-viewer.component.scss +187 -0
  62. package/src/lib/document/components/document-viewer/document-viewer.component.spec.ts +79 -0
  63. package/src/lib/document/components/document-viewer/document-viewer.component.ts +261 -0
  64. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.html +48 -0
  65. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.scss +320 -0
  66. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.spec.ts +59 -0
  67. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.ts +150 -0
  68. package/src/lib/document/components/documents-menu/documents-menu.component.html +44 -0
  69. package/src/lib/document/components/documents-menu/documents-menu.component.scss +363 -0
  70. package/src/lib/document/components/documents-menu/documents-menu.component.spec.ts +23 -0
  71. package/src/lib/document/components/documents-menu/documents-menu.component.ts +316 -0
  72. package/src/lib/document/components/folder-block/folder-block.component.html +46 -0
  73. package/src/lib/document/components/folder-block/folder-block.component.scss +9 -0
  74. package/src/lib/document/components/folder-block/folder-block.component.spec.ts +70 -0
  75. package/{lib/document/components/folder-block/folder-block.component.d.ts → src/lib/document/components/folder-block/folder-block.component.ts} +28 -12
  76. package/src/lib/document/components/folder-container/folder-container.component.html +56 -0
  77. package/src/lib/document/components/folder-container/folder-container.component.scss +20 -0
  78. package/src/lib/document/components/folder-container/folder-container.component.spec.ts +27 -0
  79. package/src/lib/document/components/folder-container/folder-container.component.ts +328 -0
  80. package/src/lib/document/components/linked-document/linked-document.component.html +23 -0
  81. package/src/lib/document/components/linked-document/linked-document.component.scss +10 -0
  82. package/src/lib/document/components/linked-document/linked-document.component.spec.ts +61 -0
  83. package/src/lib/document/components/linked-document/linked-document.component.ts +49 -0
  84. package/src/lib/document/components/request-document/request-document.component.html +86 -0
  85. package/src/lib/document/components/request-document/request-document.component.scss +16 -0
  86. package/src/lib/document/components/request-document/request-document.component.ts +278 -0
  87. package/src/lib/document/components/sidebar/sidebar.component.html +75 -0
  88. package/src/lib/document/components/sidebar/sidebar.component.scss +157 -0
  89. package/src/lib/document/components/sidebar/sidebar.component.spec.ts +114 -0
  90. package/src/lib/document/components/sidebar/sidebar.component.ts +223 -0
  91. package/src/lib/document/components/user-list/user-list.component.html +33 -0
  92. package/src/lib/document/components/user-list/user-list.component.scss +118 -0
  93. package/src/lib/document/components/user-list/user-list.component.spec.ts +23 -0
  94. package/src/lib/document/components/user-list/user-list.component.ts +181 -0
  95. package/src/lib/document/constant/DOCUMENT_HISTORY.ts +52 -0
  96. package/src/lib/document/directives/document.directive.ts +32 -0
  97. package/src/lib/document/directives/permission.directive.spec.ts +0 -0
  98. package/src/lib/document/directives/permission.directive.ts +72 -0
  99. package/src/lib/document/document.module.ts +351 -0
  100. package/{lib/document/models/document-alert.model.d.ts → src/lib/document/models/document-alert.model.ts} +11 -4
  101. package/src/lib/document/models/document-category.model.ts +30 -0
  102. package/src/lib/document/models/document-history.model.ts +109 -0
  103. package/src/lib/document/models/document-list-response.model.ts +37 -0
  104. package/src/lib/document/models/document-type.model.ts +44 -0
  105. package/src/lib/document/models/document.model.ts +53 -0
  106. package/{lib/document/models/folder.model.d.ts → src/lib/document/models/folder.model.ts} +10 -4
  107. package/src/lib/document/models/status-data.model.ts +31 -0
  108. package/src/lib/document/models/uploaded-file-response.model.ts +7 -0
  109. package/src/lib/document/models/user-list.model.ts +10 -0
  110. package/src/lib/document/services/csv-parser.service.spec.ts +97 -0
  111. package/src/lib/document/services/csv-parser.service.ts +303 -0
  112. package/src/lib/document/services/document-actions.service.ts +125 -0
  113. package/src/lib/document/services/document-content-type.service.ts +193 -0
  114. package/src/lib/document/services/document-history-style.service.ts +138 -0
  115. package/src/lib/document/services/document-history.service.ts +129 -0
  116. package/src/lib/document/services/document-http.service.spec.ts +119 -0
  117. package/src/lib/document/services/document-http.service.ts +497 -0
  118. package/src/lib/document/services/document-list.service.ts +195 -0
  119. package/src/lib/document/services/document-menu.service.ts +277 -0
  120. package/src/lib/document/services/document-scroll.service.ts +138 -0
  121. package/src/lib/document/services/document-severity.service.ts +98 -0
  122. package/src/lib/document/services/document-table-builder.service.ts +82 -0
  123. package/src/lib/document/services/document-upload-business.service.ts +326 -0
  124. package/src/lib/document/services/document-upload-data.service.ts +82 -0
  125. package/src/lib/document/services/document-upload-form.service.ts +149 -0
  126. package/src/lib/document/services/document-upload.service.spec.ts +99 -0
  127. package/src/lib/document/services/document-upload.service.ts +209 -0
  128. package/src/lib/document/services/document-viewer.service.ts +279 -0
  129. package/src/lib/document/services/document-zoom.service.spec.ts +56 -0
  130. package/src/lib/document/services/document-zoom.service.ts +164 -0
  131. package/src/lib/document/services/document.service.ts +356 -0
  132. package/src/lib/document/services/eml-parser.service.ts +444 -0
  133. package/src/lib/document/services/excel-parser.service.spec.ts +66 -0
  134. package/src/lib/document/services/excel-parser.service.ts +483 -0
  135. package/src/lib/document/services/file-format.service.spec.ts +16 -0
  136. package/src/lib/document/services/file-format.service.ts +63 -0
  137. package/src/lib/document/services/status-calculator.service.ts +44 -0
  138. package/src/lib/document/services/user-list.service.ts +77 -0
  139. package/src/lib/document/state/document.query.ts +378 -0
  140. package/{lib/document/state/document.service.d.ts → src/lib/document/state/document.service.ts} +46 -15
  141. package/src/lib/document/state/document.state.ts +100 -0
  142. package/src/lib/document/state/document.store.ts +200 -0
  143. package/{public-api.d.ts → src/public-api.ts} +4 -0
  144. package/tsconfig.lib.json +15 -0
  145. package/tsconfig.lib.prod.json +11 -0
  146. package/tsconfig.spec.json +15 -0
  147. package/Shared/components/confirmation-dialog/confirmation-dialog.component.d.ts +0 -44
  148. package/Shared/components/table-primary/table-primary.component.d.ts +0 -31
  149. package/Shared/components/table-primary/table-primary.model.d.ts +0 -19
  150. package/Shared/constant/ERROR.d.ts +0 -52
  151. package/Shared/constant/SHARED.d.ts +0 -546
  152. package/Shared/services/app-config.service.d.ts +0 -51
  153. package/Shared/services/session.service.d.ts +0 -46
  154. package/Shared/shared.module.d.ts +0 -14
  155. package/fesm2022/cat-documents-ng.mjs +0 -11392
  156. package/fesm2022/cat-documents-ng.mjs.map +0 -1
  157. package/index.d.ts +0 -5
  158. package/lib/document/components/document-actions/document-actions.component.d.ts +0 -78
  159. package/lib/document/components/document-container/document-container.component.d.ts +0 -162
  160. package/lib/document/components/document-content-viewer/document-content-viewer.component.d.ts +0 -291
  161. package/lib/document/components/document-history/document-history.component.d.ts +0 -160
  162. package/lib/document/components/document-list/document-list.component.d.ts +0 -299
  163. package/lib/document/components/document-list-item/document-list-item.component.d.ts +0 -28
  164. package/lib/document/components/document-search/document-search.component.d.ts +0 -77
  165. package/lib/document/components/document-status/document-status.component.d.ts +0 -24
  166. package/lib/document/components/document-upload/document-upload.component.d.ts +0 -321
  167. package/lib/document/components/document-viewer/document-viewer.component.d.ts +0 -137
  168. package/lib/document/components/document-zoom-controls/document-zoom-controls.component.d.ts +0 -33
  169. package/lib/document/components/documents-menu/documents-menu.component.d.ts +0 -110
  170. package/lib/document/components/folder-container/folder-container.component.d.ts +0 -162
  171. package/lib/document/components/linked-document/linked-document.component.d.ts +0 -39
  172. package/lib/document/components/request-document/request-document.component.d.ts +0 -69
  173. package/lib/document/components/sidebar/sidebar.component.d.ts +0 -109
  174. package/lib/document/components/user-list/user-list.component.d.ts +0 -34
  175. package/lib/document/constant/DOCUMENT_HISTORY.d.ts +0 -41
  176. package/lib/document/directives/document.directive.d.ts +0 -20
  177. package/lib/document/directives/permission.directive.d.ts +0 -38
  178. package/lib/document/document.module.d.ts +0 -60
  179. package/lib/document/models/document-category.model.d.ts +0 -24
  180. package/lib/document/models/document-history.model.d.ts +0 -94
  181. package/lib/document/models/document-list-response.model.d.ts +0 -33
  182. package/lib/document/models/document-type.model.d.ts +0 -37
  183. package/lib/document/models/document.model.d.ts +0 -44
  184. package/lib/document/models/status-data.model.d.ts +0 -27
  185. package/lib/document/models/uploaded-file-response.model.d.ts +0 -7
  186. package/lib/document/models/user-list.model.d.ts +0 -8
  187. package/lib/document/services/csv-parser.service.d.ts +0 -88
  188. package/lib/document/services/document-actions.service.d.ts +0 -48
  189. package/lib/document/services/document-content-type.service.d.ts +0 -85
  190. package/lib/document/services/document-history-style.service.d.ts +0 -34
  191. package/lib/document/services/document-history.service.d.ts +0 -42
  192. package/lib/document/services/document-http.service.d.ts +0 -179
  193. package/lib/document/services/document-list.service.d.ts +0 -74
  194. package/lib/document/services/document-menu.service.d.ts +0 -122
  195. package/lib/document/services/document-scroll.service.d.ts +0 -55
  196. package/lib/document/services/document-table-builder.service.d.ts +0 -38
  197. package/lib/document/services/document-upload-business.service.d.ts +0 -107
  198. package/lib/document/services/document-upload-data.service.d.ts +0 -40
  199. package/lib/document/services/document-upload-form.service.d.ts +0 -41
  200. package/lib/document/services/document-upload.service.d.ts +0 -99
  201. package/lib/document/services/document-viewer.service.d.ts +0 -97
  202. package/lib/document/services/document-zoom.service.d.ts +0 -81
  203. package/lib/document/services/document.service.d.ts +0 -161
  204. package/lib/document/services/eml-parser.service.d.ts +0 -116
  205. package/lib/document/services/excel-parser.service.d.ts +0 -169
  206. package/lib/document/services/file-format.service.d.ts +0 -34
  207. package/lib/document/services/status-calculator.service.d.ts +0 -20
  208. package/lib/document/services/user-list.service.d.ts +0 -29
  209. package/lib/document/state/document.query.d.ts +0 -243
  210. package/lib/document/state/document.state.d.ts +0 -61
  211. package/lib/document/state/document.store.d.ts +0 -56
@@ -0,0 +1,138 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';
3
+ import { SHARED } from '../../../Shared/constant/SHARED';
4
+
5
+ /**
6
+ * Service for handling document history styling logic
7
+ */
8
+ @Injectable({
9
+ providedIn: 'root'
10
+ })
11
+ export class DocumentHistoryStyleService {
12
+
13
+ constructor() {}
14
+
15
+ /**
16
+ * Get the appropriate icon class based on the action label
17
+ */
18
+ getActionIcon(label: string): string {
19
+ switch (label) {
20
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:
21
+ return DOCUMENT_HISTORY.ICONS.DOCUMENT_UPLOADED;
22
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:
23
+ return DOCUMENT_HISTORY.ICONS.DOCUMENT_REJECTED;
24
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:
25
+ return DOCUMENT_HISTORY.ICONS.DOCUMENT_ACCEPTED;
26
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:
27
+ return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;
28
+ default:
29
+ return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Get the appropriate color class based on the action label
35
+ */
36
+ getActionColor(label: string): string {
37
+ switch (label) {
38
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:
39
+ return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_UPLOADED;
40
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:
41
+ return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REJECTED;
42
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:
43
+ return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_ACCEPTED;
44
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:
45
+ return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;
46
+ default:
47
+ return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Get the appropriate background color class based on the action label
53
+ */
54
+ getActionBgColor(label: string): string {
55
+ switch (label) {
56
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:
57
+ return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_UPLOADED;
58
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:
59
+ return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REJECTED;
60
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:
61
+ return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_ACCEPTED;
62
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:
63
+ return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;
64
+ default:
65
+ return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Get the appropriate border color class based on the action label
71
+ */
72
+ getActionBorderColor(label: string): string {
73
+ switch (label) {
74
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:
75
+ return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_UPLOADED;
76
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:
77
+ return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REJECTED;
78
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:
79
+ return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_ACCEPTED;
80
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:
81
+ return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;
82
+ default:
83
+ return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Get the appropriate icon background color class based on the action label
89
+ */
90
+ getActionIconBgColor(label: string): string {
91
+ switch (label) {
92
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:
93
+ return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_UPLOADED;
94
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:
95
+ return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REJECTED;
96
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:
97
+ return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_ACCEPTED;
98
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:
99
+ return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;
100
+ default:
101
+ return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Check if a section has valid content to display
107
+ */
108
+ checkValidContent(section: any): boolean {
109
+ return section.list && section.list.length > 0 &&
110
+ section.list.some((item:any) =>
111
+ item.label ||
112
+ item.requestDescription ||
113
+ item.documentUrl ||
114
+ item.userName
115
+ );
116
+ }
117
+
118
+ getAccordionClass(section: any): string {
119
+ if (!section.list || section.list.length === 0) {
120
+ return SHARED.DOCUMENT_REQUESTED;
121
+ }
122
+
123
+ const firstItem = section.list[0];
124
+ const label = firstItem.label;
125
+
126
+ switch (label) {
127
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:
128
+ return SHARED.DOCUMENT_UPLOADED;
129
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:
130
+ return SHARED.DOCUMENT_REJECTED;
131
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:
132
+ return SHARED.DOCUMENT_ACCEPTED;
133
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:
134
+ default:
135
+ return SHARED.DOCUMENT_REQUESTED;
136
+ }
137
+ }
138
+ }
@@ -0,0 +1,129 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DocumentHistoryItem, DocumentHistorySection } from '../models/document-history.model';
3
+ import { DocumentHistoryStyleService } from './document-history-style.service';
4
+ import { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';
5
+ import { SHARED } from '../../../Shared/constant/SHARED';
6
+ import { ERRORS } from '../../../Shared/constant/ERROR';
7
+ import { HttpClient } from '@angular/common/http';
8
+
9
+ // Extended interface for processed items with computed properties
10
+ interface ProcessedDocumentHistoryItem extends DocumentHistoryItem {
11
+ actionIcon: string;
12
+ actionColor: string;
13
+ actionBgColor: string;
14
+ actionBorderColor: string;
15
+ actionIconBgColor: string;
16
+ }
17
+
18
+ interface ProcessedDocumentHistorySection extends DocumentHistorySection {
19
+ list: ProcessedDocumentHistoryItem[];
20
+ accordionClass?: string;
21
+ hasValidContent?: boolean;
22
+ }
23
+
24
+ @Injectable({
25
+ providedIn: 'root'
26
+ })
27
+ export class DocumentHistoryService {
28
+
29
+ constructor(private documentHistoryStyleService: DocumentHistoryStyleService, private http : HttpClient) {}
30
+
31
+ /**
32
+ * Get the CSS class for accordion styling based on the section's label
33
+ */
34
+ private getAccordionClass(section: ProcessedDocumentHistorySection): string {
35
+ if (!section.list || section.list.length === 0) {
36
+ return SHARED.DOCUMENT_REQUESTED; // Default class
37
+ }
38
+
39
+ const firstItem = section.list[0];
40
+ const label = firstItem.label;
41
+
42
+ switch (label) {
43
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:
44
+ return SHARED.DOCUMENT_UPLOADED;
45
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:
46
+ return SHARED.DOCUMENT_REJECTED;
47
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:
48
+ return SHARED.DOCUMENT_ACCEPTED;
49
+ case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:
50
+ default:
51
+ return SHARED.DOCUMENT_REQUESTED;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Check if a section has valid content to display
57
+ */
58
+ private checkValidContent(section: ProcessedDocumentHistorySection): boolean {
59
+ return section.list && section.list.length > 0 &&
60
+ section.list.some(item =>
61
+ item.requestDescription !== SHARED.EMPTY &&
62
+ item.documentUrl !== SHARED.EMPTY &&
63
+ (item.userName !== SHARED.EMPTY && item.userName !== SHARED.UNKNOWN_USER)
64
+ );
65
+ }
66
+
67
+ /**
68
+ * Process history data to add computed properties
69
+ */
70
+ processHistoryData(historyData: DocumentHistorySection[]): ProcessedDocumentHistorySection[] {
71
+ if (!historyData) {
72
+ return SHARED.EMPTY_ARRAY;
73
+ }
74
+
75
+ return historyData.map(section => {
76
+ const processedSection: ProcessedDocumentHistorySection = {
77
+ ...section,
78
+ list: section.list.map(item => ({
79
+ ...item,
80
+ dateTime: item.dateTime || ERRORS.NO_VALUE_FOUND,
81
+ actionIcon: this.documentHistoryStyleService.getActionIcon(item.label),
82
+ actionColor: this.documentHistoryStyleService.getActionColor(item.label),
83
+ actionBgColor: this.documentHistoryStyleService.getActionBgColor(item.label),
84
+ actionBorderColor: this.documentHistoryStyleService.getActionBorderColor(item.label),
85
+ actionIconBgColor: this.documentHistoryStyleService.getActionIconBgColor(item.label)
86
+ }))
87
+ };
88
+ processedSection.accordionClass = this.getAccordionClass(processedSection);
89
+ processedSection.hasValidContent = this.checkValidContent(processedSection);
90
+
91
+ return processedSection;
92
+ }).sort((a, b) => {
93
+ if (a.header === SHARED.INITIAL_REQUEST) return -1;
94
+ if (b.header === SHARED.INITIAL_REQUEST) return 1;
95
+ return 0;
96
+ }).map(section => ({
97
+ ...section,
98
+ list: section.list.reverse()
99
+ }));
100
+ }
101
+
102
+ /**
103
+ * Downloads a document when clicked
104
+ * @param documentUrl - The URL of the document to download
105
+ * @param docName - The name of the document
106
+ */
107
+ downloadDocument(documentUrl: string, docName?: string): void {
108
+ if (!documentUrl) {
109
+ console.warn(ERRORS.NO_DOCUMENT_URL);
110
+ return;
111
+ }
112
+ this.http.get(documentUrl, { responseType: 'blob' }).subscribe({
113
+ next: (blob) => {
114
+ const blobUrl = window.URL.createObjectURL(blob);
115
+ const a = document.createElement('a');
116
+ a.href = blobUrl;
117
+ a.download = docName ?? SHARED.DOCUMENT;
118
+ a.style.display = SHARED.NONE;
119
+ document.body.appendChild(a);
120
+ a.click();
121
+ a.remove();
122
+ window.URL.revokeObjectURL(blobUrl);
123
+ },
124
+ error: (err) => {
125
+ console.error(ERRORS.DOWNLOAD_FAIL, err);
126
+ }
127
+ });
128
+ }
129
+ }
@@ -0,0 +1,119 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
3
+ import { DocumentHttpService } from './document-http.service';
4
+ import { DocumentStore } from '../state/document.store';
5
+ import { AppConfigService } from '../../../Shared/services/app-config.service';
6
+ import { URLS } from '../../../Shared/constant/URLS';
7
+ import { DocumentTypeModel } from '../models/document-type.model';
8
+ import { throwError } from 'rxjs';
9
+ import { FolderBlockModel } from '../models/folder.model';
10
+ import { DocumentModel } from '../models/document.model';
11
+
12
+ describe('DocumentHttpService', () => {
13
+ let service: DocumentHttpService;
14
+ let httpMock: HttpTestingController;
15
+ let documentStoreSpy: jasmine.SpyObj<DocumentStore>;
16
+ let appConfigServiceSpy: jasmine.SpyObj<AppConfigService>;
17
+
18
+ beforeEach(() => {
19
+ documentStoreSpy = jasmine.createSpyObj('DocumentStore', ['setDocumentTypes', 'setFolders']);
20
+ appConfigServiceSpy = jasmine.createSpyObj('AppConfigService', ['apiBaseUrl'], {
21
+ apiBaseUrl: 'http://localhost/api'
22
+ });
23
+
24
+ TestBed.configureTestingModule({
25
+ imports: [HttpClientTestingModule],
26
+ providers: [
27
+ DocumentHttpService,
28
+ { provide: DocumentStore, useValue: documentStoreSpy },
29
+ { provide: AppConfigService, useValue: appConfigServiceSpy }
30
+ ]
31
+ });
32
+
33
+ service = TestBed.inject(DocumentHttpService);
34
+ httpMock = TestBed.inject(HttpTestingController);
35
+ });
36
+
37
+ it('should be created', () => {
38
+ expect(service).toBeTruthy();
39
+ });
40
+
41
+ it('should fetch document types and update the store', () => {
42
+ const mockDocumentTypes: DocumentTypeModel[] = [
43
+ {
44
+ _id: '1',
45
+ label: 'Parent-child1',
46
+ name: 'Type 1',
47
+ matchRules: 'Rule 1',
48
+ parentDocumentTypeId: '0'
49
+ },
50
+ {
51
+ _id: '2',
52
+ label: 'Parent-child2',
53
+ name: 'Type 2',
54
+ matchRules: 'Rule 2',
55
+ parentDocumentTypeId: '1'
56
+ }
57
+ ];
58
+
59
+ service.getDocumentTypes().subscribe((documentTypes) => {
60
+ expect(documentTypes).toEqual(mockDocumentTypes);
61
+ expect(documentStoreSpy.setDocumentTypes).toHaveBeenCalledWith(mockDocumentTypes);
62
+ });
63
+
64
+ const req = httpMock.expectOne(
65
+ `${appConfigServiceSpy.apiBaseUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.DOCUMENT_TYPES}`
66
+ );
67
+ expect(req.request.method).toBe('GET');
68
+ req.flush(mockDocumentTypes); // Mock the response with data
69
+ });
70
+
71
+
72
+
73
+ it('should fetch folders data and update the store', () => {
74
+ const contextId = 'someContextId';
75
+ const mockFolderData: FolderBlockModel[] = [
76
+ { _id: '1', folderName: 'Folder 1' },
77
+ { _id: '2', folderName: 'Folder 2' }
78
+ ];
79
+
80
+ service.getFoldersData(contextId).subscribe((foldersData) => {
81
+ expect(foldersData).toEqual(mockFolderData);
82
+ expect(documentStoreSpy.setFolders).toHaveBeenCalledWith(mockFolderData); // ✅ Corrected method
83
+ });
84
+
85
+ const req = httpMock.expectOne(
86
+ `${appConfigServiceSpy.apiBaseUrl}${URLS.DOCUMENT_UPLOAD}${URLS.FOLDERS}${contextId}`
87
+ );
88
+ expect(req.request.method).toBe('GET');
89
+ req.flush(mockFolderData);
90
+ });
91
+
92
+ afterEach(() => {
93
+ httpMock.verify();
94
+ });
95
+
96
+ it('should update document name successfully', () => {
97
+ const documentId = '123';
98
+ const payload = { fileName: 'New Document Name' };
99
+ const mockUpdatedDocument: DocumentModel = {
100
+ _id: documentId,
101
+ fileName: 'New Document Name'
102
+ } as DocumentModel;
103
+
104
+ service.updateDocumentName(documentId, payload).subscribe((updatedDoc) => {
105
+ expect(updatedDoc).toEqual(jasmine.objectContaining(mockUpdatedDocument));
106
+ });
107
+
108
+ const req = httpMock.expectOne(
109
+ `${appConfigServiceSpy.apiBaseUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`
110
+ );
111
+ expect(req.request.method).toBe('PUT');
112
+ expect(req.request.body).toEqual(payload);
113
+ req.flush(mockUpdatedDocument);
114
+ });
115
+
116
+ afterEach(() => {
117
+ httpMock.verify();
118
+ });
119
+ });