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,362 @@
1
+ .document-actions-container {
2
+ margin: 0;
3
+ }
4
+
5
+ .actions-card {
6
+ border-radius: 8px;
7
+ padding: 0.75rem;
8
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
9
+ transition: all 0.3s ease;
10
+ width: 92%;
11
+ margin-left: 3%;
12
+
13
+ &.pending-card {
14
+ background-color: #f8f9fa;
15
+ border: 1px solid #e9ecef;
16
+ }
17
+
18
+ &.accepted-card {
19
+ background-color: #e8f5e9;
20
+ border: 1px solid #66bb6a;
21
+ }
22
+
23
+ &.rejected-card {
24
+ background-color: #feeaea;
25
+ border: 1px solid #e57373;
26
+ }
27
+
28
+ // StatusId-based card styles
29
+ &[class*="status-"] {
30
+ &.status-approved-card {
31
+ background-color: #e8f5e9;
32
+ border: 1px solid #66bb6a;
33
+ }
34
+
35
+ &.status-rejected-card {
36
+ background-color: #feeaea;
37
+ border: 1px solid #e57373;
38
+ }
39
+
40
+ &.status-pending-card {
41
+ background-color: #f8f9fa;
42
+ border: 1px solid #e9ecef;
43
+ }
44
+ }
45
+ }
46
+
47
+
48
+
49
+ .actions-buttons {
50
+ display: flex;
51
+ gap: 0.5rem;
52
+ align-items: center;
53
+ }
54
+
55
+ .action-btn {
56
+ padding: 0.5rem 1rem;
57
+ border-radius: 6px;
58
+ border: 1px solid;
59
+ font-weight: 500;
60
+ cursor: pointer;
61
+ transition: all 0.2s ease;
62
+ display: flex;
63
+ align-items: center;
64
+ gap: 0.5rem;
65
+ min-width: 48%;
66
+ justify-content: center;
67
+
68
+ &:disabled {
69
+ opacity: 0.6;
70
+ cursor: not-allowed;
71
+ }
72
+
73
+ i {
74
+ font-size: 0.875rem;
75
+ }
76
+ }
77
+
78
+ // Reject button styles
79
+ .reject-btn {
80
+ &.default-reject {
81
+ background-color: #ffffff;
82
+ border-color: #ef4444;
83
+ color: #ef4444;
84
+
85
+ &:hover:not(:disabled) {
86
+ background-color: #fef2f2;
87
+ border-color: #dc2626;
88
+ }
89
+ }
90
+
91
+ &.secondary-reject {
92
+ background-color: #f5f5f5;
93
+ border-color: transparent;
94
+ color: #4a4a4a;
95
+
96
+ &:hover:not(:disabled) {
97
+ background-color: #edf2f7;
98
+ }
99
+ }
100
+
101
+ &.primary-reject {
102
+ background-color: #feeaea;
103
+ border-color: #e57373;
104
+ color: #e57373;
105
+
106
+ &:hover:not(:disabled) {
107
+ background-color: #fed7d7;
108
+ border-color: #fc8181;
109
+ }
110
+ }
111
+
112
+ // StatusId-based reject button styles
113
+ &[class*="status-"] {
114
+ &.status-approved-reject {
115
+ background-color: #f5f5f5;
116
+ border-color: transparent;
117
+ color: #4a4a4a;
118
+
119
+ &:hover:not(:disabled) {
120
+ background-color: #edf2f7;
121
+ }
122
+ }
123
+
124
+ &.status-rejected-reject {
125
+ background-color: #feeaea;
126
+ border-color: #e57373;
127
+ color: #e57373;
128
+
129
+ &:hover:not(:disabled) {
130
+ background-color: #fed7d7;
131
+ border-color: #fc8181;
132
+ }
133
+ }
134
+
135
+ &.status-pending-reject {
136
+ background-color: #ffffff;
137
+ border-color: #ef4444;
138
+ color: #ef4444;
139
+
140
+ &:hover:not(:disabled) {
141
+ background-color: #fef2f2;
142
+ border-color: #dc2626;
143
+ }
144
+ }
145
+ }
146
+ }
147
+
148
+ // Accept button styles
149
+ .accept-btn {
150
+ &.default-accept {
151
+ background-color: #3b82f6;
152
+ border-color: #3b82f6;
153
+ color: #ffffff;
154
+
155
+ &:hover:not(:disabled) {
156
+ background-color: #2563eb;
157
+ border-color: #2563eb;
158
+ }
159
+ }
160
+
161
+ &.secondary-accept {
162
+ background-color: #f5f5f5;
163
+ border-color: transparent;
164
+ color: #4a4a4a;
165
+
166
+ &:hover:not(:disabled) {
167
+ background-color: #edf2f7;
168
+ }
169
+ }
170
+
171
+ &.primary-accept {
172
+ background-color: #4caf50;
173
+ border-color: #4caf50;
174
+ color: white;
175
+
176
+ &:hover:not(:disabled) {
177
+ background-color: #45a049;
178
+ border-color: #45a049;
179
+ }
180
+ }
181
+
182
+ // StatusId-based accept button styles
183
+ &[class*="status-"] {
184
+ &.status-approved-accept {
185
+ background-color: #4caf50;
186
+ border-color: #4caf50;
187
+ color: white;
188
+
189
+ &:hover:not(:disabled) {
190
+ background-color: #45a049;
191
+ border-color: #45a049;
192
+ }
193
+ }
194
+
195
+ &.status-rejected-accept {
196
+ background-color: #f5f5f5;
197
+ border-color: transparent;
198
+ color: #4a4a4a;
199
+
200
+ &:hover:not(:disabled) {
201
+ background-color: #edf2f7;
202
+ }
203
+ }
204
+
205
+ &.status-pending-accept {
206
+ background-color: #3b82f6;
207
+ border-color: #3b82f6;
208
+ color: #ffffff;
209
+
210
+ &:hover:not(:disabled) {
211
+ background-color: #2563eb;
212
+ border-color: #2563eb;
213
+ }
214
+ }
215
+ }
216
+ }
217
+
218
+
219
+
220
+ // Dialog styles
221
+ :host ::ng-deep .confirmation-dialog {
222
+ .p-dialog {
223
+ border-radius: 8px;
224
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
225
+ border: none;
226
+ overflow: hidden;
227
+ }
228
+
229
+ .p-dialog-header {
230
+ padding: 1.25rem 1.5rem;
231
+ background-color: white;
232
+ border-bottom: none;
233
+ border-top-right-radius:10px ;
234
+ border-top-left-radius:10px ;
235
+ .p-dialog-header-icon {
236
+ display: none;
237
+ }
238
+
239
+ .p-dialog-title {
240
+ font-size: 1.125rem;
241
+ font-weight: 600;
242
+ color: #2d3748;
243
+ margin: 0;
244
+ }
245
+ }
246
+
247
+ .p-dialog-content {
248
+ padding: 1.5rem;
249
+ background-color: white;
250
+ }
251
+
252
+ .p-dialog-footer {
253
+ padding: 1rem 1.5rem;
254
+ background-color: #f7fafc;
255
+ border-top: 1px solid #e2e8f0;
256
+ display: flex;
257
+ gap: 0.75rem;
258
+ justify-content: flex-end;
259
+ border-bottom-right-radius:10px ;
260
+ border-bottom-left-radius:10px ;
261
+ }
262
+ }
263
+
264
+ .dialog-content {
265
+ .note-label {
266
+ display: block;
267
+ margin-bottom: 0.75rem;
268
+ font-weight: 500;
269
+ font-size: 0.875rem;
270
+ color: #2d3748;
271
+ }
272
+
273
+ .note-textarea {
274
+ width: 100%;
275
+ min-height: 100px;
276
+ padding: 0.75rem;
277
+ border: 1px solid #e2e8f0;
278
+ border-radius: 6px;
279
+ font-family: inherit;
280
+ font-size: 0.875rem;
281
+ line-height: 1.5;
282
+ resize: vertical;
283
+ background-color: white;
284
+ color: #2d3748;
285
+
286
+ &::placeholder {
287
+ color: #a0aec0;
288
+ }
289
+
290
+ &:focus {
291
+ outline: none;
292
+ border-color: #3182ce;
293
+ box-shadow: 0 0 0 3px rgba(49, 130, 206, 0.1);
294
+ }
295
+ }
296
+ }
297
+
298
+ .dialog-footer {
299
+ display: flex;
300
+ gap: 0.75rem;
301
+ justify-content: flex-end;
302
+
303
+ button {
304
+ min-width: 80px;
305
+ padding: 0.5rem 1rem;
306
+ border-radius: 6px;
307
+ font-weight: 500;
308
+ font-size: 0.875rem;
309
+ border: 1px solid;
310
+ cursor: pointer;
311
+ transition: all 0.2s ease;
312
+
313
+ &.p-button-secondary {
314
+ background-color: #f7fafc;
315
+ border-color: #e2e8f0;
316
+ color: #4a5568;
317
+
318
+ &:hover {
319
+ background-color: #edf2f7;
320
+ border-color: #cbd5e0;
321
+ }
322
+ }
323
+
324
+ &.p-button-success {
325
+ background-color: #38a169;
326
+ border-color: #38a169;
327
+ color: white;
328
+
329
+ &:hover {
330
+ background-color: #2f855a;
331
+ border-color: #2f855a;
332
+ }
333
+ }
334
+
335
+ &.p-button-danger {
336
+ background-color: #e53e3e;
337
+ border-color: #e53e3e;
338
+ color: white;
339
+
340
+ &:hover {
341
+ background-color: #c53030;
342
+ border-color: #c53030;
343
+ }
344
+ }
345
+ }
346
+ }
347
+
348
+ // No actions message styles
349
+ .no-actions-message {
350
+ display: flex;
351
+ align-items: center;
352
+ justify-content: center;
353
+ padding: 0.5rem;
354
+ min-height: 40px;
355
+
356
+ .no-actions-text {
357
+ color: #6b7280;
358
+ font-size: 0.875rem;
359
+ font-style: italic;
360
+ text-align: center;
361
+ }
362
+ }
@@ -0,0 +1,297 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { DocumentActionsComponent } from './document-actions.component';
3
+ import { DocumentActionsService, DocumentAction } from '../../services/document-actions.service';
4
+ import { DialogModule } from 'primeng/dialog';
5
+ import { ButtonModule } from 'primeng/button';
6
+ import { InputTextareaModule } from 'primeng/inputtextarea';
7
+ import { FormsModule } from '@angular/forms';
8
+ import { SHARED } from '../../../../Shared/constant/SHARED';
9
+ import { SessionService } from '../../../../Shared/services/session.service';
10
+
11
+ describe('DocumentActionsComponent', () => {
12
+ let component: DocumentActionsComponent;
13
+ let fixture: ComponentFixture<DocumentActionsComponent>;
14
+ let mockSessionService: jasmine.SpyObj<SessionService>;
15
+
16
+ beforeEach(async () => {
17
+ const sessionServiceSpy = jasmine.createSpyObj('SessionService', ['getUserRole']);
18
+
19
+ await TestBed.configureTestingModule({
20
+ declarations: [ DocumentActionsComponent ],
21
+ imports: [
22
+ DialogModule,
23
+ ButtonModule,
24
+ InputTextareaModule,
25
+ FormsModule
26
+ ],
27
+ providers: [
28
+ DocumentActionsService,
29
+ { provide: SessionService, useValue: sessionServiceSpy }
30
+ ]
31
+ })
32
+ .compileComponents();
33
+
34
+ fixture = TestBed.createComponent(DocumentActionsComponent);
35
+ component = fixture.componentInstance;
36
+ mockSessionService = TestBed.inject(SessionService) as jasmine.SpyObj<SessionService>;
37
+ fixture.detectChanges();
38
+ });
39
+
40
+ it('should create', () => {
41
+ expect(component).toBeTruthy();
42
+ });
43
+
44
+ it('should identify Team Leader role correctly', () => {
45
+ mockSessionService.getUserRole.and.returnValue('TeamLeader');
46
+ expect(component['isUserTeamLeader']()).toBe(true);
47
+
48
+ mockSessionService.getUserRole.and.returnValue('User');
49
+ expect(component['isUserTeamLeader']()).toBe(false);
50
+ });
51
+
52
+ it('should identify Underwriter role correctly', () => {
53
+ mockSessionService.getUserRole.and.returnValue('Underwriter User');
54
+ expect(component['isUserUnderwriter']()).toBe(true);
55
+
56
+ mockSessionService.getUserRole.and.returnValue('User');
57
+ expect(component['isUserUnderwriter']()).toBe(false);
58
+ });
59
+
60
+ it('should show accept dialog when accept button is clicked', () => {
61
+ component.showApproveRejectActions = true;
62
+ fixture.detectChanges();
63
+
64
+ const acceptButton = fixture.nativeElement.querySelector('.accept-btn');
65
+ acceptButton.click();
66
+ fixture.detectChanges();
67
+
68
+ expect(component.showAcceptDialog).toBe(true);
69
+ });
70
+
71
+ it('should show reject dialog when reject button is clicked', () => {
72
+ component.showApproveRejectActions = true;
73
+ fixture.detectChanges();
74
+
75
+ const rejectButton = fixture.nativeElement.querySelector('.reject-btn');
76
+ rejectButton.click();
77
+ fixture.detectChanges();
78
+
79
+ expect(component.showRejectDialog).toBe(true);
80
+ });
81
+
82
+ it('should emit action when accept is confirmed', () => {
83
+ spyOn(component.actionPerformed, 'emit');
84
+ component.acceptNote = 'Test acceptance note';
85
+
86
+ component.onAcceptConfirm();
87
+
88
+ expect(component.actionPerformed.emit).toHaveBeenCalledWith({
89
+ type: SHARED.ACCEPT_ACTION,
90
+ note: 'Test acceptance note'
91
+ });
92
+ expect(component.showAcceptDialog).toBe(false);
93
+ expect(component.acceptNote).toBe('');
94
+ });
95
+
96
+ it('should emit action when reject is confirmed', () => {
97
+ spyOn(component.actionPerformed, 'emit');
98
+ component.rejectNote = 'Test rejection note';
99
+
100
+ component.onRejectConfirm();
101
+
102
+ expect(component.actionPerformed.emit).toHaveBeenCalledWith({
103
+ type: SHARED.REJECT_ACTION,
104
+ note: 'Test rejection note'
105
+ });
106
+ expect(component.showRejectDialog).toBe(false);
107
+ expect(component.rejectNote).toBe('');
108
+ });
109
+
110
+ describe('Button disabled state', () => {
111
+ it('should disable both buttons when document is approved (lowercase)', () => {
112
+ component.currentStatus = SHARED.STATUS_ACCEPTED;
113
+ fixture.detectChanges();
114
+
115
+ expect(component.areButtonsDisabled).toBe(true);
116
+ expect(component.isDocumentApproved).toBe(true);
117
+ expect(component.isDocumentRejected).toBe(false);
118
+ });
119
+
120
+ it('should disable both buttons when document is approved (uppercase)', () => {
121
+ component.currentStatus = SHARED.STATUS_APPROVED;
122
+ fixture.detectChanges();
123
+
124
+ expect(component.areButtonsDisabled).toBe(true);
125
+ expect(component.isDocumentApproved).toBe(true);
126
+ expect(component.isDocumentRejected).toBe(false);
127
+ });
128
+
129
+ it('should disable both buttons when document is rejected (lowercase)', () => {
130
+ component.currentStatus = SHARED.STATUS_REJECTED_LOWERCASE;
131
+ fixture.detectChanges();
132
+
133
+ expect(component.areButtonsDisabled).toBe(true);
134
+ expect(component.isDocumentApproved).toBe(false);
135
+ expect(component.isDocumentRejected).toBe(true);
136
+ });
137
+
138
+ it('should disable both buttons when document is rejected (uppercase)', () => {
139
+ component.currentStatus = SHARED.STATUS_REJECTED;
140
+ fixture.detectChanges();
141
+
142
+ expect(component.areButtonsDisabled).toBe(true);
143
+ expect(component.isDocumentApproved).toBe(false);
144
+ expect(component.isDocumentRejected).toBe(true);
145
+ });
146
+
147
+ it('should enable both buttons when document is pending', () => {
148
+ component.currentStatus = SHARED.STATUS_PENDING;
149
+ fixture.detectChanges();
150
+
151
+ expect(component.areButtonsDisabled).toBe(false);
152
+ expect(component.isDocumentApproved).toBe(false);
153
+ expect(component.isDocumentRejected).toBe(false);
154
+ });
155
+
156
+ it('should handle undefined status gracefully', () => {
157
+ component.currentStatus = undefined;
158
+ fixture.detectChanges();
159
+
160
+ expect(component.areButtonsDisabled).toBe(false);
161
+ expect(component.isDocumentApproved).toBe(false);
162
+ expect(component.isDocumentRejected).toBe(false);
163
+ });
164
+ });
165
+
166
+ it('should emit delete action when delete button is clicked', () => {
167
+ spyOn(component.actionPerformed, 'emit');
168
+
169
+ component.onDeleteClick();
170
+
171
+ expect(component.actionPerformed.emit).toHaveBeenCalledWith({
172
+ type: SHARED.DELETE_ACTION
173
+ });
174
+ });
175
+
176
+ it('should close dialogs when cancel is clicked', () => {
177
+ component.showAcceptDialog = true;
178
+ component.showRejectDialog = true;
179
+ component.acceptNote = 'test';
180
+ component.rejectNote = 'test';
181
+
182
+ component.onCancel();
183
+
184
+ expect(component.showAcceptDialog).toBe(false);
185
+ expect(component.showRejectDialog).toBe(false);
186
+ expect(component.acceptNote).toBe('');
187
+ expect(component.rejectNote).toBe('');
188
+ });
189
+
190
+ it('should return correct card class based on status', () => {
191
+ component.currentStatus = SHARED.STATUS_PENDING;
192
+ component.ngOnChanges({});
193
+ expect(component.cardClass).toBe(SHARED.CARD_PENDING);
194
+
195
+ component.currentStatus = SHARED.STATUS_ACCEPTED;
196
+ component.ngOnChanges({});
197
+ expect(component.cardClass).toBe(SHARED.CARD_ACCEPTED);
198
+
199
+ component.currentStatus = SHARED.STATUS_REJECTED_LOWERCASE;
200
+ component.ngOnChanges({});
201
+ expect(component.cardClass).toBe(SHARED.CARD_REJECTED);
202
+ });
203
+
204
+ it('should return correct button classes based on status', () => {
205
+ component.currentStatus = SHARED.STATUS_PENDING;
206
+ component.ngOnChanges({});
207
+ expect(component.rejectButtonClass).toBe(SHARED.BUTTON_DEFAULT_REJECT);
208
+ expect(component.acceptButtonClass).toBe(SHARED.BUTTON_DEFAULT_ACCEPT);
209
+
210
+ component.currentStatus = SHARED.STATUS_ACCEPTED;
211
+ component.ngOnChanges({});
212
+ expect(component.rejectButtonClass).toBe(SHARED.BUTTON_SECONDARY_REJECT);
213
+ expect(component.acceptButtonClass).toBe(SHARED.BUTTON_PRIMARY_ACCEPT);
214
+
215
+ component.currentStatus = SHARED.STATUS_REJECTED_LOWERCASE;
216
+ component.ngOnChanges({});
217
+ expect(component.rejectButtonClass).toBe(SHARED.BUTTON_PRIMARY_REJECT);
218
+ expect(component.acceptButtonClass).toBe(SHARED.BUTTON_SECONDARY_ACCEPT);
219
+ });
220
+
221
+ describe('Action Visibility Logic', () => {
222
+ it('should show approve/reject actions when isUploaded is false', () => {
223
+ component.isUploaded = false;
224
+ component.currentStatus = SHARED.STATUS_PENDING;
225
+ mockSessionService.getUserRole.and.returnValue('User');
226
+
227
+ component.ngOnChanges({});
228
+
229
+ expect(component.showApproveRejectActions).toBe(true);
230
+ expect(component.showDeleteAction).toBe(false);
231
+ expect(component.showNoActions).toBe(false);
232
+ });
233
+
234
+ it('should show delete action when isUploaded is true and user is Team Leader', () => {
235
+ component.isUploaded = true;
236
+ component.currentStatus = SHARED.STATUS_ACCEPTED;
237
+ mockSessionService.getUserRole.and.returnValue('TeamLeader');
238
+
239
+ component.ngOnChanges({});
240
+
241
+ expect(component.showApproveRejectActions).toBe(false);
242
+ expect(component.showDeleteAction).toBe(true);
243
+ expect(component.showNoActions).toBe(false);
244
+ });
245
+
246
+ it('should show no actions when document is in pending status', () => {
247
+ component.isUploaded = false;
248
+ component.currentStatus = SHARED.STATUS_PENDING;
249
+ mockSessionService.getUserRole.and.returnValue('User');
250
+
251
+ component.ngOnChanges({});
252
+
253
+ expect(component.showApproveRejectActions).toBe(false);
254
+ expect(component.showDeleteAction).toBe(false);
255
+ expect(component.showNoActions).toBe(true);
256
+ });
257
+
258
+ it('should show no actions when document is uploaded by UW and user is not Team Leader', () => {
259
+ component.isUploaded = true;
260
+ component.currentStatus = SHARED.STATUS_ACCEPTED;
261
+ component.document = { uploadedBy: 'UW' };
262
+ mockSessionService.getUserRole.and.returnValue('User');
263
+
264
+ component.ngOnChanges({});
265
+
266
+ expect(component.showApproveRejectActions).toBe(false);
267
+ expect(component.showDeleteAction).toBe(false);
268
+ expect(component.showNoActions).toBe(true);
269
+ });
270
+
271
+ it('should show delete action when document is uploaded by UW and user is Team Leader', () => {
272
+ component.isUploaded = true;
273
+ component.currentStatus = SHARED.STATUS_ACCEPTED;
274
+ component.document = { uploadedBy: 'UW' };
275
+ mockSessionService.getUserRole.and.returnValue('TeamLeader');
276
+
277
+ component.ngOnChanges({});
278
+
279
+ expect(component.showApproveRejectActions).toBe(false);
280
+ expect(component.showDeleteAction).toBe(true);
281
+ expect(component.showNoActions).toBe(false);
282
+ });
283
+
284
+ it('should show no actions when document is uploaded by UW and user is Underwriter', () => {
285
+ component.isUploaded = true;
286
+ component.currentStatus = SHARED.STATUS_ACCEPTED;
287
+ component.document = { uploadedBy: 'UW' };
288
+ mockSessionService.getUserRole.and.returnValue('Underwriter User');
289
+
290
+ component.ngOnChanges({});
291
+
292
+ expect(component.showApproveRejectActions).toBe(false);
293
+ expect(component.showDeleteAction).toBe(false);
294
+ expect(component.showNoActions).toBe(true);
295
+ });
296
+ });
297
+ });