cat-documents-ng 1.0.4 → 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 (210) hide show
  1. package/ng-package.json +10 -0
  2. package/package.json +5 -11
  3. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.html +3 -0
  4. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.scss +13 -0
  5. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.spec.ts +70 -0
  6. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.ts +133 -0
  7. package/src/Shared/components/table-primary/table-primary.component.html +66 -0
  8. package/src/Shared/components/table-primary/table-primary.component.scss +227 -0
  9. package/src/Shared/components/table-primary/table-primary.component.spec.ts +23 -0
  10. package/src/Shared/components/table-primary/table-primary.component.ts +143 -0
  11. package/src/Shared/components/table-primary/table-primary.model.ts +21 -0
  12. package/src/Shared/constant/ERROR.ts +55 -0
  13. package/src/Shared/constant/PERMISSIONS.ts +17 -0
  14. package/src/Shared/constant/SHARED.ts +936 -0
  15. package/{Shared/constant/URLS.d.ts → src/Shared/constant/URLS.ts} +31 -25
  16. package/src/Shared/services/app-config.service.spec.ts +19 -0
  17. package/src/Shared/services/app-config.service.ts +73 -0
  18. package/{Shared/services/global-error.handler.d.ts → src/Shared/services/global-error.handler.ts} +11 -9
  19. package/src/Shared/services/session.service.spec.ts +16 -0
  20. package/src/Shared/services/session.service.ts +76 -0
  21. package/src/Shared/shared.module.ts +25 -0
  22. package/src/lib/document/components/csv-viewer/csv-viewer.component.ts +1 -0
  23. package/src/lib/document/components/document-actions/document-actions.component.html +59 -0
  24. package/src/lib/document/components/document-actions/document-actions.component.scss +362 -0
  25. package/src/lib/document/components/document-actions/document-actions.component.spec.ts +297 -0
  26. package/src/lib/document/components/document-actions/document-actions.component.ts +163 -0
  27. package/src/lib/document/components/document-container/document-container.component.html +36 -0
  28. package/src/lib/document/components/document-container/document-container.component.scss +144 -0
  29. package/src/lib/document/components/document-container/document-container.component.spec.ts +110 -0
  30. package/src/lib/document/components/document-container/document-container.component.ts +363 -0
  31. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.html +332 -0
  32. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.scss +1877 -0
  33. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.spec.ts +258 -0
  34. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.ts +664 -0
  35. package/src/lib/document/components/document-history/document-history.component.html +96 -0
  36. package/src/lib/document/components/document-history/document-history.component.scss +392 -0
  37. package/src/lib/document/components/document-history/document-history.component.spec.ts +93 -0
  38. package/src/lib/document/components/document-history/document-history.component.ts +373 -0
  39. package/src/lib/document/components/document-list/document-list.component.html +46 -0
  40. package/src/lib/document/components/document-list/document-list.component.scss +513 -0
  41. package/src/lib/document/components/document-list/document-list.component.spec.ts +486 -0
  42. package/src/lib/document/components/document-list/document-list.component.ts +682 -0
  43. package/src/lib/document/components/document-list-item/document-list-item.component.html +36 -0
  44. package/src/lib/document/components/document-list-item/document-list-item.component.scss +34 -0
  45. package/src/lib/document/components/document-list-item/document-list-item.component.spec.ts +75 -0
  46. package/src/lib/document/components/document-list-item/document-list-item.component.ts +40 -0
  47. package/src/lib/document/components/document-search/document-search.component.html +64 -0
  48. package/src/lib/document/components/document-search/document-search.component.scss +206 -0
  49. package/src/lib/document/components/document-search/document-search.component.spec.ts +82 -0
  50. package/src/lib/document/components/document-search/document-search.component.ts +163 -0
  51. package/src/lib/document/components/document-status/document-status.component.html +31 -0
  52. package/src/lib/document/components/document-status/document-status.component.scss +192 -0
  53. package/src/lib/document/components/document-status/document-status.component.spec.ts +23 -0
  54. package/src/lib/document/components/document-status/document-status.component.ts +87 -0
  55. package/src/lib/document/components/document-upload/document-upload.component.html +160 -0
  56. package/src/lib/document/components/document-upload/document-upload.component.scss +235 -0
  57. package/src/lib/document/components/document-upload/document-upload.component.spec.ts +95 -0
  58. package/src/lib/document/components/document-upload/document-upload.component.ts +668 -0
  59. package/src/lib/document/components/document-viewer/document-viewer.component.html +50 -0
  60. package/src/lib/document/components/document-viewer/document-viewer.component.scss +187 -0
  61. package/src/lib/document/components/document-viewer/document-viewer.component.spec.ts +79 -0
  62. package/src/lib/document/components/document-viewer/document-viewer.component.ts +261 -0
  63. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.html +48 -0
  64. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.scss +320 -0
  65. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.spec.ts +59 -0
  66. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.ts +150 -0
  67. package/src/lib/document/components/documents-menu/documents-menu.component.html +44 -0
  68. package/src/lib/document/components/documents-menu/documents-menu.component.scss +363 -0
  69. package/src/lib/document/components/documents-menu/documents-menu.component.spec.ts +23 -0
  70. package/src/lib/document/components/documents-menu/documents-menu.component.ts +316 -0
  71. package/src/lib/document/components/folder-block/folder-block.component.html +46 -0
  72. package/src/lib/document/components/folder-block/folder-block.component.scss +9 -0
  73. package/src/lib/document/components/folder-block/folder-block.component.spec.ts +70 -0
  74. package/{lib/document/components/folder-block/folder-block.component.d.ts → src/lib/document/components/folder-block/folder-block.component.ts} +28 -12
  75. package/src/lib/document/components/folder-container/folder-container.component.html +56 -0
  76. package/src/lib/document/components/folder-container/folder-container.component.scss +20 -0
  77. package/src/lib/document/components/folder-container/folder-container.component.spec.ts +27 -0
  78. package/src/lib/document/components/folder-container/folder-container.component.ts +328 -0
  79. package/src/lib/document/components/linked-document/linked-document.component.html +23 -0
  80. package/src/lib/document/components/linked-document/linked-document.component.scss +10 -0
  81. package/src/lib/document/components/linked-document/linked-document.component.spec.ts +61 -0
  82. package/src/lib/document/components/linked-document/linked-document.component.ts +49 -0
  83. package/src/lib/document/components/request-document/request-document.component.html +86 -0
  84. package/src/lib/document/components/request-document/request-document.component.scss +16 -0
  85. package/src/lib/document/components/request-document/request-document.component.ts +278 -0
  86. package/src/lib/document/components/sidebar/sidebar.component.html +75 -0
  87. package/src/lib/document/components/sidebar/sidebar.component.scss +157 -0
  88. package/src/lib/document/components/sidebar/sidebar.component.spec.ts +114 -0
  89. package/src/lib/document/components/sidebar/sidebar.component.ts +223 -0
  90. package/src/lib/document/components/user-list/user-list.component.html +33 -0
  91. package/src/lib/document/components/user-list/user-list.component.scss +118 -0
  92. package/src/lib/document/components/user-list/user-list.component.spec.ts +23 -0
  93. package/src/lib/document/components/user-list/user-list.component.ts +181 -0
  94. package/src/lib/document/constant/DOCUMENT_HISTORY.ts +52 -0
  95. package/src/lib/document/directives/document.directive.ts +32 -0
  96. package/src/lib/document/directives/permission.directive.spec.ts +0 -0
  97. package/src/lib/document/directives/permission.directive.ts +72 -0
  98. package/src/lib/document/document.module.ts +351 -0
  99. package/{lib/document/models/document-alert.model.d.ts → src/lib/document/models/document-alert.model.ts} +11 -4
  100. package/src/lib/document/models/document-category.model.ts +30 -0
  101. package/src/lib/document/models/document-history.model.ts +109 -0
  102. package/src/lib/document/models/document-list-response.model.ts +37 -0
  103. package/src/lib/document/models/document-type.model.ts +44 -0
  104. package/src/lib/document/models/document.model.ts +53 -0
  105. package/{lib/document/models/folder.model.d.ts → src/lib/document/models/folder.model.ts} +10 -4
  106. package/src/lib/document/models/status-data.model.ts +31 -0
  107. package/src/lib/document/models/uploaded-file-response.model.ts +7 -0
  108. package/src/lib/document/models/user-list.model.ts +10 -0
  109. package/src/lib/document/services/csv-parser.service.spec.ts +97 -0
  110. package/src/lib/document/services/csv-parser.service.ts +303 -0
  111. package/src/lib/document/services/document-actions.service.ts +125 -0
  112. package/src/lib/document/services/document-content-type.service.ts +193 -0
  113. package/src/lib/document/services/document-history-style.service.ts +138 -0
  114. package/src/lib/document/services/document-history.service.ts +129 -0
  115. package/src/lib/document/services/document-http.service.spec.ts +119 -0
  116. package/src/lib/document/services/document-http.service.ts +497 -0
  117. package/src/lib/document/services/document-list.service.ts +195 -0
  118. package/src/lib/document/services/document-menu.service.ts +277 -0
  119. package/src/lib/document/services/document-scroll.service.ts +138 -0
  120. package/src/lib/document/services/document-severity.service.ts +98 -0
  121. package/src/lib/document/services/document-table-builder.service.ts +82 -0
  122. package/src/lib/document/services/document-upload-business.service.ts +326 -0
  123. package/src/lib/document/services/document-upload-data.service.ts +82 -0
  124. package/src/lib/document/services/document-upload-form.service.ts +149 -0
  125. package/src/lib/document/services/document-upload.service.spec.ts +99 -0
  126. package/src/lib/document/services/document-upload.service.ts +209 -0
  127. package/src/lib/document/services/document-viewer.service.ts +279 -0
  128. package/src/lib/document/services/document-zoom.service.spec.ts +56 -0
  129. package/src/lib/document/services/document-zoom.service.ts +164 -0
  130. package/src/lib/document/services/document.service.ts +356 -0
  131. package/src/lib/document/services/eml-parser.service.ts +444 -0
  132. package/src/lib/document/services/excel-parser.service.spec.ts +66 -0
  133. package/src/lib/document/services/excel-parser.service.ts +483 -0
  134. package/src/lib/document/services/file-format.service.spec.ts +16 -0
  135. package/src/lib/document/services/file-format.service.ts +63 -0
  136. package/src/lib/document/services/status-calculator.service.ts +44 -0
  137. package/src/lib/document/services/user-list.service.ts +77 -0
  138. package/src/lib/document/state/document.query.ts +378 -0
  139. package/{lib/document/state/document.service.d.ts → src/lib/document/state/document.service.ts} +46 -15
  140. package/src/lib/document/state/document.state.ts +100 -0
  141. package/src/lib/document/state/document.store.ts +200 -0
  142. package/{public-api.d.ts → src/public-api.ts} +4 -0
  143. package/tsconfig.lib.json +15 -0
  144. package/tsconfig.lib.prod.json +11 -0
  145. package/tsconfig.spec.json +15 -0
  146. package/Shared/components/confirmation-dialog/confirmation-dialog.component.d.ts +0 -44
  147. package/Shared/components/table-primary/table-primary.component.d.ts +0 -31
  148. package/Shared/components/table-primary/table-primary.model.d.ts +0 -19
  149. package/Shared/constant/ERROR.d.ts +0 -52
  150. package/Shared/constant/SHARED.d.ts +0 -546
  151. package/Shared/services/app-config.service.d.ts +0 -51
  152. package/Shared/services/session.service.d.ts +0 -46
  153. package/Shared/shared.module.d.ts +0 -14
  154. package/fesm2022/cat-documents-ng.mjs +0 -11392
  155. package/fesm2022/cat-documents-ng.mjs.map +0 -1
  156. package/index.d.ts +0 -5
  157. package/lib/document/components/document-actions/document-actions.component.d.ts +0 -78
  158. package/lib/document/components/document-container/document-container.component.d.ts +0 -162
  159. package/lib/document/components/document-content-viewer/document-content-viewer.component.d.ts +0 -291
  160. package/lib/document/components/document-history/document-history.component.d.ts +0 -160
  161. package/lib/document/components/document-list/document-list.component.d.ts +0 -299
  162. package/lib/document/components/document-list-item/document-list-item.component.d.ts +0 -28
  163. package/lib/document/components/document-search/document-search.component.d.ts +0 -77
  164. package/lib/document/components/document-status/document-status.component.d.ts +0 -24
  165. package/lib/document/components/document-upload/document-upload.component.d.ts +0 -321
  166. package/lib/document/components/document-viewer/document-viewer.component.d.ts +0 -137
  167. package/lib/document/components/document-zoom-controls/document-zoom-controls.component.d.ts +0 -33
  168. package/lib/document/components/documents-menu/documents-menu.component.d.ts +0 -110
  169. package/lib/document/components/folder-container/folder-container.component.d.ts +0 -162
  170. package/lib/document/components/linked-document/linked-document.component.d.ts +0 -39
  171. package/lib/document/components/request-document/request-document.component.d.ts +0 -69
  172. package/lib/document/components/sidebar/sidebar.component.d.ts +0 -109
  173. package/lib/document/components/user-list/user-list.component.d.ts +0 -34
  174. package/lib/document/constant/DOCUMENT_HISTORY.d.ts +0 -41
  175. package/lib/document/directives/document.directive.d.ts +0 -20
  176. package/lib/document/directives/permission.directive.d.ts +0 -38
  177. package/lib/document/document.module.d.ts +0 -60
  178. package/lib/document/models/document-category.model.d.ts +0 -24
  179. package/lib/document/models/document-history.model.d.ts +0 -94
  180. package/lib/document/models/document-list-response.model.d.ts +0 -33
  181. package/lib/document/models/document-type.model.d.ts +0 -37
  182. package/lib/document/models/document.model.d.ts +0 -44
  183. package/lib/document/models/status-data.model.d.ts +0 -27
  184. package/lib/document/models/uploaded-file-response.model.d.ts +0 -7
  185. package/lib/document/models/user-list.model.d.ts +0 -8
  186. package/lib/document/services/csv-parser.service.d.ts +0 -88
  187. package/lib/document/services/document-actions.service.d.ts +0 -48
  188. package/lib/document/services/document-content-type.service.d.ts +0 -85
  189. package/lib/document/services/document-history-style.service.d.ts +0 -34
  190. package/lib/document/services/document-history.service.d.ts +0 -42
  191. package/lib/document/services/document-http.service.d.ts +0 -179
  192. package/lib/document/services/document-list.service.d.ts +0 -74
  193. package/lib/document/services/document-menu.service.d.ts +0 -122
  194. package/lib/document/services/document-scroll.service.d.ts +0 -55
  195. package/lib/document/services/document-table-builder.service.d.ts +0 -38
  196. package/lib/document/services/document-upload-business.service.d.ts +0 -107
  197. package/lib/document/services/document-upload-data.service.d.ts +0 -40
  198. package/lib/document/services/document-upload-form.service.d.ts +0 -41
  199. package/lib/document/services/document-upload.service.d.ts +0 -99
  200. package/lib/document/services/document-viewer.service.d.ts +0 -97
  201. package/lib/document/services/document-zoom.service.d.ts +0 -81
  202. package/lib/document/services/document.service.d.ts +0 -161
  203. package/lib/document/services/eml-parser.service.d.ts +0 -116
  204. package/lib/document/services/excel-parser.service.d.ts +0 -169
  205. package/lib/document/services/file-format.service.d.ts +0 -34
  206. package/lib/document/services/status-calculator.service.d.ts +0 -20
  207. package/lib/document/services/user-list.service.d.ts +0 -29
  208. package/lib/document/state/document.query.d.ts +0 -243
  209. package/lib/document/state/document.state.d.ts +0 -61
  210. 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
+ });