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,3 @@
1
+ <!-- This component no longer renders a p-confirmDialog element -->
2
+ <!-- The p-confirmDialog should be placed only once in the main app component -->
3
+ <!-- This component now only provides methods to trigger confirmations via ConfirmationService -->
@@ -0,0 +1,13 @@
1
+ // PrimeNG ConfirmDialog component handles all styling
2
+ // Custom styles are no longer needed
3
+ .btn-danger{
4
+ background-color: #ef4444;
5
+ color: #ffffff;
6
+ border-color: #e53e3e;
7
+ max-width: 100px;
8
+ }
9
+ .btn-secondary{
10
+ background-color: #f3f4f6;
11
+ color: black;
12
+ max-width: 100px;
13
+ }
@@ -0,0 +1,70 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { ConfirmationDialogComponent } from './confirmation-dialog.component';
3
+ import { ConfirmationService } from 'primeng/api';
4
+ import { ConfirmDialogModule } from 'primeng/confirmdialog';
5
+
6
+ describe('ConfirmationDialogComponent', () => {
7
+ let component: ConfirmationDialogComponent;
8
+ let fixture: ComponentFixture<ConfirmationDialogComponent>;
9
+ let confirmationService: jasmine.SpyObj<ConfirmationService>;
10
+
11
+ beforeEach(async () => {
12
+ const confirmationServiceSpy = jasmine.createSpyObj('ConfirmationService', ['confirm']);
13
+
14
+ await TestBed.configureTestingModule({
15
+ declarations: [ ConfirmationDialogComponent ],
16
+ imports: [ ConfirmDialogModule ],
17
+ providers: [
18
+ { provide: ConfirmationService, useValue: confirmationServiceSpy }
19
+ ]
20
+ })
21
+ .compileComponents();
22
+
23
+ confirmationService = TestBed.inject(ConfirmationService) as jasmine.SpyObj<ConfirmationService>;
24
+ });
25
+
26
+ beforeEach(() => {
27
+ fixture = TestBed.createComponent(ConfirmationDialogComponent);
28
+ component = fixture.componentInstance;
29
+ fixture.detectChanges();
30
+ });
31
+
32
+ it('should create', () => {
33
+ expect(component).toBeTruthy();
34
+ });
35
+
36
+ it('should call confirmationService.confirm when confirm method is called', () => {
37
+ const options = { message: 'Test message' };
38
+ const acceptCallback = () => {};
39
+ const rejectCallback = () => {};
40
+
41
+ component.confirm(options, acceptCallback, rejectCallback);
42
+
43
+ expect(confirmationService.confirm).toHaveBeenCalledWith(
44
+ jasmine.objectContaining({
45
+ message: 'Test message',
46
+ accept: acceptCallback,
47
+ reject: rejectCallback
48
+ })
49
+ );
50
+ });
51
+
52
+ it('should call confirmationService.confirm with delete options when confirmDelete is called', () => {
53
+ const itemName = 'Test Document';
54
+ const acceptCallback = () => {};
55
+ const rejectCallback = () => {};
56
+
57
+ component.confirmDelete(itemName, acceptCallback, rejectCallback);
58
+
59
+ expect(confirmationService.confirm).toHaveBeenCalledWith(
60
+ jasmine.objectContaining({
61
+ message: `Are you sure you want to delete "${itemName}"?`,
62
+ header: 'Delete Confirmation',
63
+ acceptLabel: 'Delete',
64
+ rejectLabel: 'Cancel',
65
+ accept: acceptCallback,
66
+ reject: rejectCallback
67
+ })
68
+ );
69
+ });
70
+ });
@@ -0,0 +1,133 @@
1
+ import { Component, Input, Injectable } from '@angular/core';
2
+ import { ConfirmationService, Confirmation } from 'primeng/api';
3
+
4
+ export interface ConfirmationOptions {
5
+ message: string;
6
+ header?: string;
7
+ icon?: string;
8
+ acceptLabel?: string;
9
+ rejectLabel?: string;
10
+ acceptIcon?: string;
11
+ rejectIcon?: string;
12
+ acceptButtonClass?: string;
13
+ rejectButtonClass?: string;
14
+ }
15
+
16
+ @Injectable({
17
+ providedIn: 'root'
18
+ })
19
+ @Component({
20
+ selector: 'app-confirmation-dialog',
21
+ templateUrl: './confirmation-dialog.component.html',
22
+ standalone: false,
23
+ styleUrls: ['./confirmation-dialog.component.scss']
24
+ })
25
+ export class ConfirmationDialogComponent {
26
+ @Input() confirmationOptions: ConfirmationOptions = {
27
+ message: 'Are you sure that you want to proceed?',
28
+ header: '',
29
+ icon: '',
30
+ acceptLabel: 'Yes',
31
+ rejectLabel: 'No',
32
+ acceptIcon: 'pi pi-check',
33
+ rejectIcon: 'pi pi-times',
34
+ acceptButtonClass: 'btn-danger',
35
+ rejectButtonClass: 'btn-secondary'
36
+ };
37
+
38
+ constructor(private confirmationService: ConfirmationService) {}
39
+
40
+ /**
41
+ * Shows the confirmation dialog with the specified options
42
+ * @param options - Configuration options for the confirmation dialog
43
+ * @param acceptCallback - Function to execute when user accepts
44
+ * @param rejectCallback - Function to execute when user rejects
45
+ */
46
+ confirm(
47
+ options: Partial<ConfirmationOptions>,
48
+ acceptCallback: () => void,
49
+ rejectCallback?: () => void
50
+ ): void {
51
+ const confirmation: Confirmation = {
52
+ message: options.message || this.confirmationOptions.message,
53
+ header: options.header || this.confirmationOptions.header,
54
+ icon: options.icon || this.confirmationOptions.icon,
55
+ acceptLabel: options.acceptLabel || this.confirmationOptions.acceptLabel,
56
+ rejectLabel: options.rejectLabel || this.confirmationOptions.rejectLabel,
57
+ acceptIcon: options.acceptIcon || this.confirmationOptions.acceptIcon,
58
+ rejectIcon: options.rejectIcon || this.confirmationOptions.rejectIcon,
59
+ accept: acceptCallback,
60
+ reject: rejectCallback
61
+ };
62
+
63
+ this.confirmationService.confirm(confirmation);
64
+ }
65
+
66
+
67
+ /**
68
+ * Static method to show a confirmation dialog (for components that don't want to inject this component)
69
+ * @param confirmationService - The ConfirmationService instance
70
+ * @param options - Configuration options for the confirmation dialog
71
+ * @param acceptCallback - Function to execute when user accepts
72
+ * @param rejectCallback - Function to execute when user rejects
73
+ */
74
+ static confirm(
75
+ confirmationService: ConfirmationService,
76
+ options: Partial<ConfirmationOptions>,
77
+ acceptCallback: () => void,
78
+ rejectCallback?: () => void
79
+ ): void {
80
+ const defaultOptions: ConfirmationOptions = {
81
+ message: 'Are you sure that you want to proceed?',
82
+ header: '',
83
+ icon: '',
84
+ acceptLabel: 'Yes',
85
+ rejectLabel: 'No',
86
+ acceptIcon: 'pi pi-check',
87
+ rejectIcon: 'pi pi-times',
88
+ acceptButtonClass: 'btn-success',
89
+ rejectButtonClass: 'btn-secondary'
90
+ };
91
+
92
+ const confirmation: Confirmation = {
93
+ message: options.message || defaultOptions.message,
94
+ header: options.header || defaultOptions.header,
95
+ icon: options.icon || defaultOptions.icon,
96
+ acceptLabel: options.acceptLabel || defaultOptions.acceptLabel,
97
+ rejectLabel: options.rejectLabel || defaultOptions.rejectLabel,
98
+ acceptIcon: options.acceptIcon || defaultOptions.acceptIcon,
99
+ rejectIcon: options.rejectIcon || defaultOptions.rejectIcon,
100
+ accept: acceptCallback,
101
+ reject: rejectCallback
102
+ };
103
+
104
+ confirmationService.confirm(confirmation);
105
+ }
106
+
107
+ /**
108
+ * Static method to show a delete confirmation dialog
109
+ * @param confirmationService - The ConfirmationService instance
110
+ * @param itemName - Name of the item to be deleted
111
+ * @param acceptCallback - Function to execute when user accepts deletion
112
+ * @param rejectCallback - Function to execute when user rejects deletion
113
+ */
114
+ static confirmDelete(
115
+ confirmationService: ConfirmationService,
116
+ itemName: string,
117
+ acceptCallback: () => void,
118
+ rejectCallback?: () => void
119
+ ): void {
120
+ ConfirmationDialogComponent.confirm(
121
+ confirmationService,
122
+ {
123
+ message: `Are you sure you want to delete "${itemName}"?`,
124
+ header: 'Delete Confirmation',
125
+ acceptLabel: 'Delete',
126
+ rejectLabel: 'Cancel',
127
+ acceptButtonClass: 'btn-danger'
128
+ },
129
+ acceptCallback,
130
+ rejectCallback
131
+ );
132
+ }
133
+ }
@@ -0,0 +1,66 @@
1
+ <div class="table-primary">
2
+ <p-table [value]="processedData" [tableStyle]="tableStyle">
3
+ <ng-template pTemplate="header" *ngIf="showHeader">
4
+ <tr>
5
+ <ng-container *ngFor="let col of visibleColumns">
6
+ <th [style.width]="col.width">
7
+ {{ col.header }}
8
+ </th>
9
+ </ng-container>
10
+ </tr>
11
+ </ng-template>
12
+ <ng-template pTemplate="body" let-rowData>
13
+ <tr (click)="onRowClick($event, rowData)" class="clickable-row">
14
+ <ng-container *ngFor="let col of visibleColumns">
15
+ <td [style.width]="col.width">
16
+ <!-- Document Cell -->
17
+ <div *ngIf="col.type === SHARED.CELL_TYPE_DOCUMENT" class="document-cell">
18
+ <div class="document-info">
19
+ <div class="document-icon">
20
+ <i [class]="SHARED.ICON_FILE_PDF" *ngIf="rowData._isPdfFile"></i>
21
+ <i [class]="SHARED.ICON_IMAGE" *ngIf="rowData._isImageFile"></i>
22
+ <i [class]="SHARED.ICON_FILE_EXCEL" *ngIf="rowData._isExcelFile"></i>
23
+ <i [class]="SHARED.ICON_FILE" *ngIf="rowData._isOtherFile"></i>
24
+ </div>
25
+ <div class="document-details">
26
+ <div class="document-name" [innerHTML]="formatDocumentDisplayName(rowData)"></div>
27
+ </div>
28
+ </div>
29
+ </div>
30
+
31
+ <!-- Status Cell -->
32
+
33
+ <div *ngIf="col.type === SHARED.CELL_TYPE_STATUS" class="status-cell">
34
+ <span class="status-pill" [ngClass]="rowData._statusClass">
35
+ <i [class]="rowData._statusIcon"></i>
36
+ {{ rowData[col.field] }}
37
+ </span>
38
+ </div>
39
+
40
+ <!-- Actions Cell -->
41
+ <div *ngIf="col.type === SHARED.CELL_TYPE_ACTIONS" class="actions-cell">
42
+ <!-- Actions content can be added here if needed -->
43
+ </div>
44
+
45
+ <!-- Default Text Cell -->
46
+ <div *ngIf="!col.type || col.type === SHARED.CELL_TYPE_TEXT" class="text-cell">
47
+ {{ rowData[col.field] }}
48
+ </div>
49
+ </td>
50
+ </ng-container>
51
+ </tr>
52
+ </ng-template>
53
+
54
+ <!-- No Records Template -->
55
+ <ng-template pTemplate="emptymessage">
56
+ <tr>
57
+ <td [attr.colspan]="getVisibleColumnCount()" class="no-records-cell">
58
+ <div class="no-records-content">
59
+ <i class="pi pi-inbox" style="font-size: 2rem; color: #6c757d;"></i>
60
+ <p class="no-records-text">No records found</p>
61
+ </div>
62
+ </td>
63
+ </tr>
64
+ </ng-template>
65
+ </p-table>
66
+ </div>
@@ -0,0 +1,227 @@
1
+ // Document table styles
2
+ .document-cell {
3
+ .document-info {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: 0.75rem;
7
+ text-align: left; // Ensure left alignment
8
+
9
+ .document-icon {
10
+ width: 40px;
11
+ height: 40px;
12
+ background-color: #e3f2fd;
13
+ border-radius: 6px;
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ color: #1976d2;
18
+ font-size: 1.25rem;
19
+ flex-shrink: 0; // Prevent icon from shrinking
20
+ }
21
+
22
+ .document-details {
23
+ flex: 1; // Take remaining space
24
+ min-width: 0; // Allow text to wrap if needed
25
+
26
+ .document-name {
27
+ font-weight: 400;
28
+ color: #334155;
29
+ line-height: 18px;
30
+ font-size: 14px;
31
+ text-align: left;
32
+ word-break: break-word;
33
+
34
+ // Style for multi-line document names
35
+ br {
36
+ margin-bottom: 0.125rem;
37
+ }
38
+
39
+ // Alias name styling (first line)
40
+ .alias-name {
41
+ font-weight: 500;
42
+ color: #1e40af;
43
+ font-size: 13px;
44
+ line-height: 16px;
45
+ }
46
+
47
+ // Document info styling (second line)
48
+ .document-info {
49
+ font-weight: 400;
50
+ color: #334155;
51
+ font-size: 14px;
52
+ line-height: 18px;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+ .status-cell {
60
+ .status-pill {
61
+ display: inline-flex;
62
+ align-items: center;
63
+ justify-content: center; // Center content within the pill
64
+ gap: 0.375rem;
65
+ padding: 0.375rem 0.75rem;
66
+ border-radius: 20px;
67
+ font-size: 0.75rem;
68
+ font-weight: 500;
69
+ white-space: nowrap;
70
+ min-width: 80px; // Ensure consistent pill width
71
+
72
+ i {
73
+ font-size: 0.875rem;
74
+ }
75
+
76
+ &.status-pending {
77
+ background-color: #f3f4f6;
78
+ color: #6b7280;
79
+ }
80
+
81
+ &.status-approved {
82
+ background-color: #d1fae5;
83
+ color: #065f46;
84
+ }
85
+
86
+ &.status-alert {
87
+ background-color: #fee2e2;
88
+ color: #dc2626;
89
+ }
90
+
91
+ &.status-uploaded {
92
+ background-color: #d1fae5;
93
+ color: #065f46;
94
+ }
95
+
96
+ &.status-reviewing {
97
+ background-color: #fef3c7;
98
+ color: #d97706;
99
+ }
100
+
101
+ &.status-rejected {
102
+ background-color: #fee2e2;
103
+ color: #dc2626;
104
+ }
105
+ }
106
+ }
107
+
108
+ .actions-cell {
109
+ text-align: left; // Changed from center to left to match design
110
+
111
+ .p-button {
112
+ width: 2rem;
113
+ height: 2rem;
114
+ border-radius: 50%;
115
+ background-color: transparent;
116
+ border: none;
117
+ color: #6c757d;
118
+
119
+ &:hover {
120
+ background-color: #f8f9fa;
121
+ color: #495057;
122
+ }
123
+ }
124
+ }
125
+
126
+ .text-cell {
127
+ font-weight: 500;
128
+ color: #475569;
129
+ font-size: 14px;
130
+ line-height: 20px;
131
+ text-align: left; // Ensure left alignment
132
+ }
133
+
134
+ // Clickable row styles
135
+ .clickable-row {
136
+ cursor: pointer;
137
+ transition: background-color 0.2s ease;
138
+
139
+ &:hover {
140
+ background-color: #f8f9fa !important;
141
+ }
142
+
143
+ &:active {
144
+ background-color: #e9ecef !important;
145
+ }
146
+ }
147
+
148
+ // Table styling
149
+ ::ng-deep .p-datatable {
150
+
151
+ .p-datatable-wrapper {
152
+ // border: none;
153
+ border: 1px solid #E2E8F0;
154
+ border-radius: 10px;
155
+ }
156
+
157
+ .p-datatable-thead > tr > th {
158
+ background-color: #f8f9fa;
159
+ border: none;
160
+ border-bottom: 1px solid #dee2e6;
161
+ padding: 1rem 1.5rem;
162
+ font-weight: 600;
163
+ color: #64748B;
164
+ font-size: 0.875rem;
165
+ text-transform: capitalize;
166
+ letter-spacing: 0.5px;
167
+ text-align: left; // Ensure headers are left-aligned
168
+ border-radius: 8px 8px 0 0; // Rounded top corners for header
169
+ }
170
+
171
+ // First column header - left rounded corner
172
+ .p-datatable-thead > tr > th:first-child {
173
+ border-top-left-radius: 8px;
174
+ }
175
+
176
+ // Last column header - right rounded corner
177
+ .p-datatable-thead > tr > th:last-child {
178
+ border-top-right-radius: 8px;
179
+ }
180
+
181
+ .p-datatable-tbody > tr {
182
+ border-bottom: 1px solid #f1f3f4;
183
+
184
+ &:hover {
185
+ background-color: #f8f9fa;
186
+ }
187
+
188
+ // Last row - bottom rounded corners
189
+ &:last-child {
190
+ > td:first-child {
191
+ border-bottom-left-radius: 8px;
192
+ }
193
+ > td:last-child {
194
+ border-bottom-right-radius: 8px;
195
+ }
196
+ }
197
+
198
+ > td {
199
+ border: none;
200
+ padding: 1rem 1.5rem;
201
+ vertical-align: middle;
202
+ text-align: left; // Ensure all cells are left-aligned
203
+ }
204
+ }
205
+ }
206
+
207
+ // No records found styling
208
+ .no-records-cell {
209
+ text-align: center;
210
+ padding: 3rem 1.5rem !important;
211
+ border: none;
212
+
213
+ .no-records-content {
214
+ display: flex;
215
+ flex-direction: column;
216
+ align-items: center;
217
+ justify-content: center;
218
+ gap: 1rem;
219
+
220
+ .no-records-text {
221
+ margin: 0;
222
+ color: #6c757d;
223
+ font-size: 1rem;
224
+ font-weight: 500;
225
+ }
226
+ }
227
+ }
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { TablePrimaryComponent } from './table-primary.component';
4
+
5
+ describe('TablePrimaryComponent', () => {
6
+ let component: TablePrimaryComponent;
7
+ let fixture: ComponentFixture<TablePrimaryComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [TablePrimaryComponent]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(TablePrimaryComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });
@@ -0,0 +1,143 @@
1
+ import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { SHARED } from '../../constant/SHARED';
3
+ import { ProcessedRowData, TableData } from './table-primary.model';
4
+
5
+ @Component({
6
+ selector: 'lib-table-primary',
7
+ standalone: false,
8
+ templateUrl: './table-primary.component.html',
9
+ styleUrl: './table-primary.component.scss'
10
+ })
11
+ export class TablePrimaryComponent implements OnChanges {
12
+ @Input() tableData: TableData = { columns: [], data: [] };
13
+ @Input() showHeader: boolean = true;
14
+ @Input() tableStyle: any = { 'min-width': '100%' };
15
+ @Output() rowClick = new EventEmitter<any>();
16
+ @Output() rowCtrlClick = new EventEmitter<any>();
17
+ processedData: ProcessedRowData[] = [];
18
+
19
+ // Expose SHARED constants for template use
20
+ readonly SHARED = SHARED;
21
+
22
+ // Computed property for visible columns (excluding actions)
23
+ get visibleColumns() {
24
+ return this.tableData.columns.filter(col => col.type !== SHARED.CELL_TYPE_ACTIONS);
25
+ }
26
+
27
+ ngOnChanges(changes: SimpleChanges): void {
28
+ if (changes['tableData'] && this.tableData) {
29
+ this.processTableData();
30
+ }
31
+ }
32
+
33
+ private processTableData(): void {
34
+ this.processedData = this.tableData.data.map((rowData, index) => {
35
+ const processedRow: ProcessedRowData = { ...rowData };
36
+ if (rowData.fileName) {
37
+ processedRow._fileExtension = this.getFileExtension(rowData.fileName);
38
+ processedRow._isPdfFile = processedRow._fileExtension === SHARED.PDF;
39
+ processedRow._isImageFile = processedRow._fileExtension === SHARED.JPG || processedRow._fileExtension === SHARED.PNG;
40
+ processedRow._isExcelFile = processedRow._fileExtension === SHARED.XLSX;
41
+ processedRow._isOtherFile = !processedRow._isPdfFile && !processedRow._isImageFile && !processedRow._isExcelFile;
42
+ }
43
+
44
+ this.tableData.columns.forEach(col => {
45
+ if (col.type === SHARED.STATUS_PARAM && rowData[col.field]) {
46
+ const status = rowData[col.field];
47
+ processedRow._statusClass = this.getStatusClass(status);
48
+ processedRow._statusIcon = this.getStatusIcon(status);
49
+ }
50
+ });
51
+
52
+ return processedRow;
53
+ });
54
+ }
55
+
56
+ getStatusClass(status: string): string {
57
+ switch (status.toLowerCase()) {
58
+ case SHARED.PENDING_STATUS:
59
+ return SHARED.STATUS_PENDING_CLASS;
60
+ case SHARED.APPROVED_STATUS:
61
+ return SHARED.STATUS_APPROVED_CLASS;
62
+ case SHARED.ALERT_STATUS:
63
+ return SHARED.STATUS_ALERT_CLASS;
64
+ case SHARED.UPLOADED_STATUS:
65
+ return SHARED.STATUS_UPLOADED_CLASS;
66
+ case SHARED.REVIEWING_STATUS:
67
+ return SHARED.STATUS_REVIEWING_CLASS;
68
+ case SHARED.REJECTED_STATUS:
69
+ return SHARED.STATUS_REJECTED_CLASS;
70
+ default:
71
+ return SHARED.STATUS_PENDING_CLASS;
72
+ }
73
+ }
74
+
75
+ getStatusIcon(status: string): string {
76
+ switch (status.toLowerCase()) {
77
+ case SHARED.PENDING_STATUS:
78
+ return SHARED.ICON_CLOCK;
79
+ case SHARED.APPROVED_STATUS:
80
+ return SHARED.ICON_CHECK;
81
+ case SHARED.ALERT_STATUS:
82
+ return SHARED.ICON_EXCLAMATION_TRIANGLE;
83
+ case SHARED.UPLOADED_STATUS:
84
+ return SHARED.ICON_CLOUD_UPLOAD;
85
+ case SHARED.REVIEWING_STATUS:
86
+ return SHARED.ICON_EYE;
87
+ case SHARED.REJECTED_STATUS:
88
+ return SHARED.ICON_TIMES;
89
+ default:
90
+ return SHARED.ICON_CLOCK;
91
+ }
92
+ }
93
+
94
+ getFileExtension(fileName: string): string {
95
+ return fileName.split(SHARED.DOT).pop()?.toUpperCase() || SHARED.PDF;
96
+ }
97
+
98
+ onRowClick(event: MouseEvent, rowData: any): void {
99
+ if (event.ctrlKey || event.metaKey) {
100
+ this.rowCtrlClick.emit(rowData);
101
+ } else {
102
+ this.rowClick.emit(rowData);
103
+ }
104
+ }
105
+
106
+ getVisibleColumnCount(): number {
107
+ return this.visibleColumns.length;
108
+ }
109
+
110
+ /**
111
+ * Formats document display name based on whether aliasName exists:
112
+ * - Without aliasName: fileName on top, docName below
113
+ * - With aliasName: aliasName on top, docName - fileName below
114
+ * @param rowData The row data containing docName, aliasName, and fileName
115
+ * @returns HTML string with proper formatting
116
+ */
117
+ formatDocumentDisplayName(rowData: any): string {
118
+ let displayName = '';
119
+
120
+ if (rowData.aliasName && rowData.aliasName.trim() !== '') {
121
+ // With aliasName: aliasName on top, docName - fileName below
122
+ displayName += `<span class="alias-name">${rowData.aliasName}</span><br>`;
123
+
124
+ if (rowData.docName && rowData.fileName) {
125
+ displayName += `<span class="document-info">${rowData.docName} - ${rowData.fileName}</span>`;
126
+ } else if (rowData.docName) {
127
+ displayName += `<span class="document-info">${rowData.docName}</span>`;
128
+ }
129
+ } else {
130
+ // Without aliasName: fileName on top, docName below
131
+ if (rowData.fileName) {
132
+ displayName += `<span class="document-info">${rowData.fileName}</span>`;
133
+ }
134
+
135
+ if (rowData.docName) {
136
+ if (displayName) displayName += '<br>';
137
+ displayName += `<span class="document-info">${rowData.docName}</span>`;
138
+ }
139
+ }
140
+
141
+ return displayName;
142
+ }
143
+ }