cat-documents-ng 1.0.6 → 1.0.7

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/Shared/components/confirmation-dialog/confirmation-dialog.component.d.ts +44 -0
  3. package/Shared/components/table-primary/table-primary.component.d.ts +31 -0
  4. package/Shared/components/table-primary/table-primary.model.d.ts +19 -0
  5. package/Shared/constant/ERROR.d.ts +52 -0
  6. package/Shared/constant/SHARED.d.ts +546 -0
  7. package/{src/Shared/constant/URLS.ts → Shared/constant/URLS.d.ts} +25 -31
  8. package/Shared/services/app-config.service.d.ts +51 -0
  9. package/{src/Shared/services/global-error.handler.ts → Shared/services/global-error.handler.d.ts} +9 -11
  10. package/Shared/services/session.service.d.ts +46 -0
  11. package/Shared/shared.module.d.ts +14 -0
  12. package/fesm2022/cat-documents-ng.mjs +11405 -0
  13. package/fesm2022/cat-documents-ng.mjs.map +1 -0
  14. package/index.d.ts +5 -0
  15. package/lib/document/components/document-actions/document-actions.component.d.ts +78 -0
  16. package/lib/document/components/document-container/document-container.component.d.ts +162 -0
  17. package/lib/document/components/document-content-viewer/document-content-viewer.component.d.ts +291 -0
  18. package/lib/document/components/document-history/document-history.component.d.ts +160 -0
  19. package/lib/document/components/document-list/document-list.component.d.ts +299 -0
  20. package/lib/document/components/document-list-item/document-list-item.component.d.ts +28 -0
  21. package/lib/document/components/document-search/document-search.component.d.ts +77 -0
  22. package/lib/document/components/document-status/document-status.component.d.ts +24 -0
  23. package/lib/document/components/document-upload/document-upload.component.d.ts +321 -0
  24. package/lib/document/components/document-viewer/document-viewer.component.d.ts +137 -0
  25. package/lib/document/components/document-zoom-controls/document-zoom-controls.component.d.ts +33 -0
  26. package/lib/document/components/documents-menu/documents-menu.component.d.ts +110 -0
  27. package/{src/lib/document/components/folder-block/folder-block.component.ts → lib/document/components/folder-block/folder-block.component.d.ts} +12 -28
  28. package/lib/document/components/folder-container/folder-container.component.d.ts +162 -0
  29. package/lib/document/components/linked-document/linked-document.component.d.ts +39 -0
  30. package/lib/document/components/request-document/request-document.component.d.ts +69 -0
  31. package/lib/document/components/sidebar/sidebar.component.d.ts +109 -0
  32. package/lib/document/components/user-list/user-list.component.d.ts +34 -0
  33. package/lib/document/constant/DOCUMENT_HISTORY.d.ts +41 -0
  34. package/lib/document/directives/document.directive.d.ts +20 -0
  35. package/lib/document/directives/permission.directive.d.ts +38 -0
  36. package/lib/document/document.module.d.ts +60 -0
  37. package/{src/lib/document/models/document-alert.model.ts → lib/document/models/document-alert.model.d.ts} +4 -11
  38. package/lib/document/models/document-category.model.d.ts +24 -0
  39. package/lib/document/models/document-history.model.d.ts +94 -0
  40. package/lib/document/models/document-list-response.model.d.ts +33 -0
  41. package/lib/document/models/document-type.model.d.ts +37 -0
  42. package/lib/document/models/document.model.d.ts +44 -0
  43. package/{src/lib/document/models/folder.model.ts → lib/document/models/folder.model.d.ts} +4 -10
  44. package/lib/document/models/status-data.model.d.ts +27 -0
  45. package/lib/document/models/uploaded-file-response.model.d.ts +7 -0
  46. package/lib/document/models/user-list.model.d.ts +8 -0
  47. package/lib/document/services/csv-parser.service.d.ts +88 -0
  48. package/lib/document/services/document-actions.service.d.ts +48 -0
  49. package/lib/document/services/document-content-type.service.d.ts +85 -0
  50. package/lib/document/services/document-history-style.service.d.ts +34 -0
  51. package/lib/document/services/document-history.service.d.ts +42 -0
  52. package/lib/document/services/document-http.service.d.ts +179 -0
  53. package/lib/document/services/document-list.service.d.ts +74 -0
  54. package/lib/document/services/document-menu.service.d.ts +122 -0
  55. package/lib/document/services/document-scroll.service.d.ts +55 -0
  56. package/lib/document/services/document-table-builder.service.d.ts +38 -0
  57. package/lib/document/services/document-upload-business.service.d.ts +107 -0
  58. package/lib/document/services/document-upload-data.service.d.ts +40 -0
  59. package/lib/document/services/document-upload-form.service.d.ts +41 -0
  60. package/lib/document/services/document-upload.service.d.ts +99 -0
  61. package/lib/document/services/document-viewer.service.d.ts +97 -0
  62. package/lib/document/services/document-zoom.service.d.ts +81 -0
  63. package/lib/document/services/document.service.d.ts +161 -0
  64. package/lib/document/services/eml-parser.service.d.ts +116 -0
  65. package/lib/document/services/excel-parser.service.d.ts +169 -0
  66. package/lib/document/services/file-format.service.d.ts +34 -0
  67. package/lib/document/services/status-calculator.service.d.ts +20 -0
  68. package/lib/document/services/user-list.service.d.ts +29 -0
  69. package/lib/document/state/document.query.d.ts +243 -0
  70. package/{src/lib/document/state/document.service.ts → lib/document/state/document.service.d.ts} +15 -46
  71. package/lib/document/state/document.state.d.ts +61 -0
  72. package/lib/document/state/document.store.d.ts +56 -0
  73. package/package.json +11 -5
  74. package/{src/public-api.ts → public-api.d.ts} +0 -4
  75. package/ng-package.json +0 -10
  76. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.html +0 -3
  77. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.scss +0 -13
  78. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.spec.ts +0 -70
  79. package/src/Shared/components/confirmation-dialog/confirmation-dialog.component.ts +0 -133
  80. package/src/Shared/components/table-primary/table-primary.component.html +0 -66
  81. package/src/Shared/components/table-primary/table-primary.component.scss +0 -227
  82. package/src/Shared/components/table-primary/table-primary.component.spec.ts +0 -23
  83. package/src/Shared/components/table-primary/table-primary.component.ts +0 -143
  84. package/src/Shared/components/table-primary/table-primary.model.ts +0 -21
  85. package/src/Shared/constant/ERROR.ts +0 -55
  86. package/src/Shared/constant/PERMISSIONS.ts +0 -17
  87. package/src/Shared/constant/SHARED.ts +0 -936
  88. package/src/Shared/services/app-config.service.spec.ts +0 -19
  89. package/src/Shared/services/app-config.service.ts +0 -73
  90. package/src/Shared/services/session.service.spec.ts +0 -16
  91. package/src/Shared/services/session.service.ts +0 -76
  92. package/src/Shared/shared.module.ts +0 -25
  93. package/src/lib/document/components/csv-viewer/csv-viewer.component.ts +0 -1
  94. package/src/lib/document/components/document-actions/document-actions.component.html +0 -59
  95. package/src/lib/document/components/document-actions/document-actions.component.scss +0 -362
  96. package/src/lib/document/components/document-actions/document-actions.component.spec.ts +0 -297
  97. package/src/lib/document/components/document-actions/document-actions.component.ts +0 -163
  98. package/src/lib/document/components/document-container/document-container.component.html +0 -36
  99. package/src/lib/document/components/document-container/document-container.component.scss +0 -144
  100. package/src/lib/document/components/document-container/document-container.component.spec.ts +0 -110
  101. package/src/lib/document/components/document-container/document-container.component.ts +0 -363
  102. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.html +0 -332
  103. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.scss +0 -1877
  104. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.spec.ts +0 -258
  105. package/src/lib/document/components/document-content-viewer/document-content-viewer.component.ts +0 -664
  106. package/src/lib/document/components/document-history/document-history.component.html +0 -96
  107. package/src/lib/document/components/document-history/document-history.component.scss +0 -392
  108. package/src/lib/document/components/document-history/document-history.component.spec.ts +0 -93
  109. package/src/lib/document/components/document-history/document-history.component.ts +0 -373
  110. package/src/lib/document/components/document-list/document-list.component.html +0 -46
  111. package/src/lib/document/components/document-list/document-list.component.scss +0 -513
  112. package/src/lib/document/components/document-list/document-list.component.spec.ts +0 -486
  113. package/src/lib/document/components/document-list/document-list.component.ts +0 -682
  114. package/src/lib/document/components/document-list-item/document-list-item.component.html +0 -36
  115. package/src/lib/document/components/document-list-item/document-list-item.component.scss +0 -34
  116. package/src/lib/document/components/document-list-item/document-list-item.component.spec.ts +0 -75
  117. package/src/lib/document/components/document-list-item/document-list-item.component.ts +0 -40
  118. package/src/lib/document/components/document-search/document-search.component.html +0 -64
  119. package/src/lib/document/components/document-search/document-search.component.scss +0 -206
  120. package/src/lib/document/components/document-search/document-search.component.spec.ts +0 -82
  121. package/src/lib/document/components/document-search/document-search.component.ts +0 -163
  122. package/src/lib/document/components/document-status/document-status.component.html +0 -31
  123. package/src/lib/document/components/document-status/document-status.component.scss +0 -192
  124. package/src/lib/document/components/document-status/document-status.component.spec.ts +0 -23
  125. package/src/lib/document/components/document-status/document-status.component.ts +0 -87
  126. package/src/lib/document/components/document-upload/document-upload.component.html +0 -160
  127. package/src/lib/document/components/document-upload/document-upload.component.scss +0 -235
  128. package/src/lib/document/components/document-upload/document-upload.component.spec.ts +0 -95
  129. package/src/lib/document/components/document-upload/document-upload.component.ts +0 -668
  130. package/src/lib/document/components/document-viewer/document-viewer.component.html +0 -50
  131. package/src/lib/document/components/document-viewer/document-viewer.component.scss +0 -187
  132. package/src/lib/document/components/document-viewer/document-viewer.component.spec.ts +0 -79
  133. package/src/lib/document/components/document-viewer/document-viewer.component.ts +0 -261
  134. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.html +0 -48
  135. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.scss +0 -320
  136. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.spec.ts +0 -59
  137. package/src/lib/document/components/document-zoom-controls/document-zoom-controls.component.ts +0 -150
  138. package/src/lib/document/components/documents-menu/documents-menu.component.html +0 -44
  139. package/src/lib/document/components/documents-menu/documents-menu.component.scss +0 -363
  140. package/src/lib/document/components/documents-menu/documents-menu.component.spec.ts +0 -23
  141. package/src/lib/document/components/documents-menu/documents-menu.component.ts +0 -316
  142. package/src/lib/document/components/folder-block/folder-block.component.html +0 -46
  143. package/src/lib/document/components/folder-block/folder-block.component.scss +0 -9
  144. package/src/lib/document/components/folder-block/folder-block.component.spec.ts +0 -70
  145. package/src/lib/document/components/folder-container/folder-container.component.html +0 -56
  146. package/src/lib/document/components/folder-container/folder-container.component.scss +0 -20
  147. package/src/lib/document/components/folder-container/folder-container.component.spec.ts +0 -27
  148. package/src/lib/document/components/folder-container/folder-container.component.ts +0 -328
  149. package/src/lib/document/components/linked-document/linked-document.component.html +0 -23
  150. package/src/lib/document/components/linked-document/linked-document.component.scss +0 -10
  151. package/src/lib/document/components/linked-document/linked-document.component.spec.ts +0 -61
  152. package/src/lib/document/components/linked-document/linked-document.component.ts +0 -49
  153. package/src/lib/document/components/request-document/request-document.component.html +0 -86
  154. package/src/lib/document/components/request-document/request-document.component.scss +0 -16
  155. package/src/lib/document/components/request-document/request-document.component.ts +0 -278
  156. package/src/lib/document/components/sidebar/sidebar.component.html +0 -75
  157. package/src/lib/document/components/sidebar/sidebar.component.scss +0 -157
  158. package/src/lib/document/components/sidebar/sidebar.component.spec.ts +0 -114
  159. package/src/lib/document/components/sidebar/sidebar.component.ts +0 -223
  160. package/src/lib/document/components/user-list/user-list.component.html +0 -33
  161. package/src/lib/document/components/user-list/user-list.component.scss +0 -118
  162. package/src/lib/document/components/user-list/user-list.component.spec.ts +0 -23
  163. package/src/lib/document/components/user-list/user-list.component.ts +0 -181
  164. package/src/lib/document/constant/DOCUMENT_HISTORY.ts +0 -52
  165. package/src/lib/document/directives/document.directive.ts +0 -32
  166. package/src/lib/document/directives/permission.directive.spec.ts +0 -0
  167. package/src/lib/document/directives/permission.directive.ts +0 -72
  168. package/src/lib/document/document.module.ts +0 -351
  169. package/src/lib/document/models/document-category.model.ts +0 -30
  170. package/src/lib/document/models/document-history.model.ts +0 -109
  171. package/src/lib/document/models/document-list-response.model.ts +0 -37
  172. package/src/lib/document/models/document-type.model.ts +0 -44
  173. package/src/lib/document/models/document.model.ts +0 -53
  174. package/src/lib/document/models/status-data.model.ts +0 -31
  175. package/src/lib/document/models/uploaded-file-response.model.ts +0 -7
  176. package/src/lib/document/models/user-list.model.ts +0 -10
  177. package/src/lib/document/services/csv-parser.service.spec.ts +0 -97
  178. package/src/lib/document/services/csv-parser.service.ts +0 -303
  179. package/src/lib/document/services/document-actions.service.ts +0 -125
  180. package/src/lib/document/services/document-content-type.service.ts +0 -193
  181. package/src/lib/document/services/document-history-style.service.ts +0 -138
  182. package/src/lib/document/services/document-history.service.ts +0 -129
  183. package/src/lib/document/services/document-http.service.spec.ts +0 -119
  184. package/src/lib/document/services/document-http.service.ts +0 -497
  185. package/src/lib/document/services/document-list.service.ts +0 -195
  186. package/src/lib/document/services/document-menu.service.ts +0 -277
  187. package/src/lib/document/services/document-scroll.service.ts +0 -138
  188. package/src/lib/document/services/document-severity.service.ts +0 -98
  189. package/src/lib/document/services/document-table-builder.service.ts +0 -82
  190. package/src/lib/document/services/document-upload-business.service.ts +0 -326
  191. package/src/lib/document/services/document-upload-data.service.ts +0 -82
  192. package/src/lib/document/services/document-upload-form.service.ts +0 -149
  193. package/src/lib/document/services/document-upload.service.spec.ts +0 -99
  194. package/src/lib/document/services/document-upload.service.ts +0 -209
  195. package/src/lib/document/services/document-viewer.service.ts +0 -279
  196. package/src/lib/document/services/document-zoom.service.spec.ts +0 -56
  197. package/src/lib/document/services/document-zoom.service.ts +0 -164
  198. package/src/lib/document/services/document.service.ts +0 -356
  199. package/src/lib/document/services/eml-parser.service.ts +0 -444
  200. package/src/lib/document/services/excel-parser.service.spec.ts +0 -66
  201. package/src/lib/document/services/excel-parser.service.ts +0 -483
  202. package/src/lib/document/services/file-format.service.spec.ts +0 -16
  203. package/src/lib/document/services/file-format.service.ts +0 -63
  204. package/src/lib/document/services/status-calculator.service.ts +0 -44
  205. package/src/lib/document/services/user-list.service.ts +0 -77
  206. package/src/lib/document/state/document.query.ts +0 -378
  207. package/src/lib/document/state/document.state.ts +0 -100
  208. package/src/lib/document/state/document.store.ts +0 -200
  209. package/tsconfig.lib.json +0 -15
  210. package/tsconfig.lib.prod.json +0 -11
  211. package/tsconfig.spec.json +0 -15
@@ -1,49 +0,0 @@
1
- import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';
2
- import { DocumentQuery } from '../../state/document.query';
3
- import { DocumentModel } from '../../models/document.model';
4
- import { DocumentListItem } from '../../models/document-list-response.model';
5
- /**
6
- * Description placeholder
7
- * @class LinkedDocumentComponent
8
- * @typedef {LinkedDocumentComponent}
9
- * @implements {OnChanges}
10
- */
11
- @Component({
12
- selector: 'app-linked-document',
13
- templateUrl: './linked-document.component.html',
14
- styleUrl: './linked-document.component.scss',
15
- standalone : false
16
- })
17
- export class LinkedDocumentComponent {
18
- /**
19
- * Selected document for view.
20
- * @type {?DocumentModel}
21
- */
22
- @Input() selectedDocument?: DocumentListItem;
23
- /**
24
- * Whole document list.
25
- * @type {?DocumentModel[]}
26
- */
27
- @Input() documentList?: DocumentListItem[];
28
- /**
29
- * Changed selected document.
30
- * @type {*}
31
- */
32
- @Output() selectedDocumentChange = new EventEmitter<DocumentListItem>();
33
-
34
- /**
35
- * Filtered documents.
36
- * @type {DocumentModel[]}
37
- */
38
- filteredDocuments: DocumentModel[] = [];
39
-
40
- /**
41
- * Handle the click on the document.
42
- * @param {DocumentModel} document - Clicked document.
43
- */
44
- handleDocumentClick(document: DocumentListItem): void {
45
- this.selectedDocument = document;
46
- this.selectedDocumentChange.emit(this.selectedDocument);
47
- }
48
-
49
- }
@@ -1,86 +0,0 @@
1
- <div class="document-upload-container">
2
- <!-- Assignment Section (same structure as upload, without files) -->
3
- <div class="assignment-section">
4
- <h4>Assign to Applicant(s) or Application <span class="text-red-500">*</span> </h4>
5
- <div class="radio-group">
6
- <div class="radio-item">
7
- <p-radioButton
8
- name="assignmentType"
9
- value="Applicant"
10
- [(ngModel)]="selectedAssignmentType"
11
- (onClick)="onAssignmentTypeChange()"
12
- [inputId]="'req-applicant'"
13
- ></p-radioButton>
14
- <label [for]="'req-applicant'" class="radio-label">Applicant(s)</label>
15
- </div>
16
- <div class="radio-item">
17
- <p-radioButton
18
- name="assignmentType"
19
- value="Application"
20
- [(ngModel)]="selectedAssignmentType"
21
- (onClick)="onAssignmentTypeChange()"
22
- [inputId]="'req-application'"
23
- ></p-radioButton>
24
- <label [for]="'req-application'" class="radio-label">Application</label>
25
- </div>
26
- </div>
27
- </div>
28
-
29
- <!-- Applicant Selection (only when Applicant is selected) -->
30
- <div class="applicant-section" *ngIf="selectedAssignmentType === 'Applicant'">
31
- <h4>Select Applicant(s) <span class="text-red-500">*</span></h4>
32
- <div class="grid">
33
- <div
34
- *ngFor="let applicant of filteredApplicantList"
35
- class="applicant-item col-12 md:col-6"
36
- >
37
- <p-radioButton
38
- name="reqSelectedApplicant"
39
- [value]="applicant._id"
40
- [(ngModel)]="selectedApplicant"
41
- [inputId]="'req-applicant-' + applicant._id"
42
- (onClick)="onApplicantSelectionChange()"
43
- ></p-radioButton>
44
- <label [for]="'req-applicant-' + applicant._id" class="applicant-label">
45
- {{ applicant.name }}
46
- </label>
47
- </div>
48
- </div>
49
- </div>
50
-
51
- <!-- Category Selection -->
52
- <div class="category-section">
53
- <h4>Category <span class="text-red-500">*</span></h4>
54
- <p-dropdown
55
- [options]="categoryOptions"
56
- [(ngModel)]="selectedCategory"
57
- placeholder="Select Category type"
58
- optionLabel="label"
59
- optionValue="_id"
60
- (onChange)="onCategoryChange()"
61
- [disabled]="!categoryOptions.length"
62
- class="w-full"
63
- ></p-dropdown>
64
- </div>
65
-
66
- <!-- Document Type Selection -->
67
- <div class="document-type-section">
68
- <h4>Document Type <span class="text-red-500">*</span></h4>
69
- <p-dropdown
70
- [options]="documentTypeOptions"
71
- [(ngModel)]="selectedDocumentType"
72
- placeholder="Select Document type"
73
- optionLabel="label"
74
- optionValue="_id"
75
- (onChange)="onDocumentTypeChange()"
76
- [disabled]="!documentTypeOptions.length || !selectedCategory"
77
- class="w-full"
78
- ></p-dropdown>
79
- </div>
80
-
81
- <!-- Description Field -->
82
- <div class="description-section">
83
- <h6>Description <span class="text-red-500">*</span></h6>
84
- <textarea pInputTextarea [(ngModel)]="description" (ngModelChange)="onDescriptionChange()" rows="4" placeholder="Add description" class="w-full"></textarea>
85
- </div>
86
- </div>
@@ -1,16 +0,0 @@
1
- .request-document-form {
2
- .form-row {
3
- display: flex;
4
- flex-direction: column;
5
- margin-bottom: 1rem;
6
- }
7
- label {
8
- font-weight: 600;
9
- margin-bottom: 0.5rem;
10
- }
11
- select, textarea {
12
- padding: 0.5rem;
13
- }
14
- }
15
-
16
-
@@ -1,278 +0,0 @@
1
- import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, SimpleChanges, OnChanges } from '@angular/core';
2
- import { SHARED } from '../../../../Shared/constant/SHARED';
3
- import { Subject, takeUntil } from 'rxjs';
4
- import { UserListModel } from '../../models/user-list.model';
5
- import { DocumentCategory } from '../../models/document-category.model';
6
- import { DocumentTypeModel } from '../../models/document-type.model';
7
- import { DocumentUploadService } from '../../services/document-upload.service';
8
- import { DocumentUploadFormService } from '../../services/document-upload-form.service';
9
- import { DocumentUploadDataService } from '../../services/document-upload-data.service';
10
- import { DocumentHttpService } from '../../services/document-http.service';
11
- import { SessionService } from '../../../../Shared/services/session.service';
12
-
13
- @Component({
14
- selector: 'lib-request-document',
15
- templateUrl: './request-document.component.html',
16
- standalone: false
17
- })
18
- export class RequestDocumentComponent implements OnInit, OnChanges, OnDestroy {
19
- @Input() contextId: string = SHARED.EMPTY;
20
- @Input() isRequestSaveBtnClicked: boolean = false;
21
- @Input() isRequestSidebarClosed: boolean = false;
22
-
23
- @Output() onFormValidationChange = new EventEmitter<void>();
24
- @Output() onRequestSuccess = new EventEmitter<void>();
25
- @Output() onRequestError = new EventEmitter<any>();
26
- @Output() hasUnsavedChangesChange = new EventEmitter<boolean>();
27
-
28
- selectedAssignmentType: 'Applicant' | 'Application' | null = null;
29
- selectedApplicant: string = SHARED.EMPTY;
30
- selectedCategory: string = SHARED.EMPTY;
31
- selectedDocumentType: string = SHARED.EMPTY;
32
- description: string = SHARED.EMPTY;
33
-
34
- applicantList: UserListModel[] = SHARED.EMPTY_ARRAY;
35
- filteredApplicantList: UserListModel[] = SHARED.EMPTY_ARRAY;
36
- categoryOptions: DocumentCategory[] = SHARED.EMPTY_ARRAY;
37
- documentTypeOptions: DocumentTypeModel[] = SHARED.EMPTY_ARRAY;
38
-
39
- isLoadingApplicants: boolean = false;
40
- isLoadingCategories: boolean = false;
41
- isLoadingDocumentTypes: boolean = false;
42
- isSaving: boolean = false;
43
- isFormValid: boolean = false;
44
-
45
- private destroy$ = new Subject<void>();
46
-
47
- constructor(
48
- public documentUpload: DocumentUploadService,
49
- private formService: DocumentUploadFormService,
50
- private dataService: DocumentUploadDataService,
51
- private cdr: ChangeDetectorRef,
52
- private documentHttpService : DocumentHttpService,
53
- private sessionService: SessionService
54
- ) {}
55
-
56
- ngOnInit(): void {
57
- this.resetForm();
58
- }
59
-
60
- ngOnChanges(changes: SimpleChanges): void {
61
- if (changes['isRequestSaveBtnClicked'] && changes['isRequestSaveBtnClicked'].currentValue) {
62
- this.saveRequestDocument();
63
- }
64
- if (changes['isRequestSidebarClosed'] && changes['isRequestSidebarClosed'].currentValue) {
65
- if (this.isRequestSidebarClosed) {
66
- this.resetForm();
67
- }
68
- }
69
- }
70
-
71
- onAssignmentTypeChange(): void {
72
- this.resetSelections();
73
- this.loadCategories();
74
- // Always ensure applicants are loaded; filtering will apply based on assignment type
75
- this.loadApplicants();
76
- this.validateAndEmit();
77
- this.emitUnsavedChanges();
78
- }
79
-
80
- onCategoryChange(): void {
81
- this.resetDocumentType();
82
- if (this.selectedCategory) this.loadDocumentTypes();
83
- this.validateAndEmit();
84
- this.emitUnsavedChanges();
85
- }
86
-
87
- onDocumentTypeChange(): void { this.validateAndEmit(); this.emitUnsavedChanges(); }
88
- onApplicantSelectionChange(): void { this.validateAndEmit(); this.emitUnsavedChanges(); }
89
- onDescriptionChange(): void { this.validateAndEmit(); this.emitUnsavedChanges(); }
90
-
91
- loadApplicants(): void {
92
- this.isLoadingApplicants = true;
93
- this.dataService.loadApplicants(
94
- this.contextId,
95
- (applicants) => this.handleApplicantsLoaded(applicants),
96
- (error) => this.handleError('Failed to Load Applicants', error, () => this.isLoadingApplicants = false)
97
- ).pipe(takeUntil(this.destroy$)).subscribe({
98
- next: (applicants) => {
99
- // When assignment type is not yet selected, just cache the list
100
- if (!this.selectedAssignmentType) {
101
- this.applicantList = applicants;
102
- this.filteredApplicantList = applicants;
103
- this.isLoadingApplicants = false;
104
- return;
105
- }
106
- this.handleApplicantsLoaded(applicants);
107
- },
108
- error: (error) => this.handleError('Failed to Load Applicants', error, () => this.isLoadingApplicants = false)
109
- });
110
- }
111
-
112
- loadCategories(): void {
113
- this.isLoadingCategories = true;
114
- this.dataService.loadCategories(
115
- this.selectedAssignmentType!,
116
- (categories) => this.handleCategoriesLoaded(categories),
117
- (error) => this.handleError('Failed to Load Categories', error, () => this.isLoadingCategories = false)
118
- ).pipe(takeUntil(this.destroy$)).subscribe({
119
- next: (categories) => this.handleCategoriesLoaded(categories),
120
- error: (error) => this.handleError('Failed to Load Categories', error, () => this.isLoadingCategories = false)
121
- });
122
- }
123
-
124
- loadDocumentTypes(): void {
125
- this.isLoadingDocumentTypes = true;
126
- this.dataService.loadDocumentTypes(
127
- this.selectedCategory,
128
- (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),
129
- (error) => this.handleError('Failed to Load Document Types', error, () => this.isLoadingDocumentTypes = false)
130
- ).pipe(takeUntil(this.destroy$)).subscribe({
131
- next: (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),
132
- error: (error) => this.handleError('Failed to Load Document Types', error, () => this.isLoadingDocumentTypes = false)
133
- });
134
- }
135
-
136
- getSaveButtonDisabled(): boolean {
137
- return !this.isFormValid || this.isSaving;
138
- }
139
-
140
- saveRequestDocument(): void {
141
- if (!this.isFormValid) {
142
- this.formService.showWarningMessage('Incomplete Form', 'Please complete all required fields.');
143
- return;
144
- }
145
- if (!this.description || !this.description.trim()) {
146
- this.formService.showWarningMessage('Description Required', 'Please add a description.');
147
- return;
148
- }
149
- // build request payload expected by backend
150
- const requestedDocumentForId = this.selectedAssignmentType === SHARED.APPLICANT
151
- ? this.selectedApplicant
152
- : this.contextId;
153
- const requesterId = this.sessionService.getUserSession()?.accountId;
154
- const requestPayload = {
155
- applicationId: this.contextId,
156
- requestedDocumentForId: requestedDocumentForId,
157
- requestedDocumentType: this.selectedDocumentType,
158
- requesterId: requesterId,
159
- selectedAssignmentType: this.selectedAssignmentType,
160
- description: this.description.trim()
161
- };
162
-
163
- this.isSaving = true;
164
- this.documentHttpService.documentRequest(requestPayload).subscribe({
165
- next: () => {
166
- this.isSaving = false;
167
- this.onRequestSuccess.emit();
168
- this.resetForm();
169
- },
170
- error: (error) => {
171
- this.isSaving = false;
172
- this.onRequestError.emit(error);
173
- }
174
- });
175
- }
176
-
177
- resetForm(): void {
178
- this.selectedAssignmentType = null;
179
- this.selectedApplicant = SHARED.EMPTY;
180
- this.selectedCategory = SHARED.EMPTY;
181
- this.selectedDocumentType = SHARED.EMPTY;
182
- this.description = SHARED.EMPTY;
183
- this.filteredApplicantList = [];
184
- this.categoryOptions = [];
185
- this.documentTypeOptions = [];
186
- this.isSaving = false;
187
- this.isFormValid = false;
188
- this.cdr.detectChanges();
189
- this.hasUnsavedChangesChange.emit(false);
190
- }
191
-
192
- resetSelections(): void {
193
- this.selectedApplicant = this.selectedCategory = this.selectedDocumentType = SHARED.EMPTY;
194
- this.documentTypeOptions = SHARED.EMPTY_ARRAY;
195
- }
196
-
197
- resetDocumentType(): void {
198
- this.selectedDocumentType = SHARED.EMPTY;
199
- this.documentTypeOptions = SHARED.EMPTY_ARRAY;
200
- }
201
-
202
- handleApplicantLoading(): void {
203
- if (this.selectedAssignmentType === SHARED.APPLICANT) {
204
- this.loadApplicants();
205
- } else {
206
- this.filterApplicants();
207
- }
208
- }
209
-
210
- handleApplicantsLoaded(applicants: UserListModel[]): void {
211
- this.applicantList = this.documentUpload.sortListByProperty(applicants, 'name');
212
- this.filterApplicants();
213
- this.isLoadingApplicants = false;
214
- this.validateForm();
215
- }
216
-
217
- handleCategoriesLoaded(categories: DocumentCategory[]): void {
218
- this.categoryOptions = this.documentUpload.sortListByProperty(categories, 'label');
219
- this.isLoadingCategories = false;
220
- this.validateForm();
221
- }
222
-
223
- handleDocumentTypesLoaded(documentTypes: DocumentTypeModel[]): void {
224
- this.documentTypeOptions = this.documentUpload.sortListByProperty(documentTypes, 'label', 'name');
225
- this.isLoadingDocumentTypes = false;
226
- this.validateForm();
227
- }
228
-
229
- filterApplicants(): void {
230
- this.filteredApplicantList = this.dataService.handleApplicantsLoaded(
231
- this.applicantList, this.selectedAssignmentType
232
- );
233
- }
234
-
235
- validateForm(): void {
236
- const baseValid = Boolean(
237
- this.selectedAssignmentType &&
238
- this.selectedCategory &&
239
- this.selectedDocumentType &&
240
- this.description && this.description.trim()
241
- );
242
- const needsApplicant = this.selectedAssignmentType === SHARED.APPLICANT;
243
- const hasRequiredFields = needsApplicant ? (baseValid && !!this.selectedApplicant) : baseValid;
244
- const previousState = this.isFormValid;
245
- this.isFormValid = hasRequiredFields;
246
- if (previousState !== this.isFormValid) {
247
- this.onFormValidationChange.emit();
248
- }
249
- }
250
-
251
- validateAndEmit(): void {
252
- this.validateForm();
253
- this.onFormValidationChange.emit();
254
- }
255
-
256
- /** Emits unsaved changes state based on any field being non-empty */
257
- private emitUnsavedChanges(): void {
258
- const hasChanges = Boolean(
259
- (this.selectedAssignmentType && this.selectedAssignmentType !== SHARED.EMPTY) ||
260
- (this.selectedApplicant && this.selectedApplicant !== SHARED.EMPTY) ||
261
- (this.selectedCategory && this.selectedCategory !== SHARED.EMPTY) ||
262
- (this.selectedDocumentType && this.selectedDocumentType !== SHARED.EMPTY) ||
263
- (this.description && this.description.trim() !== SHARED.EMPTY)
264
- );
265
- this.hasUnsavedChangesChange.emit(hasChanges);
266
- }
267
-
268
- handleError(_title: string, _error: any, resetLoading: () => void): void {
269
- resetLoading();
270
- }
271
-
272
- ngOnDestroy(): void {
273
- this.destroy$.next();
274
- this.destroy$.complete();
275
- }
276
- }
277
-
278
-
@@ -1,75 +0,0 @@
1
- <!-- PrimeNG Sidebar with proper backdrop handling -->
2
- <div *ngIf="visible" class="backdrop-shadow" (click)="handleClose()"></div>
3
-
4
- <p-sidebar
5
- [(visible)]="visible"
6
- [position]="position"
7
- [style]="{width: width}"
8
- [dismissible]="true"
9
- [showCloseIcon]="false"
10
- [appendTo]="'body'"
11
- [blockScroll]="blockScroll"
12
- (visibleChange)="onVisibleChange($event)"
13
- (onShow)="onShow.emit()"
14
- (onHide)="onSidebarHide()"
15
- >
16
- <ng-template pTemplate="header" *ngIf="title || showCloseButton || showSaveButton">
17
- <div class="sidebar-header">
18
- <h3 *ngIf="title" class="sidebar-title">{{ title }}</h3>
19
- <div class="header-content">
20
- <ng-content select="[header]"></ng-content>
21
-
22
- <p-messages
23
- *ngIf="showSuccessMessage"
24
- severity="success"
25
- [closable]="false"
26
- [style]="{'margin-bottom': '0.5rem'}"
27
- class="ml-3"
28
- >
29
- <ng-template pTemplate="message">
30
- <span>{{ successMessage }}</span>
31
- </ng-template>
32
- </p-messages>
33
-
34
- <p-messages
35
- *ngIf="showErrorMessage"
36
- severity="error"
37
- [closable]="false"
38
- [style]="{'margin-bottom': '0.5rem'}"
39
- class="ml-3"
40
- >
41
- <ng-template pTemplate="message">
42
- <span>{{ errorMessage }}</span>
43
- </ng-template>
44
- </p-messages>
45
-
46
- <div class="header-actions mr-3">
47
- <button
48
- *ngIf="showSaveButton"
49
- pButton
50
- type="button"
51
- [label]="saveButtonText"
52
- [disabled]="saveButtonDisabled"
53
- class="p-button-primary"
54
- (click)="onSave.emit()"
55
- ></button>
56
-
57
- <button
58
- *ngIf="showCloseButton"
59
- pButton
60
- type="button"
61
- icon="pi pi-times"
62
- class="p-button-text p-button-rounded"
63
- (click)="handleClose()"
64
- ></button>
65
- </div>
66
- </div>
67
- </div>
68
- </ng-template>
69
-
70
- <ng-template pTemplate="content">
71
- <div class="sidebar-content">
72
- <ng-content></ng-content>
73
- </div>
74
- </ng-template>
75
- </p-sidebar>
@@ -1,157 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
- .backdrop-shadow {
5
- position: fixed;
6
- top: 0;
7
- left: 0;
8
- width: 100%;
9
- height: 100%;
10
- background: rgba(0, 0, 0, 0.5);
11
- /* Shadow effect */
12
- z-index: 1000;
13
- /* Ensure it appears below the sidebar */
14
- }
15
- .sidebar-header {
16
- display: flex;
17
- justify-content: flex-end;
18
- align-items: center;
19
- padding: 0;
20
- width: 100%;
21
- gap: 1rem;
22
- ::ng-deep{
23
- .p-messages{
24
- .p-message-success{
25
- margin-left: 2rem;
26
- font-size: 15px;
27
- }
28
- .p-message-wrapper{
29
- padding: 1rem 1rem;
30
-
31
- }
32
- }
33
- }
34
- }
35
-
36
- .sidebar-title {
37
- margin: 0;
38
- font-size: 1.25rem;
39
- font-weight: 600;
40
- color: #212529;
41
- flex: 0 1 auto;
42
- white-space: nowrap;
43
- min-width: 0;
44
- }
45
-
46
- .header-content {
47
- display: flex;
48
- align-items: center;
49
- gap: 1rem;
50
- justify-content: space-between;
51
- width: 100%;
52
- }
53
-
54
- .header-actions {
55
- display: flex;
56
- align-items: center;
57
- gap: 0.5rem;
58
- margin-left: auto;
59
- margin-right: 0;
60
- }
61
-
62
- .close-button {
63
- background: none;
64
- border: none;
65
- color: #6c757d;
66
- cursor: pointer;
67
- padding: 0.5rem;
68
- border-radius: 0.375rem;
69
- transition: all 0.2s ease;
70
- display: flex;
71
- align-items: center;
72
- justify-content: center;
73
- min-width: 2rem;
74
- min-height: 2rem;
75
- margin-right: 0.5rem;
76
-
77
- &:hover {
78
- background-color: #e9ecef;
79
- color: #495057;
80
- }
81
-
82
- &:focus {
83
- outline: none;
84
- box-shadow: 0 0 0 3px rgba(15, 139, 253, 0.3);
85
- }
86
-
87
- i {
88
- font-size: 1rem;
89
- }
90
- }
91
-
92
- .sidebar-content {
93
- height: 100%;
94
- overflow-y: auto;
95
- padding: 0;
96
- }
97
-
98
- /* Custom close button styles */
99
- .header-actions {
100
- .p-button-text.p-button-rounded {
101
- width: 2rem;
102
- height: 2rem;
103
- border-radius: 50%;
104
-
105
- &:hover {
106
- background-color: rgba(0, 0, 0, 0.1);
107
- }
108
- }
109
- }
110
-
111
- // Custom PrimeNG Sidebar Styles
112
- ::ng-deep {
113
- .p-sidebar {
114
- .p-sidebar-header {
115
- // padding: 1.5rem 1.5rem 0 1.5rem;
116
- border-bottom: 1px solid #e9ecef;
117
- margin-bottom: 1rem;
118
- background-color: #f8f9fa;
119
- }
120
-
121
- .p-sidebar-content {
122
- padding: 0 1.5rem 1.5rem 1.5rem;
123
- height: calc(100% - 80px);
124
- overflow-y: auto;
125
- }
126
-
127
- &.p-sidebar-right {
128
- .p-sidebar-content {
129
- padding-left: 1.5rem;
130
- padding-right: 1.5rem;
131
- }
132
- }
133
-
134
- &.p-sidebar-left {
135
- .p-sidebar-content {
136
- padding-left: 1.5rem;
137
- padding-right: 1.5rem;
138
- }
139
- }
140
- }
141
-
142
- // Responsive adjustments
143
- @media (max-width: 768px) {
144
- .p-sidebar {
145
- width: 100% !important;
146
- max-width: 100% !important;
147
-
148
- .p-sidebar-header {
149
- padding: 1rem 1rem 0 1rem;
150
- }
151
-
152
- .p-sidebar-content {
153
- padding: 0 1rem 1rem 1rem;
154
- }
155
- }
156
- }
157
- }