cat-documents-ng 0.2.56 → 0.2.57

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.
@@ -1 +1 @@
1
- {"version":3,"file":"cat-documents-ng.mjs","sources":["../../../projects/cat-document-lib/src/Shared/constant/SHARED.ts","../../../projects/cat-document-lib/src/Shared/constant/ERROR.ts","../../../projects/cat-document-lib/src/lib/document/state/document.state.ts","../../../projects/cat-document-lib/src/lib/document/state/document.store.ts","../../../projects/cat-document-lib/src/Shared/constant/URLS.ts","../../../projects/cat-document-lib/src/Shared/services/app-config.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.query.ts","../../../projects/cat-document-lib/src/lib/document/services/document-http.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload.service.ts","../../../projects/cat-document-lib/src/lib/document/services/file-format.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-business.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-form.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-data.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.html","../../../projects/cat-document-lib/src/lib/document/services/user-list.service.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/status-calculator.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.html","../../../projects/cat-document-lib/src/lib/document/components/common-sidebar/common-sidebar.component.ts","../../../projects/cat-document-lib/src/lib/document/components/common-sidebar/common-sidebar.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.html","../../../projects/cat-document-lib/src/Shared/constant/PERMISSIONS.ts","../../../projects/cat-document-lib/src/Shared/services/session.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-table-builder.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-list.service.ts","../../../projects/cat-document-lib/src/lib/document/directives/permission.directive.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-viewer.service.ts","../../../projects/cat-document-lib/src/lib/document/constant/DOCUMENT_HISTORY.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history-style.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-actions.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-menu.service.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.html","../../../projects/cat-document-lib/src/Shared/services/global-error.handler.ts","../../../projects/cat-document-lib/src/lib/document/directives/document.directive.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.html","../../../projects/cat-document-lib/src/Shared/shared.module.ts","../../../projects/cat-document-lib/src/lib/document/document.module.ts","../../../projects/cat-document-lib/src/public-api.ts","../../../projects/cat-document-lib/src/cat-documents-ng.ts"],"sourcesContent":["/**\r\n * The `SHARED` class contains shared constants used across the application.\r\n * These constants are related to document statuses and other shared data.\r\n */\r\nexport class SHARED {\r\n \r\n /**\r\n * Represents the info.\r\n */\r\n static UNKNOWN_USER = 'Unknown User'\r\n /**\r\n * Represents the info.\r\n */\r\n static ACTIONS = 'actions'\r\n /**\r\n * Represents the info.\r\n */\r\n static VISIBLE = 'visible'\r\n /**\r\n * Represents the info.\r\n */\r\n static HIDDEN = 'hidden'\r\n\r\n static NO_DOCUMENTS_FOUND = 'No documents found'\r\n static DOCUMENT_TYPES_DELETE = 'DocumentTypes-DELETE'\r\n\r\n /**\r\n * Represents the info.\r\n */\r\n static APPLICATION_DOCS = 'Application Docs'\r\n /**\r\n * Represents the info.\r\n */\r\n static INFO = 'info'\r\n /**\r\n * Represents the success.\r\n */\r\n static SUCCESS = 'success'\r\n /**\r\n * Represents the warning.\r\n */\r\n static WARNING = 'warning'\r\n /**\r\n * Represents the warning.\r\n */\r\n static DANGER = 'danger'\r\n /**\r\n * Represents the stores userData.\r\n */\r\n static SESSIONKEY = 'userData';\r\n /**\r\n * Represents the count of missing files.\r\n */\r\n static MISSINGCOUNT = 2;\r\n\r\n /**\r\n * Represents the count of pending files.\r\n */\r\n static PENDINGCOUNT = 3;\r\n\r\n /**\r\n * Represents an empty string.\r\n */\r\n static EMPTY = \"\";\r\n\r\n /**\r\n * Represents an true.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static TRUE: boolean = true;\r\n\r\n\r\n /**\r\n * Represents an false.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static FALSE: boolean = false;\r\n\r\n /**\r\n * Represents an INITIAL_COUNT.\r\n */\r\n static INITIAL_COUNT = 0\r\n /**\r\n * Represents an INITIAL_VALUE.\r\n */\r\n static INITIAL_VALUE = 0\r\n\r\n /**\r\n * Represents the constant value for one (1).\r\n * @static\r\n * @type {number}\r\n */\r\n static ONE: number = 1\r\n\r\n /**\r\n * Represents the constant value for two (2).\r\n * @static\r\n * @type {number}\r\n */\r\n static TWO: number = 2\r\n\r\n /**\r\n * Represents the constant value for ten (10).\r\n * @static\r\n * @type {number}\r\n */\r\n static TEN: number = 10\r\n\r\n /**\r\n * Represents the constant string value 'files' used for file-related operations.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE: string = 'file';\r\n\r\n /**\r\n * Query parameter for menu item filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static MENU_ITEM_PARAM: string = 'menuItem';\r\n\r\n /**\r\n * Query parameter for user ID filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static USER_ID_PARAM: string = 'userId';\r\n\r\n /**\r\n * Query parameter for status filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_PARAM: string = 'status';\r\n\r\n /**\r\n * Represents the array of file size units ('B', 'KB', 'MB') used for file size formatting.\r\n * @static\r\n * @type {string[]}\r\n */\r\n static FILE_SIZE_UNITS: string[] = ['B', 'KB', 'MB'];\r\n\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SEVERITY: string = 'error'\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SUCCESS_SEVERITY: string = 'success'\r\n\r\n /**\r\n * Show upload summery if it's failed.\r\n * @static\r\n * @type {'Upload Failed'}\r\n */\r\n static UPLOAD_SUMMERY: string = 'Upload Failed'\r\n\r\n /**\r\n * Show upload summery if it's success.\r\n * @static\r\n * @type {'Document uploaded successfully.'}\r\n */\r\n static UPLOAD_SUCCESS: string = 'Document uploaded successfully.'\r\n\r\n /**\r\n * Represent empty array.\r\n * @static\r\n * @type {{}}\r\n */\r\n static EMPTY_ARRAY = []\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT_ID: string = 'contextId'\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CATEGORY: string = 'category'\r\n\r\n /**\r\n * Represent fileSize.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE_SIZE: string = 'fileSize'\r\n /**\r\n * Represent documentName.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_NAME: string = 'documentName'\r\n /**\r\n * Represent documentTypeId.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPE_ID: string = 'documentTypeId'\r\n /**\r\n * Represent blob.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT: string = 'document';\r\n /**\r\n * Represent none.\r\n * @static\r\n * @type {string}\r\n */\r\n static NONE: string = 'none';\r\n\r\n /**\r\n * Represent upload summery.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_SUMMERY: string = 'Form Data Missing'\r\n\r\n /**\r\n * Represent upload error details.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_DETAILS: string = 'Required form data is missing. Please ensure the document and all required fields are provided.'\r\n\r\n /**\r\n * Represents the message prefix for a successful document name update.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPDATE_DOCUMENT_NAME: string = 'Document name updated for ID:'\r\n static WIDTH = '500px'\r\n static BASEZINDEX = 1000\r\n static CLOSE_ICON = 'pi pi-times'\r\n static SAVE = 'Save'\r\n static UPLOAD_PROGRESS_100 = 100\r\n static UPLOAD_PROGRESS_10 = 10\r\n static APPLICANT = 'Applicant'\r\n static CATAGORIES = 'catagories'\r\n static DOCUMENTS = 'Documents'\r\n static Menu = [\r\n {\r\n label: 'Applicant',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n label: 'Identity',\r\n icon: 'ri-id-card-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Income',\r\n icon: 'ri-money-pound-circle-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Affordability',\r\n icon: 'ri-calculator-line',\r\n badge: \"2/8\"\r\n },\r\n {\r\n label: 'Cradit conduct',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n label: 'KYC',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Welcome Call',\r\n icon: 'ri-calendar-event-fill'\r\n },\r\n {\r\n label: 'Gatehouse Bank Exposure',\r\n badge: \"2/4\",\r\n icon: 'ri-calendar-event-fill'\r\n }\r\n ]\r\n },\r\n {\r\n label: 'Application',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n badge: \"2/4\",\r\n label: 'Deposit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Direct Debit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n label: 'Property',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Completions',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Summary',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'System Documents',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Ad Hoc',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Miscellaneous',\r\n icon: 'ri-mail-open-line'\r\n }\r\n ]\r\n }\r\n ];\r\n static APPLICATION = 'Application'\r\n static APPLICANTS = 'Applicants'\r\n static EMPTY_SPACE = ' '\r\n\r\n static COLORS = ['orange', 'blue', 'green', 'grey', 'purple']\r\n\r\n static COLOR_MAP = {\r\n 'orange': '#f97316',\r\n 'blue': '#3b82f6',\r\n 'green': '#10b981',\r\n 'grey': '#6b7280',\r\n 'purple': '#8b5cf6'\r\n }\r\n static DEFAULT_COLOR = '#3b82f6'\r\n static STATUS_WITH_DASH = 'status-'\r\n static ICON_WITH_DASH = 'icon-'\r\n static SEARCH_KEY = 'searchKey'\r\n static APPROVED = 'approved'\r\n static UPLOADED = 'uploaded'\r\n static PENDING = 'Pending'\r\n static DOT = '.'\r\n static PDF = 'PDF'\r\n static PENDING_STATUS = 'pending'\r\n \r\n // File extension constants\r\n static JPG = 'JPG'\r\n static PNG = 'PNG'\r\n static XLSX = 'XLSX'\r\n \r\n // Status constants\r\n static APPROVED_STATUS = 'approved'\r\n static ALERT_STATUS = 'alert'\r\n static UPLOADED_STATUS = 'uploaded'\r\n static REVIEWING_STATUS = 'reviewing'\r\n static REJECTED_STATUS = 'rejected'\r\n static REQUESTED_STATUS = 'document requested'\r\n \r\n // Status class constants\r\n static STATUS_PENDING_CLASS = 'status-pending'\r\n static STATUS_APPROVED_CLASS = 'status-approved'\r\n static STATUS_ALERT_CLASS = 'status-alert'\r\n static STATUS_UPLOADED_CLASS = 'status-uploaded'\r\n static STATUS_REVIEWING_CLASS = 'status-reviewing'\r\n static STATUS_REJECTED_CLASS = 'status-rejected'\r\n \r\n // Icon constants\r\n static ICON_CHECK = 'pi pi-check'\r\n static ICON_EXCLAMATION_TRIANGLE = 'pi pi-exclamation-triangle'\r\n static ICON_CLOUD_UPLOAD = 'pi pi-cloud-upload'\r\n static ICON_EYE = 'pi pi-eye'\r\n static ICON_TIMES = 'pi pi-times'\r\n static ICON_CLOCK = 'pi pi-clock'\r\n \r\n // File type icons\r\n static ICON_FILE_PDF = 'pi pi-file-pdf'\r\n static ICON_IMAGE = 'pi pi-image'\r\n static ICON_FILE_EXCEL = 'pi pi-file-excel'\r\n static ICON_FILE = 'pi pi-file'\r\n static ICON_DELETE = 'ri-delete-bin-6-line'\r\n \r\n // Cell type constants\r\n static CELL_TYPE_DOCUMENT = 'document'\r\n static CELL_TYPE_STATUS = 'status'\r\n static CELL_TYPE_ACTIONS = 'actions'\r\n static CELL_TYPE_TEXT = 'text'\r\n \r\n /**\r\n * Document table columns configuration\r\n * @static\r\n * @type {Array<{field: string, header: string, type: 'text' | 'status' | 'document' | 'actions', width: string}>}\r\n */\r\n static DOCUMENT_TABLE_COLUMNS: Array<{\r\n field: string;\r\n header: string;\r\n type: 'text' | 'status' | 'document' | 'actions';\r\n width: string;\r\n }> = [\r\n {\r\n field: 'docName',\r\n header: 'Document',\r\n type: 'document',\r\n width: '35%'\r\n },\r\n {\r\n field: 'status',\r\n header: 'Status',\r\n type: 'status',\r\n width: '15%'\r\n },\r\n {\r\n field: 'ownerName',\r\n header: 'Owner',\r\n type: 'text',\r\n width: '20%'\r\n },\r\n {\r\n field: 'uploadedOn',\r\n header: 'Uploaded',\r\n type: 'text',\r\n width: '15%'\r\n },\r\n {\r\n field: 'actions',\r\n header: 'Actions',\r\n type: 'actions',\r\n width: '15%'\r\n }\r\n ];\r\n\r\n static DOCUMENT_REQUESTED = 'document-requested';\r\n static DOCUMENT_UPLOADED = 'document-uploaded';\r\n static DOCUMENT_REJECTED = 'document-rejected';\r\n static DOCUMENT_ACCEPTED = 'document-accepted';\r\n\r\n // Document Actions Constants\r\n static ACCEPT_ACTION = 'accept';\r\n static REJECT_ACTION = 'reject';\r\n static DELETE_ACTION = 'delete';\r\n \r\n static ACCEPT_CONFIRM_HEADER = 'Accept confirm';\r\n static REJECT_CONFIRM_HEADER = 'Reject Confirm';\r\n \r\n static ACCEPT_NOTE_LABEL = 'Write a note for Acceptance';\r\n static REJECT_NOTE_LABEL = 'Write a note for rejection';\r\n \r\n static ACCEPT_NOTE_PLACEHOLDER = 'Write a note for Acceptance';\r\n static REJECT_NOTE_PLACEHOLDER = 'Write a note for rejection';\r\n \r\n static CANCEL_BUTTON_LABEL = 'Cancel';\r\n static ACCEPT_BUTTON_LABEL = 'Accept';\r\n static REJECT_BUTTON_LABEL = 'Reject';\r\n \r\n static DOCUMENT_ACCEPTED_MESSAGE = 'Document accepted successfully';\r\n static DOCUMENT_REJECTED_MESSAGE = 'Document rejected successfully';\r\n static DOCUMENT_UPDATE_ERROR_MESSAGE = 'Failed to update document. Please try again.';\r\n \r\n static STATUS_APPROVED = 'Approved';\r\n static STATUS_REJECTED = 'Rejected';\r\n \r\n // Document Status Constants\r\n static STATUS_PENDING = 'pending';\r\n static STATUS_ACCEPTED = 'accepted';\r\n static STATUS_REJECTED_LOWERCASE = 'rejected';\r\n static STATUS_DECLINED = 'declined';\r\n \r\n // Document Card CSS Classes\r\n static CARD_PENDING = 'pending-card';\r\n static CARD_ACCEPTED = 'accepted-card';\r\n static CARD_REJECTED = 'rejected-card';\r\n \r\n // Document Button CSS Classes\r\n static BUTTON_SECONDARY_REJECT = 'secondary-reject';\r\n static BUTTON_PRIMARY_REJECT = 'primary-reject';\r\n static BUTTON_DEFAULT_REJECT = 'default-reject';\r\n static BUTTON_PRIMARY_ACCEPT = 'primary-accept';\r\n static BUTTON_SECONDARY_ACCEPT = 'secondary-accept';\r\n static BUTTON_DEFAULT_ACCEPT = 'default-accept';\r\n \r\n // Document Action Button Labels\r\n static BUTTON_LABEL_REJECT = 'Reject';\r\n static BUTTON_LABEL_REJECTED = 'Rejected';\r\n static BUTTON_LABEL_ACCEPT = 'Accept';\r\n static BUTTON_LABEL_ACCEPTED = 'Accepted';\r\n \r\n}\r\n\r\n/**\r\n * `DUMMYDOCUMENTLIST` is a mock list of document objects used for testing and development purposes.\r\n * Each document includes an ID, file name, status, and document URL.\r\n */\r\nexport const DUMMYDOCUMENTLIST = [\r\n {\r\n _id: 1,\r\n fileName: 'Document 1',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 2,\r\n fileName: 'Document 2',\r\n status: 'verified',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 3,\r\n fileName: 'Document 3',\r\n status: 'sentReminder',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 4,\r\n fileName: 'Document 4',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n];\r\n\r\n/**\r\n * `FOLDERPANEL` is a mock list of folder data representing various folders in the application.\r\n * Each folder contains an ID, file count, text description, missing files count, and pending files count.\r\n */\r\nexport const USERLIST = [\r\n {\r\n _id : \"1\",\r\n username: \"John Smith\",\r\n approveDocumentCount: 15,\r\n pendingDocumentCount: 3\r\n },\r\n {\r\n _id : \"2\",\r\n username: \"Sarah Johnson\",\r\n approveDocumentCount: 8,\r\n pendingDocumentCount: 7\r\n },\r\n {\r\n _id : \"3\",\r\n username: \"Michael Brown\",\r\n approveDocumentCount: 22,\r\n pendingDocumentCount: 1\r\n },\r\n {\r\n _id : \"4\",\r\n username: \"Emily Davis\",\r\n approveDocumentCount: 12,\r\n pendingDocumentCount: 5\r\n }\r\n];\r\n\r\nexport const SAMPLE_STATUS_DATA = [\r\n {\r\n status: \"Approved\",\r\n count: 4,\r\n color: \"#10b981\",\r\n icon: \"pi pi-check\"\r\n },\r\n {\r\n status: \"Pending\",\r\n count: 5,\r\n color: \"#6b7280\",\r\n icon: \"pi pi-clock\"\r\n },\r\n {\r\n status: \"Reviewing\",\r\n count: 1,\r\n color: \"#f59e0b\",\r\n icon: \"pi pi-search\"\r\n },\r\n {\r\n status: \"Rejected\",\r\n count: 2,\r\n color: \"#ef4444\",\r\n icon: \"pi pi-times\"\r\n },\r\n {\r\n status: \"Alert\",\r\n count: 12,\r\n color: \"#dc2626\",\r\n icon: \"pi pi-exclamation-circle\"\r\n }\r\n]; \r\n\r\n/**\r\n * Dummy data for sumaery.\r\n * @type {{}}\r\n */\r\nexport const DUMMYSUMMARY = [\r\n {\r\n status: 'Valuation report requested on 10th Oct 2024',\r\n date: '15/10/2020 10:30',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#9C27B0',\r\n image: 'game-controller.jpg',\r\n },\r\n {\r\n status: 'Valuation report received on 13th Oct 2024',\r\n date: '15/10/2020 14:00',\r\n icon: 'pi pi-cog',\r\n color: '#673AB7',\r\n },\r\n {\r\n status: 'Waiting for Valuation Report to be accepted',\r\n date: '15/10/2020 16:15',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#FF9800',\r\n },\r\n];\r\n\r\n/**\r\n * Dummy data for list box.\r\n * @type {{}}\r\n */\r\nexport const COUNTRIES = [\r\n { name: 'Any Word', code: 'NY', checked: false },\r\n { name: 'Case Sensitive', code: 'RM', checked: false },\r\n { name: 'Wildcard Search', code: 'LDN', checked: false },\r\n { name: 'Whole Word Only', code: 'IST', checked: false },\r\n];\r\n\r\n/**\r\n * Default supported image types.\r\n * @type {{}}\r\n */\r\nexport const SUPPORTED_IMAGE_TYPES = [\r\n 'image/PNG', \r\n 'image/png', \r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/gif',\r\n 'image/bmp',\r\n 'image/tiff',\r\n 'image/webp',\r\n];\r\n\r\n/**\r\n * @constant {Array<{label: string, value: string, files: string[]}>} DOCUMENTTYPES\r\n * An array of document type objects containing labels, values, and associated files.\r\n */\r\n\r\nexport const DOCUMENTTYPES = [\r\n {\r\n label: \"BankStatement\",\r\n value: \"bank_statement\",\r\n },\r\n {\r\n label: \"Payslip\",\r\n value: \"payslip\",\r\n },\r\n {\r\n label: \"Selfie\",\r\n value: \"selfie\",\r\n },\r\n {\r\n label: \"Other\",\r\n value: \"other\",\r\n }\r\n];\r\n\r\nexport const DocumentAlertList = [\r\n { status: 'Pending', isAlert: true, alertMessage: 'The name on the payslip does not match either the driver name or the policyholder name.' },\r\n { status: 'Verified', isAlert: false, alertMessage: 'Document is verified successfully.' },\r\n];\r\n\r\n/**\r\n * Dummy data for document sections with detailed document lists.\r\n * Based on the document management interface structure.\r\n * @type {Array<{header: string, description: string, pendingDocument: number, approvedDocument: number, list: Array<{documentName: string, documentType: string, documentUrl: string, status: string, applicantName: string, uploadedTime: string}>}>}\r\n */\r\nexport const DUMMY_DOCUMENT_SECTIONS = [\r\n {\r\n header: \"Identity\",\r\n description: \"Personal identification documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n },\r\n {\r\n header: \"Income\",\r\n description: \"Personal Income documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n }\r\n];\r\n","/**\r\n * A utility class containing common error messages.\r\n * @class ERRORS\r\n */\r\nexport class ERRORS {\r\n /**\r\n * Error message for invalid recipient.\r\n * @static\r\n * @type {string}\r\n */\r\n static INVALID_RECIPIENT = \"Invalid recipient: The recipient cannot be empty.\";\r\n \r\n static NO_VALUE_FOUND = \"No value found\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_DOCUMENTS = \"Error fetching documents:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_FOLDERS = \"Error fetching folders:\";\r\n \r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_ALLDOCUMENT_MISSING = \"allDocumentTypes is missing in the response:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_DOCUMENT_TYPES = \"Error fetching document types:\";\r\n\r\n static ERROR_DOCUMENT_CATAGORY = 'Error fetching document categories:'\r\n static NO_DOCUMENT_URL = 'No document URL provided for download'\r\n static DOWNLOAD_FAIL = 'Download failed:'\r\n static ERROR_DELETING_DOCUMENT = 'Error deleting document:'\r\n static ERROR_RECEIVING_DOCUMENT_LIST = 'Error receiving document list response:'\r\n static CONTEXT_ID_REQUIRED = 'Context ID is required to fetch status data'\r\n static ERROR_FETCHING_STATUS_DATA = 'Error fetching status data:'\r\n static ERROR_FETCHING_USER_LIST = 'Error fetching user list with filters:'\r\n static ERROR_FETCHING_DOCUMENT_LIST = 'Error fetching document list:'\r\n static ERROR_FETCHING_DOCUMENT_CATEGORIES = 'Error fetching document categories:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_STATUS = 'Error fetching documents by status:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_CATEGORY = 'Error fetching documents by category:'\r\n static ERROR_CALLING_API_WITH_SELECTION = 'Error calling API with selection:'\r\n}\r\n","import { EntityState } from '@datorama/akita';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Represents the state of the documents in the application.\r\n * This interface extends Akita's `EntityState` to include additional properties\r\n * for managing document-specific data, such as `records`, `filteredRecords` and `folderId`.\r\n * @interface DocumentState\r\n * @property {any[]} records - A collection of records related to documents.\r\n * @property {any[]} filteredRecords - A collection of filteredRecords related to documents.\r\n * @property {string | null} folderId - The ID of the currently selected folder, or `null` if no folder is selected.\r\n * @property {boolean} isDialogOpen - A flag indicating whether a dialog is open.\r\n */\r\nexport interface DocumentState extends EntityState<DocumentModel, string> {\r\n records: DocumentModel[];\r\n folderId: string | null;\r\n isDialogOpen: boolean;\r\n filteredRecords:DocumentModel[];\r\n dropdownOptions: DocumentTypeModel[];\r\n uploadedDocumentFiles: DocumentModel[];\r\n parentDocumentTypeId: string | null;\r\n documentAlert:DocumentAlertModel\r\n folders:FolderBlockModel[]\r\n messages: Message[]\r\n documentList : DocumentModel[]\r\n documentCategories: DocumentCategory[];\r\n selectedMenuItem: string | null; // Stores the _id of the selected menu item, not the label\r\n selectedUserId: string | null;\r\n selectedStatus: string | null;\r\n searchKey: string | null; // Search term for filtering documents\r\n showUserList: boolean;\r\n currentDocument: DocumentModel | null;\r\n userList: UserListModel[];\r\n statusData: StatusDataModel[];\r\n documentListResponse: DocumentListResponse[] | null;\r\n \r\n // Document Viewer State\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n/**\r\n * Creates the initial state for the `DocumentState` store.\r\n * This function provides default values for all properties in the `DocumentState` interface,\r\n * ensuring the store starts with a consistent initial structure.\r\n * @returns {DocumentState} The initial state of the document store.\r\n */\r\nexport function createInitialState(): DocumentState {\r\n return {\r\n records: [],\r\n filteredRecords: [],\r\n folderId: null,\r\n isDialogOpen: false,\r\n dropdownOptions: [], \r\n uploadedDocumentFiles: [],\r\n parentDocumentTypeId: null,\r\n documentAlert: {_id:''},\r\n folders:[],\r\n messages:[],\r\n documentList : [],\r\n documentCategories: [],\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true,\r\n currentDocument: null,\r\n userList: [],\r\n statusData: [],\r\n documentListResponse: null,\r\n \r\n // Document Viewer State\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EntityStore, StoreConfig } from '@datorama/akita';\r\nimport { createInitialState, DocumentState } from './document.state';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Store that manages the state of documents in the application.\r\n * The `DocumentStore` class extends Akita's `EntityStore` to manage the entity state for documents.\r\n * It uses the `createInitialState` function to initialize the store with default values and \r\n * is configured with the name `'documents'`.\r\n * @augments EntityStore<DocumentState>\r\n */\r\n@Injectable({ providedIn: 'root' })\r\n@StoreConfig({ name: 'documents' })\r\nexport class DocumentStore extends EntityStore<DocumentState> {\r\n /**\r\n * Creates an instance of `DocumentStore` with the initial state of the documents.\r\n */\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n \r\n setUploadedDocumentFiles(files: any[]) {\r\n this.update({ uploadedDocumentFiles: files });\r\n }\r\n\r\n setFolders(folders: any) {\r\n this.update({ folders: folders });\r\n }\r\n \r\n setDocumentTypes(documentType: any) {\r\n this.update({ uploadedDocumentFiles: documentType });\r\n }\r\n\r\n setDocumentAlert(documentAlert: any) { \r\n this.update({ documentAlert : documentAlert });\r\n }\r\n\r\n setParentDocumentTypeId(parentDocumentTypeId: string) {\r\n this.update({ parentDocumentTypeId });\r\n }\r\n \r\n setMessage(message: Message[]) {\r\n this.update({ messages : message });\r\n }\r\n\r\n setDocumentList(documents: DocumentModel[]) {\r\n this.update({ documents : documents });\r\n }\r\n\r\n setDocumentCategories(categories: DocumentCategory[]) {\r\n this.update({ documentCategories: categories });\r\n }\r\n\r\n // New methods for selection state management\r\n setSelectedMenuItem(menuItem: string | null) {\r\n this.update({ selectedMenuItem: menuItem });\r\n }\r\n\r\n setSelectedUserId(userId: string | null) {\r\n this.update({ selectedUserId: userId });\r\n }\r\n\r\n setSelectedStatus(status: string | null) {\r\n this.update({ selectedStatus: status });\r\n }\r\n\r\n setSearchKey(searchKey: string | null) {\r\n this.update({ searchKey: searchKey });\r\n }\r\n\r\n // Method to update all selection properties at once\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null) {\r\n this.update({ \r\n selectedMenuItem: menuItem,\r\n selectedUserId: userId,\r\n selectedStatus: status,\r\n searchKey: searchKey\r\n });\r\n }\r\n\r\n // Method to clear all selection state\r\n clearSelectionState() {\r\n this.update({\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true\r\n });\r\n }\r\n\r\n // Method to control user list visibility\r\n setShowUserList(show: boolean) {\r\n this.update({ showUserList: show });\r\n }\r\n\r\n // Method to set the current document\r\n setCurrentDocument(document: DocumentModel | null) {\r\n this.update({ currentDocument: document });\r\n }\r\n\r\n // Method to set the user list\r\n setUserList(userList: UserListModel[]) {\r\n this.update({ userList: userList });\r\n }\r\n\r\n // Method to set the status data\r\n setStatusData(statusData: StatusDataModel[]) {\r\n this.update({ statusData: statusData });\r\n }\r\n\r\n // Method to set the document list response\r\n setDocumentListResponse(response: DocumentListResponse[] | null) {\r\n this.update({ documentListResponse: response });\r\n }\r\n\r\n // Document Viewer State Management Methods\r\n setSelectedDocument(document: DocumentListItem | undefined) {\r\n this.update({ selectedDocument: document });\r\n }\r\n\r\n setDocumentHistory(history: DocumentHistorySection[]) {\r\n this.update({ documentHistory: history });\r\n }\r\n\r\n setShowDocumentHistory(show: boolean) {\r\n this.update({ showDocumentHistory: show });\r\n }\r\n\r\n setIsActionLoading(loading: boolean) {\r\n this.update({ isActionLoading: loading });\r\n }\r\n\r\n setDocumentStatus(status: 'pending' | 'accepted' | 'rejected') {\r\n this.update({ documentStatus: status });\r\n }\r\n\r\n setDocumentIsUploaded(uploaded: boolean) {\r\n this.update({ documentIsUploaded: uploaded });\r\n }\r\n\r\n setAlertData(alertData: any) {\r\n this.update({ alertData: alertData });\r\n }\r\n\r\n // Method to update all document viewer state at once\r\n updateDocumentViewerState(\r\n document?: DocumentListItem,\r\n history?: DocumentHistorySection[],\r\n showHistory?: boolean,\r\n loading?: boolean,\r\n status?: 'pending' | 'accepted' | 'rejected',\r\n uploaded?: boolean,\r\n alertData?: any\r\n ) {\r\n const updates: Partial<DocumentState> = {};\r\n \r\n if (document !== undefined) updates.selectedDocument = document;\r\n if (history !== undefined) updates.documentHistory = history;\r\n if (showHistory !== undefined) updates.showDocumentHistory = showHistory;\r\n if (loading !== undefined) updates.isActionLoading = loading;\r\n if (status !== undefined) updates.documentStatus = status;\r\n if (uploaded !== undefined) updates.documentIsUploaded = uploaded;\r\n if (alertData !== undefined) updates.alertData = alertData;\r\n \r\n this.update(updates);\r\n }\r\n\r\n // Method to clear document viewer state\r\n clearDocumentViewerState() {\r\n this.update({\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n });\r\n }\r\n}\r\n","/**\r\n * Class that holds the URLs used throughout the application.\r\n * These URLs are typically used for making API requests and accessing various resources.\r\n * @class URLS\r\n * @typedef {URLS}\r\n */\r\nexport class URLS {\r\n /**\r\n * The URL to fetch the application configuration file.\r\n * This JSON file typically contains settings and options for the application.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONFIGFILEURL = \"assets/config/api.config.json\";\r\n\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD_FILE = \"documents/uploadFile\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD = \"Documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS = \"documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS_CATAGORIES = \"documents/getAllCategoriesByApplicationId\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT = \"?contextId=\";\r\n\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPES = \"documentTypes\";\r\n /**\r\n * The URL endpoint for getting categories by source (Applicant/Application).\r\n * Used to fetch document categories based on the selected source.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_CATEGORIES_BY_SOURCE = \"documentTypes/getAllCategoriesBySource/\";\r\n /**\r\n * The URL endpoint for getting document types by category ID.\r\n * Used to fetch document types based on the selected category.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_DOCUMENT_TYPES_BY_CATEGORY = \"documentTypes/getAllDocumentTypesByCategoryId/\";\r\n /**\r\n * The URL endpoint for saving document upload data.\r\n * Used to save the complete document upload information.\r\n * @static\r\n * @type {string}\r\n */\r\n static SAVE_DOCUMENT_UPLOAD = \"documents/saveDocumentUpload\";\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static FOLDERS = \"/folders?contextId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static ALERT_BY_DOCUMENT_ID = \"alerts?documentId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static PARENT_DOCUMENT_TYPE_ID = \"parentDocumentType?parentDocumentTypeId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static USERLIST = \"documents/getContextIdListByApplicationId/\";\r\n\r\n /**\r\n * The URL endpoint for getting document status count by context ID.\r\n * Used to fetch status data with applicationId, contextId, and category parameters.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_DOCUMENT_COUNT = \"documents/getStatusDocumentCountByContextId/\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n \r\n static CONTEXT_ID = \"&contextId=\";\r\n static GETALL = \"documents/getAllByContextId\";\r\n static DOCUMENT_LIST = \"list\";\r\n static DOCUMENT_HISTORY = \"documents/getDocumentHistoryByDocumentId/\";\r\n static DELETE_DOCUMENT = \"documents/deleteDocumentByDocumentId/\";\r\n static UPDATE_DOCUMENT_STATUS = \"documents/updateDocumentStatusByDocumentId/\";\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { URLS } from '../constant/URLS';\r\n\r\n/**\r\n * Service that handles loading and providing configuration settings for the application.\r\n * It fetches configuration data from a remote server and exposes various configuration options.\r\n * @class AppConfigService\r\n * @typedef {AppConfigService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppConfigService {\r\n\r\n /**\r\n * Holds the configuration data loaded from the server.\r\n * @private\r\n * @type {*}\r\n */\r\n private appConfig: any;\r\n\r\n /**\r\n * Creates an instance of AppConfigService.\r\n * Initializes the HttpClient for making HTTP requests.\r\n * @class\r\n * @param {HttpClient} http - The HttpClient service used for making HTTP requests.\r\n */\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Loads the application configuration from the server by making an HTTP request to the configuration URL.\r\n * This method retrieves the configuration data and assigns it to the appConfig property.\r\n * @async\r\n * @returns {*}\r\n */\r\n async loadAppConfig() {\r\n try {\r\n this.appConfig = await firstValueFrom(this.http.get(URLS.CONFIGFILEURL));\r\n } catch (error) {\r\n throw new Error(\"Api url is missing.\")\r\n }\r\n }\r\n \r\n\r\n /**\r\n * Returns the base URL for the API from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get apiBaseUrl() {\r\n return this.appConfig?.documentApiUrl;\r\n }\r\n\r\n /**\r\n * Returns the local server API URL from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get localServerApi() {\r\n return this.appConfig?.localServerApi;\r\n }\r\n\r\n /**\r\n * Returns the visibility options from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get visibilityOptions() {\r\n return this.appConfig?.visibilityOption;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DocumentStore } from './document.store';\r\nimport { Observable, tap } from 'rxjs';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { DocumentModel } from '../models/document.model';\r\n\r\n/**\r\n * Service for managing document-related operations.\r\n * The `DocumentService` acts as a bridge between the application and the backend API for handling document-related data.\r\n * It interacts with the `DocumentStore` for state management and uses `HttpClient` for making HTTP requests.\r\n * Creates an instance of `DocumentService`.\r\n * @param {DocumentStore} documentStore - The store that manages the state of documents.\r\n * @param {HttpClient} http - The Angular HTTP client for making API requests.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Sends a request to create a new document.\r\n * @param {*} entity - The data of the document to be created.\r\n * @returns {Observable<any>} Observable that emits the newly created document.\r\n */\r\n create(entity: any): Observable<any> {\r\n const headers = { 'Authorization': 'Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9' };\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(\r\n tap((newEntity: any) => this.documentStore.add(newEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches all documents from the backend.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits an array of documents.\r\n */\r\n getAll(): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}`).pipe(\r\n tap((entities: DocumentModel[]) => this.documentStore.set(entities))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @returns {Observable<any>} Observable that emits the retrieved document.\r\n */\r\n getById(id: string): Observable<any> {\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`).pipe(\r\n tap((entity: any) => this.documentStore.upsert(id, entity))\r\n );\r\n }\r\n\r\n /**\r\n * Updates an existing document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @param {DocumentModel} entity - The updated data of the document.\r\n * @returns {Observable<DocumentModel>} Observable that emits the updated document.\r\n */\r\n update(id: string, entity: DocumentModel): Observable<DocumentModel> {\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`, entity).pipe(\r\n tap((updatedEntity: DocumentModel) => this.documentStore.update(id, updatedEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID.\r\n * @param {string} id - The unique identifier of the document to be deleted.\r\n * @returns {Observable<void>} Observable that completes when the document is deleted.\r\n */\r\n delete(id: string): Observable<void> {\r\n return this.http.delete<void>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}/${id}`).pipe(\r\n tap(() => this.documentStore.remove(id))\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryEntity } from '@datorama/akita';\r\nimport { DocumentStore } from './document.store';\r\nimport { DocumentState } from './document.state';\r\nimport { Observable } from 'rxjs';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n\r\n/**\r\n * Query service for managing document state.\r\n * This class extends Akita's `QueryEntity` to provide additional functionality for querying document data.\r\n * @class DocumentQuery\r\n * @typedef {DocumentQuery}\r\n * @augments {QueryEntity<DocumentState>}\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentQuery extends QueryEntity<DocumentState> {\r\n constructor(protected override store: DocumentStore) {\r\n super(store);\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n getParentDocumentTypeId() : string | null {\r\n return this.getValue()['parentDocumentTypeId'];\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n selectParentDocumentTypeId():Observable<string | null> {\r\n return this.select((state) => state['parentDocumentTypeId']);\r\n }\r\n /**\r\n * Selects the set messages.\r\n * @returns {Observable<Message>} Observable that emits the current Message.\r\n */\r\n selectMessages():Observable<Message[]> {\r\n return this.select((state) => state.messages);\r\n }\r\n /**\r\n * Selects the set documents.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits the documets.\r\n */\r\n selectDocumets():Observable<DocumentModel[]> {\r\n return this.select((state) => state.documentList);\r\n }\r\n\r\n /**\r\n * Selects the document categories.\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the document categories.\r\n */\r\n selectDocumentCategories(): Observable<DocumentCategory[]> {\r\n return this.select((state) => state.documentCategories);\r\n }\r\n\r\n // New query methods for selection state\r\n /**\r\n * Selects the currently selected menu item.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected menu item _id (not the label).\r\n */\r\n selectSelectedMenuItem(): Observable<string | null> {\r\n return this.select((state) => state.selectedMenuItem);\r\n }\r\n\r\n /**\r\n * Selects the currently selected user ID.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected user ID.\r\n */\r\n selectSelectedUserId(): Observable<string | null> {\r\n return this.select((state) => state.selectedUserId);\r\n }\r\n\r\n /**\r\n * Selects the currently selected status.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected status.\r\n */\r\n selectSelectedStatus(): Observable<string | null> {\r\n return this.select((state) => state.selectedStatus);\r\n }\r\n\r\n /**\r\n * Selects the current search key.\r\n * @returns {Observable<string | null>} Observable that emits the current search key.\r\n */\r\n selectSearchKey(): Observable<string | null> {\r\n return this.select((state) => state.searchKey);\r\n }\r\n\r\n /**\r\n * Selects all selection state properties (menu item, user ID, status, search key).\r\n * @returns {Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}>} Observable that emits the current selection state.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n selectSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}> {\r\n return this.select((state) => ({\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current selection state values (synchronous).\r\n * @returns {Object} The current selection state values.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n getSelectionState(): {menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null} {\r\n const state = this.getValue();\r\n return {\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n };\r\n }\r\n\r\n /**\r\n * Selects the user list visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current user list visibility.\r\n */\r\n selectShowUserList(): Observable<boolean> {\r\n return this.select((state) => state.showUserList);\r\n }\r\n\r\n /**\r\n * Gets the current user list visibility value (synchronous).\r\n * @returns {boolean} The current user list visibility.\r\n */\r\n getShowUserList(): boolean {\r\n return this.getValue().showUserList;\r\n }\r\n\r\n /**\r\n * Selects the current document.\r\n * @returns {Observable<DocumentModel | null>} Observable that emits the current document.\r\n */\r\n selectCurrentDocument(): Observable<DocumentModel | null> {\r\n return this.select((state) => state.currentDocument);\r\n }\r\n\r\n /**\r\n * Gets the current document value (synchronous).\r\n * @returns {DocumentModel | null} The current document.\r\n */\r\n getCurrentDocument(): DocumentModel | null {\r\n return this.getValue().currentDocument;\r\n }\r\n\r\n /**\r\n * Selects the user list.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list.\r\n */\r\n selectUserList(): Observable<UserListModel[]> {\r\n return this.select((state) => state.userList);\r\n }\r\n\r\n /**\r\n * Gets the current user list value (synchronous).\r\n * @returns {UserListModel[]} The current user list.\r\n */\r\n getUserList(): UserListModel[] {\r\n return this.getValue().userList;\r\n }\r\n\r\n /**\r\n * Selects the status data.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n selectStatusData(): Observable<StatusDataModel[]> {\r\n return this.select((state) => state.statusData);\r\n }\r\n\r\n /**\r\n * Gets the current status data value (synchronous).\r\n * @returns {StatusDataModel[]} The current status data.\r\n */\r\n getStatusData(): StatusDataModel[] {\r\n return this.getValue().statusData;\r\n }\r\n\r\n /**\r\n * Selects the document list response.\r\n * @returns {Observable<DocumentListResponse[] | null>} Observable that emits the document list response.\r\n */\r\n selectDocumentListResponse(): Observable<DocumentListResponse[] | null> {\r\n return this.select((state) => state.documentListResponse);\r\n }\r\n\r\n /**\r\n * Gets the current document list response value (synchronous).\r\n * @returns {DocumentListResponse[] | null} The current document list response.\r\n */\r\n getDocumentListResponse(): DocumentListResponse[] | null {\r\n return this.getValue().documentListResponse;\r\n }\r\n\r\n // Document Viewer State Query Methods\r\n /**\r\n * Selects the selected document for viewing.\r\n * @returns {Observable<DocumentListItem | undefined>} Observable that emits the selected document.\r\n */\r\n selectSelectedDocument(): Observable<DocumentListItem | undefined> {\r\n return this.select((state) => state.selectedDocument);\r\n }\r\n\r\n /**\r\n * Gets the current selected document value (synchronous).\r\n * @returns {DocumentListItem | undefined} The current selected document.\r\n */\r\n getSelectedDocument(): DocumentListItem | undefined {\r\n return this.getValue().selectedDocument;\r\n }\r\n\r\n /**\r\n * Selects the document history.\r\n * @returns {Observable<DocumentHistorySection[]>} Observable that emits the document history.\r\n */\r\n selectDocumentHistory(): Observable<DocumentHistorySection[]> {\r\n return this.select((state) => state.documentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history value (synchronous).\r\n * @returns {DocumentHistorySection[]} The current document history.\r\n */\r\n getDocumentHistory(): DocumentHistorySection[] {\r\n return this.getValue().documentHistory;\r\n }\r\n\r\n /**\r\n * Selects the document history visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current document history visibility.\r\n */\r\n selectShowDocumentHistory(): Observable<boolean> {\r\n return this.select((state) => state.showDocumentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history visibility value (synchronous).\r\n * @returns {boolean} The current document history visibility.\r\n */\r\n getShowDocumentHistory(): boolean {\r\n return this.getValue().showDocumentHistory;\r\n }\r\n\r\n /**\r\n * Selects the action loading state.\r\n * @returns {Observable<boolean>} Observable that emits the current action loading state.\r\n */\r\n selectIsActionLoading(): Observable<boolean> {\r\n return this.select((state) => state.isActionLoading);\r\n }\r\n\r\n /**\r\n * Gets the current action loading value (synchronous).\r\n * @returns {boolean} The current action loading state.\r\n */\r\n getIsActionLoading(): boolean {\r\n return this.getValue().isActionLoading;\r\n }\r\n\r\n /**\r\n * Selects the document status.\r\n * @returns {Observable<'pending' | 'accepted' | 'rejected'>} Observable that emits the current document status.\r\n */\r\n selectDocumentStatus(): Observable<'pending' | 'accepted' | 'rejected'> {\r\n return this.select((state) => state.documentStatus);\r\n }\r\n\r\n /**\r\n * Gets the current document status value (synchronous).\r\n * @returns {'pending' | 'accepted' | 'rejected'} The current document status.\r\n */\r\n getDocumentStatus(): 'pending' | 'accepted' | 'rejected' {\r\n return this.getValue().documentStatus;\r\n }\r\n\r\n /**\r\n * Selects the document uploaded state.\r\n * @returns {Observable<boolean>} Observable that emits the current document uploaded state.\r\n */\r\n selectDocumentIsUploaded(): Observable<boolean> {\r\n return this.select((state) => state.documentIsUploaded);\r\n }\r\n\r\n /**\r\n * Gets the current document uploaded value (synchronous).\r\n * @returns {boolean} The current document uploaded state.\r\n */\r\n getDocumentIsUploaded(): boolean {\r\n return this.getValue().documentIsUploaded;\r\n }\r\n\r\n /**\r\n * Selects the alert data.\r\n * @returns {Observable<any>} Observable that emits the current alert data.\r\n */\r\n selectAlertData(): Observable<any> {\r\n return this.select((state) => state.alertData);\r\n }\r\n\r\n /**\r\n * Gets the current alert data value (synchronous).\r\n * @returns {any} The current alert data.\r\n */\r\n getAlertData(): any {\r\n return this.getValue().alertData;\r\n }\r\n\r\n /**\r\n * Selects all document viewer state properties.\r\n * @returns {Observable<{selectedDocument?: DocumentListItem, documentHistory: DocumentHistorySection[], showDocumentHistory: boolean, isActionLoading: boolean, documentStatus: 'pending' | 'accepted' | 'rejected', documentIsUploaded: boolean, alertData: any}>} Observable that emits the current document viewer state.\r\n */\r\n selectDocumentViewerState(): Observable<{\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n }> {\r\n return this.select((state) => ({\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state values (synchronous).\r\n * @returns {Object} The current document viewer state values.\r\n */\r\n getDocumentViewerState(): {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n } {\r\n const state = this.getValue();\r\n return {\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { catchError, EMPTY, Observable, of, tap, throwError } from 'rxjs';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Service for making HTTP requests related to documents.\r\n * @class DocumentHttpService\r\n * @typedef {DocumentHttpService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DocumentHttpService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getFoldersData(contextId:string | undefined): Observable<FolderBlockModel[]> {\r\n if(!contextId) return EMPTY;\r\n return this.http.get<FolderBlockModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}${URLS.FOLDERS}${contextId}`).pipe(\r\n tap((folders: FolderBlockModel[]) => {\r\n this.documentStore.setFolders(folders);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document catagories by its path name.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentCatagories(contextId:string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers }).pipe(\r\n tap((response: any) => {\r\n // Store only the categories array, not the entire response\r\n if (response && response.categories) {\r\n this.documentStore.setDocumentCategories(response.categories);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n // getDocumentTypes(): Observable<DocumentTypeModel[]> {\r\n // return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.DOCUMENT_TYPES}`).pipe(\r\n // tap((documentTypes: DocumentTypeModel[]) => {\r\n // this.documentStore.setDocumentTypes(documentTypes);\r\n // }),\r\n // catchError((error) => {\r\n // return throwError(() => new Error(error));\r\n // })\r\n // );\r\n // }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * @param {string} documentId - The document ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getAlertsByDocumentID(documentId:string): Observable<DocumentAlertModel> {\r\n return this.http.get<DocumentAlertModel>(`${this.apiUrl}${URLS.ALERT_BY_DOCUMENT_ID}${documentId}`).pipe(\r\n tap((documentAlert: DocumentAlertModel) => {\r\n this.documentStore.setDocumentAlert(documentAlert);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its folder ID and transforms the response for dropdown options.\r\n * @param {string} folderId - The folder ID to fetch the document.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentByFolderID(folderId:string, contextId:string): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`).pipe(\r\n tap((records: DocumentModel[]) => {\r\n this.documentStore.set(records);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the name of a document.\r\n * This method sends an HTTP PUT request to update the document's file name using the provided document ID and payload.\r\n * In case of an error, it will return an observable that throws an Error.\r\n * @param {string} documentId - The unique identifier of the document to update.\r\n * @param {any} payload - The payload containing the updated document data (e.g., fileName).\r\n * @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.\r\n */\r\n updateDocumentName(documentId: string, payload: any): Observable<DocumentModel> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a userlist by its path name.\r\n * @param {string} contextId - The document ID to fetch the document.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list data.\r\n */\r\n getUserListByContextId(contextId : string): Observable<UserListModel[]> {\r\n if(!contextId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<UserListModel[]>(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(\r\n tap((userList: UserListModel[]) => {\r\n this.documentStore.setUserList(userList);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document status count data by application ID with optional context ID and category parameters.\r\n * @param {string} applicationId - The application ID to fetch status data.\r\n * @param {string | null} contextId - The context ID (applicant ID) to filter by. If null, uses applicationId.\r\n * @param {string | null} categoryId - The category ID to filter by.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n getStatusDocumentCount(applicationId: string, contextId: string | null = null, categoryId: string | null = null): Observable<StatusDataModel[]> {\r\n if(!applicationId) return EMPTY;\r\n let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;\r\n let params = new HttpParams();\r\n const contextParam = contextId || null;\r\n if (contextParam) {\r\n params = params.set(SHARED.CONTEXT_ID, contextParam);\r\n } \r\n if (categoryId) {\r\n params = params.set(SHARED.CATEGORY, categoryId);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<StatusDataModel[]>(url, { params, headers }).pipe(\r\n tap((statusData: StatusDataModel[]) => {\r\n this.documentStore.setStatusData(statusData);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Fetches documents based on selection criteria (menu item, user ID, status, and search key).\r\n * This method sends an HTTP GET request with query parameters for the selected filters.\r\n * @param {string} contextId - The context ID (applicationId or applicantId).\r\n * @param {string | null} menuItem - The selected menu item filter.\r\n * @param {string | null} userId - The selected user ID filter.\r\n * @param {string | null} status - The selected status filter.\r\n * @param {string | null} searchKey - The search key filter.\r\n * @returns {Observable<any>} An observable that emits the filtered document data.\r\n */\r\n getDocumentsBySelection(contextId: string, menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): Observable<any> {\r\n let params = new HttpParams();\r\n \r\n if (menuItem) {\r\n params = params.set(SHARED.CATEGORY, menuItem);\r\n }\r\n \r\n if (userId) {\r\n params = params.set(SHARED.CONTEXT_ID, userId);\r\n }\r\n \r\n if (status) {\r\n params = params.set(SHARED.STATUS_PARAM, status);\r\n }\r\n\r\n if (searchKey) {\r\n params = params.set(SHARED.SEARCH_KEY, searchKey);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(\r\n tap((response: any) => {\r\n if (response.documents) {\r\n this.documentStore.setDocumentList(response.documents);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n getDocumentHistory(documentId: string): Observable<DocumentHistorySection[]> {\r\n if (!documentId) {\r\n return of([]);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<DocumentHistorySection[]>(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers });\r\n }\r\n\r\n /**\r\n * Fetches document categories by source (Applicant/Application).\r\n * @param {string} source - The source type (Applicant or Application).\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the categories.\r\n */\r\n getCategoriesBySource(source: string): Observable<DocumentCategory[]> {\r\n if (!source) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<DocumentCategory[]>(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document types by category ID.\r\n * @param {string} categoryId - The category ID to fetch document types for.\r\n * @returns {Observable<DocumentTypeModel[]>} Observable that emits the document types.\r\n */\r\n getDocumentTypesByCategory(categoryId: string): Observable<DocumentTypeModel[]> {\r\n if (!categoryId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Uploads a single file using the uploadFile API.\r\n * @param {FormData} formData - The form data containing the file and metadata.\r\n * @returns {Observable<any>} Observable that emits the upload response.\r\n */\r\n uploadFile(formData: FormData): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Saves the complete document upload data.\r\n * @param {any} payload - The document upload payload containing all necessary data.\r\n * @returns {Observable<any>} Observable that emits the save response.\r\n */\r\n saveDocumentUpload(payload: any): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the status of a document by document ID\r\n * @param {string} documentId - The ID of the document to update\r\n * @param {string} status - The new status (Approved, Rejected, etc.)\r\n * @param {string} statusUpdateDescription - The description/note for the status update\r\n * @returns {Observable<any>} Observable that emits the updated document data with normalized status\r\n */\r\n updateDocumentStatus(documentId: string, status: string, statusUpdateDescription: string): Observable<any> {\r\n const payload = {\r\n statusUpdateDescription: statusUpdateDescription\r\n };\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.put<any>(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(\r\n tap((response) => {\r\n if (response && response.status) {\r\n const normalizedStatus = this.normalizeStatus(response.status);\r\n response.normalizedStatus = normalizedStatus;\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Normalizes the status from API response to match component expectations\r\n * @param {string} status - The status from API response (Approved, Rejected, etc.)\r\n * @returns {string} Normalized status value\r\n */\r\n private normalizeStatus(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.APPROVED:\r\n return SHARED.STATUS_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.STATUS_REJECTED_LOWERCASE;\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING;\r\n default:\r\n return status.toLowerCase();\r\n }\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID and refreshes all data (categories, userlist, status, and document list)\r\n * @param {string} documentId - The ID of the document to delete\r\n * @param {string} contextId - The context ID to refresh all data\r\n * @returns {Observable<any>} Observable that emits the delete response\r\n */\r\n deleteDocument(documentId: string, contextId: string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.delete<any>(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(\r\n tap(() => {\r\n this.getDocumentCatagories(contextId).subscribe();\r\n this.getUserListByContextId(contextId).subscribe();\r\n this.getStatusDocumentCount(contextId).subscribe();\r\n this.getDocumentsBySelection(contextId, null, null, null, null).subscribe();\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, combineLatest, Subscription } from \"rxjs\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentStore } from \"../state/document.store\";\r\nimport { DocumentQuery } from \"../state/document.query\";\r\nimport { DocumentHttpService } from \"./document-http.service\";\r\nimport { switchMap, debounceTime, distinctUntilChanged } from \"rxjs/operators\";\r\nimport { ERRORS } from \"../../../Shared/constant/ERROR\";\r\n\r\n/**\r\n * Service to manage the document data and selection state\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DocumentHelperService {\r\n\r\n private selectionWatcherSubscription: Subscription | null = null;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentHttpService: DocumentHttpService\r\n ) {\r\n // Note: initializeSelectionWatcher now requires contextId\r\n // This should be called from the component that has access to contextId\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcher(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n this.selectionWatcherSubscription = combineLatest([\r\n this.documentQuery.selectSelectedMenuItem(),\r\n this.documentQuery.selectSelectedUserId(),\r\n this.documentQuery.selectSelectedStatus(),\r\n this.documentQuery.selectSearchKey()\r\n ]).pipe(\r\n debounceTime(300),\r\n distinctUntilChanged((prev, curr) => {\r\n const isSame = prev[0] === curr[0] && prev[1] === curr[1] && prev[2] === curr[2] && prev[3] === curr[3];\r\n return isSame;\r\n }),\r\n switchMap(([menuItem, userId, status, searchKey]) => {\r\n return this.documentHttpService.getDocumentsBySelection(contextId, menuItem, userId, status, searchKey);\r\n })\r\n ).subscribe({\r\n next: (response) => {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes with initial load\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcherWithInitialLoad(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n // Make initial API call to load documents\r\n this.documentHttpService.getDocumentsBySelection(contextId, null, null, null, null).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n \r\n // Initialize the selection watcher for future updates\r\n this.initializeSelectionWatcher(contextId);\r\n }\r\n\r\n /**\r\n * Clean up the selection watcher subscription\r\n */\r\n cleanupSelectionWatcher(): void {\r\n if (this.selectionWatcherSubscription) {\r\n this.selectionWatcherSubscription.unsubscribe();\r\n this.selectionWatcherSubscription = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the document data\r\n * @param document the document data\r\n */\r\n set(document: DocumentModel | null) {\r\n this.documentStore.setCurrentDocument(document);\r\n }\r\n\r\n /**\r\n * Get the document data\r\n * @returns the document data\r\n */\r\n get(): Observable<DocumentModel | null> {\r\n return this.documentQuery.selectCurrentDocument();\r\n }\r\n\r\n /**\r\n * Get the current document value synchronously\r\n * @returns the current document value\r\n */\r\n getValue(): DocumentModel | null {\r\n return this.documentQuery.getCurrentDocument();\r\n }\r\n\r\n /**\r\n * Set the selected menu item\r\n * @param menuItem the selected menu item _id (not the label)\r\n */\r\n setSelectedMenuItem(menuItem: string | null): void {\r\n this.documentStore.setSelectedMenuItem(menuItem);\r\n }\r\n\r\n /**\r\n * Set the selected user ID\r\n * @param userId the selected user ID\r\n */\r\n setSelectedUserId(userId: string | null): void {\r\n this.documentStore.setSelectedUserId(userId);\r\n }\r\n\r\n /**\r\n * Set the selected status\r\n * @param status the selected status\r\n */\r\n setSelectedStatus(status: string | null): void {\r\n this.documentStore.setSelectedStatus(status);\r\n }\r\n\r\n /**\r\n * Set the search key\r\n * @param searchKey the search term\r\n */\r\n setSearchKey(searchKey: string | null): void {\r\n this.documentStore.setSearchKey(searchKey);\r\n }\r\n\r\n /**\r\n * Set all selection state at once\r\n * @param menuItem the selected menu item _id (not the label)\r\n * @param userId the selected user ID\r\n * @param status the selected status\r\n * @param searchKey the search term\r\n */\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): void {\r\n this.documentStore.setSelectionState(menuItem, userId, status, searchKey);\r\n }\r\n\r\n /**\r\n * Clear all selection state\r\n */\r\n clearSelectionState(): void {\r\n this.documentStore.clearSelectionState();\r\n }\r\n\r\n /**\r\n * Set user list visibility\r\n * @param show whether to show the user list\r\n */\r\n setShowUserList(show: boolean): void {\r\n this.documentStore.setShowUserList(show);\r\n }\r\n\r\n /**\r\n * Get the current selection state\r\n * @returns observable of the current selection state\r\n */\r\n getSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null}> {\r\n return this.documentQuery.selectSelectionState();\r\n }\r\n\r\n /**\r\n * Get the current selection state value synchronously\r\n * @returns the current selection state value\r\n */\r\n getSelectionStateValue(): {menuItem: string | null, userId: string | null, status: string | null} {\r\n return this.documentQuery.getSelectionState();\r\n }\r\n\r\n /**\r\n * Set status data in the store\r\n * @param statusData the status data to set\r\n */\r\n setStatusData(statusData: any[]): void {\r\n this.documentStore.setStatusData(statusData);\r\n }\r\n\r\n /**\r\n * Set user list in the store\r\n * @param userList the user list to set\r\n */\r\n setUserList(userList: any[]): void {\r\n this.documentStore.setUserList(userList);\r\n }\r\n\r\n /**\r\n * Get observable for filtered documents\r\n * @returns Observable that emits filtered document responses\r\n */\r\n getFilteredDocuments(): Observable<any> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Manually trigger API call with current selection state\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithCurrentSelection(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n currentState.menuItem,\r\n currentState.userId,\r\n currentState.status\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n throw new Error(error)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Force refresh documents with no filters\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithoutFilters(contextId: string): void {\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n null,\r\n null,\r\n null\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error('Error in force refresh:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh status data for a specific context\r\n * @param contextId - The context ID to use for the API call\r\n * @param statusContextId - The status context ID (usually userId)\r\n * @param categoryId - The category ID (usually menuItem)\r\n */\r\n refreshStatusData(contextId: string, statusContextId: string | null, categoryId: string | null): void {\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters after accept/reject/delete operations\r\n * This includes document categories, status data, user list, and document list\r\n * \r\n * This method ensures that after a document action (accept/reject/delete):\r\n * 1. Document categories are refreshed\r\n * 2. Status counts are refreshed with current menu item and user filters\r\n * 3. User list is refreshed with current filters (if applicable)\r\n * 4. Document list is refreshed with all current filters (menu item, user, status, search)\r\n * \r\n * Filter application:\r\n * - Document categories: Uses base contextId\r\n * - Status data: Uses userId as contextId and menuItem as categoryId\r\n * - User list: Uses base contextId (can be enhanced with additional filters if API supports)\r\n * - Document list: Uses all current filters (menuItem, userId, status, searchKey)\r\n * \r\n * @param contextId - The context ID to use for the API calls\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Refresh document categories\r\n this.documentHttpService.getDocumentCatagories(contextId).subscribe({\r\n next: (response) => {\r\n // The HTTP service already stores categories in the store via tap operator\r\n // No need to store them again here\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing document categories after action:', error);\r\n }\r\n });\r\n \r\n // Refresh status data\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data after action:', error);\r\n }\r\n });\r\n \r\n // Refresh user list\r\n this.documentHttpService.getUserListByContextId(contextId).subscribe({\r\n next: (userList) => {\r\n this.documentStore.setUserList(userList);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing user list after action:', error);\r\n }\r\n });\r\n this.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n}","import { Injectable, EventEmitter } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { DocumentService } from '../state/document.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * Service for handling document uploads.\r\n * @class DocumentUploadService\r\n * @typedef {DocumentUploadService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadService {\r\n\r\n /**\r\n * Event emitter for upload completion\r\n */\r\n uploadCompleted = new EventEmitter<{file: File, response: any}>();\r\n\r\n\r\n /**\r\n * The file to upload.\r\n * @type {*}\r\n */\r\n uploadedFile: any;\r\n\r\n /**\r\n * Represent contextId\r\n * @type {string}\r\n */\r\n contextId: string = SHARED.EMPTY;\r\n\r\n\r\n /**\r\n * Represent document name\r\n * @type {string}\r\n */\r\n docName: string = SHARED.EMPTY\r\n\r\n /**\r\n * Represent document id\r\n * @type {string}\r\n */\r\n docTypeId: string = SHARED.EMPTY\r\n\r\n /**\r\n * Creates an instance of DocumentUploadService.\r\n * @param {DocumentService} documentService - Service for handling document uploads.\r\n * @param {DocumentStore} documentUploadStore - Store for managing uploaded documents.\r\n * @param {MessageService} messageService - Service for displaying messages.\r\n * @returns {void}\r\n */\r\n constructor(public documentService: DocumentService, public documentUploadStore: DocumentStore, public messageService: MessageService) { }\r\n\r\n /**\r\n * Prepares the files for upload by creating a FormData object.\r\n * This method appends each file to the FormData for submission.\r\n * @returns {void}\r\n */\r\n handleTemplatedUpload(file : File, contextId : string) {\r\n let formsData = this.handleCreateFormData(file, contextId)\r\n if (!formsData) {\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_ERROR_SUMMERY,detail: SHARED.UPLOAD_ERROR_DETAILS});\r\n return;\r\n }\r\n \r\n // Update progress to show upload starting\r\n this.documentUploadStore.setMessage([{\r\n severity: 'info',\r\n detail: 'Uploading document...'\r\n }]);\r\n \r\n this.documentService.create(formsData)\r\n .subscribe({\r\n /**\r\n * Handles the successful upload event.\r\n * Updates the list of uploaded files and emits the file ID.\r\n * @returns {void}\r\n */\r\n next: (event) => {\r\n this.documentUploadStore.setUploadedDocumentFiles(event)\r\n this.documentUploadStore.setMessage([{\r\n severity: SHARED.SUCCESS_SEVERITY,\r\n detail : SHARED.UPLOAD_SUCCESS\r\n }]);\r\n // Emit upload completion event with file and response\r\n this.uploadCompleted.emit({file: file, response: event});\r\n if (this.uploadedFile) {\r\n // You can emit an event here to update the UI progress if needed\r\n }\r\n },\r\n /**\r\n * Handles the error event during file upload.\r\n * Updates the progress of the file to indicate failure.\r\n * @param {any} error - The error object returned by the upload service.\r\n */\r\n error: (error) => {\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_SUMMERY,detail: error?.message});\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get the file and contextId\r\n * @param file - The file to upload.\r\n * @param contextId - The contextId to upload.\r\n */\r\n getUploadFileData(file: File, contextId: string) {\r\n if (file && contextId) {\r\n this.uploadedFile = file;\r\n this.contextId = contextId;\r\n }\r\n }\r\n\r\n /**\r\n * Get the document name and document type id\r\n * @param documentName - The document name to upload.\r\n * @param documentTypeId - The document type id to upload.\r\n */\r\n getDocumentNameAndType(documentTypeId: string) {\r\n if (documentTypeId && documentTypeId !== SHARED.EMPTY) {\r\n this.docTypeId = documentTypeId\r\n }\r\n }\r\n\r\n /**\r\n * Handle the creation of formdata.\r\n * @returns {*} - The formdata object.\r\n */\r\n handleCreateFormData(uploadedFile?: File, contextId?: string) {\r\n \r\n if (uploadedFile) {\r\n let formData = new FormData();\r\n formData.append(SHARED.FILE, uploadedFile, uploadedFile.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId)\r\n return formData;\r\n }else{\r\n return null;\r\n }\r\n \r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\n\r\n/**\r\n * Description placeholder\r\n * @class FileFormatService\r\n * @typedef {FileFormatService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FileFormatService {\r\n\r\n /**\r\n * Creates an instance of FileFormatService.\r\n * @constructor\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Description placeholder\r\n * @param {number} bytes\r\n * @param {PrimeNGConfig} config\r\n * @returns {string}\r\n */\r\n formatFileSize(bytes: number, config:PrimeNGConfig): string {\r\n const kilobyte = 1024;\r\n const decimalPlaces = SHARED.ONE;\r\n const sizes = config.translation.fileSizeTypes || SHARED.FILE_SIZE_UNITS;\r\n if (bytes < kilobyte) {\r\n return `${bytes} ${sizes[SHARED.INITIAL_COUNT]}`;\r\n } else if (bytes < kilobyte * kilobyte) {\r\n const kbSize = bytes / kilobyte;\r\n return `${parseFloat(kbSize.toFixed(decimalPlaces))} ${sizes[SHARED.ONE]}`;\r\n } else {\r\n const mbSize = bytes / (kilobyte * kilobyte);\r\n return `${parseFloat(mbSize.toFixed(decimalPlaces))} ${sizes[SHARED.TWO]}`;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { FileFormatService } from './file-format.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface UploadedFile {\r\n file: File;\r\n formattedSize: string;\r\n progress: number;\r\n uploadResponse?: any; // Store the upload response for later use\r\n}\r\n\r\nexport interface DocumentUploadPayload {\r\n source: 'Applicant' | 'Application';\r\n categoryId: string;\r\n documentTypeId: string;\r\n applicantId?: string;\r\n contextId: string;\r\n documents: {\r\n fileName: string;\r\n fileSize: number;\r\n fileType: string;\r\n file: File;\r\n uploadedFileId?: string;\r\n }[];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadBusinessService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private fileFormatService: FileFormatService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants for a given context ID\r\n */\r\n loadApplicants(contextId: string): Observable<UserListModel[]> {\r\n return this.documentHttpService.getUserListByContextId(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories based on assignment type\r\n */\r\n loadCategories(assignmentType: string): Observable<DocumentCategory[]> {\r\n return this.documentHttpService.getCategoriesBySource(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types based on category\r\n */\r\n loadDocumentTypes(categoryId: string): Observable<DocumentTypeModel[]> {\r\n return this.documentHttpService.getDocumentTypesByCategory(categoryId);\r\n }\r\n\r\n /**\r\n * Filters applicants based on assignment type\r\n */\r\n filterApplicants(applicantList: UserListModel[], assignmentType: 'Applicant' | 'Application'): UserListModel[] {\r\n if (assignmentType === SHARED.APPLICANT) {\r\n return applicantList.filter(applicant => applicant.name !== SHARED.APPLICATION_DOCS);\r\n } else {\r\n return applicantList.filter(applicant => applicant.name === SHARED.APPLICATION_DOCS);\r\n }\r\n }\r\n\r\n /**\r\n * Validates form data\r\n */\r\n validateForm(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n categoryOptions: DocumentCategory[],\r\n documentTypeOptions: DocumentTypeModel[]\r\n ): boolean {\r\n if (!categoryOptions.length || !documentTypeOptions.length) {\r\n return false;\r\n }\r\n \r\n const hasRequiredSelections = Boolean(selectedCategory) && Boolean(selectedDocumentType);\r\n const hasFiles = uploadedFiles.length > 0;\r\n \r\n if (assignmentType === SHARED.APPLICANT) {\r\n return hasRequiredSelections && hasFiles && Boolean(selectedApplicant);\r\n } else {\r\n return hasRequiredSelections && hasFiles;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if save button should be disabled\r\n */\r\n isSaveButtonDisabled(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n isSaving: boolean\r\n ): boolean {\r\n const hasBasicData = selectedCategory && selectedDocumentType && uploadedFiles.length > 0;\r\n \r\n if (assignmentType === SHARED.APPLICANT) {\r\n return !hasBasicData || !selectedApplicant || isSaving;\r\n } else {\r\n return !hasBasicData || isSaving;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares upload payload\r\n */\r\n prepareUploadPayload(\r\n assignmentType: 'Applicant' | 'Application',\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n contextId: string\r\n ): DocumentUploadPayload {\r\n const payload: DocumentUploadPayload = {\r\n source: assignmentType,\r\n categoryId: selectedCategory,\r\n documentTypeId: selectedDocumentType,\r\n contextId,\r\n documents: uploadedFiles.map(file => ({\r\n fileName: file.file.name,\r\n fileSize: file.file.size,\r\n fileType: file.file.type,\r\n file: file.file,\r\n uploadedFileId: file.uploadResponse?.fileId || file.uploadResponse?.id || file.uploadResponse?.fileName\r\n }))\r\n };\r\n\r\n \r\n return payload;\r\n }\r\n\r\n /**\r\n * Saves document upload\r\n */\r\n saveDocumentUpload(payload: DocumentUploadPayload): Observable<any> {\r\n return this.documentHttpService.saveDocumentUpload(payload);\r\n }\r\n\r\n /**\r\n * Formats file size\r\n */\r\n formatFileSize(fileSize: number, config: any): string {\r\n return this.fileFormatService.formatFileSize(fileSize, config);\r\n }\r\n\r\n /**\r\n * Creates uploaded file object\r\n */\r\n createUploadedFile(file: File, formattedSize: string): UploadedFile {\r\n return {\r\n file,\r\n formattedSize,\r\n progress: SHARED.UPLOAD_PROGRESS_10 \r\n };\r\n }\r\n\r\n /**\r\n * Resets form data to initial state\r\n */\r\n getInitialFormState() {\r\n return {\r\n selectedAssignmentType: 'Applicant' as const,\r\n selectedApplicant: SHARED.EMPTY,\r\n selectedCategory: SHARED.EMPTY,\r\n selectedDocumentType: SHARED.EMPTY,\r\n uploadedFiles: [] as UploadedFile[],\r\n isFormValid: false\r\n };\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { UploadedFile } from './document-upload-business.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadFormService {\r\n constructor(private messageService: MessageService) {}\r\n\r\n /**\r\n * Shows error message\r\n */\r\n showErrorMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows warning message\r\n */\r\n showWarningMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows success message\r\n */\r\n showSuccessMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Validates required fields for upload\r\n */\r\n validateRequiredFields(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedApplicant: string,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n uploadedFiles: UploadedFile[]\r\n ): boolean {\r\n if (assignmentType === 'Applicant' && !selectedApplicant) {\r\n this.showWarningMessage('No Applicant Selected', 'Please select an applicant.');\r\n return false;\r\n }\r\n\r\n if (!selectedCategory) {\r\n this.showWarningMessage('No Category Selected', 'Please select a category.');\r\n return false;\r\n }\r\n\r\n if (!selectedDocumentType) {\r\n this.showWarningMessage('No Document Type Selected', 'Please select a document type.');\r\n return false;\r\n }\r\n\r\n if (uploadedFiles.length === 0) {\r\n this.showWarningMessage('No Documents Uploaded', 'Please upload at least one document.');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Validates form completeness\r\n */\r\n validateFormCompleteness(): boolean {\r\n this.showWarningMessage('Form Incomplete', 'Please complete all required fields and upload at least one document.');\r\n return false;\r\n }\r\n\r\n /**\r\n * Validates context ID presence\r\n */\r\n validateContextId(contextId: string, message: string): boolean {\r\n if (!contextId) {\r\n this.showErrorMessage('Missing Required Data', message);\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentUploadBusinessService } from './document-upload-business.service';\r\nimport { DocumentUploadFormService } from './document-upload-form.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\n\r\nexport interface DataLoadingState {\r\n isLoadingApplicants: boolean;\r\n isLoadingCategories: boolean;\r\n isLoadingDocumentTypes: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadDataService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants and handles the response\r\n */\r\n loadApplicants(\r\n contextId: string,\r\n onSuccess: (applicants: UserListModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<UserListModel[]> {\r\n if (!this.formService.validateContextId(contextId, 'Context ID is required to load applicants.')) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadApplicants(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories and handles the response\r\n */\r\n loadCategories(\r\n assignmentType: string,\r\n onSuccess: (categories: DocumentCategory[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentCategory[]> {\r\n if (!assignmentType) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadCategories(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types and handles the response\r\n */\r\n loadDocumentTypes(\r\n categoryId: string,\r\n onSuccess: (documentTypes: DocumentTypeModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentTypeModel[]> {\r\n return this.businessService.loadDocumentTypes(categoryId);\r\n }\r\n\r\n /**\r\n * Handles applicants loaded successfully\r\n */\r\n handleApplicantsLoaded(\r\n applicants: UserListModel[],\r\n assignmentType: 'Applicant' | 'Application' | null\r\n ): UserListModel[] {\r\n return this.businessService.filterApplicants(applicants, assignmentType!);\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation, OnInit, OnDestroy } from '@angular/core';\r\nimport { FileUpload } from 'primeng/fileupload';\r\nimport { MessageService } from 'primeng/api';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { FileFormatService } from '../../services/file-format.service';\r\nimport { DocumentService } from '../../state/document.service';\r\nimport { DocumentUploadService } from '../../services/document-upload.service';\r\n\r\nimport { DocumentUploadBusinessService, UploadedFile } from '../../services/document-upload-business.service';\r\nimport { DocumentUploadFormService } from '../../services/document-upload-form.service';\r\nimport { DocumentUploadDataService } from '../../services/document-upload-data.service';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentTypeModel } from '../../models/document-type.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-document-upload',\r\n templateUrl: './document-upload.component.html',\r\n styleUrls: ['./document-upload.component.scss'],\r\n standalone: false,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentUploadComponent implements OnDestroy {\r\n @Input() contextId: string = SHARED.EMPTY;\r\n @ViewChild('fileUploader') fileUploader!: FileUpload;\r\n\r\n // Form data\r\n selectedAssignmentType: 'Applicant' | 'Application' | null = null;\r\n selectedApplicant: string = SHARED.EMPTY;\r\n selectedCategory: string = SHARED.EMPTY;\r\n selectedDocumentType: string = SHARED.EMPTY;\r\n \r\n // Data lists\r\n applicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n filteredApplicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n categoryOptions: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n documentTypeOptions: DocumentTypeModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n // File upload\r\n uploadedFiles: UploadedFile[] = SHARED.EMPTY_ARRAY;\r\n fileProgress: Map<File, number> = new Map();\r\n\r\n // Loading states\r\n isLoadingApplicants: boolean = false;\r\n isLoadingCategories: boolean = false;\r\n isLoadingDocumentTypes: boolean = false;\r\n isSaving: boolean = false;\r\n\r\n // Validation\r\n isFormValid: boolean = false;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n public documentUpload: DocumentUploadService, \r\n public uploadService: DocumentService, \r\n private config: PrimeNGConfig, \r\n public fileFormatService: FileFormatService, \r\n public messageService: MessageService, \r\n public cdr: ChangeDetectorRef,\r\n\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService,\r\n private dataService: DocumentUploadDataService\r\n ) { }\r\n\r\n \r\n\r\n // Event handlers\r\n onAssignmentTypeChange(): void {\r\n this.resetSelections();\r\n this.loadCategories();\r\n this.handleApplicantLoading();\r\n }\r\n\r\n onCategoryChange(): void {\r\n this.resetDocumentType();\r\n this.loadDocumentTypesIfCategorySelected();\r\n this.validateForm();\r\n }\r\n\r\n onDocumentTypeChange(): void {\r\n this.validateForm();\r\n }\r\n\r\n onApplicantSelectionChange(): void {\r\n this.validateForm();\r\n }\r\n\r\n onSelectedFiles(event: { currentFiles: File[] }): void {\r\n event.currentFiles.forEach((file: File) => {\r\n this.handleTemplatedUpload(file);\r\n });\r\n this.fileUploader.clear();\r\n }\r\n\r\n // Data loading methods\r\n loadApplicants(): void {\r\n this.isLoadingApplicants = true;\r\n this.dataService.loadApplicants(this.contextId, \r\n (applicants) => this.handleApplicantsLoaded(applicants),\r\n (error) => this.handleApplicantsError(error)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (applicants) => this.handleApplicantsLoaded(applicants),\r\n error: (error) => this.handleApplicantsError(error)\r\n });\r\n }\r\n\r\n loadCategories(): void {\r\n this.isLoadingCategories = true;\r\n this.dataService.loadCategories(this.selectedAssignmentType!,\r\n (categories) => this.handleCategoriesLoaded(categories),\r\n (error) => this.handleCategoriesError(error)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (categories) => this.handleCategoriesLoaded(categories),\r\n error: (error) => this.handleCategoriesError(error)\r\n });\r\n }\r\n\r\n loadDocumentTypes(): void {\r\n this.isLoadingDocumentTypes = true;\r\n this.dataService.loadDocumentTypes(this.selectedCategory,\r\n (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n (error) => this.handleDocumentTypesError(error)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n error: (error) => this.handleDocumentTypesError(error)\r\n });\r\n }\r\n\r\n // Business logic methods\r\n saveDocumentUpload(): void {\r\n if (!this.isFormValid) {\r\n this.formService.validateFormCompleteness();\r\n return;\r\n }\r\n\r\n if (!this.formService.validateRequiredFields(\r\n this.selectedAssignmentType,\r\n this.selectedApplicant,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.uploadedFiles\r\n )) return;\r\n this.isSaving = true;\r\n this.saveDocumentMetadata();\r\n }\r\n\r\n handleTemplatedUpload(file: File): void {\r\n if (!this.formService.validateContextId(this.contextId, 'Context ID is required for upload.')) {\r\n return;\r\n }\r\n this.fileProgress.set(file, SHARED.UPLOAD_PROGRESS_10);\r\n this.documentUpload.uploadCompleted.pipe(takeUntil(this.destroy$)).subscribe(({file: uploadedFile, response}) => {\r\n if (uploadedFile === file) {\r\n this.fileProgress.set(file, SHARED.UPLOAD_PROGRESS_100);\r\n const uploadedFileObj = this.uploadedFiles.find(uf => uf.file === file);\r\n if (uploadedFileObj) {\r\n uploadedFileObj.uploadResponse = response;\r\n uploadedFileObj.progress = SHARED.UPLOAD_PROGRESS_100; \r\n }\r\n this.cdr.detectChanges();\r\n }\r\n });\r\n \r\n this.documentUpload.handleTemplatedUpload(file, this.contextId)\r\n const formattedSize = this.businessService.formatFileSize(file.size, this.config);\r\n const uploadedFile = this.businessService.createUploadedFile(file, formattedSize);\r\n uploadedFile.progress = SHARED.UPLOAD_PROGRESS_10; \r\n this.uploadedFiles.push(uploadedFile);\r\n this.validateForm();\r\n }\r\n\r\n handleDocumentRemove(file: File, index: number): void {\r\n this.uploadedFiles.splice(index, 1);\r\n this.fileProgress.delete(file);\r\n this.validateForm();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n // Utility methods\r\n choose(event: any, callback: () => void): void {\r\n callback();\r\n }\r\n\r\n triggerFileUpload(): void {\r\n this.fileUploader.choose();\r\n }\r\n\r\n getSaveButtonDisabled(): boolean {\r\n return this.businessService.isSaveButtonDisabled(\r\n this.selectedAssignmentType,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.selectedApplicant,\r\n this.uploadedFiles,\r\n this.isSaving\r\n );\r\n }\r\n\r\n getProgress(file: File): number {\r\n return this.fileProgress.get(file) || 0;\r\n }\r\n\r\n isFileUploading(file: File): boolean {\r\n const progress = this.fileProgress.get(file);\r\n return progress !== undefined && progress > 0 && progress < SHARED.UPLOAD_PROGRESS_100;\r\n }\r\n\r\n isFileUploaded(file: File): boolean {\r\n const progress = this.fileProgress.get(file);\r\n return progress === SHARED.UPLOAD_PROGRESS_100;\r\n }\r\n\r\n isFileError(file: File): boolean {\r\n const progress = this.fileProgress.get(file);\r\n return progress === -1;\r\n }\r\n\r\n resetForm(): void {\r\n const initialState = this.businessService.getInitialFormState();\r\n Object.assign(this, initialState);\r\n this.fileProgress.clear();\r\n this.filteredApplicantList = SHARED.EMPTY_ARRAY;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n // Private helper methods\r\n resetSelections(): void {\r\n this.selectedApplicant = SHARED.EMPTY;\r\n this.selectedCategory = SHARED.EMPTY;\r\n this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n resetDocumentType(): void {\r\n this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n handleApplicantLoading(): void {\r\n if (this.selectedAssignmentType === SHARED.APPLICANT) {\r\n this.loadApplicants();\r\n } else {\r\n this.filterApplicants();\r\n }\r\n }\r\n\r\n loadDocumentTypesIfCategorySelected(): void {\r\n if (this.selectedCategory) {\r\n this.loadDocumentTypes();\r\n }\r\n }\r\n\r\n handleApplicantsLoaded(applicants: UserListModel[]): void {\r\n this.applicantList = applicants;\r\n this.filterApplicants();\r\n this.isLoadingApplicants = false;\r\n this.validateForm();\r\n }\r\n\r\n handleApplicantsError(error: any): void {\r\n this.isLoadingApplicants = false;\r\n this.formService.showErrorMessage('Failed to Load Applicants', error?.message || 'Failed to load applicants');\r\n }\r\n\r\n handleCategoriesLoaded(categories: DocumentCategory[]): void {\r\n this.categoryOptions = categories;\r\n this.isLoadingCategories = false;\r\n this.validateForm();\r\n }\r\n\r\n handleCategoriesError(error: any): void {\r\n this.isLoadingCategories = false;\r\n this.formService.showErrorMessage('Failed to Load Categories', error?.message || 'Failed to load categories');\r\n }\r\n\r\n handleDocumentTypesLoaded(documentTypes: DocumentTypeModel[]): void {\r\n this.documentTypeOptions = documentTypes;\r\n this.isLoadingDocumentTypes = false;\r\n this.validateForm();\r\n }\r\n\r\n handleDocumentTypesError(error: any): void {\r\n this.isLoadingDocumentTypes = false;\r\n this.formService.showErrorMessage('Failed to Load Document Types', error?.message || 'Failed to load document types');\r\n }\r\n\r\n handleUploadSuccess(response: any): void {\r\n this.isSaving = false;\r\n this.formService.showSuccessMessage('Upload Successful', 'Documents uploaded and saved successfully!');\r\n this.resetForm();\r\n }\r\n\r\n handleUploadError(error: any): void {\r\n this.isSaving = false;\r\n this.formService.showErrorMessage('Upload Failed', error?.message || 'Failed to save document upload');\r\n }\r\n\r\n filterApplicants(): void {\r\n this.filteredApplicantList = this.dataService.handleApplicantsLoaded(\r\n this.applicantList, \r\n this.selectedAssignmentType\r\n );\r\n }\r\n\r\n validateForm(): void {\r\n this.isFormValid = this.businessService.validateForm(\r\n this.selectedAssignmentType,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.selectedApplicant,\r\n this.uploadedFiles,\r\n this.categoryOptions,\r\n this.documentTypeOptions\r\n );\r\n }\r\n\r\n saveDocumentMetadata(): void {\r\n const contextId = this.selectedApplicant || this.contextId;\r\n \r\n const payload = this.businessService.prepareUploadPayload(\r\n this.selectedAssignmentType!,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.selectedApplicant,\r\n this.uploadedFiles,\r\n contextId\r\n );\r\n\r\n this.businessService.saveDocumentUpload(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => this.handleUploadSuccess(response),\r\n error: (error) => this.handleUploadError(error)\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.businessService.destroy();\r\n this.dataService.destroy();\r\n }\r\n}\r\n\r\n","<div class=\"document-upload-container\">\r\n <!-- Assignment Section -->\r\n <div class=\"assignment-section\">\r\n <h4>Assign to Applicant(s) or Application</h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant'\" class=\"radio-label\">Applicant(s)</label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Applicant Selection (only shown when Applicant is selected) -->\r\n <div class=\"applicant-section\" *ngIf=\"selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s)</h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-radioButton \r\n name=\"selectedApplicant\"\r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicant\"\r\n [inputId]=\"'applicant-' + applicant._id\"\r\n (onClick)=\"onApplicantSelectionChange()\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Category Selection -->\r\n <div class=\"category-section\">\r\n <h4>Category</h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- Document Type Selection -->\r\n <div class=\"document-type-section\">\r\n <h4>Document Type</h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- File Upload Section -->\r\n <div class=\"file-upload-section\">\r\n <h4>Upload Documents</h4>\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload \r\n #fileUploader \r\n [multiple]=\"true\" \r\n auto=\"true\" \r\n accept=\"image/png,application/pdf\" \r\n maxFileSize=\"26214400\"\r\n (onSelect)=\"onSelectedFiles($event)\"\r\n >\r\n <ng-template pTemplate=\"header\" let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\">\r\n <div class=\"docHeader p-2 flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <p-button \r\n (onClick)=\"choose($event, chooseCallback)\" \r\n icon=\"pi pi-images\" \r\n [rounded]=\"true\"\r\n [outlined]=\"true\" \r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-removeFileCallback=\"removeFileCallback\"\r\n let-removeUploadedFileCallback=\"removeUploadedFileCallback\">\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <div class=\"col-12 md:col-12 p-0\" *ngIf=\"uploadedFiles.length > 0\">\r\n <div *ngFor=\"let uploadedFile of uploadedFiles; let i = index\"\r\n class=\"m-0 flex flex-column align-items-center gap-1 mt-3\">\r\n <div class=\"col-12 md:col-12 p-0 flex documentInfo\">\r\n <div class=\"documentImage\">\r\n <img src=\"../../../../assets/images/document.png\" [alt]=\"uploadedFile.file.name\" width=\"45\" height=\"50\"\r\n class=\"object-contain\" />\r\n </div>\r\n <div class=\"flex w-full flex-column mt-2 ml-2\">\r\n <div class=\"flex justify-content-between\">\r\n <div style=\"font-weight: bold;font-size: 14px\">\r\n {{ uploadedFile.file.name }}\r\n </div>\r\n <i class=\"pi pi-times cursor-pointer\" (click)=\"handleDocumentRemove(uploadedFile.file,i)\"></i>\r\n </div>\r\n <div class=\"flex justify-content-between mt-1\">\r\n <div style=\"color: #676B89; font-size: 12px; color: green;\" class=\"pi pi-verified\"> \r\n {{ uploadedFile.formattedSize }}\r\n </div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> \r\n {{ uploadedFile.progress }} % \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <p-progressBar \r\n [value]=\"uploadedFile.progress\" \r\n [showValue]=\"false\" \r\n styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': uploadedFile.progress > 100 }\"\r\n >\r\n </p-progressBar>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"empty\" let-chooseCallback=\"chooseCallback\">\r\n <div *ngIf=\"!uploadedFiles.length\" class=\"flex align-items-center justify-content-center flex-column\"\r\n (click)=\"triggerFileUpload()\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400\"></i>\r\n <p class=\"mt-4 mb-0\">Drag and drop files here to upload.</p>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED'\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserListService {\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) { }\r\n\r\n getInitials(name: string): string {\r\n return name.substring(0, 2).toUpperCase();\r\n }\r\n\r\n getColorByIndex(index: number): string {\r\n const colors = SHARED.COLORS;\r\n return colors[index % colors.length];\r\n }\r\n\r\n getColorValue(colorName: string): string {\r\n const colorMap: { [key: string]: string } = SHARED.COLOR_MAP;\r\n return colorMap[colorName] || SHARED.DEFAULT_COLOR;\r\n }\r\n\r\n processUserData(userList: UserListModel[]): UserListModel[] {\r\n return userList.map((user, index) => ({\r\n ...user,\r\n initials: this.getInitials(user.name),\r\n color: this.getColorByIndex(index)\r\n }));\r\n }\r\n\r\n /**\r\n * Finds the selected menu item from categories\r\n * @param selectedMenuItemId - The ID of the selected menu item\r\n * @param categories - The document categories\r\n * @returns The selected menu item or null\r\n */\r\n private findSelectedMenuItem(selectedMenuItemId: string, categories: DocumentCategory[]): any {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === selectedMenuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Filters user list based on selected menu item category\r\n * @param userList - The complete user list\r\n * @param categories - The document categories\r\n * @returns Filtered user list\r\n */\r\n filterUsersByCategory(userList: UserListModel[], categories: DocumentCategory[]): UserListModel[] {\r\n const selectedMenuItemId = this.documentQuery.getSelectionState().menuItem;\r\n if (!selectedMenuItemId) {\r\n return userList;\r\n }\r\n\r\n const selectedMenuItem = this.findSelectedMenuItem(selectedMenuItemId, categories);\r\n if (!selectedMenuItem) {\r\n return userList;\r\n }\r\n\r\n const selectedCategory = categories.find(category => \r\n category.items?.some(item => item._id === selectedMenuItemId)\r\n );\r\n \r\n if (!selectedCategory) {\r\n return userList;\r\n }\r\n\r\n if (selectedCategory.label === SHARED.APPLICATION) {\r\n return userList.filter(user => user.name === SHARED.APPLICATION_DOCS);\r\n }\r\n\r\n return userList;\r\n }\r\n\r\n selectUser(userId: string, userData: UserListModel[]): { selectedUser: string | undefined; name: string | undefined } {\r\n const user = userData.find(u => u._id === userId);\r\n if (user) {\r\n this.documentStore.setSelectedUserId(userId);\r\n return { selectedUser: user.name, name: user.name };\r\n }\r\n return { selectedUser: undefined, name: undefined };\r\n }\r\n\r\n unselectUser(): void {\r\n this.documentStore.setSelectedUserId(null);\r\n }\r\n\r\n isUserSelected(userId: string, userData: UserListModel[], selectedUser: string | undefined): boolean {\r\n return selectedUser === userData.find(u => u._id === userId)?.name;\r\n }\r\n} ","\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport { SHARED, USERLIST } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { UserListService } from '../../services/user-list.service';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'lib-user-list',\r\n standalone : false,\r\n templateUrl: './user-list.component.html',\r\n styleUrls: ['./user-list.component.scss'],\r\n animations: [\r\n trigger('slideInFromTop', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'translateY(-10px)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'translateY(0)'\r\n })),\r\n transition('void => *', [\r\n animate('300ms ease-out')\r\n ])\r\n ]),\r\n trigger('fadeIn', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'scale(0.8)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'scale(1)'\r\n })),\r\n transition('void => *', [\r\n animate('200ms ease-in-out')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class UserListComponent implements OnInit, OnChanges {\r\n \r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n @Output() userSelected = new EventEmitter<string>();\r\n \r\n userData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n filteredUserData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n selectedUser: string | undefined;\r\n shouldShowContainer: boolean = true;\r\n \r\n constructor(\r\n public documentService : DocumentHelperService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private userListService: UserListService\r\n ){\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['userList'] && !changes['userList'].firstChange) {\r\n this.initializeUserData();\r\n }\r\n }\r\n\r\n private initializeUserData(): void {\r\n if (this.userList && this.userList.length > 0) {\r\n this.userData = this.userListService.processUserData(this.userList);\r\n this.updateFilteredUserData();\r\n }\r\n }\r\n\r\n private updateFilteredUserData(): void {\r\n if (this.userData.length > 0 && this.categories.length > 0) {\r\n this.filteredUserData = this.userListService.filterUsersByCategory(this.userData, this.categories);\r\n this.shouldShowContainer = true;\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n } else {\r\n this.filteredUserData = this.userData;\r\n this.shouldShowContainer = true;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeUserData();\r\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\r\n if (userId) {\r\n const user = this.userData.find(u => u._id === userId);\r\n this.selectedUser = user ? user.name : undefined;\r\n } else {\r\n this.selectedUser = undefined;\r\n }\r\n });\r\n\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.updateFilteredUserData();\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n });\r\n\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n if (!show && this.selectedUser) {\r\n this.selectedUser = undefined;\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n });\r\n }\r\n\r\n onUserSelect(username: string, id: string): void {\r\n if (this.selectedUser === username) {\r\n this.selectedUser = undefined;\r\n this.userListService.unselectUser();\r\n this.userSelected.emit(SHARED.EMPTY);\r\n } else {\r\n this.selectedUser = username;\r\n this.documentStore.setSelectedUserId(id);\r\n this.userSelected.emit(username);\r\n }\r\n }\r\n}","<div class=\"user-list-container\" [@slideInFromTop]>\r\n <div class=\"user-cards\">\r\n <div \r\n *ngFor=\"let user of filteredUserData\" \r\n class=\"user-card\"\r\n [class.selected]=\"selectedUser === user.name\"\r\n [style.border-color]=\"selectedUser === user.name ? '#f97316' : 'transparent'\"\r\n (click)=\"onUserSelect(user.name, user._id)\"\r\n >\r\n @if(user.name === \"Application Docs\"){\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\"><i class=\"pi pi-user\"></i></span>\r\n </div>\r\n }@else {\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\r\n }\r\n <div class=\"user-info\">\r\n <div class=\"username\">{{ user.name }}</div>\r\n <div class=\"document-counts\">\r\n {{ user.approved }} approved / {{ user.pending }} pending\r\n </div>\r\n </div>\r\n <div class=\"selection-indicator\" *ngIf=\"selectedUser === user.name\" [@fadeIn]>\r\n <i class=\"ri-check-line\"></i>\r\n </div>\r\n </div>\r\n \r\n <!-- Show message when filtered list is empty -->\r\n <div *ngIf=\"filteredUserData.length === 0 && shouldShowContainer\" class=\"no-users-message\" [@slideInFromTop]>\r\n <p>No users available for this category.</p>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface StatusData {\r\n status: string;\r\n count: number;\r\n color?: string;\r\n icon?: string;\r\n _id?: string;\r\n}\r\n\r\nexport interface CalculatedStatusData extends StatusData {\r\n percentage: number;\r\n isSelected: boolean;\r\n statusClass: string;\r\n iconClass: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StatusCalculatorService {\r\n\r\n calculateTotalCount(statusData: StatusData[]): number {\r\n return statusData?.reduce((total, status) => total + (status.count ?? 0), 0) || 0;\r\n }\r\n\r\n calculateStatusDataWithPercentages(\r\n statusData: StatusData[], \r\n selectedStatus: string | null\r\n ): CalculatedStatusData[] {\r\n if (!statusData) return [];\r\n \r\n const totalCount = this.calculateTotalCount(statusData);\r\n \r\n return statusData.map((status) => ({\r\n ...status,\r\n percentage: totalCount > 0 ? (status.count ?? 0) / totalCount * 100 : 0,\r\n isSelected: selectedStatus === status.status,\r\n statusClass: status.status ? SHARED.STATUS_WITH_DASH + status.status.toLowerCase() : SHARED.EMPTY,\r\n iconClass: SHARED.ICON_WITH_DASH + (status?.status?.toLowerCase() || SHARED.EMPTY)\r\n }));\r\n }\r\n} ","import { Component, OnInit, OnDestroy, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { StatusCalculatorService, CalculatedStatusData } from '../../services/status-calculator.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'lib-document-status',\r\n standalone: false,\r\n templateUrl: './document-status.component.html',\r\n styleUrl: './document-status.component.scss'\r\n})\r\nexport class DocumentStatusComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Input() statusData: any;\r\n \r\n selectedStatus: string | null = null;\r\n statusDataWithPercentages: CalculatedStatusData[] = [];\r\n\r\n \r\n private subscription = new Subscription();\r\n\r\n constructor(\r\n private documentQuery: DocumentQuery,\r\n private documentService: DocumentHelperService,\r\n private statusCalculatorService: StatusCalculatorService\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['contextId'] && !changes['contextId'].firstChange) {\r\n // When contextId changes, refetch status data for the new context\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedStatus().subscribe(status => {\r\n this.selectedStatus= status;\r\n this.updateCalculatedStatusData();\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.documentQuery.selectStatusData().subscribe(statusData => {\r\n if (statusData && statusData.length > 0) {\r\n this.statusData = statusData;\r\n this.updateCalculatedStatusData();\r\n }\r\n })\r\n );\r\n\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n private refetchStatusData(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Use the document service to refresh status data for the new context\r\n this.documentService.refreshStatusData(this.contextId, statusContextId, categoryId);\r\n }\r\n }\r\n\r\n \r\n selectStatus(status: string): void {\r\n const newStatus = this.selectedStatus === status ? null : status;\r\n this.documentService.setSelectedStatus(newStatus);\r\n }\r\n\r\n private updateCalculatedStatusData(): void {\r\n this.statusDataWithPercentages = this.statusCalculatorService.calculateStatusDataWithPercentages(\r\n this.statusData,\r\n this.selectedStatus\r\n );\r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"status-summary-container\">\r\n <div class=\"status-cards\">\r\n \r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"status-card {{ status.statusClass }}\"\r\n [class.selected]=\"status.isSelected\"\r\n (click)=\"selectStatus(status.status || '')\"\r\n >\r\n <div class=\"status-icon {{ status.iconClass }}\">\r\n <i [class]=\"status.icon\"></i>\r\n </div>\r\n <div class=\"status-info\">\r\n <div class=\"status-count\">{{ status.count }}</div>\r\n <div class=\"status-name\">{{ status.status }}</div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\">\r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"progress-segment\"\r\n [style.width.%]=\"status.percentage\"\r\n [style.background-color]=\"status.color\"\r\n ></div>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { Subject, takeUntil, debounceTime, distinctUntilChanged } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'document-search',\r\n templateUrl: './document-search.component.html',\r\n styleUrls: ['./document-search.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentSearchComponent implements OnInit, OnDestroy {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Output() onActionClick = new EventEmitter<void>();\r\n \r\n searchTerm: string = SHARED.EMPTY;\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(private documentHelperService: DocumentHelperService) {}\r\n\r\n ngOnInit(): void {\r\n this.setupSearchSubscription();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n /**\r\n * Sets up the search input subscription with debouncing\r\n */\r\n private setupSearchSubscription(): void {\r\n const searchSubject = new Subject<string>();\r\n searchSubject.pipe(\r\n takeUntil(this.destroy$),\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n ).subscribe(searchTerm => {\r\n this.onSearchChange(searchTerm);\r\n });\r\n\r\n this.searchSubject = searchSubject;\r\n }\r\n\r\n /**\r\n * Handles search term changes from ngModel\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n onSearchInputChange(searchTerm: string): void {\r\n this.searchSubject.next(searchTerm);\r\n }\r\n\r\n /**\r\n * Handles search term changes\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n private onSearchChange(searchTerm: string): void {\r\n const normalizedSearchTerm = searchTerm?.trim() || null;\r\n this.documentHelperService.setSearchKey(normalizedSearchTerm);\r\n }\r\n\r\n /**\r\n * Clears the search input\r\n */\r\n onClearSearch(): void {\r\n this.searchTerm = SHARED.EMPTY;\r\n this.documentHelperService.setSearchKey(null);\r\n }\r\n\r\n private searchSubject = new Subject<string>();\r\n} ","<div class=\"search-container\">\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"pi pi-search search-icon\"></i>\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n \r\n <button \r\n type=\"button\"\r\n class=\"action-button\"\r\n (click)=\"onActionClick.emit()\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n >\r\n Actions\r\n </button>\r\n</div> ","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n@Component({\r\n selector: 'lib-common-sidebar',\r\n templateUrl: './common-sidebar.component.html',\r\n styleUrls: ['./common-sidebar.component.scss'],\r\n standalone: false\r\n})\r\nexport class CommonSidebarComponent {\r\n @Input() visible: boolean = false;\r\n @Input() position: 'left' | 'right' = 'right';\r\n @Input() width: string = SHARED.WIDTH;\r\n @Input() title: string = SHARED.EMPTY;\r\n @Input() showCloseButton: boolean = true;\r\n @Input() modal: boolean = true;\r\n @Input() dismissible: boolean = true;\r\n @Input() closeOnEscape: boolean = true;\r\n @Input() baseZIndex: number = SHARED.BASEZINDEX;\r\n @Input() autoZIndex: boolean = true;\r\n @Input() styleClass: string = SHARED.EMPTY;\r\n @Input() appendTo: string = 'body';\r\n @Input() blockScroll: boolean = true;\r\n @Input() closeIcon: string = SHARED.CLOSE_ICON;\r\n @Input() showSaveButton: boolean = false;\r\n @Input() saveButtonText: string = SHARED.SAVE;\r\n @Input() saveButtonDisabled: boolean = false;\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n @Output() onShow = new EventEmitter<void>();\r\n @Output() onHide = new EventEmitter<void>();\r\n @Output() onSave = new EventEmitter<void>();\r\n\r\n /**\r\n * Opens the sidebar\r\n */\r\n open(): void {\r\n this.visible = true;\r\n this.visibleChange.emit(this.visible);\r\n this.onShow.emit();\r\n }\r\n\r\n /**\r\n * Closes the sidebar\r\n */\r\n close(): void {\r\n this.visible = false;\r\n this.visibleChange.emit(this.visible);\r\n this.onHide.emit();\r\n }\r\n\r\n /**\r\n * Toggles the sidebar visibility\r\n */\r\n toggle(): void {\r\n this.visible = !this.visible;\r\n this.visibleChange.emit(this.visible);\r\n if (this.visible) {\r\n this.onShow.emit();\r\n } else {\r\n this.onHide.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the close button click\r\n */\r\n onCloseClick(): void {\r\n this.close();\r\n }\r\n\r\n /**\r\n * Handles the mask click (when dismissible is true)\r\n */\r\n onMaskClick(): void {\r\n if (this.dismissible) {\r\n this.close();\r\n }\r\n }\r\n}\r\n","<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [modal]=\"modal\"\r\n [dismissible]=\"dismissible\"\r\n [closeOnEscape]=\"closeOnEscape\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [styleClass]=\"styleClass\"\r\n [appendTo]=\"appendTo\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onHide.emit()\"\r\n \r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n <div class=\"header-actions\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <!-- Content projection slot -->\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n","import { Component, Input, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport {SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentUploadComponent } from '../document-upload/document-upload.component';\r\n\r\n/**\r\n * The `FolderContainerComponent` is responsible for rendering a container \r\n * that displays a list of documents and associated folder panel data.\r\n * This component utilizes the `FOLDERPANEL` constant for folder panel data\r\n * and accepts a document list input of type `DocumentModel`.\r\n */\r\n@Component({\r\n selector: 'lib-folder-container',\r\n standalone: false,\r\n templateUrl: './folder-container.component.html',\r\n styleUrl: './folder-container.component.scss',\r\n animations: [\r\n trigger('slideInOut', [\r\n state('visible', style({\r\n height: '*',\r\n opacity: 1,\r\n transform: 'translateY(0)',\r\n overflow: 'hidden',\r\n marginBottom: '1rem',\r\n visibility: 'visible'\r\n })),\r\n state('hidden', style({\r\n height: '0px',\r\n opacity: 0,\r\n transform: 'translateY(-20px)',\r\n overflow: 'hidden',\r\n marginBottom: '0px',\r\n visibility: 'hidden'\r\n })),\r\n transition('visible => hidden', [\r\n animate('250ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ]),\r\n transition('hidden => visible', [\r\n animate('300ms cubic-bezier(0.0, 0.0, 0.2, 1)')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class FolderContainerComponent implements OnInit {\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() documentList?: DocumentModel[];\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() folderList: FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The context ID for the folder container.\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The list of users passed as input to the component.\r\n * @type {UserListModel[]}\r\n */\r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The status data passed as input to the component.\r\n * @type {StatusDataModel[]}\r\n */\r\n @Input() statusData: StatusDataModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The document categories passed as input to the component.\r\n * @type {DocumentCategory[]}\r\n */\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Flag to control user list visibility\r\n */\r\n showUserList: boolean = true;\r\n \r\n /**\r\n * Animation state for user list visibility\r\n */\r\n userListAnimationState: string = SHARED.VISIBLE;\r\n\r\n /**\r\n * Controls the visibility of the document upload sidebar\r\n */\r\n isDocumentUploadSidebarOpen: boolean = false;\r\n\r\n /**\r\n * Reference to the document upload component\r\n */\r\n @ViewChild(DocumentUploadComponent) documentUploadComponent!: DocumentUploadComponent;\r\n \r\n /**\r\n * Tracks whether the save button should be disabled\r\n */\r\n isSaveButtonDisabled: boolean = false;\r\n \r\n constructor(private documentQuery: DocumentQuery) {}\r\n\r\n ngOnInit(): void {\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n this.showUserList = show;\r\n this.userListAnimationState = show ? SHARED.VISIBLE : SHARED.HIDDEN;\r\n });\r\n }\r\n\r\n /**\r\n * Called when the view is initialized to set up the save button state\r\n */\r\n ngAfterViewInit(): void {\r\n this.updateSaveButtonState();\r\n }\r\n\r\n /**\r\n * Updates the save button disabled state based on the document upload component\r\n */\r\n private updateSaveButtonState(): void {\r\n if (this.documentUploadComponent) {\r\n this.isSaveButtonDisabled = this.documentUploadComponent.getSaveButtonDisabled();\r\n }\r\n }\r\n\r\n /**\r\n * Opens the document upload sidebar\r\n */\r\n openDocumentUploadSidebar(): void {\r\n this.isDocumentUploadSidebarOpen = true;\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar hide event\r\n */\r\n onDocumentUploadSidebarHide(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n }\r\n\r\n /**\r\n * Handles the document upload save event\r\n */\r\n onDocumentUploadSave(): void {\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.saveDocumentUpload();\r\n this.updateSaveButtonState();\r\n }\r\n }\r\n\r\n \r\n}\r\n","\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list>\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-common-sidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [modal]=\"true\"\r\n [dismissible]=\"true\"\r\n [closeOnEscape]=\"true\"\r\n [blockScroll]=\"true\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n>\r\n <lib-document-upload [contextId]=\"contextId\"></lib-document-upload>\r\n</lib-common-sidebar>","\r\n/**\r\n * Storing all permission properties.\r\n * @export\r\n * @class PERMISSIONS\r\n * @typedef {PERMISSIONS}\r\n */\r\nexport class PERMISSIONS{\r\n \r\n/**\r\n * Access permission.\r\n * @static\r\n * @type {string}\r\n */\r\nstatic DOCUMENT_POST = 'Documents-POST'\r\nstatic DOCUMENT_DELETE = 'documents-deleteDocumentByDocumentId'\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { SHARED } from '../constant/SHARED';\r\n\r\n/**\r\n * Service for managing user session details.\r\n * @class SessionService\r\n * @typedef {SessionService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n\r\n /**\r\n * Creates an instance of SessionService.\r\n * @param {Router} router - Angular Router for navigation.\r\n */\r\n constructor(public router: Router) {}\r\n\r\n /**\r\n * Retrieves the current user's role from local storage.\r\n * @returns {string | null} The user's role, or null if not found.\r\n */\r\n getUserRole(): string | null {\r\n return localStorage.getItem('role');\r\n }\r\n\r\n /**\r\n * Stores the user session data in local storage.\r\n * @param {any} data - The session data to store.\r\n */\r\n setUserSession(data: any): void {\r\n localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));\r\n }\r\n\r\n /**\r\n * Retrieves the stored user session data.\r\n * @returns {any | null} The parsed session data, or null if not found.\r\n */\r\n getUserSession(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData) : null;\r\n }\r\n\r\n /**\r\n * Retrieves the user's permissions from the stored session data.\r\n * @returns {any | null} The user's permissions, or null if not found.\r\n */\r\n getUserPermissions(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData).permissions : null;\r\n }\r\n\r\n /**\r\n * Retrieves the session ID from the stored session data.\r\n * @returns {any | null} The session ID, or null if not found.\r\n */\r\n getSessionID(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n console.log(sessionData);\r\n if (sessionData) {\r\n const sessionId = JSON.parse(sessionData);\r\n console.log(sessionId);\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Clears all stored session data from local storage.\r\n */\r\n clearSession(): void {\r\n localStorage.clear();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentListResponse, DocumentListItem } from '../models/document-list-response.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PERMISSIONS } from '../../../Shared/constant/PERMISSIONS';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentTableBuilderService {\r\n\r\n constructor(private sessionService: SessionService) { }\r\n\r\n /**\r\n * Builds a single table from document list items\r\n * @param documents Array of document list items\r\n * @returns TableData object\r\n */\r\n buildDocumentTable(documents: DocumentListItem[]): TableData {\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n const hasDeletePermission = userPermissionNames.includes(PERMISSIONS.DOCUMENT_DELETE);\r\n const columns = SHARED.DOCUMENT_TABLE_COLUMNS.filter(col => {\r\n // Always include non-action columns\r\n if (col.type !== SHARED.ACTIONS) {\r\n return true;\r\n }\r\n // Only include action column if user has delete permission\r\n return hasDeletePermission;\r\n });\r\n\r\n return {\r\n columns: columns,\r\n data: documents\r\n };\r\n }\r\n\r\n /**\r\n * Gets completion count for a category\r\n * @param category Document category\r\n * @returns Completion string (e.g., \"2/4\")\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n const total = category.list.length;\r\n const completed = category.list.filter(doc => \r\n doc.status.toLowerCase() === SHARED.APPROVED || \r\n doc.status.toLowerCase() === SHARED.UPLOADED\r\n ).length;\r\n return `${completed}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets pending document count for a category\r\n * @param category Document category\r\n * @returns Number of pending documents\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return category.totalDocs - category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Gets approved document count for a category\r\n * @param category Document category\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Transforms document model to document list item\r\n * @param documents Array of DocumentModel\r\n * @returns Array of DocumentListItem\r\n */\r\n transformDocumentModelToListItem(documents: any[]): DocumentListItem[] {\r\n return documents.map(doc => ({\r\n _id: doc._id || SHARED.EMPTY,\r\n fileName: doc.fileName || SHARED.EMPTY,\r\n docName: doc.docName || doc.documentName || SHARED.EMPTY,\r\n fileSize: doc.fileSize || SHARED.EMPTY,\r\n documentUrl: doc.documentUrl || doc.url || SHARED.EMPTY,\r\n status: doc.status || SHARED.PENDING,\r\n uploadedOn: doc.uploadedOn || doc.uploadDate || SHARED.EMPTY,\r\n ownerName: doc.ownerName || doc.applicantName || SHARED.EMPTY,\r\n contentType: doc.contentType || SHARED.EMPTY,\r\n isUploaded: doc.isUploaded || false\r\n }));\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { DocumentUploadService } from './document-upload.service';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentTableBuilderService } from './document-table-builder.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem, DocumentListResponse } from '../models/document-list-response.model';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { Message } from 'primeng/api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentListService {\r\n\r\n constructor(\r\n private documentUploadService: DocumentUploadService,\r\n private documentHttpService: DocumentHttpService,\r\n private documentQuery: DocumentQuery,\r\n private documentStore: DocumentStore,\r\n private documentTableBuilder: DocumentTableBuilderService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n\r\n /**\r\n * Handle file upload click event\r\n */\r\n handleFileUploadClick(): void {\r\n this.documentStore.setMessage(SHARED.EMPTY_ARRAY);\r\n }\r\n\r\n /**\r\n * Handle save click to update document name\r\n */\r\n handleSaveClick(fileName: string, selectedDocument: DocumentListItem): Observable<any> {\r\n const payload = { fileName };\r\n return this.documentHttpService.updateDocumentName(selectedDocument._id, payload);\r\n }\r\n\r\n\r\n /**\r\n * Get completion count for a category\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n return this.documentTableBuilder.getCompletionCount(category);\r\n }\r\n\r\n /**\r\n * Get pending document count for a category\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getPendingDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Get approved document count for a category\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getApprovedDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Build document categories from API response\r\n */\r\n buildDocumentCategories(documentListResponse: DocumentListResponse[] | null): {\r\n documentCategories: DocumentListResponse[];\r\n categoryTables: TableData[];\r\n categoryCompletionCounts: string[];\r\n } {\r\n if (!documentListResponse) {\r\n return {\r\n documentCategories: SHARED.EMPTY_ARRAY,\r\n categoryTables: SHARED.EMPTY_ARRAY,\r\n categoryCompletionCounts: SHARED.EMPTY_ARRAY\r\n };\r\n }\r\n\r\n // Handle empty response - create a default category to show \"No records found\"\r\n if (documentListResponse.length === 0) {\r\n const defaultCategory = {\r\n label: SHARED.EMPTY,\r\n categoryDescription: SHARED.NO_DOCUMENTS_FOUND,\r\n list: SHARED.EMPTY_ARRAY,\r\n totalDocs: 0,\r\n acceptedDocs: 0,\r\n completed: '0/0'\r\n };\r\n \r\n return {\r\n documentCategories: [defaultCategory],\r\n categoryTables: [this.documentTableBuilder.buildDocumentTable([])],\r\n categoryCompletionCounts: ['0/0']\r\n };\r\n }\r\n\r\n const documentCategories = [...documentListResponse];\r\n const categoryTables = documentListResponse.map(category => \r\n this.documentTableBuilder.buildDocumentTable(category.list)\r\n );\r\n const categoryCompletionCounts = documentListResponse.map(category => \r\n this.getCompletionCount(category)\r\n );\r\n\r\n return {\r\n documentCategories,\r\n categoryTables,\r\n categoryCompletionCounts\r\n };\r\n }\r\n\r\n /**\r\n * Handle table row click\r\n */\r\n handleTableRowClick(rowData: any): DocumentListItem {\r\n return rowData;\r\n }\r\n\r\n /**\r\n * Handle delete action\r\n */\r\n handleDeleteAction(rowData: any, contextId: string): Observable<any> {\r\n if (!rowData._id || !contextId) {\r\n return throwError(() => new Error('Missing required parameters for delete'));\r\n }\r\n\r\n return this.documentHttpService.deleteDocument(rowData._id, contextId);\r\n }\r\n\r\n /**\r\n * Refresh document list for new context\r\n */\r\n refreshDocumentListForNewContext(contextId: string): void {\r\n if (contextId && contextId !== SHARED.EMPTY) {\r\n // Clear current document list response\r\n this.documentStore.setDocumentListResponse(null);\r\n \r\n // Refresh documents for the new context\r\n this.documentHelperService.refreshDocumentsWithoutFilters(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Refresh document list after status update\r\n */\r\n refreshDocumentList(contextId: string): void {\r\n if (contextId) {\r\n this.documentHelperService.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Setup subscription to document list response\r\n */\r\n setupDocumentListSubscription(): Observable<DocumentListResponse[] | null> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n this.documentHelperService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n} ","import { Directive, Input, ElementRef, Renderer2, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n/**\r\n * Directive to conditionally show or hide elements based on user permissions.\r\n * @class HasPermissionDirective\r\n * @typedef {HasPermissionDirective}\r\n */\r\n@Directive({\r\n selector: '[permission]',\r\n standalone: false\r\n})\r\nexport class HasPermissionDirective implements OnChanges {\r\n \r\n /**\r\n * The required permission(s) to display the element.\r\n * Accepts a single string or an array of strings.\r\n * @type {string | string[]}\r\n */\r\n @Input() permission?: string | string[];\r\n\r\n /**\r\n * Creates an instance of HasPermissionDirective.\r\n * @param {ElementRef} el - Reference to the host element.\r\n * @param {Renderer2} renderer - Angular Renderer for DOM manipulation.\r\n * @param {SessionService} sessionService - Service to retrieve user permissions.\r\n */\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n public sessionService: SessionService\r\n ) {}\r\n\r\n /**\r\n * Lifecycle hook that is called when input properties change.\r\n * @param {SimpleChanges} changes - The changes in input properties.\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['permission']) {\r\n this.checkPermission();\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the user has the required permission(s).\r\n * Hides the element if the permission is not found.\r\n */\r\n private checkPermission() {\r\n // If no permission is required (empty string, null, or undefined), show the element\r\n if (!this.permission || this.permission === '' || (Array.isArray(this.permission) && this.permission.length === 0)) {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n return;\r\n }\r\n\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n\r\n const requiredPermissions = Array.isArray(this.permission)\r\n ? this.permission\r\n : [this.permission];\r\n\r\n const hasPermission = requiredPermissions.some(permission =>\r\n userPermissionNames.includes(permission)\r\n );\r\n\r\n if (!hasPermission) {\r\n this.renderer.setStyle(this.el.nativeElement, 'display', 'none');\r\n } else {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n }\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SHARED } from '../../constant/SHARED';\r\nimport { ProcessedRowData, TableData } from './table-primary.model';\r\n\r\n@Component({\r\n selector: 'lib-table-primary',\r\n standalone: false,\r\n templateUrl: './table-primary.component.html',\r\n styleUrl: './table-primary.component.scss'\r\n})\r\nexport class TablePrimaryComponent implements OnChanges {\r\n @Input() tableData: TableData = { columns: [], data: [] };\r\n @Input() showHeader: boolean = true;\r\n @Input() tableStyle: any = { 'min-width': '100%' };\r\n @Output() rowClick = new EventEmitter<any>();\r\n @Output() deleteAction = new EventEmitter<any>();\r\n\r\n processedData: ProcessedRowData[] = [];\r\n \r\n // Expose SHARED constants for template use\r\n readonly SHARED = SHARED;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['tableData'] && this.tableData) {\r\n this.processTableData();\r\n }\r\n }\r\n\r\n private processTableData(): void {\r\n this.processedData = this.tableData.data.map(rowData => {\r\n const processedRow: ProcessedRowData = { ...rowData };\r\n if (rowData.fileName) {\r\n processedRow._fileExtension = this.getFileExtension(rowData.fileName);\r\n processedRow._isPdfFile = processedRow._fileExtension === SHARED.PDF;\r\n processedRow._isImageFile = processedRow._fileExtension === SHARED.JPG || processedRow._fileExtension === SHARED.PNG;\r\n processedRow._isExcelFile = processedRow._fileExtension === SHARED.XLSX;\r\n processedRow._isOtherFile = !processedRow._isPdfFile && !processedRow._isImageFile && !processedRow._isExcelFile;\r\n }\r\n\r\n this.tableData.columns.forEach(col => {\r\n if (col.type === SHARED.STATUS_PARAM && rowData[col.field]) {\r\n const status = rowData[col.field];\r\n processedRow._statusClass = this.getStatusClass(status);\r\n processedRow._statusIcon = this.getStatusIcon(status);\r\n }\r\n });\r\n\r\n return processedRow;\r\n });\r\n }\r\n\r\n getStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.STATUS_APPROVED_CLASS;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.STATUS_ALERT_CLASS;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.STATUS_UPLOADED_CLASS;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.STATUS_REVIEWING_CLASS;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.STATUS_REJECTED_CLASS;\r\n default:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n }\r\n }\r\n\r\n getStatusIcon(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.ICON_CLOCK;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.ICON_CHECK;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.ICON_EXCLAMATION_TRIANGLE;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.ICON_CLOUD_UPLOAD;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.ICON_EYE;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.ICON_TIMES;\r\n default:\r\n return SHARED.ICON_CLOCK;\r\n }\r\n }\r\n\r\n getFileExtension(fileName: string): string {\r\n return fileName.split(SHARED.DOT).pop()?.toUpperCase() || SHARED.PDF;\r\n }\r\n\r\n onActionClick(event: Event, rowData: any): void {\r\n event.stopPropagation();\r\n this.deleteAction.emit(rowData);\r\n }\r\n\r\n onRowClick(rowData: any): void {\r\n this.rowClick.emit(rowData);\r\n }\r\n}\r\n","<div class=\"card\">\r\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\r\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\r\n <tr>\r\n <th *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n {{ col.header }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr (click)=\"onRowClick(rowData)\" class=\"clickable-row\">\r\n <td *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n <!-- Document Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_DOCUMENT\" class=\"document-cell\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"SHARED.ICON_FILE_PDF\" *ngIf=\"rowData._isPdfFile\"></i>\r\n <i [class]=\"SHARED.ICON_IMAGE\" *ngIf=\"rowData._isImageFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE_EXCEL\" *ngIf=\"rowData._isExcelFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE\" *ngIf=\"rowData._isOtherFile\"></i>\r\n </div>\r\n <div class=\"document-details\">\r\n <div class=\"document-name\">{{ rowData.docName }}</div>\r\n <div class=\"file-info\">{{ rowData.fileName }} - {{ rowData.fileSize }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Status Cell -->\r\n \r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_STATUS\" class=\"status-cell\">\r\n <span class=\"status-pill\" [ngClass]=\"rowData._statusClass\">\r\n <i [class]=\"rowData._statusIcon\"></i>\r\n {{ rowData[col.field] }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_ACTIONS\" class=\"actions-cell\">\r\n @if(rowData.isUploaded){\r\n <button pButton pRipple type=\"button\" [icon]=\"SHARED.ICON_DELETE\" \r\n class=\"p-button-text p-button-rounded\" \r\n [permission]=\"'documents-deleteDocumentByDocumentId'\"\r\n (click)=\"onActionClick($event, rowData)\">\r\n </button>\r\n } \r\n </div>\r\n\r\n <!-- Default Text Cell -->\r\n <div *ngIf=\"!col.type || col.type === SHARED.CELL_TYPE_TEXT\" class=\"text-cell\">\r\n {{ rowData[col.field] }}\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- No Records Template -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"tableData.columns.length\" class=\"no-records-cell\">\r\n <div class=\"no-records-content\">\r\n <i class=\"pi pi-inbox\" style=\"font-size: 2rem; color: #6c757d;\"></i>\r\n <p class=\"no-records-text\">No records found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentAction } from './document-actions.service';\r\nimport { DocumentAlertList, SHARED, SUPPORTED_IMAGE_TYPES } from '../../../Shared/constant/SHARED';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\n\r\nexport interface DocumentViewerState {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentViewerService {\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) {}\r\n\r\n /**\r\n * Gets the current document viewer state as an observable\r\n */\r\n get state$(): Observable<DocumentViewerState> {\r\n return this.documentQuery.selectDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state synchronously\r\n */\r\n getCurrentState(): DocumentViewerState {\r\n return this.documentQuery.getDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Updates the selected document and recalculates all computed properties\r\n * @param document The selected document\r\n */\r\n updateSelectedDocument(document: DocumentListItem): void {\r\n this.documentService.set(document);\r\n const alertData = this.getAlertData(document);\r\n const documentStatus = this.calculateDocumentStatus(document);\r\n const documentIsUploaded = this.calculateIsDocumentUploaded(document);\r\n\r\n this.documentStore.updateDocumentViewerState(\r\n document,\r\n undefined, // Keep existing history\r\n undefined, // Keep existing showHistory\r\n undefined, // Keep existing loading\r\n documentStatus,\r\n documentIsUploaded,\r\n alertData\r\n );\r\n\r\n this.loadDocumentHistory(document._id);\r\n }\r\n\r\n /**\r\n * Loads document history data\r\n * @param documentId The document ID\r\n */\r\n loadDocumentHistory(documentId: string): void {\r\n if (documentId) {\r\n this.documentHttpService.getDocumentHistory(documentId)\r\n .subscribe({\r\n next: (history) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined, // Keep existing document\r\n history,\r\n true // Show history\r\n );\r\n },\r\n error: (error) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined, // Keep existing document\r\n undefined, // Keep existing history\r\n false // Hide history\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image\r\n * @param contentType The MIME type of the content\r\n * @returns True if the content type is an image\r\n */\r\n isImage(contentType?: string): boolean {\r\n return contentType ? SUPPORTED_IMAGE_TYPES.includes(contentType) : false;\r\n }\r\n\r\n /**\r\n * Handles document actions and updates status\r\n * @param action The action performed\r\n * @param contextId The context ID for API calls\r\n */\r\n handleDocumentAction(action: DocumentAction, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n switch (action.type) {\r\n case SHARED.ACCEPT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_APPROVED, action.note || SHARED.DOCUMENT_ACCEPTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.REJECT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_REJECTED, action.note || SHARED.DOCUMENT_REJECTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.DELETE_ACTION:\r\n this.deleteDocument(currentState.selectedDocument._id, contextId);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the document status via API call and refreshes all related data\r\n * @param status The new status (Approved, Rejected)\r\n * @param description The status update description\r\n * @param contextId The context ID for API calls\r\n */\r\n private updateDocumentStatus(status: string, description: string, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.updateDocumentStatus(\r\n currentState.selectedDocument._id,\r\n status,\r\n description\r\n ).subscribe({\r\n next: (response) => {\r\n if (currentState.selectedDocument && response.status) {\r\n const normalizedStatus = response.normalizedStatus || response.status.toLowerCase();\r\n const updatedDocument = {\r\n ...currentState.selectedDocument,\r\n status: normalizedStatus\r\n };\r\n \r\n this.updateSelectedDocument(updatedDocument);\r\n }\r\n this.refreshAllData(contextId);\r\n },\r\n error: (error) => {\r\n console.error('Error updating document status:', error);\r\n },\r\n complete: () => {\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Deletes a document and refreshes all data while preserving current filters\r\n * @param documentId The ID of the document to delete\r\n * @param contextId The context ID for API calls\r\n */\r\n private deleteDocument(documentId: string, contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for delete operation');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.deleteDocument(documentId, contextId).subscribe({\r\n next: (res:any) => {\r\n if(res){\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n this.documentStore.clearDocumentViewerState();\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Error deleting document:', error);\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refreshes all related data after document status update\r\n * @param contextId The context ID for API calls\r\n */\r\n private refreshAllData(contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for data refresh');\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (currentState.selectedDocument?._id) {\r\n this.loadDocumentHistory(currentState.selectedDocument._id);\r\n }\r\n\r\n // Use the same refresh method as other components for consistency\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n\r\n /**\r\n * Gets alert data for the document\r\n * @param document The document\r\n * @returns Alert data\r\n */\r\n private getAlertData(document: DocumentListItem): any {\r\n return DocumentAlertList.find((res: any) => res.status === document?.status);\r\n }\r\n\r\n /**\r\n * Calculates the current status of the document for the actions component\r\n * @param document The document\r\n * @returns The current document status\r\n */\r\n private calculateDocumentStatus(document: DocumentListItem): 'pending' | 'accepted' | 'rejected' {\r\n if (!document) return SHARED.STATUS_PENDING as 'pending';\r\n \r\n // First check statusId from API response if available\r\n if (document.statusId) {\r\n switch (document.statusId.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n \r\n // Fall back to status field mapping\r\n switch (document.status?.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n case SHARED.STATUS_DECLINED:\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n default:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n\r\n /**\r\n * Calculates if the document is uploaded and ready for actions\r\n * @param document The document\r\n * @returns True if document is uploaded\r\n */\r\n private calculateIsDocumentUploaded(document: DocumentListItem): boolean {\r\n if (!document) return false;\r\n \r\n // Check if document has a URL and is not in a pending state\r\n const isPending = document.statusId?.toLowerCase() === SHARED.STATUS_PENDING || \r\n document.status?.toLowerCase() === SHARED.STATUS_PENDING;\r\n \r\n return !!(document.documentUrl && !isPending);\r\n }\r\n} ","/**\r\n * Constants for Document History labels and styling\r\n */\r\nexport const DOCUMENT_HISTORY = {\r\n // Document History Labels\r\n LABELS: {\r\n DOCUMENT_REQUESTED: 'Document Requested',\r\n DOCUMENT_UPLOADED: 'Document Uploaded',\r\n DOCUMENT_REJECTED: 'Document Rejected',\r\n DOCUMENT_ACCEPTED: 'Document Accepted'\r\n },\r\n\r\n // Icon classes for different actions\r\n ICONS: {\r\n DOCUMENT_REQUESTED: 'pi pi-file',\r\n DOCUMENT_UPLOADED: 'pi pi-cloud-upload',\r\n DOCUMENT_REJECTED: 'pi pi-times',\r\n DOCUMENT_ACCEPTED: 'pi pi-check'\r\n },\r\n\r\n // Text color classes - matching the design in the image\r\n TEXT_COLORS: {\r\n DOCUMENT_REQUESTED: 'text-gray-700', // Dark gray for better readability\r\n DOCUMENT_UPLOADED: 'text-green-700', // Dark green for uploaded\r\n DOCUMENT_REJECTED: 'text-red-700', // Dark red for rejected\r\n DOCUMENT_ACCEPTED: 'text-green-700' // Dark green for accepted\r\n },\r\n\r\n // Background color classes - matching the light gray design from image\r\n BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'bg-gray-100', // Light gray like in the image\r\n DOCUMENT_UPLOADED: 'bg-green-50', // Very light green\r\n DOCUMENT_REJECTED: 'bg-red-50', // Very light red\r\n DOCUMENT_ACCEPTED: 'bg-green-50' // Very light green\r\n },\r\n\r\n // Border color classes - subtle borders\r\n BORDER_COLORS: {\r\n DOCUMENT_REQUESTED: 'border-gray-300', // Medium gray border\r\n DOCUMENT_UPLOADED: 'border-green-300', // Light green border\r\n DOCUMENT_REJECTED: 'border-red-300', // Light red border\r\n DOCUMENT_ACCEPTED: 'border-green-300' // Light green border\r\n },\r\n\r\n // Icon background color classes - matching the circular icon design\r\n ICON_BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'icon-bg-blue', // Blue for requested (as shown in image)\r\n DOCUMENT_UPLOADED: 'icon-bg-green', // Green for uploaded\r\n DOCUMENT_REJECTED: 'icon-bg-red', // Red for rejected\r\n DOCUMENT_ACCEPTED: 'icon-bg-green' // Green for accepted\r\n }\r\n}; ","import { Injectable } from '@angular/core';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * Service for handling document history styling logic\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryStyleService {\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Get the appropriate icon class based on the action label\r\n */\r\n getActionIcon(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate color class based on the action label\r\n */\r\n getActionColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate background color class based on the action label\r\n */\r\n getActionBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate border color class based on the action label\r\n */\r\n getActionBorderColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate icon background color class based on the action label\r\n */\r\n getActionIconBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n checkValidContent(section: any): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some((item:any) => \r\n item.label || \r\n item.requestDescription || \r\n item.documentUrl || \r\n item.userName\r\n );\r\n }\r\n\r\n getAccordionClass(section: any): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { DocumentHistoryItem, DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentHistoryStyleService } from './document-history-style.service';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\n\r\n// Extended interface for processed items with computed properties\r\ninterface ProcessedDocumentHistoryItem extends DocumentHistoryItem {\r\n actionIcon: string;\r\n actionColor: string;\r\n actionBgColor: string;\r\n actionBorderColor: string;\r\n actionIconBgColor: string;\r\n}\r\n\r\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\r\n list: ProcessedDocumentHistoryItem[];\r\n accordionClass?: string;\r\n hasValidContent?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryService {\r\n\r\n constructor(\r\n private documentHistoryStyleService: DocumentHistoryStyleService, \r\n private http: HttpClient,\r\n private sessionService: SessionService,\r\n private appConfigService: AppConfigService\r\n ) {}\r\n\r\n /**\r\n * Get the CSS class for accordion styling based on the section's label\r\n */\r\n private getAccordionClass(section: ProcessedDocumentHistorySection): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED; // Default class\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n private checkValidContent(section: ProcessedDocumentHistorySection): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some(item => \r\n item.requestDescription !== SHARED.EMPTY && \r\n item.documentUrl !== SHARED.EMPTY && \r\n (item.userName !== SHARED.EMPTY && item.userName !== SHARED.UNKNOWN_USER)\r\n );\r\n }\r\n\r\n /**\r\n * Process history data to add computed properties\r\n */\r\n processHistoryData(historyData: DocumentHistorySection[]): ProcessedDocumentHistorySection[] {\r\n if (!historyData) {\r\n return SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n return historyData.map(section => {\r\n const processedSection: ProcessedDocumentHistorySection = {\r\n ...section,\r\n list: section.list.map(item => ({\r\n ...item,\r\n dateTime: item.dateTime || ERRORS.NO_VALUE_FOUND,\r\n actionIcon: this.documentHistoryStyleService.getActionIcon(item.label),\r\n actionColor: this.documentHistoryStyleService.getActionColor(item.label),\r\n actionBgColor: this.documentHistoryStyleService.getActionBgColor(item.label),\r\n actionBorderColor: this.documentHistoryStyleService.getActionBorderColor(item.label),\r\n actionIconBgColor: this.documentHistoryStyleService.getActionIconBgColor(item.label)\r\n }))\r\n };\r\n\r\n // Add accordion class based on the first item's label\r\n processedSection.accordionClass = this.getAccordionClass(processedSection);\r\n \r\n // Add hasValidContent property\r\n processedSection.hasValidContent = this.checkValidContent(processedSection);\r\n\r\n return processedSection;\r\n });\r\n }\r\n\r\n /**\r\n * Downloads a document when clicked\r\n * @param documentUrl - The URL of the document to download\r\n * @param docName - The name of the document\r\n */\r\n downloadDocument(documentUrl: string, docName?: string): void {\r\n if (!documentUrl) {\r\n console.warn(ERRORS.NO_DOCUMENT_URL);\r\n return;\r\n }\r\n\r\n // Ensure the URL is properly formatted\r\n const fullUrl = this.getFullUrl(documentUrl);\r\n console.log('Downloading document:', { originalUrl: documentUrl, fullUrl, docName });\r\n \r\n // Get authentication headers from session\r\n const headers = this.getAuthHeaders();\r\n console.log('Using headers:', headers);\r\n \r\n this.http.get(fullUrl, { \r\n responseType: 'blob',\r\n headers: headers\r\n }).subscribe({\r\n next: (blob) => {\r\n console.log('Download successful, blob size:', blob.size);\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = blobUrl;\r\n a.download = docName ?? SHARED.DOCUMENT;\r\n a.style.display = SHARED.NONE;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(blobUrl);\r\n },\r\n error: (err) => {\r\n console.error('Download failed:', err);\r\n console.error(ERRORS.DOWNLOAD_FAIL, err);\r\n \r\n // If the first attempt fails, try without custom headers (let interceptors handle it)\r\n if (err.status === 401 || err.status === 403) {\r\n console.log('Retrying download without custom headers to use interceptors...');\r\n this.downloadDocumentWithInterceptors(fullUrl, docName);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Alternative download method that relies on HTTP interceptors for authentication\r\n * @param documentUrl - The URL of the document to download\r\n * @param docName - The name of the document\r\n */\r\n private downloadDocumentWithInterceptors(documentUrl: string, docName?: string): void {\r\n this.http.get(documentUrl, { \r\n responseType: 'blob'\r\n // No custom headers - let interceptors handle authentication\r\n }).subscribe({\r\n next: (blob) => {\r\n console.log('Download successful with interceptors, blob size:', blob.size);\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = blobUrl;\r\n a.download = docName ?? SHARED.DOCUMENT;\r\n a.style.display = SHARED.NONE;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(blobUrl);\r\n },\r\n error: (err) => {\r\n console.error('Download failed even with interceptors:', err);\r\n console.error(ERRORS.DOWNLOAD_FAIL, err);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Get the full URL for the document, handling relative URLs\r\n * @private\r\n * @param documentUrl - The document URL (can be relative or absolute)\r\n * @returns {string} The full URL\r\n */\r\n private getFullUrl(documentUrl: string): string {\r\n // If it's already an absolute URL, return as is\r\n if (documentUrl.startsWith('http://') || documentUrl.startsWith('https://')) {\r\n return documentUrl;\r\n }\r\n \r\n // If it's a relative URL, try to get the API base URL\r\n try {\r\n const apiBaseUrl = this.appConfigService.apiBaseUrl;\r\n if (apiBaseUrl) {\r\n // Remove leading slash from documentUrl if present\r\n const cleanUrl = documentUrl.startsWith('/') ? documentUrl.substring(1) : documentUrl;\r\n return `${apiBaseUrl}/${cleanUrl}`;\r\n }\r\n } catch (error) {\r\n console.warn('Could not get API base URL, using original URL:', error);\r\n }\r\n \r\n // Fallback to original URL\r\n return documentUrl;\r\n }\r\n\r\n /**\r\n * Get authentication headers for HTTP requests\r\n * @private\r\n * @returns {HttpHeaders} Headers with authentication token\r\n */\r\n private getAuthHeaders(): HttpHeaders {\r\n const sessionData = this.sessionService.getUserSession();\r\n console.log('Session data:', sessionData);\r\n \r\n let headers = new HttpHeaders();\r\n \r\n // Check multiple possible token locations in session data\r\n if (sessionData && sessionData.token) {\r\n headers = headers.set('Authorization', `Bearer ${sessionData.token}`);\r\n console.log('Using token from sessionData.token');\r\n } else if (sessionData && sessionData.accessToken) {\r\n headers = headers.set('Authorization', `Bearer ${sessionData.accessToken}`);\r\n console.log('Using token from sessionData.accessToken');\r\n } else if (sessionData && sessionData.sessionId) {\r\n headers = headers.set('Authorization', `Bearer ${sessionData.sessionId}`);\r\n console.log('Using token from sessionData.sessionId');\r\n } else if (sessionData && sessionData.authToken) {\r\n headers = headers.set('Authorization', `Bearer ${sessionData.authToken}`);\r\n console.log('Using token from sessionData.authToken');\r\n } else if (sessionData && sessionData.jwt) {\r\n headers = headers.set('Authorization', `Bearer ${sessionData.jwt}`);\r\n console.log('Using token from sessionData.jwt');\r\n } else {\r\n // Check localStorage directly for common token patterns\r\n const directToken = localStorage.getItem('token') || \r\n localStorage.getItem('accessToken') || \r\n localStorage.getItem('authToken') ||\r\n localStorage.getItem('jwt');\r\n \r\n if (directToken) {\r\n headers = headers.set('Authorization', `Bearer ${directToken}`);\r\n console.log('Using token from localStorage');\r\n } else {\r\n console.warn('No authentication token found in session data or localStorage');\r\n }\r\n }\r\n \r\n return headers;\r\n }\r\n\r\n /**\r\n * Debug method to help identify issues when the library is used in the main project\r\n * @public\r\n */\r\n debugEnvironment(): void {\r\n console.log('=== Document History Service Environment Debug ===');\r\n \r\n // Check session data\r\n const sessionData = this.sessionService.getUserSession();\r\n console.log('Session data:', sessionData);\r\n \r\n // Check localStorage for common token patterns\r\n const localStorageKeys = ['token', 'accessToken', 'authToken', 'jwt', 'userData'];\r\n const localStorageData: any = {};\r\n localStorageKeys.forEach(key => {\r\n const value = localStorage.getItem(key);\r\n if (value) {\r\n try {\r\n localStorageData[key] = JSON.parse(value);\r\n } catch {\r\n localStorageData[key] = value;\r\n }\r\n }\r\n });\r\n console.log('LocalStorage data:', localStorageData);\r\n \r\n // Check API configuration\r\n try {\r\n const apiBaseUrl = this.appConfigService.apiBaseUrl;\r\n console.log('API Base URL:', apiBaseUrl);\r\n } catch (error) {\r\n console.log('API Base URL error:', error);\r\n }\r\n \r\n // Check if we're in a browser environment\r\n console.log('User Agent:', navigator.userAgent);\r\n console.log('Window location:', window.location.href);\r\n \r\n console.log('=== End Debug ===');\r\n }\r\n} ","import { Component, Input } from '@angular/core';\nimport { DocumentHistorySection } from '../../models/document-history.model';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { DocumentHistoryService } from '../../services/document-history.service';\n\n// Extended interface for processed items with computed properties\ninterface ProcessedDocumentHistoryItem {\n label: string;\n dateTime: string;\n requestDescription: string;\n userName: string;\n userRole: string;\n documentUrl?: string;\n docName?: string;\n actionIcon: string;\n actionColor: string;\n actionBgColor: string;\n actionBorderColor: string;\n actionIconBgColor: string;\n}\n\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\n list: ProcessedDocumentHistoryItem[];\n accordionClass?: string;\n hasValidContent?: boolean;\n}\n\n/**\n * Component for displaying document history in a timeline format.\n */\n@Component({\n selector: 'document-history',\n standalone: false,\n templateUrl: './document-history.component.html',\n styleUrls: ['./document-history.component.scss']\n})\nexport class DocumentHistoryComponent {\n \n /**\n * Input data for document history sections\n */\n @Input() historyData: DocumentHistorySection[] = SHARED.EMPTY_ARRAY;\n \n /**\n * Whether to show the history component\n */\n @Input() showHistory: boolean = false;\n\n /**\n * Active accordion index for controlling expand/collapse\n */\n activeAccordionIndex: number = 0;\n\n /**\n * Whether the accordion is expanded\n */\n isAccordionExpanded: boolean = true;\n\n constructor(private documentHistoryService: DocumentHistoryService) {}\n\n /**\n * Handle accordion open event\n */\n onAccordionOpen(): void {\n this.isAccordionExpanded = true;\n this.activeAccordionIndex = 0;\n }\n\n /**\n * Handle accordion close event\n */\n onAccordionClose(): void {\n this.isAccordionExpanded = false;\n this.activeAccordionIndex = -1;\n }\n\n /**\n * Toggle accordion state\n */\n toggleAccordion(): void {\n if (this.isAccordionExpanded) {\n this.onAccordionClose();\n } else {\n this.onAccordionOpen();\n }\n }\n\n /**\n * Process history data to add computed properties\n */\n get processedHistoryData(): ProcessedDocumentHistorySection[] {\n return this.documentHistoryService.processHistoryData(this.historyData);\n }\n\n /**\n * Downloads a document when clicked\n * @param documentUrl - The URL of the document to download\n * @param docName - The name of the document\n */\n downloadDocument(documentUrl: string, docName?: string): void {\n this.documentHistoryService.downloadDocument(documentUrl, docName);\n }\n} ","<div class=\"document-history-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <div class=\"history-sections\">\r\n <div class=\"history-section\" *ngFor=\"let section of processedHistoryData\">\r\n <div *ngIf=\"section.header === 'Initial Request' && section.hasValidContent\" \r\n class=\"initial-request-section\"\r\n [ngClass]=\"section.accordionClass\">\r\n <p-accordion [activeIndex]=\"activeAccordionIndex\" \r\n (onOpen)=\"onAccordionOpen()\" \r\n (onClose)=\"onAccordionClose()\">\r\n <p-accordionTab [header]=\"section.header\">\r\n <div class=\"history-timeline\" *ngIf=\"section.hasValidContent\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription ?? 'No Request' }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button class=\"action-btn download-btn\" \r\n title=\"Download\"\r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\">\r\n <i class=\"pi pi-download\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Show message if no valid content -->\r\n <div class=\"no-content-message\" *ngIf=\"!section.hasValidContent\">\r\n <p>No initial request details available.</p>\r\n </div>\r\n </p-accordionTab>\r\n </p-accordion>\r\n </div>\r\n \r\n <!-- Document History as regular timeline -->\r\n <div *ngIf=\"section.header !== 'Initial Request'\" class=\"document-history-section\">\r\n <div class=\"section-header\" *ngIf=\"section.header\">\r\n <h4 class=\"section-title\">{{ section.header }}</h4>\r\n </div>\r\n \r\n <div class=\"history-timeline\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <!-- Header with icon and timestamp -->\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface DocumentAction {\r\n type: typeof SHARED.REJECT_ACTION | typeof SHARED.ACCEPT_ACTION | typeof SHARED.DELETE_ACTION;\r\n note?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentActionsService {\r\n\r\n /**\r\n * Calculates the card class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the card\r\n */\r\n calculateCardClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-card`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.CARD_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.CARD_REJECTED;\r\n default:\r\n return SHARED.CARD_PENDING;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the reject button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the reject button\r\n */\r\n calculateRejectButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-reject`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_SECONDARY_REJECT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_PRIMARY_REJECT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_REJECT;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the accept button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the accept button\r\n */\r\n calculateAcceptButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-accept`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_PRIMARY_ACCEPT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_SECONDARY_ACCEPT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_ACCEPT;\r\n }\r\n }\r\n\r\n /**\r\n * Creates an accept action\r\n * @param note - The acceptance note\r\n * @returns {DocumentAction} The accept action\r\n */\r\n createAcceptAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.ACCEPT_ACTION as 'accept',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a reject action\r\n * @param note - The rejection note\r\n * @returns {DocumentAction} The reject action\r\n */\r\n createRejectAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.REJECT_ACTION as 'reject',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a delete action\r\n * @returns {DocumentAction} The delete action\r\n */\r\n createDeleteAction(): DocumentAction {\r\n return {\r\n type: SHARED.DELETE_ACTION as 'delete'\r\n };\r\n }\r\n} ","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentActionsService, DocumentAction } from '../../services/document-actions.service';\r\n\r\n@Component({\r\n selector: 'document-actions',\r\n templateUrl: './document-actions.component.html',\r\n styleUrls: ['./document-actions.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentActionsComponent implements OnChanges {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() document?: any;\r\n @Input() documentId?: string;\r\n @Input() currentStatus?: typeof SHARED.STATUS_PENDING | typeof SHARED.STATUS_ACCEPTED | typeof SHARED.STATUS_REJECTED_LOWERCASE;\r\n @Input() isLoading?: boolean = false;\r\n @Input() isUploaded?: boolean = false;\r\n @Input() statusId?: string;\r\n @Output() actionPerformed = new EventEmitter<DocumentAction>();\r\n\r\n showAcceptDialog = false;\r\n showRejectDialog = false;\r\n acceptNote = SHARED.EMPTY;\r\n private _rejectNote = SHARED.EMPTY;\r\n\r\n // Action processing flags\r\n isAccepting = false;\r\n isRejecting = false;\r\n\r\n // Computed properties for template\r\n cardClass: string = SHARED.CARD_PENDING;\r\n rejectButtonClass: string = SHARED.BUTTON_DEFAULT_REJECT;\r\n acceptButtonClass: string = SHARED.BUTTON_DEFAULT_ACCEPT;\r\n isRejectNoteEmpty: boolean = true;\r\n\r\n constructor(private documentActionsService: DocumentActionsService) {}\r\n\r\n get rejectNote(): string {\r\n return this._rejectNote;\r\n }\r\n\r\n set rejectNote(value: string) {\r\n this._rejectNote = value;\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.updateComputedProperties();\r\n \r\n // Reset action flags when isLoading changes to false\r\n if (changes['isLoading'] && !this.isLoading) {\r\n this.resetActionFlags();\r\n }\r\n }\r\n\r\n /**\r\n * Updates computed properties based on currentStatus and statusId\r\n */\r\n private updateComputedProperties(): void {\r\n this.cardClass = this.documentActionsService.calculateCardClass(this.currentStatus, this.statusId);\r\n this.rejectButtonClass = this.documentActionsService.calculateRejectButtonClass(this.currentStatus, this.statusId);\r\n this.acceptButtonClass = this.documentActionsService.calculateAcceptButtonClass(this.currentStatus, this.statusId);\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n /**\r\n * Updates the isRejectNoteEmpty property based on current rejectNote value\r\n */\r\n private updateRejectNoteEmpty(): void {\r\n this.isRejectNoteEmpty = !this.rejectNote || this.rejectNote.trim() === SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Resets the action processing flags\r\n */\r\n private resetActionFlags(): void {\r\n this.isAccepting = false;\r\n this.isRejecting = false;\r\n }\r\n\r\n onAcceptClick(): void {\r\n this.showAcceptDialog = true;\r\n }\r\n\r\n onRejectClick(): void {\r\n this.showRejectDialog = true;\r\n }\r\n\r\n onDeleteClick(): void {\r\n this.actionPerformed.emit(this.documentActionsService.createDeleteAction());\r\n }\r\n\r\n onAcceptConfirm(): void {\r\n this.isAccepting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createAcceptAction(this.acceptNote));\r\n this.acceptNote = SHARED.EMPTY;\r\n this.showAcceptDialog = false;\r\n }\r\n\r\n onRejectConfirm(): void {\r\n this.isRejecting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createRejectAction(this.rejectNote));\r\n this.rejectNote = SHARED.EMPTY;\r\n this.showRejectDialog = false;\r\n }\r\n\r\n onCancel(): void {\r\n this.showAcceptDialog = false;\r\n this.showRejectDialog = false;\r\n this.acceptNote = SHARED.EMPTY;\r\n this.rejectNote = SHARED.EMPTY;\r\n }\r\n\r\n} ","<div class=\"document-actions-container\" >\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <!-- Reject Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn reject-btn\" [ngClass]=\"rejectButtonClass\" (click)=\"onRejectClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? SHARED.BUTTON_LABEL_REJECTED :\r\n SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n\r\n <!-- Accept Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn accept-btn\" [ngClass]=\"acceptButtonClass\" (click)=\"onAcceptClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_ACCEPTED || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT\r\n }}</span>\r\n </button>\r\n\r\n <!-- Delete Button -->\r\n @if(document?.isUploaded){\r\n <button class=\"action-btn delete-btn\" (click)=\"onDeleteClick()\" [disabled]=\"isLoading\"\r\n [permission]=\"'documents-deleteDocumentByDocumentId'\" pTooltip=\"Delete Document\" tooltipPosition=\"top\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Accept Confirmation Dialog -->\r\n<p-dialog [(visible)]=\"showAcceptDialog\" [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"acceptNote\" class=\"note-label\">{{ SHARED.ACCEPT_NOTE_LABEL }}</label>\r\n <textarea id=\"acceptNote\" pInputTextarea [(ngModel)]=\"acceptNote\" [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" class=\"p-button-success\" (click)=\"onAcceptConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<!-- Reject Confirmation Dialog -->\r\n<p-dialog [(visible)]=\"showRejectDialog\" [header]=\"SHARED.REJECT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"rejectNote\" class=\"note-label\">{{ SHARED.REJECT_NOTE_LABEL }}</label>\r\n <textarea id=\"rejectNote\" pInputTextarea [(ngModel)]=\"rejectNote\" [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.REJECT_BUTTON_LABEL\" class=\"p-button-danger\" [disabled]=\"isRejectNoteEmpty\"\r\n (click)=\"onRejectConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { SHARED, SUPPORTED_IMAGE_TYPES } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../../models/document-history.model';\r\nimport { DocumentAction } from '../../services/document-actions.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentViewerService, DocumentViewerState } from '../../services/document-viewer.service';\r\n\r\n/**\r\n * Component for viewing and managing document details.\r\n * @class DocumentViewerComponent\r\n * @typedef {DocumentViewerComponent}\r\n */\r\n@Component({\r\n selector: 'document-viewer',\r\n templateUrl: './document-viewer.component.html',\r\n standalone : false,\r\n styleUrl: './document-viewer.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DocumentViewerComponent implements OnChanges, OnDestroy {\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() selectedDocument?: DocumentListItem; // <-- Made optional to prevent undefined issues\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() documentList?: DocumentListItem[]; // <-- Made optional to prevent undefined issues\r\n /**\r\n * The context ID for API calls\r\n * @type {string}\r\n */\r\n @Input() contextId?: string;\r\n\r\n /**\r\n * Event emitted when document status is updated to refresh the document list\r\n * @type {EventEmitter<void>}\r\n */\r\n @Output() documentStatusUpdated = new EventEmitter<void>();\r\n\r\n /**\r\n * Indicates whether a checkbox is selected.\r\n * @type {boolean}\r\n */\r\n checked: boolean = false;\r\n\r\n /**\r\n * Reference to the dynamic dialog used for displaying additional details.\r\n * @type {(DynamicDialogRef | undefined)}\r\n */\r\n ref: DynamicDialogRef | undefined;\r\n\r\n /**\r\n * Indicates whether the document has been verified.\r\n * @type {boolean}\r\n */\r\n isVerified: boolean = false;\r\n\r\n /**\r\n * Messages for user feedback\r\n * @type {any[]}\r\n */\r\n messages: any[] = [];\r\n\r\n /**\r\n * Current state from the service\r\n * @type {DocumentViewerState}\r\n */\r\n currentState: DocumentViewerState = {\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: SHARED.STATUS_PENDING as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n\r\n /**\r\n * Computed property to determine if the selected document is an image\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentImage(): boolean {\r\n return this.documentViewerService.isImage(this.selectedDocument?.contentType);\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document is a PDF\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentPdf(): boolean {\r\n return this.selectedDocument?.contentType === 'application/pdf';\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document has an unsupported content type\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentUnsupported(): boolean {\r\n return !this.isSelectedDocumentImage && !this.isSelectedDocumentPdf;\r\n }\r\n\r\n /**\r\n * Holds the subscription to manage observable cleanup.\r\n * @private\r\n * @type {Subscription}\r\n */\r\n private subscription: Subscription = new Subscription();\r\n\r\n /**\r\n * Initializes a new instance of the DocumentViewerComponent.\r\n * @param {DocumentHttpService} documentHttpService - Handle the http service.\r\n * @param {DocumentService} documentService - Handle the states.\r\n * @param {DocumentViewerService} documentViewerService - Handle the viewer business logic.\r\n */\r\n constructor(\r\n public documentHttpService : DocumentHttpService, \r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentViewerService: DocumentViewerService,\r\n ) {\r\n // Subscribe to state changes from the service\r\n this.subscription.add(\r\n this.documentViewerService.state$.subscribe(state => {\r\n this.currentState = state;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches the alerts for the selected document.\r\n * @returns {void}\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['selectedDocument'] && this.selectedDocument) {\r\n this.documentViewerService.updateSelectedDocument(this.selectedDocument);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document selection from template\r\n * @param document The selected document\r\n */\r\n handleSelectedDocument(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.documentViewerService.updateSelectedDocument(document);\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image.\r\n * @param {string | undefined} contentType - The MIME type of the content.\r\n * @returns {boolean} `true` if the content type is an image; otherwise, `false`.\r\n */\r\n isImage(contentType?: string): boolean {\r\n return this.documentViewerService.isImage(contentType);\r\n }\r\n\r\n /**\r\n * Handles document actions from the actions component\r\n * @param {DocumentAction} action - The action performed\r\n */\r\n handleDocumentAction(action: DocumentAction): void {\r\n this.documentViewerService.handleDocumentAction(action, this.contextId);\r\n this.documentStatusUpdated.emit();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer-container\">\r\n <div class=\"main-content\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n \r\n <div class=\"content-grid\">\r\n @if(selectedDocument){\r\n <div class=\"document-preview\">\r\n @if(isSelectedDocumentImage){\r\n <div class=\"img-container\">\r\n <img\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n class=\"uploadedImages\"\r\n alt=\"Document Image\"\r\n />\r\n </div>\r\n }@else if(isSelectedDocumentPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n [rotation]=\"0\"\r\n [original-size]=\"false\"\r\n [show-all]=\"true\"\r\n [fit-to-page]=\"false\"\r\n [zoom]=\"1\"\r\n [zoom-scale]=\"'page-width'\"\r\n [stick-to-page]=\"false\"\r\n [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\"\r\n [autoresize]=\"true\"\r\n [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"\r\n ></pdf-viewer>\r\n </div>\r\n }@else if(isSelectedDocumentUnsupported){\r\n <div class=\"incorrect-docType\">\r\n ContentType is incorrect.\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"sidebar\">\r\n <document-actions\r\n [document]=\"selectedDocument\"\r\n [documentId]=\"selectedDocument?._id\"\r\n [currentStatus]=\"currentState.documentStatus\"\r\n [isLoading]=\"currentState.isActionLoading\"\r\n [isUploaded]=\"currentState.documentIsUploaded\"\r\n [statusId]=\"selectedDocument?.statusId\"\r\n (actionPerformed)=\"handleDocumentAction($event)\">\r\n </document-actions>\r\n \r\n <document-history \r\n [historyData]=\"currentState.documentHistory\" \r\n [showHistory]=\"currentState.showDocumentHistory\">\r\n </document-history>\r\n \r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentListItem, DocumentListResponse } from '../../models/document-list-response.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { TableData } from '../../../../Shared/components/table-primary/table-primary.model';\r\nimport { DocumentListService } from '../../services/document-list.service';\r\nimport { Message } from 'primeng/api';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\n\r\n/**\r\n * This component is responsible for displaying and managing a list of documents.\r\n * Provides functionality for file upload, document selection, and dialog management.\r\n * @class DocumentListComponent\r\n */\r\n@Component({\r\n selector: 'lib-document-list',\r\n standalone: false,\r\n templateUrl: './document-list.component.html',\r\n styleUrls: ['./document-list.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentListComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n /**\r\n * Represents the context ID for the document list.\r\n * This value is passed from the parent component.\r\n * @type {string}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The document list response data passed from the parent component.\r\n * @type {DocumentListResponse[] | null}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentListResponse: DocumentListResponse[] | null = null;\r\n\r\n /**\r\n * Subscription to document list response from store\r\n */\r\n private documentListSubscription: Subscription = new Subscription();\r\n\r\n /**\r\n * The currently selected document.\r\n * @type {DocumentModel}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedDocument!: DocumentListItem;\r\n\r\n /**\r\n * Default visibility of the sidebar.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isSidebarVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * Default visibility of the messages.\r\n * @type {Message[]}\r\n * @memberof DocumentListComponent\r\n */\r\n messages: Message[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Default visibility of the dialog.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isdialogVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * The list of documents to display.\r\n * This value is passed from the parent component.\r\n * @type {DocumentModel[]}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentList: DocumentListItem[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Available document types for selection.\r\n * @type {string[]}\r\n * @memberof DocumentListComponent\r\n */\r\n options: any[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The selected option for the document type.\r\n * @type {(string | null)}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedOption: string | null = null;\r\n \r\n /**\r\n * The file name associated with the document.\r\n * It may be undefined until a file is selected or loaded.\r\n * @type {string | undefined}\r\n */\r\n fileName!: string | undefined;\r\n \r\n /**\r\n * Table data for each category\r\n */\r\n categoryTables: TableData[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Document categories from the response\r\n */\r\n documentCategories: DocumentListResponse[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Completion counts for each category\r\n */\r\n categoryCompletionCounts: string[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Getter to format category labels with proper suffix\r\n */\r\n get formattedCategoryLabels(): string[] {\r\n return this.documentCategories.map(category => {\r\n return category.label.endsWith(SHARED.DOCUMENTS) ? category.label : `${category.label} ${SHARED.DOCUMENTS}`;\r\n });\r\n }\r\n\r\n /**\r\n * Creates an instance of DocumentListComponent.\r\n * @class\r\n * @param {DocumentListService} documentListService - The service responsible for document list operations.\r\n */\r\n constructor(\r\n private documentListService: DocumentListService\r\n ) {}\r\n\r\n /**\r\n * Handles changes to input properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.documentListService.refreshDocumentListForNewContext(this.contextId);\r\n }\r\n }\r\n\r\n /** \r\n * Initializes the component by setting up document list subscription.\r\n */\r\n ngOnInit(): void {\r\n this.setupDocumentListSubscription();\r\n }\r\n\r\n /**\r\n * Handles the save click event to update the document's file name.\r\n * This method creates a payload with the updated file name and calls the\r\n * updateDocumentName() method from the documentHttpService. On a successful update,\r\n * it logs a message with the document's ID.\r\n * @returns {void}\r\n */\r\n handleSaveClick(): void {\r\n if (this.fileName && this.selectedDocument) {\r\n this.documentListService.handleSaveClick(this.fileName, this.selectedDocument)\r\n .subscribe((res) => {\r\n console.log(`${SHARED.UPDATE_DOCUMENT_NAME} ${this.selectedDocument._id}`);\r\n });\r\n }\r\n }\r\n\r\n \r\n\r\n /**\r\n * Handles the visibility of the sidebar.\r\n * @param {boolean} isVisible - Indicates whether the sidebar should be visible or not.\r\n * @memberof DocumentListComponent\r\n */\r\n handleOpenSideBar(isVisible: boolean): void {\r\n this.isSidebarVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Builds document categories from the API response\r\n */\r\n buildDocumentCategories(): void {\r\n const result = this.documentListService.buildDocumentCategories(this.documentListResponse);\r\n this.documentCategories = result.documentCategories;\r\n this.categoryTables = result.categoryTables;\r\n this.categoryCompletionCounts = result.categoryCompletionCounts;\r\n }\r\n\r\n /**\r\n * Sets up subscription to document list response from store\r\n */\r\n setupDocumentListSubscription(): void {\r\n this.documentListSubscription.add(\r\n this.documentListService.setupDocumentListSubscription().subscribe({\r\n next: (response: any) => {\r\n this.documentListResponse = response;\r\n this.buildDocumentCategories();\r\n },\r\n error: (error: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Handles table row click event\r\n */\r\n handleTableRowClick(rowData: any): void {\r\n this.isdialogVisible = SHARED.TRUE;\r\n this.selectedDocument = this.documentListService.handleTableRowClick(rowData);\r\n }\r\n\r\n /**\r\n * Handles the delete action from the table component\r\n * @param {any} rowData - The row data containing the document to delete\r\n */\r\n handleDeleteAction(rowData: any): void {\r\n this.documentListService.handleDeleteAction(rowData, this.contextId)\r\n .subscribe({\r\n next: (response) => {\r\n this.documentListService.refreshAllDataWithCurrentFilters(this.contextId);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refreshes the document list after a status update\r\n */\r\n refreshDocumentList(): void {\r\n this.documentListService.refreshDocumentList(this.contextId);\r\n }\r\n\r\n /**\r\n * Cleanup subscriptions on component destroy\r\n */\r\n ngOnDestroy(): void {\r\n this.documentListSubscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer\">\r\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\" \r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\">\r\n <document-viewer \r\n [selectedDocument]=\"selectedDocument\" \r\n [documentList]=\"documentList\" \r\n [contextId]=\"contextId\" \r\n (documentStatusUpdated)=\"refreshDocumentList()\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n <button pButton pRipple class=\"mx-3 w-6rem save-btn-wrapper\" label=\"Save\" (click)=\"handleSaveClick()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\">\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\">\r\n <div class=\"category-header\">\r\n <div class=\"category-title\">\r\n <h3>{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <span class=\"status-badge\">{{ categoryCompletionCounts[i] }} Complete</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary \r\n [tableData]=\"categoryTables[i]\" \r\n [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\"\r\n (deleteAction)=\"handleDeleteAction($event)\">\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../models/document-category.model';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentMenuService {\r\n\r\n constructor(private documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Gets the category name for a given menu item _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The category name or null if not found\r\n */\r\n getMenuItemCategory(menuItemId: string, categories: DocumentCategory[]): string | null {\r\n for (const category of categories) {\r\n if (category.items?.some((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId)) {\r\n return category.label;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the menu item by its _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The menu item or null if not found\r\n */\r\n getMenuItemById(menuItemId: string, categories: DocumentCategory[]): DocumentCategoryItem | null {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Handles user list visibility based on menu item category\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleUserListVisibility(menuItemId: string, categories: DocumentCategory[]): void {\r\n const category = this.getMenuItemCategory(menuItemId, categories);\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n \r\n if (category === SHARED.APPLICATION) {\r\n this.documentStore.setShowUserList(true);\r\n } else if (category === SHARED.APPLICANTS) {\r\n this.documentStore.setShowUserList(true);\r\n } else {\r\n this.documentStore.setShowUserList(false);\r\n this.documentStore.setSelectedUserId(null);\r\n this.documentStore.setSelectedStatus(null);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document status based on selected menu item\r\n * @param menuItemId - The _id of the selected menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleDocumentStatus(menuItemId: string, categories: DocumentCategory[]): void {\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n if (menuItem) {\r\n // You can add logic here to handle document status based on the selected menu item\r\n // For example, filtering documents by status, updating status counts, etc.\r\n console.log('Selected menu item:', menuItem.label, 'with status:', menuItem.status);\r\n }\r\n }\r\n\r\n /**\r\n * Calculates total documents for a menu item\r\n * @param item - The menu item\r\n * @returns Total number of documents\r\n */\r\n getTotalDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys\r\n const pending = status.Pending || status.pending || 0;\r\n const reviewing = status.Reviewing || status.reviewing || 0;\r\n const accepted = status.Accepted || status.approved || 0; // Note: approved maps to Accepted\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n return pending + reviewing + accepted + rejected;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Gets badge value for a menu item\r\n * @param item - The menu item\r\n * @returns Badge value string (e.g., \"2/3\")\r\n */\r\n getBadgeValue(item: DocumentCategoryItem): string {\r\n const approved = this.getApprovedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n return `${approved}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets badge severity based on status\r\n * @param item - The menu item\r\n * @returns Badge severity for PrimeNG\r\n */\r\n getBadgeSeverity(item: DocumentCategoryItem): 'success' | 'info' | 'warning' | 'danger' {\r\n const status = item.status;\r\n const total = this.getTotalDocuments(item);\r\n const approved = this.getApprovedDocuments(item);\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n if (total === 0) return 'info';\r\n \r\n // If any docs are rejected, show red\r\n if (rejected > 0) return 'danger';\r\n \r\n // If all docs are approved, show green\r\n if (approved === total && total > 0) return 'success';\r\n \r\n // Otherwise show amber\r\n return 'warning';\r\n }\r\n\r\n /**\r\n * Checks if badge should be shown for a menu item\r\n * @param item - The menu item\r\n * @returns True if badge should be shown\r\n */\r\n shouldShowBadge(item: DocumentCategoryItem): boolean {\r\n return this.getTotalDocuments(item) > 0;\r\n }\r\n\r\n /**\r\n * Calculates approved documents for a menu item\r\n * @param item - The menu item\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys, with approved mapping to Accepted\r\n return status.Accepted || status.approved || 0;\r\n }\r\n} ","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../../models/document-category.model';\r\nimport { DocumentMenuService } from '../../services/document-menu.service';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\ninterface MenuItemData {\r\n totalDocuments: number;\r\n approvedDocuments: number;\r\n badgeValue: string;\r\n badgeSeverity: 'success' | 'info' | 'warning' | 'danger';\r\n shouldShowBadge: boolean;\r\n}\r\n@Component({\r\n selector: 'lib-documents-menu',\r\n standalone: false,\r\n templateUrl: './documents-menu.component.html',\r\n styleUrl: './documents-menu.component.scss'\r\n})\r\nexport class DocumentsMenuComponent implements OnInit, OnChanges {\r\n @Input() catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\r\n @Input() applicationNumber : string = SHARED.EMPTY\r\n @Input() contextId: string = SHARED.EMPTY;\r\n selectedMenuItem: string | null = null;\r\n selectedMenuItemId: string | null = null;\r\n\r\n // Store the categories from the store\r\n private storeCategories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentMenuService: DocumentMenuService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.selectedMenuItemId = menuItemId;\r\n this.selectedMenuItem = this.findMenuItemLabelById(menuItemId);\r\n });\r\n\r\n // Subscribe to document categories from the store\r\n this.documentQuery.selectDocumentCategories().subscribe(categories => {\r\n if (categories && categories.length > 0) {\r\n this.storeCategories = categories;\r\n this.updateMenuItemsData();\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CATAGORIES] && this.catagories) {\r\n this.updateMenuItemsData();\r\n }\r\n \r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.handleContextIdChange();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the categories to use for the menu\r\n * Priority: Store categories > Input categories\r\n */\r\n get categories(): DocumentCategory[] {\r\n const result = this.storeCategories.length > 0 ? this.storeCategories : this.catagories;\r\n return result;\r\n }\r\n\r\n /**\r\n * Finds the label of a menu item by its _id\r\n * @param id The _id to search for\r\n * @returns The label of the menu item or null if not found\r\n */\r\n private findMenuItemLabelById(id: string | null): string | null {\r\n if (!id) return null;\r\n \r\n for (const category of this.categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === id);\r\n if (item) {\r\n return item.label;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n \r\n /**\r\n * Update menu use catagories\r\n */\r\n private updateMenuItemsData(): void {\r\n this.categories.forEach(category => {\r\n if (category.items) {\r\n category.items.forEach(item => {\r\n const menuData = {\r\n totalDocuments: this.documentMenuService.getTotalDocuments(item),\r\n approvedDocuments: this.documentMenuService.getApprovedDocuments(item),\r\n badgeValue: this.documentMenuService.getBadgeValue(item),\r\n badgeSeverity: this.documentMenuService.getBadgeSeverity(item),\r\n shouldShowBadge: this.documentMenuService.shouldShowBadge(item)\r\n };\r\n (item as any).menuData = menuData;\r\n });\r\n }\r\n });\r\n }\r\n\r\n \r\n /**\r\n * Handle the menu item click\r\n * @param {*} event - Event \r\n * @param {DocumentCategoryItem} item - catagory item\r\n */\r\n onMenuItemClick(event: any, item: DocumentCategoryItem): void {\r\n if (this.selectedMenuItemId === item._id) {\r\n // Immediately clear the selection state\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n \r\n // Update the store\r\n this.documentStore.setSelectedMenuItem(null);\r\n \r\n // Refresh documents\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n \r\n // Force change detection by updating the component state\r\n this.handleDeselection();\r\n } else {\r\n this.selectedMenuItem = item.label;\r\n this.selectedMenuItemId = item._id;\r\n this.documentStore.setSelectedMenuItem(item._id);\r\n this.documentMenuService.handleUserListVisibility(item._id, this.categories);\r\n }\r\n }\r\n\r\n /**\r\n * Handle deselection to ensure immediate visual feedback\r\n */\r\n private handleDeselection(): void {\r\n // Force immediate update of the component state\r\n this.selectedMenuItemId = null;\r\n this.selectedMenuItem = null;\r\n \r\n // Trigger change detection\r\n setTimeout(() => {\r\n // This ensures the UI updates immediately\r\n }, 0);\r\n }\r\n\r\n onSelectMenuItem(menuItemId: string): void {\r\n const label = this.findMenuItemLabelById(menuItemId);\r\n if (label) {\r\n this.selectedMenuItem = label;\r\n this.selectedMenuItemId = menuItemId;\r\n this.documentStore.setSelectedMenuItem(menuItemId);\r\n this.documentMenuService.handleUserListVisibility(menuItemId, this.categories);\r\n }\r\n }\r\n\r\n onUnselectMenuItem(): void {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n\r\n getSelectedMenuItem(): string | null {\r\n return this.selectedMenuItem;\r\n }\r\n\r\n /**\r\n * Handles contextId changes by clearing current selection and refreshing data\r\n */\r\n private handleContextIdChange(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n }\r\n\r\n getSelectedMenuItemId(): string | null {\r\n return this.selectedMenuItemId;\r\n }\r\n}\r\n","<div class=\"document-sidebar-container h-full\">\r\n <p-card class=\"widget-menu-wrapper h-full\">\r\n @if(applicationNumber){\r\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\r\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\r\n <div class=\"expand-icon-wrapper\">\r\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"widget-menu-container\" >\r\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\r\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <span [style]=\"{\r\n color : '#9EA0B3'\r\n }\">{{ item.label === 'Application' ? 'Application Documents' : item.label }}</span>\r\n </ng-template>\r\n <ng-template pTemplate=\"item\" let-item>\r\n <a pRipple \r\n class=\"flex align-items-center p-menuitem-link\"\r\n [class.selected-menu-item]=\"selectedMenuItemId === item._id\"\r\n (click)=\"onMenuItemClick($event, item)\">\r\n <span [class]=\"item.icon\" class=\"text-xl\"></span>\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n <p-badge *ngIf=\"item.menuData?.shouldShowBadge\" \r\n class=\"ml-auto\" \r\n [severity]=\"item.menuData?.badgeSeverity\" \r\n [value]=\"item.menuData?.badgeValue\" />\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n </div>\r\n </div>\r\n </p-card>\r\n</div>\r\n\r\n ","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { DocumentService } from '../../state/document.service';\nimport { Subscription } from 'rxjs';\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\nimport { DocumentHttpService } from '../../services/document-http.service';\nimport { DocumentQuery } from '../../state/document.query';\nimport { DocumentStore } from '../../state/document.store';\nimport { DocumentCategory } from '../../models/document-category.model';\nimport { UserListModel } from '../../models/user-list.model';\nimport { StatusDataModel } from '../../models/status-data.model';\nimport { DocumentListResponse } from '../../models/document-list-response.model';\nimport { DocumentHelperService } from '../../services/document.service';\n\n/**\n *This component is responsible for managing and displaying a list of documents.\n * @class DocumentContainerComponent\n * @typedef {DocumentContainerComponent}\n */\n@Component({\n selector: 'lib-document-container',\n standalone: false,\n templateUrl: './document-container.component.html',\n styleUrl: './document-container.component.scss'\n})\nexport class DocumentContainerComponent implements OnInit, OnDestroy, OnChanges {\n\n /**\n * Creates an instance of DocumentContainerComponent.\n * @param {DocumentStore} documentStore - Query Store service to manage store document-related state.\n * @param {DocumentService} documentService - Service to manage document-related operations.\n * @param {DocumentQuery} documentQuery - Query service to manage document-related state.\n * @param {DocumentHttpService} documentHttpService - Service to make HTTP requests related to documents.\n */\n constructor(public documentStore: DocumentStore, public documentService: DocumentService, public documentQuery: DocumentQuery, public documentHttpService: DocumentHttpService, public documentHelperService : DocumentHelperService) {\n // Note: initializeSelectionWatcher now requires contextId\n // This should be called from the component that has access to contextId\n\n }\n /**\n * Get contextId in input.\n * @type {string}\n */\n @Input() contextId: string = SHARED.EMPTY;\n \n \n /**\n * The list of folders.\n * @type {Array}\n */\n applicationNumber: string = SHARED.EMPTY\n catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\n userList: UserListModel[] = SHARED.EMPTY_ARRAY\n /**\n * Status data for the current selection\n * @type {StatusDataModel[]}\n */\n statusData: StatusDataModel[] = []\n\n /**\n * Document list response from API\n * @type {DocumentListResponse | null}\n */\n documentListResponse: DocumentListResponse[] | null = null;\n /**\n * Holds the subscription to manage observable cleanup.\n * @\n * @type {Subscription}\n */\n subscription: Subscription = new Subscription();\n\n /**\n * Handles changes to input properties\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\n // When contextId changes, clear all state and refetch data for the new context\n this.handleContextIdChange();\n }\n }\n\n /**\n * Fetches the folder and document data on initialization.\n * @returns {void}\n */\n ngOnInit(): void {\n this.clearAllState();\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.initializeData();\n }\n }\n\n /**\n * Initialize all data with proper sequencing to avoid duplicate API calls\n */\n initializeData(): void {\n this.fetchDocumentCatagories();\n this.fetchUserListWithFilters();\n this.setupStatusDataSubscriptions();\n this.setupFilteredDocumentSubscription();\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\n }\n\n /**\n * Clears all state (store and component) comprehensively\n */\n clearAllState(): void {\n this.documentStore.clearSelectionState();\n this.documentStore.clearDocumentViewerState();\n this.documentStore.setDocumentListResponse(null);\n this.documentStore.setDocumentList([]); \n this.documentStore.setDocumentCategories([]);\n this.documentStore.setUserList([]);\n this.documentStore.setStatusData([]);\n this.documentStore.setCurrentDocument(null); \n this.documentStore.setFolders([]);\n this.documentStore.setDocumentAlert(null);\n this.catagories = SHARED.EMPTY_ARRAY;\n this.userList = SHARED.EMPTY_ARRAY;\n this.statusData = [];\n this.documentListResponse = null;\n this.applicationNumber = SHARED.EMPTY;\n }\n\n /**\n * Handles contextId change by clearing all state and refetching data\n */\n handleContextIdChange(): void {\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.subscription.unsubscribe();\n this.subscription = new Subscription();\n this.documentHelperService.cleanupSelectionWatcher();\n this.clearAllState();\n this.initializeData();\n }\n }\n\n /**\n * Sets up subscriptions to monitor menu item and user selection changes\n * to trigger status data fetching and user list refreshing\n */\n setupStatusDataSubscriptions(): void {\n this.subscription.add(\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItem => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.subscription.add(\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.subscription.add(\n this.documentQuery.selectSelectedStatus().subscribe(status => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.fetchStatusData();\n }\n\n /**\n * Fetches status data based on current selections\n */\n fetchStatusData(): void {\n if (!this.contextId) {\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\n return;\n }\n\n const currentState = this.documentQuery.getSelectionState();\n const contextId = currentState.userId || null\n const categoryId = currentState.menuItem || null; \n this.documentHttpService.getStatusDocumentCount(this.contextId,contextId,categoryId).subscribe({\n next: (statusData) => {\n this.statusData = statusData;\n this.documentStore.setStatusData(statusData);\n },\n error: (error) => {\n console.error(ERRORS.ERROR_FETCHING_STATUS_DATA, error);\n }\n });\n }\n\n /**\n * Fetches userlist data with current filters applied\n */\n fetchUserListWithFilters(): void {\n if (!this.contextId) {\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\n return;\n }\n\n const currentState = this.documentQuery.getSelectionState();\n // For user list, we use the contextId but the API might need additional parameters\n // based on current filters. For now, we'll use the base contextId\n // If the API supports filtering by menu item or status, we can add those parameters\n this.documentHttpService.getUserListByContextId(this.contextId).subscribe({\n next: (res: UserListModel[]) => {\n this.userList = res;\n this.documentStore.setUserList(res);\n },\n error: (err: any) => {\n console.error(ERRORS.ERROR_FETCHING_USER_LIST, err);\n }\n });\n }\n /**\n * Fetches document catagory data.\n */\n fetchDocumentCatagories(): void {\n const categoriesSubscription = this.documentHttpService.getDocumentCatagories(this.contextId).subscribe({\n next: (categories: any) => {\n if (categories) {\n this.catagories = categories.categories;\n this.applicationNumber = categories.applicationNumber;\n this.documentStore.setDocumentCategories(categories.categories);\n }\n },\n error: (err: any) => {\n console.error(ERRORS.ERROR_FETCHING_DOCUMENT_CATEGORIES, err);\n }\n });\n this.subscription.add(categoriesSubscription);\n }\n \n /**\n * Refetches all data when contextId changes\n */\n refetchAllDataForNewContext(): void {\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.documentStore.clearSelectionState();\n this.documentStore.clearDocumentViewerState();\n this.fetchDocumentCatagories();\n this.fetchUserListWithFilters();\n this.fetchStatusData();\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\n }\n }\n\n /**\n * Sets up subscription to listen for filtered document responses\n */\n setupFilteredDocumentSubscription(): void {\n this.subscription.add(\n this.documentQuery.selectDocumentListResponse().subscribe({\n next: (response: any) => {\n this.documentListResponse = response;\n },\n error: (error: any) => {\n console.error(ERRORS.ERROR_RECEIVING_DOCUMENT_LIST, error);\n }\n })\n );\n }\n\n /** \n * Unsubscribe subscription on destroy of component and clean up state.\n */\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n this.documentHelperService.cleanupSelectionWatcher();\n this.clearAllState();\n }\n}\n","<div class=\"grid m-0 h-full flex\">\r\n <div class=\"col-12 md:col-2 lg:col-2\">\r\n <lib-documents-menu [catagories]=\"catagories\" [applicationNumber]=\"applicationNumber\" [contextId]=\"contextId\"></lib-documents-menu>\r\n </div>\r\n <div class=\"col-12 md:col-10 lg:col-10 p-0 h-full\" [ngClass]=\"{'custom-scroll': true}\">\r\n <div class=\"card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div >\r\n <lib-document-list [contextId]=\"contextId\" [documentListResponse]=\"documentListResponse\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * The `FolderBlockComponent` is responsible for displaying a block of folders and\r\n * providing filtering functionality based on folder IDs.\r\n *\r\n * It uses data from the `DocumentStore` and constants from the `SHARED` configuration \r\n * to display missing and pending file counts.\r\n */\r\n@Component({\r\n selector: 'lib-folder-block',\r\n standalone: false,\r\n templateUrl: './folder-block.component.html',\r\n styleUrl: './folder-block.component.scss'\r\n})\r\nexport class FolderBlockComponent {\r\n /**\r\n * Array of folder blocks data to display.\r\n * Each folder is represented as a `FolderBlockModel`.\r\n */\r\n @Input() folderList : FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Number of missing files, sourced from the `SHARED` constants. */\r\n missingFileCount = SHARED.MISSINGCOUNT;\r\n\r\n /** Number of pending files, sourced from the `SHARED` constants. */\r\n pendingFileCount = SHARED.PENDINGCOUNT;\r\n\r\n /**\r\n * Injects the `DocumentStore` service to manage and access document-related state.\r\n * @param {DocumentStore} documentStore - The state management store for documents.\r\n */\r\n constructor(public documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Handles the click event for filtering based on the provided folder ID.\r\n * This method validates the folder ID and returns it for further processing. \r\n * If the folder ID is not provided, an empty string is returned.\r\n * @param {string} folderBlockId - The unique identifier of the folder to filter by.\r\n * @returns {string} The validated folder ID, or an empty string if the input is invalid.\r\n */\r\n handleClickForFilter(folderBlockId: string): string {\r\n if (!folderBlockId) {\r\n return SHARED.EMPTY;\r\n }\r\n this.documentStore.setParentDocumentTypeId(folderBlockId);\r\n return folderBlockId;\r\n }\r\n \r\n}\r\n","<div class=\"card p-0 folder-info\">\r\n <div class=\"text-900 text-xl font-semibold ml-2 mb-1\">Folders</div>\r\n <div class=\"grid m-0\">\r\n <div *ngFor=\"let folder of folderList\" class=\"col-12 md:col-6 xl:col-4 container-wrapper\">\r\n <div\r\n class=\"p-3 border-1 h-full surface-border flex flex-column justify-content-between hover:surface-100 cursor-pointer border-round\"\r\n (click)=\"handleClickForFilter(folder._id)\"\r\n >\r\n <div class=\"icon\">\r\n <img src=\"../../../../assets/images/FolderImg.png\" alt=\"\" />\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span class=\"text-600 mt-2\"> {{ folder.documentCount }} Files </span>\r\n <span class=\"text-900 text-lg mt-2 mb-2 font-semibold font-medium\">\r\n {{ folder.folderName }}\r\n </span>\r\n </div>\r\n <hr />\r\n <div class=\"flex justify-content-between\">\r\n <div class=\"flex flex-column\">\r\n <span>Missing</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-pink-500': missingFileCount > 0,\r\n 'text-green-500': missingFileCount === 0\r\n }\"\r\n >\r\n {{ missingFileCount }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span>Pending</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-yellow-500': pendingFileCount > 0,\r\n 'text-green-500': pendingFileCount === 0\r\n }\"\r\n >\r\n {{ pendingFileCount }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\n\r\n/**\r\n * DocumentListItemComponent\r\n *\r\n * This component displays individual document items within a list. \r\n * It accepts a list of documents as input and handles interactions with documents.\r\n */\r\n@Component({\r\n selector: 'lib-document-list-item',\r\n standalone: false,\r\n templateUrl: './document-list-item.component.html',\r\n styleUrls: ['./document-list-item.component.scss']\r\n})\r\nexport class DocumentListItemComponent {\r\n /**\r\n * Emit the selected document.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() documentClick = new EventEmitter<DocumentModel>();\r\n \r\n /**\r\n * The document to display.\r\n * @type {DocumentModel[]}\r\n */\r\n @Input() document!: DocumentModel;\r\n\r\n /**\r\n * Handles interactions with a document.\r\n * @param {DocumentModel} document - The document to be opened or interacted with.\r\n */\r\n handleOpenDocument(document: DocumentModel): void {\r\n if (!document) {\r\n console.error('Error: Document is null or undefined:', document);\r\n return;\r\n }\r\n this.documentClick.emit(document);\r\n }\r\n}\r\n","<div class=\"grid m-0\">\r\n <div\r\n class=\"col-12 flex align-items-center justify-content-between md:col-12 xl:col-12\"\r\n >\r\n <div\r\n class=\"col-5 flex cursor-pointer align-items-center pl-0\"\r\n (click)=\"handleOpenDocument(document)\"\r\n >\r\n <img src=\"../../../../assets/images/Frame.png\" alt=\"\" />\r\n <span class=\"ml-4 file-name-wrapper document-text-wrapper\">{{ document.fileName }}</span>\r\n </div>\r\n <div class=\"col-4 flex align-items-center justify-content-center\">\r\n <span\r\n [class]=\"'product-badge status-' + document.status?.toLowerCase()\"\r\n class=\"flex align-items-center justify-content-center pl-2 pr-2 pt-1 pb-1\"\r\n >\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'pending'\">\r\n <i class=\"pi pi-clock pr-1\" style=\"font-size: 12px;\"></i>\r\n Pending\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'verified'\">\r\n <i class=\"pi pi-check-circle pr-1\" style=\"font-size: 12px;\"></i>\r\n Verified\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'alert'\">\r\n <i class=\"pi pi-bell pr-1\" style=\"font-size: 12px;\"></i>\r\n Alert\r\n </ng-container>\r\n </span>\r\n </div>\r\n <div class=\"document-type file-name-wrapper document-text-wrapper\">\r\n {{document.documentTypeName}}\r\n </div>\r\n </div>\r\n </div>\r\n ","import { ErrorHandler, Injectable, Injector } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/**\r\n * GlobalErrorHandler is a custom error handler that implements the ErrorHandler interface.\r\n * It is used to handle both HTTP errors and other types of errors globally in the application.\r\n * @class\r\n * @implements {ErrorHandler}\r\n * @decorator {Injectable}\r\n */\r\n@Injectable()\r\nexport class GlobalErrorHandler implements ErrorHandler {\r\n /**\r\n * Creates an instance of GlobalErrorHandler.\r\n * @constructor\r\n * @param {Injector} injector - The Angular injector used to get instances of services.\r\n */\r\n constructor(private injector: Injector) { }\r\n\r\n /**\r\n * Handles errors globally in the application.\r\n * \r\n * @param {any} error - The error object that needs to be handled.\r\n * @returns {void}\r\n */\r\n handleError(error: any): void {\r\n console.error('GlobalErrorHandler:', error);\r\n }\r\n}\r\n","import { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentHelperService } from \"../services/document.service\";\r\n\r\n/**\r\n * Directive to display the document data\r\n */\r\n@Directive({\r\n selector: '[doc]',\r\n standalone: false\r\n})\r\nexport class DocumentDirective {\r\n\r\n /**\r\n * Creates an instance of DocumentDirective.\r\n * @param documentService Service to get the document data.\r\n * @param templateRef Reference to the template.\r\n * @param vcr View container reference to manage the view.\r\n */\r\n constructor(\r\n private documentService: DocumentHelperService,\r\n private templateRef: TemplateRef<any>,\r\n private vcr: ViewContainerRef\r\n ) {\r\n this.documentService.get().subscribe((document: DocumentModel | null) => {\r\n this.vcr.clear();\r\n if (document) {\r\n this.vcr.createEmbeddedView(this.templateRef, { $implicit: document });\r\n }\r\n });\r\n }\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\n/**\r\n * Description placeholder\r\n * @class LinkedDocumentComponent\r\n * @typedef {LinkedDocumentComponent}\r\n * @implements {OnChanges}\r\n */\r\n@Component({\r\n selector: 'app-linked-document',\r\n templateUrl: './linked-document.component.html',\r\n styleUrl: './linked-document.component.scss',\r\n standalone : false\r\n})\r\nexport class LinkedDocumentComponent {\r\n /**\r\n * Selected document for view.\r\n * @type {?DocumentModel}\r\n */\r\n @Input() selectedDocument?: DocumentListItem;\r\n /**\r\n * Whole document list.\r\n * @type {?DocumentModel[]}\r\n */\r\n @Input() documentList?: DocumentListItem[];\r\n /**\r\n * Changed selected document.\r\n * @type {*}\r\n */\r\n @Output() selectedDocumentChange = new EventEmitter<DocumentListItem>();\r\n\r\n /**\r\n * Filtered documents.\r\n * @type {DocumentModel[]}\r\n */\r\n filteredDocuments: DocumentModel[] = [];\r\n\r\n /**\r\n * Handle the click on the document.\r\n * @param {DocumentModel} document - Clicked document.\r\n */\r\n handleDocumentClick(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.selectedDocumentChange.emit(this.selectedDocument);\r\n }\r\n\r\n}\r\n","<div class=\"summary-card mb-4 pb-1\">\r\n <div class=\"card p-0 mb-0\"\r\n style=\"border-bottom: 1px solid;border-color: rgba(68, 72, 109, 0.2); border-bottom-right-radius: 0px;border-bottom-left-radius: 0px; background-color: #F9fafb;\">\r\n <div class=\"p-0\">\r\n <h4 class=\"m-0 pt-3 pl-3 mb-3\" style=\"font-size: 21px; font-weight: bold; \">Linked Documents</h4>\r\n </div>\r\n </div>\r\n <div class=\"card mb-0\" style=\"border-top-right-radius: 0px;border-top-left-radius: 0px;\">\r\n @for(document of documentList; track document){\r\n <div class=\"linkedDocument documentName m-2\">\r\n <div class=\"documentName\" [class.selected]=\"document._id === selectedDocument?._id\"\r\n (click)=\"handleDocumentClick(document)\">\r\n <span class=\"pi pi-link\"></span>\r\n {{document.fileName}}\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n \r\n \r\n </div>\r\n ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TablePrimaryComponent } from './components/table-primary/table-primary.component';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { HasPermissionDirective } from '../lib/document/directives/permission.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [TablePrimaryComponent, HasPermissionDirective],\r\n imports: [\r\n CommonModule,\r\n TableModule,\r\n ButtonModule,\r\n RippleModule\r\n ],\r\n exports : [TablePrimaryComponent, HasPermissionDirective]\r\n})\r\nexport class SharedModule { }\r\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DocumentContainerComponent } from './components/document-container/document-container.component';\r\nimport { FolderContainerComponent } from './components/folder-container/folder-container.component';\r\nimport { FolderBlockComponent } from './components/folder-block/folder-block.component';\r\nimport { DocumentListComponent } from './components/document-list/document-list.component';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { DocumentListItemComponent } from './components/document-list-item/document-list-item.component';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { DocumentUploadComponent } from './components/document-upload/document-upload.component';\r\nimport { MessageService } from 'primeng/api';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { ListboxModule } from 'primeng/listbox';\r\nimport { TimelineModule } from 'primeng/timeline';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DocumentViewerComponent } from './components/document-viewer/document-viewer.component';\r\nimport { DocumentHistoryComponent } from './components/document-history/document-history.component';\r\nimport { PdfViewerModule } from 'ng2-pdf-viewer';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { AppConfigService } from '../../Shared/services/app-config.service';\r\nimport { GlobalErrorHandler } from '../../Shared/services/global-error.handler';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DocumentDirective } from './directives/document.directive';\r\nimport { LinkedDocumentComponent } from './components/linked-document/linked-document.component';\r\nimport { DocumentsMenuComponent } from './components/documents-menu/documents-menu.component';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { PanelMenuModule } from 'primeng/panelmenu';\r\nimport { CardModule } from 'primeng/card';\r\nimport { TableModule } from 'primeng/table';\r\nimport { UserListComponent } from './components/user-list/user-list.component';\r\nimport { DocumentStatusComponent } from './components/document-status/document-status.component';\r\nimport { DocumentActionsComponent } from './components/document-actions/document-actions.component';\r\nimport { DocumentSearchComponent } from './components/document-search/document-search.component';\r\nimport { SharedModule } from '../../Shared/shared.module';\r\nimport { DocumentActionsService } from './services/document-actions.service';\r\nimport { CommonSidebarComponent } from './components/common-sidebar/common-sidebar.component';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\n/**\r\n * @module DocumentModule\r\n * \r\n * The `DocumentModule` handles the organization and display of document and folder components \r\n * in the application. This module is designed to support features like folder containers, \r\n * document lists, and individual document items.\r\n */\r\n@NgModule({\r\n declarations: [\r\n /**\r\n * The main container for managing documents.\r\n * DocumentContainerComponent\r\n */\r\n DocumentContainerComponent,\r\n\r\n /**\r\n * A container component to manage folders.\r\n * FolderContainerComponent\r\n */\r\n FolderContainerComponent,\r\n\r\n /**\r\n * A block component that represents an individual folder.\r\n * FolderBlockComponent\r\n */\r\n FolderBlockComponent,\r\n\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A component representing an individual item in the document list.\r\n * DocumentListItemComponent\r\n */\r\n DocumentListItemComponent,\r\n\r\n /** \r\n * A component representing to upload a file.\r\n */\r\n DocumentUploadComponent,\r\n\r\n /**\r\n * A component representing and allow you to view the document.\r\n */\r\n DocumentViewerComponent,\r\n\r\n /**\r\n * A component representing document history timeline.\r\n */\r\n DocumentHistoryComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component which have linked documents.\r\n */\r\n LinkedDocumentComponent,\r\n DocumentsMenuComponent,\r\n UserListComponent,\r\n DocumentStatusComponent,\r\n DocumentActionsComponent,\r\n DocumentSearchComponent,\r\n /**\r\n * A common sidebar component for content projection.\r\n */\r\n CommonSidebarComponent,\r\n\r\n ],\r\n imports: [\r\n /**\r\n * Angular's CommonModule is imported to access common directives like `ngIf` and `ngFor`.\r\n */\r\n CommonModule,\r\n\r\n /**\r\n * PrimeNG AccordionModule is used for creating collapsible sections in the UI.\r\n */\r\n AccordionModule,\r\n\r\n /**\r\n * HttpClienModule for the http calls\r\n */\r\n HttpClientModule,\r\n\r\n /**\r\n * PrimeNG ButtonModule is used for creating buttons in the UI.\r\n */\r\n ButtonModule,\r\n\r\n /**\r\n * PrimeNG SidebarModule is used for creating sidebars.\r\n */\r\n SidebarModule,\r\n\r\n /**\r\n * PrimeNG FileUploadModule is used for uploading file.\r\n */\r\n FileUploadModule,\r\n\r\n /**\r\n * PrimeNG ProgressBarModule is used for showing progress.\r\n */\r\n ProgressBarModule,\r\n\r\n /**\r\n * PrimeNG BadgeModule is used for showing badge value.\r\n */\r\n BadgeModule,\r\n\r\n /**\r\n * PrimeNG ListboxModule is used for showing listbox value.\r\n */\r\n ListboxModule,\r\n\r\n /**\r\n * PrimeNG CheckboxModule is used for showing checkbox value.\r\n */\r\n CheckboxModule,\r\n\r\n /**\r\n * PrimeNG RadioButtonModule is used for showing radio button values.\r\n */\r\n RadioButtonModule,\r\n\r\n /**\r\n * PrimeNG TimelineModule is used for showing timeline value.\r\n */\r\n TimelineModule,\r\n /**\r\n * PrimeNG InputTextareaModule is used for showing textarea value.\r\n */\r\n InputTextareaModule,\r\n /**\r\n * FormsModule to handle the forms.\r\n */\r\n FormsModule,\r\n /**\r\n * PdfViewerModule to handle and make visible the pdf.\r\n */\r\n PdfViewerModule,\r\n /**\r\n * PrimeNG DialogModule is used for showing dialog.\r\n */\r\n DialogModule,\r\n /**\r\n * PrimeNG DropdownModule is used for creating dropdown menus, allowing users to select options from a list.\r\n */\r\n DropdownModule,\r\n /**\r\n * PrimeNG InputTextModule is used for creating InputTextFeilds, allowing users to enter name for a document.\r\n */\r\n InputTextModule,\r\n\r\n MenuModule,\r\n PanelMenuModule,\r\n CardModule,\r\n TableModule,\r\n SharedModule,\r\n InputTextareaModule\r\n \r\n ],\r\n exports: [\r\n /**\r\n * Exports the `DocumentContainerComponent` to be used in other modules.\r\n */\r\n DocumentContainerComponent,\r\n /**\r\n * Exports the `DocumentViewerComponent` to be used in other modules.\r\n */\r\n DocumentViewerComponent,\r\n /**\r\n * Exports the `DocumentActionsComponent` to be used in other modules.\r\n */\r\n DocumentActionsComponent,\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component for searching documents.\r\n */\r\n DocumentSearchComponent,\r\n\r\n /**\r\n * A common sidebar component for content projection.\r\n */\r\n CommonSidebarComponent,\r\n\r\n\r\n ],\r\n providers: [\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n MessageService,\r\n\r\n /**\r\n * Provide the DocumentActionsService to be used in other components.\r\n */\r\n DocumentActionsService,\r\n\r\n\r\n\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n { provide: GlobalErrorHandler, useClass: GlobalErrorHandler },\r\n /**\r\n * Initializes the application configuration by loading it from the AppConfigService\r\n * before the application starts.\r\n * This ensures that the configuration is available for the rest of the app when needed.\r\n * The configuration is loaded asynchronously using the APP_INITIALIZER.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n {\r\n provide: APP_INITIALIZER,\r\n /**\r\n * This useFactory is executed when the app initializes.\r\n * It calls the AppConfigService to load the configuration.\r\n * If an error occurs, it throws an error.\r\n * @param {AppConfigService} configService - The service responsible for loading the application configuration.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n useFactory: (configService: AppConfigService) => () =>\r\n configService.loadAppConfig().catch((error) => {\r\n throw new Error(error);\r\n }),\r\n deps: [AppConfigService],\r\n multi: true,\r\n },\r\n \r\n ]\r\n})\r\nexport class DocumentModule { }\r\n","/*\r\n * Public API Surface of cat-document-lib\r\n */\r\n\r\nexport * from './lib/document/document.module';\r\nexport * from './lib/document/components/document-container/document-container.component';\r\nexport * from './lib/document/components/document-viewer/document-viewer.component';\r\nexport * from './lib/document/components/document-actions/document-actions.component';\r\nexport * from './lib/document/components/document-history/document-history.component';\r\nexport * from './lib/document/components/document-list/document-list.component';\r\nexport * from './lib/document/components/document-search/document-search.component';\r\nexport * from './lib/document/components/common-sidebar/common-sidebar.component';\r\nexport * from './lib/document/models/document-history.model';\r\nexport * from './lib/document/services/document-table-builder.service';\r\nexport * from './lib/document/directives/document.directive';\r\nexport * from './lib/document/directives/permission.directive';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DocumentStore","i3.AppConfigService","i2.DocumentQuery","i3.DocumentHttpService","i1.DocumentService","i2.DocumentStore","i1.DocumentHttpService","i2.FileFormatService","i1.DocumentUploadBusinessService","i2.DocumentUploadFormService","i1.DocumentUploadService","i2.DocumentService","i4.FileFormatService","i5.DocumentUploadBusinessService","i6.DocumentUploadFormService","i7.DocumentUploadDataService","i8","i9","i13","i1.DocumentHelperService","i3.DocumentQuery","i4.UserListService","i5","i1.DocumentQuery","i2.DocumentHelperService","i3.StatusCalculatorService","i4","debounceTime","distinctUntilChanged","i2","i3","i2.DocumentUploadComponent","i3.UserListComponent","i4.DocumentStatusComponent","i5.DocumentSearchComponent","i6.CommonSidebarComponent","i1.SessionService","i2.DocumentHttpService","i4.DocumentStore","i5.DocumentTableBuilderService","i6.DocumentHelperService","i6.HasPermissionDirective","i5.DocumentQuery","i1.DocumentHistoryStyleService","i3.SessionService","i4.AppConfigService","i1.DocumentHistoryService","i1.DocumentActionsService","i6","i9.HasPermissionDirective","i4.DocumentViewerService","i7.DocumentHistoryComponent","i8.DocumentActionsComponent","i1.DocumentListService","i7","i8.TablePrimaryComponent","i9.DocumentViewerComponent","i3.DocumentMenuService","i4.DocumentHelperService","i4.DocumentHttpService","i5.DocumentHelperService","i7.FolderContainerComponent","i8.DocumentListComponent","i9.DocumentsMenuComponent"],"mappings":"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"}
1
+ {"version":3,"file":"cat-documents-ng.mjs","sources":["../../../projects/cat-document-lib/src/Shared/constant/SHARED.ts","../../../projects/cat-document-lib/src/Shared/constant/ERROR.ts","../../../projects/cat-document-lib/src/lib/document/state/document.state.ts","../../../projects/cat-document-lib/src/lib/document/state/document.store.ts","../../../projects/cat-document-lib/src/Shared/constant/URLS.ts","../../../projects/cat-document-lib/src/Shared/services/app-config.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.query.ts","../../../projects/cat-document-lib/src/lib/document/services/document-http.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload.service.ts","../../../projects/cat-document-lib/src/lib/document/services/file-format.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-business.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-form.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-data.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.html","../../../projects/cat-document-lib/src/lib/document/services/user-list.service.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/status-calculator.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.html","../../../projects/cat-document-lib/src/lib/document/components/common-sidebar/common-sidebar.component.ts","../../../projects/cat-document-lib/src/lib/document/components/common-sidebar/common-sidebar.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.html","../../../projects/cat-document-lib/src/Shared/constant/PERMISSIONS.ts","../../../projects/cat-document-lib/src/Shared/services/session.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-table-builder.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-list.service.ts","../../../projects/cat-document-lib/src/lib/document/directives/permission.directive.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-viewer.service.ts","../../../projects/cat-document-lib/src/lib/document/constant/DOCUMENT_HISTORY.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history-style.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-actions.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-menu.service.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.html","../../../projects/cat-document-lib/src/Shared/services/global-error.handler.ts","../../../projects/cat-document-lib/src/lib/document/directives/document.directive.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.html","../../../projects/cat-document-lib/src/Shared/shared.module.ts","../../../projects/cat-document-lib/src/lib/document/document.module.ts","../../../projects/cat-document-lib/src/public-api.ts","../../../projects/cat-document-lib/src/cat-documents-ng.ts"],"sourcesContent":["/**\r\n * The `SHARED` class contains shared constants used across the application.\r\n * These constants are related to document statuses and other shared data.\r\n */\r\nexport class SHARED {\r\n \r\n /**\r\n * Represents the info.\r\n */\r\n static UNKNOWN_USER = 'Unknown User'\r\n /**\r\n * Represents the info.\r\n */\r\n static ACTIONS = 'actions'\r\n /**\r\n * Represents the info.\r\n */\r\n static VISIBLE = 'visible'\r\n /**\r\n * Represents the info.\r\n */\r\n static HIDDEN = 'hidden'\r\n\r\n static NO_DOCUMENTS_FOUND = 'No documents found'\r\n static DOCUMENT_TYPES_DELETE = 'DocumentTypes-DELETE'\r\n\r\n /**\r\n * Represents the info.\r\n */\r\n static APPLICATION_DOCS = 'Application Docs'\r\n /**\r\n * Represents the info.\r\n */\r\n static INFO = 'info'\r\n /**\r\n * Represents the success.\r\n */\r\n static SUCCESS = 'success'\r\n /**\r\n * Represents the warning.\r\n */\r\n static WARNING = 'warning'\r\n /**\r\n * Represents the warning.\r\n */\r\n static DANGER = 'danger'\r\n /**\r\n * Represents the stores userData.\r\n */\r\n static SESSIONKEY = 'userData';\r\n /**\r\n * Represents the count of missing files.\r\n */\r\n static MISSINGCOUNT = 2;\r\n\r\n /**\r\n * Represents the count of pending files.\r\n */\r\n static PENDINGCOUNT = 3;\r\n\r\n /**\r\n * Represents an empty string.\r\n */\r\n static EMPTY = \"\";\r\n\r\n /**\r\n * Represents an true.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static TRUE: boolean = true;\r\n\r\n\r\n /**\r\n * Represents an false.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static FALSE: boolean = false;\r\n\r\n /**\r\n * Represents an INITIAL_COUNT.\r\n */\r\n static INITIAL_COUNT = 0\r\n /**\r\n * Represents an INITIAL_VALUE.\r\n */\r\n static INITIAL_VALUE = 0\r\n\r\n /**\r\n * Represents the constant value for one (1).\r\n * @static\r\n * @type {number}\r\n */\r\n static ONE: number = 1\r\n\r\n /**\r\n * Represents the constant value for two (2).\r\n * @static\r\n * @type {number}\r\n */\r\n static TWO: number = 2\r\n\r\n /**\r\n * Represents the constant value for ten (10).\r\n * @static\r\n * @type {number}\r\n */\r\n static TEN: number = 10\r\n\r\n /**\r\n * Represents the constant string value 'files' used for file-related operations.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE: string = 'file';\r\n\r\n /**\r\n * Query parameter for menu item filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static MENU_ITEM_PARAM: string = 'menuItem';\r\n\r\n /**\r\n * Query parameter for user ID filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static USER_ID_PARAM: string = 'userId';\r\n\r\n /**\r\n * Query parameter for status filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_PARAM: string = 'status';\r\n\r\n /**\r\n * Represents the array of file size units ('B', 'KB', 'MB') used for file size formatting.\r\n * @static\r\n * @type {string[]}\r\n */\r\n static FILE_SIZE_UNITS: string[] = ['B', 'KB', 'MB'];\r\n\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SEVERITY: string = 'error'\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SUCCESS_SEVERITY: string = 'success'\r\n\r\n /**\r\n * Show upload summery if it's failed.\r\n * @static\r\n * @type {'Upload Failed'}\r\n */\r\n static UPLOAD_SUMMERY: string = 'Upload Failed'\r\n\r\n /**\r\n * Show upload summery if it's success.\r\n * @static\r\n * @type {'Document uploaded successfully.'}\r\n */\r\n static UPLOAD_SUCCESS: string = 'Document uploaded successfully.'\r\n\r\n /**\r\n * Represent empty array.\r\n * @static\r\n * @type {{}}\r\n */\r\n static EMPTY_ARRAY = []\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT_ID: string = 'contextId'\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CATEGORY: string = 'category'\r\n\r\n /**\r\n * Represent fileSize.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE_SIZE: string = 'fileSize'\r\n /**\r\n * Represent documentName.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_NAME: string = 'documentName'\r\n /**\r\n * Represent documentTypeId.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPE_ID: string = 'documentTypeId'\r\n /**\r\n * Represent blob.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT: string = 'document';\r\n /**\r\n * Represent none.\r\n * @static\r\n * @type {string}\r\n */\r\n static NONE: string = 'none';\r\n\r\n /**\r\n * Represent upload summery.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_SUMMERY: string = 'Form Data Missing'\r\n\r\n /**\r\n * Represent upload error details.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_DETAILS: string = 'Required form data is missing. Please ensure the document and all required fields are provided.'\r\n\r\n /**\r\n * Represents the message prefix for a successful document name update.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPDATE_DOCUMENT_NAME: string = 'Document name updated for ID:'\r\n static WIDTH = '500px'\r\n static BASEZINDEX = 1000\r\n static CLOSE_ICON = 'pi pi-times'\r\n static SAVE = 'Save'\r\n static UPLOAD_PROGRESS_100 = 100\r\n static UPLOAD_PROGRESS_10 = 10\r\n static APPLICANT = 'Applicant'\r\n static CATAGORIES = 'catagories'\r\n static DOCUMENTS = 'Documents'\r\n static Menu = [\r\n {\r\n label: 'Applicant',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n label: 'Identity',\r\n icon: 'ri-id-card-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Income',\r\n icon: 'ri-money-pound-circle-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Affordability',\r\n icon: 'ri-calculator-line',\r\n badge: \"2/8\"\r\n },\r\n {\r\n label: 'Cradit conduct',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n label: 'KYC',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Welcome Call',\r\n icon: 'ri-calendar-event-fill'\r\n },\r\n {\r\n label: 'Gatehouse Bank Exposure',\r\n badge: \"2/4\",\r\n icon: 'ri-calendar-event-fill'\r\n }\r\n ]\r\n },\r\n {\r\n label: 'Application',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n badge: \"2/4\",\r\n label: 'Deposit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Direct Debit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n label: 'Property',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Completions',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Summary',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'System Documents',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Ad Hoc',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Miscellaneous',\r\n icon: 'ri-mail-open-line'\r\n }\r\n ]\r\n }\r\n ];\r\n static APPLICATION = 'Application'\r\n static APPLICANTS = 'Applicants'\r\n static EMPTY_SPACE = ' '\r\n\r\n static COLORS = ['orange', 'blue', 'green', 'grey', 'purple']\r\n\r\n static COLOR_MAP = {\r\n 'orange': '#f97316',\r\n 'blue': '#3b82f6',\r\n 'green': '#10b981',\r\n 'grey': '#6b7280',\r\n 'purple': '#8b5cf6'\r\n }\r\n static DEFAULT_COLOR = '#3b82f6'\r\n static STATUS_WITH_DASH = 'status-'\r\n static ICON_WITH_DASH = 'icon-'\r\n static SEARCH_KEY = 'searchKey'\r\n static APPROVED = 'approved'\r\n static UPLOADED = 'uploaded'\r\n static PENDING = 'Pending'\r\n static DOT = '.'\r\n static PDF = 'PDF'\r\n static PENDING_STATUS = 'pending'\r\n \r\n // File extension constants\r\n static JPG = 'JPG'\r\n static PNG = 'PNG'\r\n static XLSX = 'XLSX'\r\n \r\n // Status constants\r\n static APPROVED_STATUS = 'approved'\r\n static ALERT_STATUS = 'alert'\r\n static UPLOADED_STATUS = 'uploaded'\r\n static REVIEWING_STATUS = 'reviewing'\r\n static REJECTED_STATUS = 'rejected'\r\n static REQUESTED_STATUS = 'document requested'\r\n \r\n // Status class constants\r\n static STATUS_PENDING_CLASS = 'status-pending'\r\n static STATUS_APPROVED_CLASS = 'status-approved'\r\n static STATUS_ALERT_CLASS = 'status-alert'\r\n static STATUS_UPLOADED_CLASS = 'status-uploaded'\r\n static STATUS_REVIEWING_CLASS = 'status-reviewing'\r\n static STATUS_REJECTED_CLASS = 'status-rejected'\r\n \r\n // Icon constants\r\n static ICON_CHECK = 'pi pi-check'\r\n static ICON_EXCLAMATION_TRIANGLE = 'pi pi-exclamation-triangle'\r\n static ICON_CLOUD_UPLOAD = 'pi pi-cloud-upload'\r\n static ICON_EYE = 'pi pi-eye'\r\n static ICON_TIMES = 'pi pi-times'\r\n static ICON_CLOCK = 'pi pi-clock'\r\n \r\n // File type icons\r\n static ICON_FILE_PDF = 'pi pi-file-pdf'\r\n static ICON_IMAGE = 'pi pi-image'\r\n static ICON_FILE_EXCEL = 'pi pi-file-excel'\r\n static ICON_FILE = 'pi pi-file'\r\n static ICON_DELETE = 'ri-delete-bin-6-line'\r\n \r\n // Cell type constants\r\n static CELL_TYPE_DOCUMENT = 'document'\r\n static CELL_TYPE_STATUS = 'status'\r\n static CELL_TYPE_ACTIONS = 'actions'\r\n static CELL_TYPE_TEXT = 'text'\r\n \r\n /**\r\n * Document table columns configuration\r\n * @static\r\n * @type {Array<{field: string, header: string, type: 'text' | 'status' | 'document' | 'actions', width: string}>}\r\n */\r\n static DOCUMENT_TABLE_COLUMNS: Array<{\r\n field: string;\r\n header: string;\r\n type: 'text' | 'status' | 'document' | 'actions';\r\n width: string;\r\n }> = [\r\n {\r\n field: 'docName',\r\n header: 'Document',\r\n type: 'document',\r\n width: '35%'\r\n },\r\n {\r\n field: 'status',\r\n header: 'Status',\r\n type: 'status',\r\n width: '15%'\r\n },\r\n {\r\n field: 'ownerName',\r\n header: 'Owner',\r\n type: 'text',\r\n width: '20%'\r\n },\r\n {\r\n field: 'uploadedOn',\r\n header: 'Uploaded',\r\n type: 'text',\r\n width: '15%'\r\n },\r\n {\r\n field: 'actions',\r\n header: 'Actions',\r\n type: 'actions',\r\n width: '15%'\r\n }\r\n ];\r\n\r\n static DOCUMENT_REQUESTED = 'document-requested';\r\n static DOCUMENT_UPLOADED = 'document-uploaded';\r\n static DOCUMENT_REJECTED = 'document-rejected';\r\n static DOCUMENT_ACCEPTED = 'document-accepted';\r\n\r\n // Document Actions Constants\r\n static ACCEPT_ACTION = 'accept';\r\n static REJECT_ACTION = 'reject';\r\n static DELETE_ACTION = 'delete';\r\n \r\n static ACCEPT_CONFIRM_HEADER = 'Accept confirm';\r\n static REJECT_CONFIRM_HEADER = 'Reject Confirm';\r\n \r\n static ACCEPT_NOTE_LABEL = 'Write a note for Acceptance';\r\n static REJECT_NOTE_LABEL = 'Write a note for rejection';\r\n \r\n static ACCEPT_NOTE_PLACEHOLDER = 'Write a note for Acceptance';\r\n static REJECT_NOTE_PLACEHOLDER = 'Write a note for rejection';\r\n \r\n static CANCEL_BUTTON_LABEL = 'Cancel';\r\n static ACCEPT_BUTTON_LABEL = 'Accept';\r\n static REJECT_BUTTON_LABEL = 'Reject';\r\n \r\n static DOCUMENT_ACCEPTED_MESSAGE = 'Document accepted successfully';\r\n static DOCUMENT_REJECTED_MESSAGE = 'Document rejected successfully';\r\n static DOCUMENT_UPDATE_ERROR_MESSAGE = 'Failed to update document. Please try again.';\r\n \r\n static STATUS_APPROVED = 'Approved';\r\n static STATUS_REJECTED = 'Rejected';\r\n \r\n // Document Status Constants\r\n static STATUS_PENDING = 'pending';\r\n static STATUS_ACCEPTED = 'accepted';\r\n static STATUS_REJECTED_LOWERCASE = 'rejected';\r\n static STATUS_DECLINED = 'declined';\r\n \r\n // Document Card CSS Classes\r\n static CARD_PENDING = 'pending-card';\r\n static CARD_ACCEPTED = 'accepted-card';\r\n static CARD_REJECTED = 'rejected-card';\r\n \r\n // Document Button CSS Classes\r\n static BUTTON_SECONDARY_REJECT = 'secondary-reject';\r\n static BUTTON_PRIMARY_REJECT = 'primary-reject';\r\n static BUTTON_DEFAULT_REJECT = 'default-reject';\r\n static BUTTON_PRIMARY_ACCEPT = 'primary-accept';\r\n static BUTTON_SECONDARY_ACCEPT = 'secondary-accept';\r\n static BUTTON_DEFAULT_ACCEPT = 'default-accept';\r\n \r\n // Document Action Button Labels\r\n static BUTTON_LABEL_REJECT = 'Reject';\r\n static BUTTON_LABEL_REJECTED = 'Rejected';\r\n static BUTTON_LABEL_ACCEPT = 'Accept';\r\n static BUTTON_LABEL_ACCEPTED = 'Accepted';\r\n \r\n}\r\n\r\n/**\r\n * `DUMMYDOCUMENTLIST` is a mock list of document objects used for testing and development purposes.\r\n * Each document includes an ID, file name, status, and document URL.\r\n */\r\nexport const DUMMYDOCUMENTLIST = [\r\n {\r\n _id: 1,\r\n fileName: 'Document 1',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 2,\r\n fileName: 'Document 2',\r\n status: 'verified',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 3,\r\n fileName: 'Document 3',\r\n status: 'sentReminder',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 4,\r\n fileName: 'Document 4',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n];\r\n\r\n/**\r\n * `FOLDERPANEL` is a mock list of folder data representing various folders in the application.\r\n * Each folder contains an ID, file count, text description, missing files count, and pending files count.\r\n */\r\nexport const USERLIST = [\r\n {\r\n _id : \"1\",\r\n username: \"John Smith\",\r\n approveDocumentCount: 15,\r\n pendingDocumentCount: 3\r\n },\r\n {\r\n _id : \"2\",\r\n username: \"Sarah Johnson\",\r\n approveDocumentCount: 8,\r\n pendingDocumentCount: 7\r\n },\r\n {\r\n _id : \"3\",\r\n username: \"Michael Brown\",\r\n approveDocumentCount: 22,\r\n pendingDocumentCount: 1\r\n },\r\n {\r\n _id : \"4\",\r\n username: \"Emily Davis\",\r\n approveDocumentCount: 12,\r\n pendingDocumentCount: 5\r\n }\r\n];\r\n\r\nexport const SAMPLE_STATUS_DATA = [\r\n {\r\n status: \"Approved\",\r\n count: 4,\r\n color: \"#10b981\",\r\n icon: \"pi pi-check\"\r\n },\r\n {\r\n status: \"Pending\",\r\n count: 5,\r\n color: \"#6b7280\",\r\n icon: \"pi pi-clock\"\r\n },\r\n {\r\n status: \"Reviewing\",\r\n count: 1,\r\n color: \"#f59e0b\",\r\n icon: \"pi pi-search\"\r\n },\r\n {\r\n status: \"Rejected\",\r\n count: 2,\r\n color: \"#ef4444\",\r\n icon: \"pi pi-times\"\r\n },\r\n {\r\n status: \"Alert\",\r\n count: 12,\r\n color: \"#dc2626\",\r\n icon: \"pi pi-exclamation-circle\"\r\n }\r\n]; \r\n\r\n/**\r\n * Dummy data for sumaery.\r\n * @type {{}}\r\n */\r\nexport const DUMMYSUMMARY = [\r\n {\r\n status: 'Valuation report requested on 10th Oct 2024',\r\n date: '15/10/2020 10:30',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#9C27B0',\r\n image: 'game-controller.jpg',\r\n },\r\n {\r\n status: 'Valuation report received on 13th Oct 2024',\r\n date: '15/10/2020 14:00',\r\n icon: 'pi pi-cog',\r\n color: '#673AB7',\r\n },\r\n {\r\n status: 'Waiting for Valuation Report to be accepted',\r\n date: '15/10/2020 16:15',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#FF9800',\r\n },\r\n];\r\n\r\n/**\r\n * Dummy data for list box.\r\n * @type {{}}\r\n */\r\nexport const COUNTRIES = [\r\n { name: 'Any Word', code: 'NY', checked: false },\r\n { name: 'Case Sensitive', code: 'RM', checked: false },\r\n { name: 'Wildcard Search', code: 'LDN', checked: false },\r\n { name: 'Whole Word Only', code: 'IST', checked: false },\r\n];\r\n\r\n/**\r\n * Default supported image types.\r\n * @type {{}}\r\n */\r\nexport const SUPPORTED_IMAGE_TYPES = [\r\n 'image/PNG', \r\n 'image/png', \r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/gif',\r\n 'image/bmp',\r\n 'image/tiff',\r\n 'image/webp',\r\n];\r\n\r\n/**\r\n * @constant {Array<{label: string, value: string, files: string[]}>} DOCUMENTTYPES\r\n * An array of document type objects containing labels, values, and associated files.\r\n */\r\n\r\nexport const DOCUMENTTYPES = [\r\n {\r\n label: \"BankStatement\",\r\n value: \"bank_statement\",\r\n },\r\n {\r\n label: \"Payslip\",\r\n value: \"payslip\",\r\n },\r\n {\r\n label: \"Selfie\",\r\n value: \"selfie\",\r\n },\r\n {\r\n label: \"Other\",\r\n value: \"other\",\r\n }\r\n];\r\n\r\nexport const DocumentAlertList = [\r\n { status: 'Pending', isAlert: true, alertMessage: 'The name on the payslip does not match either the driver name or the policyholder name.' },\r\n { status: 'Verified', isAlert: false, alertMessage: 'Document is verified successfully.' },\r\n];\r\n\r\n/**\r\n * Dummy data for document sections with detailed document lists.\r\n * Based on the document management interface structure.\r\n * @type {Array<{header: string, description: string, pendingDocument: number, approvedDocument: number, list: Array<{documentName: string, documentType: string, documentUrl: string, status: string, applicantName: string, uploadedTime: string}>}>}\r\n */\r\nexport const DUMMY_DOCUMENT_SECTIONS = [\r\n {\r\n header: \"Identity\",\r\n description: \"Personal identification documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n },\r\n {\r\n header: \"Income\",\r\n description: \"Personal Income documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n }\r\n];\r\n","/**\r\n * A utility class containing common error messages.\r\n * @class ERRORS\r\n */\r\nexport class ERRORS {\r\n /**\r\n * Error message for invalid recipient.\r\n * @static\r\n * @type {string}\r\n */\r\n static INVALID_RECIPIENT = \"Invalid recipient: The recipient cannot be empty.\";\r\n \r\n static NO_VALUE_FOUND = \"No value found\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_DOCUMENTS = \"Error fetching documents:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_FOLDERS = \"Error fetching folders:\";\r\n \r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_ALLDOCUMENT_MISSING = \"allDocumentTypes is missing in the response:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_DOCUMENT_TYPES = \"Error fetching document types:\";\r\n\r\n static ERROR_DOCUMENT_CATAGORY = 'Error fetching document categories:'\r\n static NO_DOCUMENT_URL = 'No document URL provided for download'\r\n static DOWNLOAD_FAIL = 'Download failed:'\r\n static ERROR_DELETING_DOCUMENT = 'Error deleting document:'\r\n static ERROR_RECEIVING_DOCUMENT_LIST = 'Error receiving document list response:'\r\n static CONTEXT_ID_REQUIRED = 'Context ID is required to fetch status data'\r\n static ERROR_FETCHING_STATUS_DATA = 'Error fetching status data:'\r\n static ERROR_FETCHING_USER_LIST = 'Error fetching user list with filters:'\r\n static ERROR_FETCHING_DOCUMENT_LIST = 'Error fetching document list:'\r\n static ERROR_FETCHING_DOCUMENT_CATEGORIES = 'Error fetching document categories:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_STATUS = 'Error fetching documents by status:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_CATEGORY = 'Error fetching documents by category:'\r\n static ERROR_CALLING_API_WITH_SELECTION = 'Error calling API with selection:'\r\n}\r\n","import { EntityState } from '@datorama/akita';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Represents the state of the documents in the application.\r\n * This interface extends Akita's `EntityState` to include additional properties\r\n * for managing document-specific data, such as `records`, `filteredRecords` and `folderId`.\r\n * @interface DocumentState\r\n * @property {any[]} records - A collection of records related to documents.\r\n * @property {any[]} filteredRecords - A collection of filteredRecords related to documents.\r\n * @property {string | null} folderId - The ID of the currently selected folder, or `null` if no folder is selected.\r\n * @property {boolean} isDialogOpen - A flag indicating whether a dialog is open.\r\n */\r\nexport interface DocumentState extends EntityState<DocumentModel, string> {\r\n records: DocumentModel[];\r\n folderId: string | null;\r\n isDialogOpen: boolean;\r\n filteredRecords:DocumentModel[];\r\n dropdownOptions: DocumentTypeModel[];\r\n uploadedDocumentFiles: DocumentModel[];\r\n parentDocumentTypeId: string | null;\r\n documentAlert:DocumentAlertModel\r\n folders:FolderBlockModel[]\r\n messages: Message[]\r\n documentList : DocumentModel[]\r\n documentCategories: DocumentCategory[];\r\n selectedMenuItem: string | null; // Stores the _id of the selected menu item, not the label\r\n selectedUserId: string | null;\r\n selectedStatus: string | null;\r\n searchKey: string | null; // Search term for filtering documents\r\n showUserList: boolean;\r\n currentDocument: DocumentModel | null;\r\n userList: UserListModel[];\r\n statusData: StatusDataModel[];\r\n documentListResponse: DocumentListResponse[] | null;\r\n \r\n // Document Viewer State\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n/**\r\n * Creates the initial state for the `DocumentState` store.\r\n * This function provides default values for all properties in the `DocumentState` interface,\r\n * ensuring the store starts with a consistent initial structure.\r\n * @returns {DocumentState} The initial state of the document store.\r\n */\r\nexport function createInitialState(): DocumentState {\r\n return {\r\n records: [],\r\n filteredRecords: [],\r\n folderId: null,\r\n isDialogOpen: false,\r\n dropdownOptions: [], \r\n uploadedDocumentFiles: [],\r\n parentDocumentTypeId: null,\r\n documentAlert: {_id:''},\r\n folders:[],\r\n messages:[],\r\n documentList : [],\r\n documentCategories: [],\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true,\r\n currentDocument: null,\r\n userList: [],\r\n statusData: [],\r\n documentListResponse: null,\r\n \r\n // Document Viewer State\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EntityStore, StoreConfig } from '@datorama/akita';\r\nimport { createInitialState, DocumentState } from './document.state';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Store that manages the state of documents in the application.\r\n * The `DocumentStore` class extends Akita's `EntityStore` to manage the entity state for documents.\r\n * It uses the `createInitialState` function to initialize the store with default values and \r\n * is configured with the name `'documents'`.\r\n * @augments EntityStore<DocumentState>\r\n */\r\n@Injectable({ providedIn: 'root' })\r\n@StoreConfig({ name: 'documents' })\r\nexport class DocumentStore extends EntityStore<DocumentState> {\r\n /**\r\n * Creates an instance of `DocumentStore` with the initial state of the documents.\r\n */\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n \r\n setUploadedDocumentFiles(files: any[]) {\r\n this.update({ uploadedDocumentFiles: files });\r\n }\r\n\r\n setFolders(folders: any) {\r\n this.update({ folders: folders });\r\n }\r\n \r\n setDocumentTypes(documentType: any) {\r\n this.update({ uploadedDocumentFiles: documentType });\r\n }\r\n\r\n setDocumentAlert(documentAlert: any) { \r\n this.update({ documentAlert : documentAlert });\r\n }\r\n\r\n setParentDocumentTypeId(parentDocumentTypeId: string) {\r\n this.update({ parentDocumentTypeId });\r\n }\r\n \r\n setMessage(message: Message[]) {\r\n this.update({ messages : message });\r\n }\r\n\r\n setDocumentList(documents: DocumentModel[]) {\r\n this.update({ documents : documents });\r\n }\r\n\r\n setDocumentCategories(categories: DocumentCategory[]) {\r\n this.update({ documentCategories: categories });\r\n }\r\n\r\n // New methods for selection state management\r\n setSelectedMenuItem(menuItem: string | null) {\r\n this.update({ selectedMenuItem: menuItem });\r\n }\r\n\r\n setSelectedUserId(userId: string | null) {\r\n this.update({ selectedUserId: userId });\r\n }\r\n\r\n setSelectedStatus(status: string | null) {\r\n this.update({ selectedStatus: status });\r\n }\r\n\r\n setSearchKey(searchKey: string | null) {\r\n this.update({ searchKey: searchKey });\r\n }\r\n\r\n // Method to update all selection properties at once\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null) {\r\n this.update({ \r\n selectedMenuItem: menuItem,\r\n selectedUserId: userId,\r\n selectedStatus: status,\r\n searchKey: searchKey\r\n });\r\n }\r\n\r\n // Method to clear all selection state\r\n clearSelectionState() {\r\n this.update({\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true\r\n });\r\n }\r\n\r\n // Method to control user list visibility\r\n setShowUserList(show: boolean) {\r\n this.update({ showUserList: show });\r\n }\r\n\r\n // Method to set the current document\r\n setCurrentDocument(document: DocumentModel | null) {\r\n this.update({ currentDocument: document });\r\n }\r\n\r\n // Method to set the user list\r\n setUserList(userList: UserListModel[]) {\r\n this.update({ userList: userList });\r\n }\r\n\r\n // Method to set the status data\r\n setStatusData(statusData: StatusDataModel[]) {\r\n this.update({ statusData: statusData });\r\n }\r\n\r\n // Method to set the document list response\r\n setDocumentListResponse(response: DocumentListResponse[] | null) {\r\n this.update({ documentListResponse: response });\r\n }\r\n\r\n // Document Viewer State Management Methods\r\n setSelectedDocument(document: DocumentListItem | undefined) {\r\n this.update({ selectedDocument: document });\r\n }\r\n\r\n setDocumentHistory(history: DocumentHistorySection[]) {\r\n this.update({ documentHistory: history });\r\n }\r\n\r\n setShowDocumentHistory(show: boolean) {\r\n this.update({ showDocumentHistory: show });\r\n }\r\n\r\n setIsActionLoading(loading: boolean) {\r\n this.update({ isActionLoading: loading });\r\n }\r\n\r\n setDocumentStatus(status: 'pending' | 'accepted' | 'rejected') {\r\n this.update({ documentStatus: status });\r\n }\r\n\r\n setDocumentIsUploaded(uploaded: boolean) {\r\n this.update({ documentIsUploaded: uploaded });\r\n }\r\n\r\n setAlertData(alertData: any) {\r\n this.update({ alertData: alertData });\r\n }\r\n\r\n // Method to update all document viewer state at once\r\n updateDocumentViewerState(\r\n document?: DocumentListItem,\r\n history?: DocumentHistorySection[],\r\n showHistory?: boolean,\r\n loading?: boolean,\r\n status?: 'pending' | 'accepted' | 'rejected',\r\n uploaded?: boolean,\r\n alertData?: any\r\n ) {\r\n const updates: Partial<DocumentState> = {};\r\n \r\n if (document !== undefined) updates.selectedDocument = document;\r\n if (history !== undefined) updates.documentHistory = history;\r\n if (showHistory !== undefined) updates.showDocumentHistory = showHistory;\r\n if (loading !== undefined) updates.isActionLoading = loading;\r\n if (status !== undefined) updates.documentStatus = status;\r\n if (uploaded !== undefined) updates.documentIsUploaded = uploaded;\r\n if (alertData !== undefined) updates.alertData = alertData;\r\n \r\n this.update(updates);\r\n }\r\n\r\n // Method to clear document viewer state\r\n clearDocumentViewerState() {\r\n this.update({\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n });\r\n }\r\n}\r\n","/**\r\n * Class that holds the URLs used throughout the application.\r\n * These URLs are typically used for making API requests and accessing various resources.\r\n * @class URLS\r\n * @typedef {URLS}\r\n */\r\nexport class URLS {\r\n /**\r\n * The URL to fetch the application configuration file.\r\n * This JSON file typically contains settings and options for the application.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONFIGFILEURL = \"assets/config/api.config.json\";\r\n\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD_FILE = \"documents/uploadFile\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD = \"Documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS = \"documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS_CATAGORIES = \"documents/getAllCategoriesByApplicationId\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT = \"?contextId=\";\r\n\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPES = \"documentTypes\";\r\n /**\r\n * The URL endpoint for getting categories by source (Applicant/Application).\r\n * Used to fetch document categories based on the selected source.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_CATEGORIES_BY_SOURCE = \"documentTypes/getAllCategoriesBySource/\";\r\n /**\r\n * The URL endpoint for getting document types by category ID.\r\n * Used to fetch document types based on the selected category.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_DOCUMENT_TYPES_BY_CATEGORY = \"documentTypes/getAllDocumentTypesByCategoryId/\";\r\n /**\r\n * The URL endpoint for saving document upload data.\r\n * Used to save the complete document upload information.\r\n * @static\r\n * @type {string}\r\n */\r\n static SAVE_DOCUMENT_UPLOAD = \"documents/saveDocumentUpload\";\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static FOLDERS = \"/folders?contextId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static ALERT_BY_DOCUMENT_ID = \"alerts?documentId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static PARENT_DOCUMENT_TYPE_ID = \"parentDocumentType?parentDocumentTypeId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static USERLIST = \"documents/getContextIdListByApplicationId/\";\r\n\r\n /**\r\n * The URL endpoint for getting document status count by context ID.\r\n * Used to fetch status data with applicationId, contextId, and category parameters.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_DOCUMENT_COUNT = \"documents/getStatusDocumentCountByContextId/\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n \r\n static CONTEXT_ID = \"&contextId=\";\r\n static GETALL = \"documents/getAllByContextId\";\r\n static DOCUMENT_LIST = \"list\";\r\n static DOCUMENT_HISTORY = \"documents/getDocumentHistoryByDocumentId/\";\r\n static DELETE_DOCUMENT = \"documents/deleteDocumentByDocumentId/\";\r\n static UPDATE_DOCUMENT_STATUS = \"documents/updateDocumentStatusByDocumentId/\";\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { URLS } from '../constant/URLS';\r\n\r\n/**\r\n * Service that handles loading and providing configuration settings for the application.\r\n * It fetches configuration data from a remote server and exposes various configuration options.\r\n * @class AppConfigService\r\n * @typedef {AppConfigService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppConfigService {\r\n\r\n /**\r\n * Holds the configuration data loaded from the server.\r\n * @private\r\n * @type {*}\r\n */\r\n private appConfig: any;\r\n\r\n /**\r\n * Creates an instance of AppConfigService.\r\n * Initializes the HttpClient for making HTTP requests.\r\n * @class\r\n * @param {HttpClient} http - The HttpClient service used for making HTTP requests.\r\n */\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Loads the application configuration from the server by making an HTTP request to the configuration URL.\r\n * This method retrieves the configuration data and assigns it to the appConfig property.\r\n * @async\r\n * @returns {*}\r\n */\r\n async loadAppConfig() {\r\n try {\r\n this.appConfig = await firstValueFrom(this.http.get(URLS.CONFIGFILEURL));\r\n } catch (error) {\r\n throw new Error(\"Api url is missing.\")\r\n }\r\n }\r\n \r\n\r\n /**\r\n * Returns the base URL for the API from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get apiBaseUrl() {\r\n return this.appConfig?.documentApiUrl;\r\n }\r\n\r\n /**\r\n * Returns the local server API URL from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get localServerApi() {\r\n return this.appConfig?.localServerApi;\r\n }\r\n\r\n /**\r\n * Returns the visibility options from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get visibilityOptions() {\r\n return this.appConfig?.visibilityOption;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DocumentStore } from './document.store';\r\nimport { Observable, tap } from 'rxjs';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { DocumentModel } from '../models/document.model';\r\n\r\n/**\r\n * Service for managing document-related operations.\r\n * The `DocumentService` acts as a bridge between the application and the backend API for handling document-related data.\r\n * It interacts with the `DocumentStore` for state management and uses `HttpClient` for making HTTP requests.\r\n * Creates an instance of `DocumentService`.\r\n * @param {DocumentStore} documentStore - The store that manages the state of documents.\r\n * @param {HttpClient} http - The Angular HTTP client for making API requests.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Sends a request to create a new document.\r\n * @param {*} entity - The data of the document to be created.\r\n * @returns {Observable<any>} Observable that emits the newly created document.\r\n */\r\n create(entity: any): Observable<any> {\r\n const headers = { 'Authorization': 'Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9' };\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(\r\n tap((newEntity: any) => this.documentStore.add(newEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches all documents from the backend.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits an array of documents.\r\n */\r\n getAll(): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}`).pipe(\r\n tap((entities: DocumentModel[]) => this.documentStore.set(entities))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @returns {Observable<any>} Observable that emits the retrieved document.\r\n */\r\n getById(id: string): Observable<any> {\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`).pipe(\r\n tap((entity: any) => this.documentStore.upsert(id, entity))\r\n );\r\n }\r\n\r\n /**\r\n * Updates an existing document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @param {DocumentModel} entity - The updated data of the document.\r\n * @returns {Observable<DocumentModel>} Observable that emits the updated document.\r\n */\r\n update(id: string, entity: DocumentModel): Observable<DocumentModel> {\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`, entity).pipe(\r\n tap((updatedEntity: DocumentModel) => this.documentStore.update(id, updatedEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID.\r\n * @param {string} id - The unique identifier of the document to be deleted.\r\n * @returns {Observable<void>} Observable that completes when the document is deleted.\r\n */\r\n delete(id: string): Observable<void> {\r\n return this.http.delete<void>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}/${id}`).pipe(\r\n tap(() => this.documentStore.remove(id))\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryEntity } from '@datorama/akita';\r\nimport { DocumentStore } from './document.store';\r\nimport { DocumentState } from './document.state';\r\nimport { Observable } from 'rxjs';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n\r\n/**\r\n * Query service for managing document state.\r\n * This class extends Akita's `QueryEntity` to provide additional functionality for querying document data.\r\n * @class DocumentQuery\r\n * @typedef {DocumentQuery}\r\n * @augments {QueryEntity<DocumentState>}\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentQuery extends QueryEntity<DocumentState> {\r\n constructor(protected override store: DocumentStore) {\r\n super(store);\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n getParentDocumentTypeId() : string | null {\r\n return this.getValue()['parentDocumentTypeId'];\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n selectParentDocumentTypeId():Observable<string | null> {\r\n return this.select((state) => state['parentDocumentTypeId']);\r\n }\r\n /**\r\n * Selects the set messages.\r\n * @returns {Observable<Message>} Observable that emits the current Message.\r\n */\r\n selectMessages():Observable<Message[]> {\r\n return this.select((state) => state.messages);\r\n }\r\n /**\r\n * Selects the set documents.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits the documets.\r\n */\r\n selectDocumets():Observable<DocumentModel[]> {\r\n return this.select((state) => state.documentList);\r\n }\r\n\r\n /**\r\n * Selects the document categories.\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the document categories.\r\n */\r\n selectDocumentCategories(): Observable<DocumentCategory[]> {\r\n return this.select((state) => state.documentCategories);\r\n }\r\n\r\n // New query methods for selection state\r\n /**\r\n * Selects the currently selected menu item.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected menu item _id (not the label).\r\n */\r\n selectSelectedMenuItem(): Observable<string | null> {\r\n return this.select((state) => state.selectedMenuItem);\r\n }\r\n\r\n /**\r\n * Selects the currently selected user ID.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected user ID.\r\n */\r\n selectSelectedUserId(): Observable<string | null> {\r\n return this.select((state) => state.selectedUserId);\r\n }\r\n\r\n /**\r\n * Selects the currently selected status.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected status.\r\n */\r\n selectSelectedStatus(): Observable<string | null> {\r\n return this.select((state) => state.selectedStatus);\r\n }\r\n\r\n /**\r\n * Selects the current search key.\r\n * @returns {Observable<string | null>} Observable that emits the current search key.\r\n */\r\n selectSearchKey(): Observable<string | null> {\r\n return this.select((state) => state.searchKey);\r\n }\r\n\r\n /**\r\n * Selects all selection state properties (menu item, user ID, status, search key).\r\n * @returns {Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}>} Observable that emits the current selection state.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n selectSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}> {\r\n return this.select((state) => ({\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current selection state values (synchronous).\r\n * @returns {Object} The current selection state values.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n getSelectionState(): {menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null} {\r\n const state = this.getValue();\r\n return {\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n };\r\n }\r\n\r\n /**\r\n * Selects the user list visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current user list visibility.\r\n */\r\n selectShowUserList(): Observable<boolean> {\r\n return this.select((state) => state.showUserList);\r\n }\r\n\r\n /**\r\n * Gets the current user list visibility value (synchronous).\r\n * @returns {boolean} The current user list visibility.\r\n */\r\n getShowUserList(): boolean {\r\n return this.getValue().showUserList;\r\n }\r\n\r\n /**\r\n * Selects the current document.\r\n * @returns {Observable<DocumentModel | null>} Observable that emits the current document.\r\n */\r\n selectCurrentDocument(): Observable<DocumentModel | null> {\r\n return this.select((state) => state.currentDocument);\r\n }\r\n\r\n /**\r\n * Gets the current document value (synchronous).\r\n * @returns {DocumentModel | null} The current document.\r\n */\r\n getCurrentDocument(): DocumentModel | null {\r\n return this.getValue().currentDocument;\r\n }\r\n\r\n /**\r\n * Selects the user list.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list.\r\n */\r\n selectUserList(): Observable<UserListModel[]> {\r\n return this.select((state) => state.userList);\r\n }\r\n\r\n /**\r\n * Gets the current user list value (synchronous).\r\n * @returns {UserListModel[]} The current user list.\r\n */\r\n getUserList(): UserListModel[] {\r\n return this.getValue().userList;\r\n }\r\n\r\n /**\r\n * Selects the status data.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n selectStatusData(): Observable<StatusDataModel[]> {\r\n return this.select((state) => state.statusData);\r\n }\r\n\r\n /**\r\n * Gets the current status data value (synchronous).\r\n * @returns {StatusDataModel[]} The current status data.\r\n */\r\n getStatusData(): StatusDataModel[] {\r\n return this.getValue().statusData;\r\n }\r\n\r\n /**\r\n * Selects the document list response.\r\n * @returns {Observable<DocumentListResponse[] | null>} Observable that emits the document list response.\r\n */\r\n selectDocumentListResponse(): Observable<DocumentListResponse[] | null> {\r\n return this.select((state) => state.documentListResponse);\r\n }\r\n\r\n /**\r\n * Gets the current document list response value (synchronous).\r\n * @returns {DocumentListResponse[] | null} The current document list response.\r\n */\r\n getDocumentListResponse(): DocumentListResponse[] | null {\r\n return this.getValue().documentListResponse;\r\n }\r\n\r\n // Document Viewer State Query Methods\r\n /**\r\n * Selects the selected document for viewing.\r\n * @returns {Observable<DocumentListItem | undefined>} Observable that emits the selected document.\r\n */\r\n selectSelectedDocument(): Observable<DocumentListItem | undefined> {\r\n return this.select((state) => state.selectedDocument);\r\n }\r\n\r\n /**\r\n * Gets the current selected document value (synchronous).\r\n * @returns {DocumentListItem | undefined} The current selected document.\r\n */\r\n getSelectedDocument(): DocumentListItem | undefined {\r\n return this.getValue().selectedDocument;\r\n }\r\n\r\n /**\r\n * Selects the document history.\r\n * @returns {Observable<DocumentHistorySection[]>} Observable that emits the document history.\r\n */\r\n selectDocumentHistory(): Observable<DocumentHistorySection[]> {\r\n return this.select((state) => state.documentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history value (synchronous).\r\n * @returns {DocumentHistorySection[]} The current document history.\r\n */\r\n getDocumentHistory(): DocumentHistorySection[] {\r\n return this.getValue().documentHistory;\r\n }\r\n\r\n /**\r\n * Selects the document history visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current document history visibility.\r\n */\r\n selectShowDocumentHistory(): Observable<boolean> {\r\n return this.select((state) => state.showDocumentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history visibility value (synchronous).\r\n * @returns {boolean} The current document history visibility.\r\n */\r\n getShowDocumentHistory(): boolean {\r\n return this.getValue().showDocumentHistory;\r\n }\r\n\r\n /**\r\n * Selects the action loading state.\r\n * @returns {Observable<boolean>} Observable that emits the current action loading state.\r\n */\r\n selectIsActionLoading(): Observable<boolean> {\r\n return this.select((state) => state.isActionLoading);\r\n }\r\n\r\n /**\r\n * Gets the current action loading value (synchronous).\r\n * @returns {boolean} The current action loading state.\r\n */\r\n getIsActionLoading(): boolean {\r\n return this.getValue().isActionLoading;\r\n }\r\n\r\n /**\r\n * Selects the document status.\r\n * @returns {Observable<'pending' | 'accepted' | 'rejected'>} Observable that emits the current document status.\r\n */\r\n selectDocumentStatus(): Observable<'pending' | 'accepted' | 'rejected'> {\r\n return this.select((state) => state.documentStatus);\r\n }\r\n\r\n /**\r\n * Gets the current document status value (synchronous).\r\n * @returns {'pending' | 'accepted' | 'rejected'} The current document status.\r\n */\r\n getDocumentStatus(): 'pending' | 'accepted' | 'rejected' {\r\n return this.getValue().documentStatus;\r\n }\r\n\r\n /**\r\n * Selects the document uploaded state.\r\n * @returns {Observable<boolean>} Observable that emits the current document uploaded state.\r\n */\r\n selectDocumentIsUploaded(): Observable<boolean> {\r\n return this.select((state) => state.documentIsUploaded);\r\n }\r\n\r\n /**\r\n * Gets the current document uploaded value (synchronous).\r\n * @returns {boolean} The current document uploaded state.\r\n */\r\n getDocumentIsUploaded(): boolean {\r\n return this.getValue().documentIsUploaded;\r\n }\r\n\r\n /**\r\n * Selects the alert data.\r\n * @returns {Observable<any>} Observable that emits the current alert data.\r\n */\r\n selectAlertData(): Observable<any> {\r\n return this.select((state) => state.alertData);\r\n }\r\n\r\n /**\r\n * Gets the current alert data value (synchronous).\r\n * @returns {any} The current alert data.\r\n */\r\n getAlertData(): any {\r\n return this.getValue().alertData;\r\n }\r\n\r\n /**\r\n * Selects all document viewer state properties.\r\n * @returns {Observable<{selectedDocument?: DocumentListItem, documentHistory: DocumentHistorySection[], showDocumentHistory: boolean, isActionLoading: boolean, documentStatus: 'pending' | 'accepted' | 'rejected', documentIsUploaded: boolean, alertData: any}>} Observable that emits the current document viewer state.\r\n */\r\n selectDocumentViewerState(): Observable<{\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n }> {\r\n return this.select((state) => ({\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state values (synchronous).\r\n * @returns {Object} The current document viewer state values.\r\n */\r\n getDocumentViewerState(): {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n } {\r\n const state = this.getValue();\r\n return {\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { catchError, EMPTY, Observable, of, tap, throwError } from 'rxjs';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Service for making HTTP requests related to documents.\r\n * @class DocumentHttpService\r\n * @typedef {DocumentHttpService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DocumentHttpService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getFoldersData(contextId:string | undefined): Observable<FolderBlockModel[]> {\r\n if(!contextId) return EMPTY;\r\n return this.http.get<FolderBlockModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}${URLS.FOLDERS}${contextId}`).pipe(\r\n tap((folders: FolderBlockModel[]) => {\r\n this.documentStore.setFolders(folders);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document catagories by its path name.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentCatagories(contextId:string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers }).pipe(\r\n tap((response: any) => {\r\n // Store only the categories array, not the entire response\r\n if (response && response.categories) {\r\n this.documentStore.setDocumentCategories(response.categories);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n // getDocumentTypes(): Observable<DocumentTypeModel[]> {\r\n // return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.DOCUMENT_TYPES}`).pipe(\r\n // tap((documentTypes: DocumentTypeModel[]) => {\r\n // this.documentStore.setDocumentTypes(documentTypes);\r\n // }),\r\n // catchError((error) => {\r\n // return throwError(() => new Error(error));\r\n // })\r\n // );\r\n // }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * @param {string} documentId - The document ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getAlertsByDocumentID(documentId:string): Observable<DocumentAlertModel> {\r\n return this.http.get<DocumentAlertModel>(`${this.apiUrl}${URLS.ALERT_BY_DOCUMENT_ID}${documentId}`).pipe(\r\n tap((documentAlert: DocumentAlertModel) => {\r\n this.documentStore.setDocumentAlert(documentAlert);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its folder ID and transforms the response for dropdown options.\r\n * @param {string} folderId - The folder ID to fetch the document.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentByFolderID(folderId:string, contextId:string): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`).pipe(\r\n tap((records: DocumentModel[]) => {\r\n this.documentStore.set(records);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the name of a document.\r\n * This method sends an HTTP PUT request to update the document's file name using the provided document ID and payload.\r\n * In case of an error, it will return an observable that throws an Error.\r\n * @param {string} documentId - The unique identifier of the document to update.\r\n * @param {any} payload - The payload containing the updated document data (e.g., fileName).\r\n * @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.\r\n */\r\n updateDocumentName(documentId: string, payload: any): Observable<DocumentModel> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a userlist by its path name.\r\n * @param {string} contextId - The document ID to fetch the document.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list data.\r\n */\r\n getUserListByContextId(contextId : string): Observable<UserListModel[]> {\r\n if(!contextId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<UserListModel[]>(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(\r\n tap((userList: UserListModel[]) => {\r\n this.documentStore.setUserList(userList);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document status count data by application ID with optional context ID and category parameters.\r\n * @param {string} applicationId - The application ID to fetch status data.\r\n * @param {string | null} contextId - The context ID (applicant ID) to filter by. If null, uses applicationId.\r\n * @param {string | null} categoryId - The category ID to filter by.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n getStatusDocumentCount(applicationId: string, contextId: string | null = null, categoryId: string | null = null): Observable<StatusDataModel[]> {\r\n if(!applicationId) return EMPTY;\r\n let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;\r\n let params = new HttpParams();\r\n const contextParam = contextId || null;\r\n if (contextParam) {\r\n params = params.set(SHARED.CONTEXT_ID, contextParam);\r\n } \r\n if (categoryId) {\r\n params = params.set(SHARED.CATEGORY, categoryId);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<StatusDataModel[]>(url, { params, headers }).pipe(\r\n tap((statusData: StatusDataModel[]) => {\r\n this.documentStore.setStatusData(statusData);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Fetches documents based on selection criteria (menu item, user ID, status, and search key).\r\n * This method sends an HTTP GET request with query parameters for the selected filters.\r\n * @param {string} contextId - The context ID (applicationId or applicantId).\r\n * @param {string | null} menuItem - The selected menu item filter.\r\n * @param {string | null} userId - The selected user ID filter.\r\n * @param {string | null} status - The selected status filter.\r\n * @param {string | null} searchKey - The search key filter.\r\n * @returns {Observable<any>} An observable that emits the filtered document data.\r\n */\r\n getDocumentsBySelection(contextId: string, menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): Observable<any> {\r\n let params = new HttpParams();\r\n \r\n if (menuItem) {\r\n params = params.set(SHARED.CATEGORY, menuItem);\r\n }\r\n \r\n if (userId) {\r\n params = params.set(SHARED.CONTEXT_ID, userId);\r\n }\r\n \r\n if (status) {\r\n params = params.set(SHARED.STATUS_PARAM, status);\r\n }\r\n\r\n if (searchKey) {\r\n params = params.set(SHARED.SEARCH_KEY, searchKey);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(\r\n tap((response: any) => {\r\n if (response.documents) {\r\n this.documentStore.setDocumentList(response.documents);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n getDocumentHistory(documentId: string): Observable<DocumentHistorySection[]> {\r\n if (!documentId) {\r\n return of([]);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<DocumentHistorySection[]>(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers });\r\n }\r\n\r\n /**\r\n * Fetches document categories by source (Applicant/Application).\r\n * @param {string} source - The source type (Applicant or Application).\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the categories.\r\n */\r\n getCategoriesBySource(source: string): Observable<DocumentCategory[]> {\r\n if (!source) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<DocumentCategory[]>(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document types by category ID.\r\n * @param {string} categoryId - The category ID to fetch document types for.\r\n * @returns {Observable<DocumentTypeModel[]>} Observable that emits the document types.\r\n */\r\n getDocumentTypesByCategory(categoryId: string): Observable<DocumentTypeModel[]> {\r\n if (!categoryId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Uploads a single file using the uploadFile API.\r\n * @param {FormData} formData - The form data containing the file and metadata.\r\n * @returns {Observable<any>} Observable that emits the upload response.\r\n */\r\n uploadFile(formData: FormData): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Saves the complete document upload data.\r\n * @param {any} payload - The document upload payload containing all necessary data.\r\n * @returns {Observable<any>} Observable that emits the save response.\r\n */\r\n saveDocumentUpload(payload: any): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the status of a document by document ID\r\n * @param {string} documentId - The ID of the document to update\r\n * @param {string} status - The new status (Approved, Rejected, etc.)\r\n * @param {string} statusUpdateDescription - The description/note for the status update\r\n * @returns {Observable<any>} Observable that emits the updated document data with normalized status\r\n */\r\n updateDocumentStatus(documentId: string, status: string, statusUpdateDescription: string): Observable<any> {\r\n const payload = {\r\n statusUpdateDescription: statusUpdateDescription\r\n };\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.put<any>(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(\r\n tap((response) => {\r\n if (response && response.status) {\r\n const normalizedStatus = this.normalizeStatus(response.status);\r\n response.normalizedStatus = normalizedStatus;\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Normalizes the status from API response to match component expectations\r\n * @param {string} status - The status from API response (Approved, Rejected, etc.)\r\n * @returns {string} Normalized status value\r\n */\r\n private normalizeStatus(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.APPROVED:\r\n return SHARED.STATUS_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.STATUS_REJECTED_LOWERCASE;\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING;\r\n default:\r\n return status.toLowerCase();\r\n }\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID and refreshes all data (categories, userlist, status, and document list)\r\n * @param {string} documentId - The ID of the document to delete\r\n * @param {string} contextId - The context ID to refresh all data\r\n * @returns {Observable<any>} Observable that emits the delete response\r\n */\r\n deleteDocument(documentId: string, contextId: string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 863660c6-dc2a-4ca5-bae1-0dd177d5c9a9` });\r\n return this.http.delete<any>(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(\r\n tap(() => {\r\n this.getDocumentCatagories(contextId).subscribe();\r\n this.getUserListByContextId(contextId).subscribe();\r\n this.getStatusDocumentCount(contextId).subscribe();\r\n this.getDocumentsBySelection(contextId, null, null, null, null).subscribe();\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, combineLatest, Subscription } from \"rxjs\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentStore } from \"../state/document.store\";\r\nimport { DocumentQuery } from \"../state/document.query\";\r\nimport { DocumentHttpService } from \"./document-http.service\";\r\nimport { switchMap, debounceTime, distinctUntilChanged } from \"rxjs/operators\";\r\nimport { ERRORS } from \"../../../Shared/constant/ERROR\";\r\n\r\n/**\r\n * Service to manage the document data and selection state\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DocumentHelperService {\r\n\r\n private selectionWatcherSubscription: Subscription | null = null;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentHttpService: DocumentHttpService\r\n ) {\r\n // Note: initializeSelectionWatcher now requires contextId\r\n // This should be called from the component that has access to contextId\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcher(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n this.selectionWatcherSubscription = combineLatest([\r\n this.documentQuery.selectSelectedMenuItem(),\r\n this.documentQuery.selectSelectedUserId(),\r\n this.documentQuery.selectSelectedStatus(),\r\n this.documentQuery.selectSearchKey()\r\n ]).pipe(\r\n debounceTime(300),\r\n distinctUntilChanged((prev, curr) => {\r\n const isSame = prev[0] === curr[0] && prev[1] === curr[1] && prev[2] === curr[2] && prev[3] === curr[3];\r\n return isSame;\r\n }),\r\n switchMap(([menuItem, userId, status, searchKey]) => {\r\n return this.documentHttpService.getDocumentsBySelection(contextId, menuItem, userId, status, searchKey);\r\n })\r\n ).subscribe({\r\n next: (response) => {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes with initial load\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcherWithInitialLoad(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n // Make initial API call to load documents\r\n this.documentHttpService.getDocumentsBySelection(contextId, null, null, null, null).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n \r\n // Initialize the selection watcher for future updates\r\n this.initializeSelectionWatcher(contextId);\r\n }\r\n\r\n /**\r\n * Clean up the selection watcher subscription\r\n */\r\n cleanupSelectionWatcher(): void {\r\n if (this.selectionWatcherSubscription) {\r\n this.selectionWatcherSubscription.unsubscribe();\r\n this.selectionWatcherSubscription = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the document data\r\n * @param document the document data\r\n */\r\n set(document: DocumentModel | null) {\r\n this.documentStore.setCurrentDocument(document);\r\n }\r\n\r\n /**\r\n * Get the document data\r\n * @returns the document data\r\n */\r\n get(): Observable<DocumentModel | null> {\r\n return this.documentQuery.selectCurrentDocument();\r\n }\r\n\r\n /**\r\n * Get the current document value synchronously\r\n * @returns the current document value\r\n */\r\n getValue(): DocumentModel | null {\r\n return this.documentQuery.getCurrentDocument();\r\n }\r\n\r\n /**\r\n * Set the selected menu item\r\n * @param menuItem the selected menu item _id (not the label)\r\n */\r\n setSelectedMenuItem(menuItem: string | null): void {\r\n this.documentStore.setSelectedMenuItem(menuItem);\r\n }\r\n\r\n /**\r\n * Set the selected user ID\r\n * @param userId the selected user ID\r\n */\r\n setSelectedUserId(userId: string | null): void {\r\n this.documentStore.setSelectedUserId(userId);\r\n }\r\n\r\n /**\r\n * Set the selected status\r\n * @param status the selected status\r\n */\r\n setSelectedStatus(status: string | null): void {\r\n this.documentStore.setSelectedStatus(status);\r\n }\r\n\r\n /**\r\n * Set the search key\r\n * @param searchKey the search term\r\n */\r\n setSearchKey(searchKey: string | null): void {\r\n this.documentStore.setSearchKey(searchKey);\r\n }\r\n\r\n /**\r\n * Set all selection state at once\r\n * @param menuItem the selected menu item _id (not the label)\r\n * @param userId the selected user ID\r\n * @param status the selected status\r\n * @param searchKey the search term\r\n */\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): void {\r\n this.documentStore.setSelectionState(menuItem, userId, status, searchKey);\r\n }\r\n\r\n /**\r\n * Clear all selection state\r\n */\r\n clearSelectionState(): void {\r\n this.documentStore.clearSelectionState();\r\n }\r\n\r\n /**\r\n * Set user list visibility\r\n * @param show whether to show the user list\r\n */\r\n setShowUserList(show: boolean): void {\r\n this.documentStore.setShowUserList(show);\r\n }\r\n\r\n /**\r\n * Get the current selection state\r\n * @returns observable of the current selection state\r\n */\r\n getSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null}> {\r\n return this.documentQuery.selectSelectionState();\r\n }\r\n\r\n /**\r\n * Get the current selection state value synchronously\r\n * @returns the current selection state value\r\n */\r\n getSelectionStateValue(): {menuItem: string | null, userId: string | null, status: string | null} {\r\n return this.documentQuery.getSelectionState();\r\n }\r\n\r\n /**\r\n * Set status data in the store\r\n * @param statusData the status data to set\r\n */\r\n setStatusData(statusData: any[]): void {\r\n this.documentStore.setStatusData(statusData);\r\n }\r\n\r\n /**\r\n * Set user list in the store\r\n * @param userList the user list to set\r\n */\r\n setUserList(userList: any[]): void {\r\n this.documentStore.setUserList(userList);\r\n }\r\n\r\n /**\r\n * Get observable for filtered documents\r\n * @returns Observable that emits filtered document responses\r\n */\r\n getFilteredDocuments(): Observable<any> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Manually trigger API call with current selection state\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithCurrentSelection(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n currentState.menuItem,\r\n currentState.userId,\r\n currentState.status\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n throw new Error(error)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Force refresh documents with no filters\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithoutFilters(contextId: string): void {\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n null,\r\n null,\r\n null\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error('Error in force refresh:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh status data for a specific context\r\n * @param contextId - The context ID to use for the API call\r\n * @param statusContextId - The status context ID (usually userId)\r\n * @param categoryId - The category ID (usually menuItem)\r\n */\r\n refreshStatusData(contextId: string, statusContextId: string | null, categoryId: string | null): void {\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters after accept/reject/delete operations\r\n * This includes document categories, status data, user list, and document list\r\n * \r\n * This method ensures that after a document action (accept/reject/delete):\r\n * 1. Document categories are refreshed\r\n * 2. Status counts are refreshed with current menu item and user filters\r\n * 3. User list is refreshed with current filters (if applicable)\r\n * 4. Document list is refreshed with all current filters (menu item, user, status, search)\r\n * \r\n * Filter application:\r\n * - Document categories: Uses base contextId\r\n * - Status data: Uses userId as contextId and menuItem as categoryId\r\n * - User list: Uses base contextId (can be enhanced with additional filters if API supports)\r\n * - Document list: Uses all current filters (menuItem, userId, status, searchKey)\r\n * \r\n * @param contextId - The context ID to use for the API calls\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Refresh document categories\r\n this.documentHttpService.getDocumentCatagories(contextId).subscribe({\r\n next: (response) => {\r\n // The HTTP service already stores categories in the store via tap operator\r\n // No need to store them again here\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing document categories after action:', error);\r\n }\r\n });\r\n \r\n // Refresh status data\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data after action:', error);\r\n }\r\n });\r\n \r\n // Refresh user list\r\n this.documentHttpService.getUserListByContextId(contextId).subscribe({\r\n next: (userList) => {\r\n this.documentStore.setUserList(userList);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing user list after action:', error);\r\n }\r\n });\r\n this.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n}","import { Injectable, EventEmitter } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { DocumentService } from '../state/document.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * Service for handling document uploads.\r\n * @class DocumentUploadService\r\n * @typedef {DocumentUploadService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadService {\r\n\r\n /**\r\n * Event emitter for upload completion\r\n */\r\n uploadCompleted = new EventEmitter<{file: File, response: any}>();\r\n\r\n\r\n /**\r\n * The file to upload.\r\n * @type {*}\r\n */\r\n uploadedFile: any;\r\n\r\n /**\r\n * Represent contextId\r\n * @type {string}\r\n */\r\n contextId: string = SHARED.EMPTY;\r\n\r\n\r\n /**\r\n * Represent document name\r\n * @type {string}\r\n */\r\n docName: string = SHARED.EMPTY\r\n\r\n /**\r\n * Represent document id\r\n * @type {string}\r\n */\r\n docTypeId: string = SHARED.EMPTY\r\n\r\n /**\r\n * Creates an instance of DocumentUploadService.\r\n * @param {DocumentService} documentService - Service for handling document uploads.\r\n * @param {DocumentStore} documentUploadStore - Store for managing uploaded documents.\r\n * @param {MessageService} messageService - Service for displaying messages.\r\n * @returns {void}\r\n */\r\n constructor(public documentService: DocumentService, public documentUploadStore: DocumentStore, public messageService: MessageService) { }\r\n\r\n /**\r\n * Prepares the files for upload by creating a FormData object.\r\n * This method appends each file to the FormData for submission.\r\n * @returns {void}\r\n */\r\n handleTemplatedUpload(file : File, contextId : string) {\r\n let formsData = this.handleCreateFormData(file, contextId)\r\n if (!formsData) {\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_ERROR_SUMMERY,detail: SHARED.UPLOAD_ERROR_DETAILS});\r\n return;\r\n }\r\n \r\n // Update progress to show upload starting\r\n this.documentUploadStore.setMessage([{\r\n severity: 'info',\r\n detail: 'Uploading document...'\r\n }]);\r\n \r\n this.documentService.create(formsData)\r\n .subscribe({\r\n /**\r\n * Handles the successful upload event.\r\n * Updates the list of uploaded files and emits the file ID.\r\n * @returns {void}\r\n */\r\n next: (event) => {\r\n this.documentUploadStore.setUploadedDocumentFiles(event)\r\n this.documentUploadStore.setMessage([{\r\n severity: SHARED.SUCCESS_SEVERITY,\r\n detail : SHARED.UPLOAD_SUCCESS\r\n }]);\r\n // Emit upload completion event with file and response\r\n this.uploadCompleted.emit({file: file, response: event});\r\n if (this.uploadedFile) {\r\n // You can emit an event here to update the UI progress if needed\r\n }\r\n },\r\n /**\r\n * Handles the error event during file upload.\r\n * Updates the progress of the file to indicate failure.\r\n * @param {any} error - The error object returned by the upload service.\r\n */\r\n error: (error) => {\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_SUMMERY,detail: error?.message});\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get the file and contextId\r\n * @param file - The file to upload.\r\n * @param contextId - The contextId to upload.\r\n */\r\n getUploadFileData(file: File, contextId: string) {\r\n if (file && contextId) {\r\n this.uploadedFile = file;\r\n this.contextId = contextId;\r\n }\r\n }\r\n\r\n /**\r\n * Get the document name and document type id\r\n * @param documentName - The document name to upload.\r\n * @param documentTypeId - The document type id to upload.\r\n */\r\n getDocumentNameAndType(documentTypeId: string) {\r\n if (documentTypeId && documentTypeId !== SHARED.EMPTY) {\r\n this.docTypeId = documentTypeId\r\n }\r\n }\r\n\r\n /**\r\n * Handle the creation of formdata.\r\n * @returns {*} - The formdata object.\r\n */\r\n handleCreateFormData(uploadedFile?: File, contextId?: string) {\r\n \r\n if (uploadedFile) {\r\n let formData = new FormData();\r\n formData.append(SHARED.FILE, uploadedFile, uploadedFile.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId)\r\n return formData;\r\n }else{\r\n return null;\r\n }\r\n \r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\n\r\n/**\r\n * Description placeholder\r\n * @class FileFormatService\r\n * @typedef {FileFormatService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FileFormatService {\r\n\r\n /**\r\n * Creates an instance of FileFormatService.\r\n * @constructor\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Description placeholder\r\n * @param {number} bytes\r\n * @param {PrimeNGConfig} config\r\n * @returns {string}\r\n */\r\n formatFileSize(bytes: number, config:PrimeNGConfig): string {\r\n const kilobyte = 1024;\r\n const decimalPlaces = SHARED.ONE;\r\n const sizes = config.translation.fileSizeTypes || SHARED.FILE_SIZE_UNITS;\r\n if (bytes < kilobyte) {\r\n return `${bytes} ${sizes[SHARED.INITIAL_COUNT]}`;\r\n } else if (bytes < kilobyte * kilobyte) {\r\n const kbSize = bytes / kilobyte;\r\n return `${parseFloat(kbSize.toFixed(decimalPlaces))} ${sizes[SHARED.ONE]}`;\r\n } else {\r\n const mbSize = bytes / (kilobyte * kilobyte);\r\n return `${parseFloat(mbSize.toFixed(decimalPlaces))} ${sizes[SHARED.TWO]}`;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { FileFormatService } from './file-format.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface UploadedFile {\r\n file: File;\r\n formattedSize: string;\r\n progress: number;\r\n uploadResponse?: any; // Store the upload response for later use\r\n}\r\n\r\nexport interface DocumentUploadPayload {\r\n source: 'Applicant' | 'Application';\r\n categoryId: string;\r\n documentTypeId: string;\r\n applicantId?: string;\r\n contextId: string;\r\n documents: {\r\n fileName: string;\r\n fileSize: number;\r\n fileType: string;\r\n file: File;\r\n uploadedFileId?: string;\r\n }[];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadBusinessService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private fileFormatService: FileFormatService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants for a given context ID\r\n */\r\n loadApplicants(contextId: string): Observable<UserListModel[]> {\r\n return this.documentHttpService.getUserListByContextId(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories based on assignment type\r\n */\r\n loadCategories(assignmentType: string): Observable<DocumentCategory[]> {\r\n return this.documentHttpService.getCategoriesBySource(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types based on category\r\n */\r\n loadDocumentTypes(categoryId: string): Observable<DocumentTypeModel[]> {\r\n return this.documentHttpService.getDocumentTypesByCategory(categoryId);\r\n }\r\n\r\n /**\r\n * Filters applicants based on assignment type\r\n */\r\n filterApplicants(applicantList: UserListModel[], assignmentType: 'Applicant' | 'Application'): UserListModel[] {\r\n if (assignmentType === SHARED.APPLICANT) {\r\n return applicantList.filter(applicant => applicant.name !== SHARED.APPLICATION_DOCS);\r\n } else {\r\n return applicantList.filter(applicant => applicant.name === SHARED.APPLICATION_DOCS);\r\n }\r\n }\r\n\r\n /**\r\n * Validates form data\r\n */\r\n validateForm(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n categoryOptions: DocumentCategory[],\r\n documentTypeOptions: DocumentTypeModel[]\r\n ): boolean {\r\n if (!categoryOptions.length || !documentTypeOptions.length) {\r\n return false;\r\n }\r\n \r\n const hasRequiredSelections = Boolean(selectedCategory) && Boolean(selectedDocumentType);\r\n const hasFiles = uploadedFiles.length > 0;\r\n \r\n if (assignmentType === SHARED.APPLICANT) {\r\n return hasRequiredSelections && hasFiles && Boolean(selectedApplicant);\r\n } else {\r\n return hasRequiredSelections && hasFiles;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if save button should be disabled\r\n */\r\n isSaveButtonDisabled(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n isSaving: boolean\r\n ): boolean {\r\n const hasBasicData = selectedCategory && selectedDocumentType && uploadedFiles.length > 0;\r\n \r\n if (assignmentType === SHARED.APPLICANT) {\r\n return !hasBasicData || !selectedApplicant || isSaving;\r\n } else {\r\n return !hasBasicData || isSaving;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares upload payload\r\n */\r\n prepareUploadPayload(\r\n assignmentType: 'Applicant' | 'Application',\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n contextId: string\r\n ): DocumentUploadPayload {\r\n const payload: DocumentUploadPayload = {\r\n source: assignmentType,\r\n categoryId: selectedCategory,\r\n documentTypeId: selectedDocumentType,\r\n contextId,\r\n documents: uploadedFiles.map(file => ({\r\n fileName: file.file.name,\r\n fileSize: file.file.size,\r\n fileType: file.file.type,\r\n file: file.file,\r\n uploadedFileId: file.uploadResponse?.fileId || file.uploadResponse?.id || file.uploadResponse?.fileName\r\n }))\r\n };\r\n\r\n \r\n return payload;\r\n }\r\n\r\n /**\r\n * Saves document upload\r\n */\r\n saveDocumentUpload(payload: DocumentUploadPayload): Observable<any> {\r\n return this.documentHttpService.saveDocumentUpload(payload);\r\n }\r\n\r\n /**\r\n * Formats file size\r\n */\r\n formatFileSize(fileSize: number, config: any): string {\r\n return this.fileFormatService.formatFileSize(fileSize, config);\r\n }\r\n\r\n /**\r\n * Creates uploaded file object\r\n */\r\n createUploadedFile(file: File, formattedSize: string): UploadedFile {\r\n return {\r\n file,\r\n formattedSize,\r\n progress: SHARED.UPLOAD_PROGRESS_10 \r\n };\r\n }\r\n\r\n /**\r\n * Resets form data to initial state\r\n */\r\n getInitialFormState() {\r\n return {\r\n selectedAssignmentType: 'Applicant' as const,\r\n selectedApplicant: SHARED.EMPTY,\r\n selectedCategory: SHARED.EMPTY,\r\n selectedDocumentType: SHARED.EMPTY,\r\n uploadedFiles: [] as UploadedFile[],\r\n isFormValid: false\r\n };\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { UploadedFile } from './document-upload-business.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadFormService {\r\n constructor(private messageService: MessageService) {}\r\n\r\n /**\r\n * Shows error message\r\n */\r\n showErrorMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows warning message\r\n */\r\n showWarningMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows success message\r\n */\r\n showSuccessMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Validates required fields for upload\r\n */\r\n validateRequiredFields(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedApplicant: string,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n uploadedFiles: UploadedFile[]\r\n ): boolean {\r\n if (assignmentType === 'Applicant' && !selectedApplicant) {\r\n this.showWarningMessage('No Applicant Selected', 'Please select an applicant.');\r\n return false;\r\n }\r\n\r\n if (!selectedCategory) {\r\n this.showWarningMessage('No Category Selected', 'Please select a category.');\r\n return false;\r\n }\r\n\r\n if (!selectedDocumentType) {\r\n this.showWarningMessage('No Document Type Selected', 'Please select a document type.');\r\n return false;\r\n }\r\n\r\n if (uploadedFiles.length === 0) {\r\n this.showWarningMessage('No Documents Uploaded', 'Please upload at least one document.');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Validates form completeness\r\n */\r\n validateFormCompleteness(): boolean {\r\n this.showWarningMessage('Form Incomplete', 'Please complete all required fields and upload at least one document.');\r\n return false;\r\n }\r\n\r\n /**\r\n * Validates context ID presence\r\n */\r\n validateContextId(contextId: string, message: string): boolean {\r\n if (!contextId) {\r\n this.showErrorMessage('Missing Required Data', message);\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentUploadBusinessService } from './document-upload-business.service';\r\nimport { DocumentUploadFormService } from './document-upload-form.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\n\r\nexport interface DataLoadingState {\r\n isLoadingApplicants: boolean;\r\n isLoadingCategories: boolean;\r\n isLoadingDocumentTypes: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadDataService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants and handles the response\r\n */\r\n loadApplicants(\r\n contextId: string,\r\n onSuccess: (applicants: UserListModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<UserListModel[]> {\r\n if (!this.formService.validateContextId(contextId, 'Context ID is required to load applicants.')) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadApplicants(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories and handles the response\r\n */\r\n loadCategories(\r\n assignmentType: string,\r\n onSuccess: (categories: DocumentCategory[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentCategory[]> {\r\n if (!assignmentType) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadCategories(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types and handles the response\r\n */\r\n loadDocumentTypes(\r\n categoryId: string,\r\n onSuccess: (documentTypes: DocumentTypeModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentTypeModel[]> {\r\n return this.businessService.loadDocumentTypes(categoryId);\r\n }\r\n\r\n /**\r\n * Handles applicants loaded successfully\r\n */\r\n handleApplicantsLoaded(\r\n applicants: UserListModel[],\r\n assignmentType: 'Applicant' | 'Application' | null\r\n ): UserListModel[] {\r\n return this.businessService.filterApplicants(applicants, assignmentType!);\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation, OnInit, OnDestroy } from '@angular/core';\r\nimport { FileUpload } from 'primeng/fileupload';\r\nimport { MessageService } from 'primeng/api';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { FileFormatService } from '../../services/file-format.service';\r\nimport { DocumentService } from '../../state/document.service';\r\nimport { DocumentUploadService } from '../../services/document-upload.service';\r\n\r\nimport { DocumentUploadBusinessService, UploadedFile } from '../../services/document-upload-business.service';\r\nimport { DocumentUploadFormService } from '../../services/document-upload-form.service';\r\nimport { DocumentUploadDataService } from '../../services/document-upload-data.service';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentTypeModel } from '../../models/document-type.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-document-upload',\r\n templateUrl: './document-upload.component.html',\r\n styleUrls: ['./document-upload.component.scss'],\r\n standalone: false,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentUploadComponent implements OnDestroy {\r\n @Input() contextId: string = SHARED.EMPTY;\r\n @ViewChild('fileUploader') fileUploader!: FileUpload;\r\n\r\n // Form data\r\n selectedAssignmentType: 'Applicant' | 'Application' | null = null;\r\n selectedApplicant: string = SHARED.EMPTY;\r\n selectedCategory: string = SHARED.EMPTY;\r\n selectedDocumentType: string = SHARED.EMPTY;\r\n \r\n // Data lists\r\n applicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n filteredApplicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n categoryOptions: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n documentTypeOptions: DocumentTypeModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n // File upload\r\n uploadedFiles: UploadedFile[] = SHARED.EMPTY_ARRAY;\r\n fileProgress: Map<File, number> = new Map();\r\n\r\n // Loading states\r\n isLoadingApplicants: boolean = false;\r\n isLoadingCategories: boolean = false;\r\n isLoadingDocumentTypes: boolean = false;\r\n isSaving: boolean = false;\r\n\r\n // Validation\r\n isFormValid: boolean = false;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n public documentUpload: DocumentUploadService, \r\n public uploadService: DocumentService, \r\n private config: PrimeNGConfig, \r\n public fileFormatService: FileFormatService, \r\n public messageService: MessageService, \r\n public cdr: ChangeDetectorRef,\r\n\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService,\r\n private dataService: DocumentUploadDataService\r\n ) { }\r\n\r\n \r\n\r\n // Event handlers\r\n onAssignmentTypeChange(): void {\r\n this.resetSelections();\r\n this.loadCategories();\r\n this.handleApplicantLoading();\r\n }\r\n\r\n onCategoryChange(): void {\r\n this.resetDocumentType();\r\n this.loadDocumentTypesIfCategorySelected();\r\n this.validateForm();\r\n }\r\n\r\n onDocumentTypeChange(): void {\r\n this.validateForm();\r\n }\r\n\r\n onApplicantSelectionChange(): void {\r\n this.validateForm();\r\n }\r\n\r\n onSelectedFiles(event: { currentFiles: File[] }): void {\r\n event.currentFiles.forEach((file: File) => {\r\n this.handleTemplatedUpload(file);\r\n });\r\n this.fileUploader.clear();\r\n }\r\n\r\n // Data loading methods\r\n loadApplicants(): void {\r\n this.isLoadingApplicants = true;\r\n this.dataService.loadApplicants(this.contextId, \r\n (applicants) => this.handleApplicantsLoaded(applicants),\r\n (error) => this.handleApplicantsError(error)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (applicants) => this.handleApplicantsLoaded(applicants),\r\n error: (error) => this.handleApplicantsError(error)\r\n });\r\n }\r\n\r\n loadCategories(): void {\r\n this.isLoadingCategories = true;\r\n this.dataService.loadCategories(this.selectedAssignmentType!,\r\n (categories) => this.handleCategoriesLoaded(categories),\r\n (error) => this.handleCategoriesError(error)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (categories) => this.handleCategoriesLoaded(categories),\r\n error: (error) => this.handleCategoriesError(error)\r\n });\r\n }\r\n\r\n loadDocumentTypes(): void {\r\n this.isLoadingDocumentTypes = true;\r\n this.dataService.loadDocumentTypes(this.selectedCategory,\r\n (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n (error) => this.handleDocumentTypesError(error)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n error: (error) => this.handleDocumentTypesError(error)\r\n });\r\n }\r\n\r\n // Business logic methods\r\n saveDocumentUpload(): void {\r\n if (!this.isFormValid) {\r\n this.formService.validateFormCompleteness();\r\n return;\r\n }\r\n\r\n if (!this.formService.validateRequiredFields(\r\n this.selectedAssignmentType,\r\n this.selectedApplicant,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.uploadedFiles\r\n )) return;\r\n this.isSaving = true;\r\n this.saveDocumentMetadata();\r\n }\r\n\r\n handleTemplatedUpload(file: File): void {\r\n if (!this.formService.validateContextId(this.contextId, 'Context ID is required for upload.')) {\r\n return;\r\n }\r\n this.fileProgress.set(file, SHARED.UPLOAD_PROGRESS_10);\r\n this.documentUpload.uploadCompleted.pipe(takeUntil(this.destroy$)).subscribe(({file: uploadedFile, response}) => {\r\n if (uploadedFile === file) {\r\n this.fileProgress.set(file, SHARED.UPLOAD_PROGRESS_100);\r\n const uploadedFileObj = this.uploadedFiles.find(uf => uf.file === file);\r\n if (uploadedFileObj) {\r\n uploadedFileObj.uploadResponse = response;\r\n uploadedFileObj.progress = SHARED.UPLOAD_PROGRESS_100; \r\n }\r\n this.cdr.detectChanges();\r\n }\r\n });\r\n \r\n this.documentUpload.handleTemplatedUpload(file, this.contextId)\r\n const formattedSize = this.businessService.formatFileSize(file.size, this.config);\r\n const uploadedFile = this.businessService.createUploadedFile(file, formattedSize);\r\n uploadedFile.progress = SHARED.UPLOAD_PROGRESS_10; \r\n this.uploadedFiles.push(uploadedFile);\r\n this.validateForm();\r\n }\r\n\r\n handleDocumentRemove(file: File, index: number): void {\r\n this.uploadedFiles.splice(index, 1);\r\n this.fileProgress.delete(file);\r\n this.validateForm();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n // Utility methods\r\n choose(event: any, callback: () => void): void {\r\n callback();\r\n }\r\n\r\n triggerFileUpload(): void {\r\n this.fileUploader.choose();\r\n }\r\n\r\n getSaveButtonDisabled(): boolean {\r\n return this.businessService.isSaveButtonDisabled(\r\n this.selectedAssignmentType,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.selectedApplicant,\r\n this.uploadedFiles,\r\n this.isSaving\r\n );\r\n }\r\n\r\n getProgress(file: File): number {\r\n return this.fileProgress.get(file) || 0;\r\n }\r\n\r\n isFileUploading(file: File): boolean {\r\n const progress = this.fileProgress.get(file);\r\n return progress !== undefined && progress > 0 && progress < SHARED.UPLOAD_PROGRESS_100;\r\n }\r\n\r\n isFileUploaded(file: File): boolean {\r\n const progress = this.fileProgress.get(file);\r\n return progress === SHARED.UPLOAD_PROGRESS_100;\r\n }\r\n\r\n isFileError(file: File): boolean {\r\n const progress = this.fileProgress.get(file);\r\n return progress === -1;\r\n }\r\n\r\n resetForm(): void {\r\n const initialState = this.businessService.getInitialFormState();\r\n Object.assign(this, initialState);\r\n this.fileProgress.clear();\r\n this.filteredApplicantList = SHARED.EMPTY_ARRAY;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n // Private helper methods\r\n resetSelections(): void {\r\n this.selectedApplicant = SHARED.EMPTY;\r\n this.selectedCategory = SHARED.EMPTY;\r\n this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n resetDocumentType(): void {\r\n this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n handleApplicantLoading(): void {\r\n if (this.selectedAssignmentType === SHARED.APPLICANT) {\r\n this.loadApplicants();\r\n } else {\r\n this.filterApplicants();\r\n }\r\n }\r\n\r\n loadDocumentTypesIfCategorySelected(): void {\r\n if (this.selectedCategory) {\r\n this.loadDocumentTypes();\r\n }\r\n }\r\n\r\n handleApplicantsLoaded(applicants: UserListModel[]): void {\r\n this.applicantList = applicants;\r\n this.filterApplicants();\r\n this.isLoadingApplicants = false;\r\n this.validateForm();\r\n }\r\n\r\n handleApplicantsError(error: any): void {\r\n this.isLoadingApplicants = false;\r\n this.formService.showErrorMessage('Failed to Load Applicants', error?.message || 'Failed to load applicants');\r\n }\r\n\r\n handleCategoriesLoaded(categories: DocumentCategory[]): void {\r\n this.categoryOptions = categories;\r\n this.isLoadingCategories = false;\r\n this.validateForm();\r\n }\r\n\r\n handleCategoriesError(error: any): void {\r\n this.isLoadingCategories = false;\r\n this.formService.showErrorMessage('Failed to Load Categories', error?.message || 'Failed to load categories');\r\n }\r\n\r\n handleDocumentTypesLoaded(documentTypes: DocumentTypeModel[]): void {\r\n this.documentTypeOptions = documentTypes;\r\n this.isLoadingDocumentTypes = false;\r\n this.validateForm();\r\n }\r\n\r\n handleDocumentTypesError(error: any): void {\r\n this.isLoadingDocumentTypes = false;\r\n this.formService.showErrorMessage('Failed to Load Document Types', error?.message || 'Failed to load document types');\r\n }\r\n\r\n handleUploadSuccess(response: any): void {\r\n this.isSaving = false;\r\n this.formService.showSuccessMessage('Upload Successful', 'Documents uploaded and saved successfully!');\r\n this.resetForm();\r\n }\r\n\r\n handleUploadError(error: any): void {\r\n this.isSaving = false;\r\n this.formService.showErrorMessage('Upload Failed', error?.message || 'Failed to save document upload');\r\n }\r\n\r\n filterApplicants(): void {\r\n this.filteredApplicantList = this.dataService.handleApplicantsLoaded(\r\n this.applicantList, \r\n this.selectedAssignmentType\r\n );\r\n }\r\n\r\n validateForm(): void {\r\n this.isFormValid = this.businessService.validateForm(\r\n this.selectedAssignmentType,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.selectedApplicant,\r\n this.uploadedFiles,\r\n this.categoryOptions,\r\n this.documentTypeOptions\r\n );\r\n }\r\n\r\n saveDocumentMetadata(): void {\r\n const contextId = this.selectedApplicant || this.contextId;\r\n \r\n const payload = this.businessService.prepareUploadPayload(\r\n this.selectedAssignmentType!,\r\n this.selectedCategory,\r\n this.selectedDocumentType,\r\n this.selectedApplicant,\r\n this.uploadedFiles,\r\n contextId\r\n );\r\n\r\n this.businessService.saveDocumentUpload(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => this.handleUploadSuccess(response),\r\n error: (error) => this.handleUploadError(error)\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.businessService.destroy();\r\n this.dataService.destroy();\r\n }\r\n}\r\n\r\n","<div class=\"document-upload-container\">\r\n <!-- Assignment Section -->\r\n <div class=\"assignment-section\">\r\n <h4>Assign to Applicant(s) or Application</h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant'\" class=\"radio-label\">Applicant(s)</label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Applicant Selection (only shown when Applicant is selected) -->\r\n <div class=\"applicant-section\" *ngIf=\"selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s)</h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-radioButton \r\n name=\"selectedApplicant\"\r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicant\"\r\n [inputId]=\"'applicant-' + applicant._id\"\r\n (onClick)=\"onApplicantSelectionChange()\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Category Selection -->\r\n <div class=\"category-section\">\r\n <h4>Category</h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- Document Type Selection -->\r\n <div class=\"document-type-section\">\r\n <h4>Document Type</h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- File Upload Section -->\r\n <div class=\"file-upload-section\">\r\n <h4>Upload Documents</h4>\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload \r\n #fileUploader \r\n [multiple]=\"true\" \r\n auto=\"true\" \r\n accept=\"image/png,application/pdf\" \r\n maxFileSize=\"26214400\"\r\n (onSelect)=\"onSelectedFiles($event)\"\r\n >\r\n <ng-template pTemplate=\"header\" let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\">\r\n <div class=\"docHeader p-2 flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <p-button \r\n (onClick)=\"choose($event, chooseCallback)\" \r\n icon=\"pi pi-images\" \r\n [rounded]=\"true\"\r\n [outlined]=\"true\" \r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-removeFileCallback=\"removeFileCallback\"\r\n let-removeUploadedFileCallback=\"removeUploadedFileCallback\">\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <div class=\"col-12 md:col-12 p-0\" *ngIf=\"uploadedFiles.length > 0\">\r\n <div *ngFor=\"let uploadedFile of uploadedFiles; let i = index\"\r\n class=\"m-0 flex flex-column align-items-center gap-1 mt-3\">\r\n <div class=\"col-12 md:col-12 p-0 flex documentInfo\">\r\n <div class=\"documentImage\">\r\n <img src=\"../../../../assets/images/document.png\" [alt]=\"uploadedFile.file.name\" width=\"45\" height=\"50\"\r\n class=\"object-contain\" />\r\n </div>\r\n <div class=\"flex w-full flex-column mt-2 ml-2\">\r\n <div class=\"flex justify-content-between\">\r\n <div style=\"font-weight: bold;font-size: 14px\">\r\n {{ uploadedFile.file.name }}\r\n </div>\r\n <i class=\"pi pi-times cursor-pointer\" (click)=\"handleDocumentRemove(uploadedFile.file,i)\"></i>\r\n </div>\r\n <div class=\"flex justify-content-between mt-1\">\r\n <div style=\"color: #676B89; font-size: 12px; color: green;\" class=\"pi pi-verified\"> \r\n {{ uploadedFile.formattedSize }}\r\n </div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> \r\n {{ uploadedFile.progress }} % \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <p-progressBar \r\n [value]=\"uploadedFile.progress\" \r\n [showValue]=\"false\" \r\n styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': uploadedFile.progress > 100 }\"\r\n >\r\n </p-progressBar>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"empty\" let-chooseCallback=\"chooseCallback\">\r\n <div *ngIf=\"!uploadedFiles.length\" class=\"flex align-items-center justify-content-center flex-column\"\r\n (click)=\"triggerFileUpload()\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400\"></i>\r\n <p class=\"mt-4 mb-0\">Drag and drop files here to upload.</p>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED'\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserListService {\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) { }\r\n\r\n getInitials(name: string): string {\r\n return name.substring(0, 2).toUpperCase();\r\n }\r\n\r\n getColorByIndex(index: number): string {\r\n const colors = SHARED.COLORS;\r\n return colors[index % colors.length];\r\n }\r\n\r\n getColorValue(colorName: string): string {\r\n const colorMap: { [key: string]: string } = SHARED.COLOR_MAP;\r\n return colorMap[colorName] || SHARED.DEFAULT_COLOR;\r\n }\r\n\r\n processUserData(userList: UserListModel[]): UserListModel[] {\r\n return userList.map((user, index) => ({\r\n ...user,\r\n initials: this.getInitials(user.name),\r\n color: this.getColorByIndex(index)\r\n }));\r\n }\r\n\r\n /**\r\n * Finds the selected menu item from categories\r\n * @param selectedMenuItemId - The ID of the selected menu item\r\n * @param categories - The document categories\r\n * @returns The selected menu item or null\r\n */\r\n private findSelectedMenuItem(selectedMenuItemId: string, categories: DocumentCategory[]): any {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === selectedMenuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Filters user list based on selected menu item category\r\n * @param userList - The complete user list\r\n * @param categories - The document categories\r\n * @returns Filtered user list\r\n */\r\n filterUsersByCategory(userList: UserListModel[], categories: DocumentCategory[]): UserListModel[] {\r\n const selectedMenuItemId = this.documentQuery.getSelectionState().menuItem;\r\n if (!selectedMenuItemId) {\r\n return userList;\r\n }\r\n\r\n const selectedMenuItem = this.findSelectedMenuItem(selectedMenuItemId, categories);\r\n if (!selectedMenuItem) {\r\n return userList;\r\n }\r\n\r\n const selectedCategory = categories.find(category => \r\n category.items?.some(item => item._id === selectedMenuItemId)\r\n );\r\n \r\n if (!selectedCategory) {\r\n return userList;\r\n }\r\n\r\n if (selectedCategory.label === SHARED.APPLICATION) {\r\n return userList.filter(user => user.name === SHARED.APPLICATION_DOCS);\r\n }\r\n\r\n return userList;\r\n }\r\n\r\n selectUser(userId: string, userData: UserListModel[]): { selectedUser: string | undefined; name: string | undefined } {\r\n const user = userData.find(u => u._id === userId);\r\n if (user) {\r\n this.documentStore.setSelectedUserId(userId);\r\n return { selectedUser: user.name, name: user.name };\r\n }\r\n return { selectedUser: undefined, name: undefined };\r\n }\r\n\r\n unselectUser(): void {\r\n this.documentStore.setSelectedUserId(null);\r\n }\r\n\r\n isUserSelected(userId: string, userData: UserListModel[], selectedUser: string | undefined): boolean {\r\n return selectedUser === userData.find(u => u._id === userId)?.name;\r\n }\r\n} ","\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport { SHARED, USERLIST } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { UserListService } from '../../services/user-list.service';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'lib-user-list',\r\n standalone : false,\r\n templateUrl: './user-list.component.html',\r\n styleUrls: ['./user-list.component.scss'],\r\n animations: [\r\n trigger('slideInFromTop', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'translateY(-10px)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'translateY(0)'\r\n })),\r\n transition('void => *', [\r\n animate('300ms ease-out')\r\n ])\r\n ]),\r\n trigger('fadeIn', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'scale(0.8)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'scale(1)'\r\n })),\r\n transition('void => *', [\r\n animate('200ms ease-in-out')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class UserListComponent implements OnInit, OnChanges {\r\n \r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n @Output() userSelected = new EventEmitter<string>();\r\n \r\n userData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n filteredUserData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n selectedUser: string | undefined;\r\n shouldShowContainer: boolean = true;\r\n \r\n constructor(\r\n public documentService : DocumentHelperService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private userListService: UserListService\r\n ){\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['userList'] && !changes['userList'].firstChange) {\r\n this.initializeUserData();\r\n }\r\n }\r\n\r\n private initializeUserData(): void {\r\n if (this.userList && this.userList.length > 0) {\r\n this.userData = this.userListService.processUserData(this.userList);\r\n this.updateFilteredUserData();\r\n }\r\n }\r\n\r\n private updateFilteredUserData(): void {\r\n if (this.userData.length > 0 && this.categories.length > 0) {\r\n this.filteredUserData = this.userListService.filterUsersByCategory(this.userData, this.categories);\r\n this.shouldShowContainer = true;\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n } else {\r\n this.filteredUserData = this.userData;\r\n this.shouldShowContainer = true;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeUserData();\r\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\r\n if (userId) {\r\n const user = this.userData.find(u => u._id === userId);\r\n this.selectedUser = user ? user.name : undefined;\r\n } else {\r\n this.selectedUser = undefined;\r\n }\r\n });\r\n\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.updateFilteredUserData();\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n });\r\n\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n if (!show && this.selectedUser) {\r\n this.selectedUser = undefined;\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n });\r\n }\r\n\r\n onUserSelect(username: string, id: string): void {\r\n if (this.selectedUser === username) {\r\n this.selectedUser = undefined;\r\n this.userListService.unselectUser();\r\n this.userSelected.emit(SHARED.EMPTY);\r\n } else {\r\n this.selectedUser = username;\r\n this.documentStore.setSelectedUserId(id);\r\n this.userSelected.emit(username);\r\n }\r\n }\r\n}","<div class=\"user-list-container\" [@slideInFromTop]>\r\n <div class=\"user-cards\">\r\n <div \r\n *ngFor=\"let user of filteredUserData\" \r\n class=\"user-card\"\r\n [class.selected]=\"selectedUser === user.name\"\r\n [style.border-color]=\"selectedUser === user.name ? '#f97316' : 'transparent'\"\r\n (click)=\"onUserSelect(user.name, user._id)\"\r\n >\r\n @if(user.name === \"Application Docs\"){\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\"><i class=\"pi pi-user\"></i></span>\r\n </div>\r\n }@else {\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\r\n }\r\n <div class=\"user-info\">\r\n <div class=\"username\">{{ user.name }}</div>\r\n <div class=\"document-counts\">\r\n {{ user.approved }} approved / {{ user.pending }} pending\r\n </div>\r\n </div>\r\n <div class=\"selection-indicator\" *ngIf=\"selectedUser === user.name\" [@fadeIn]>\r\n <i class=\"ri-check-line\"></i>\r\n </div>\r\n </div>\r\n \r\n <!-- Show message when filtered list is empty -->\r\n <div *ngIf=\"filteredUserData.length === 0 && shouldShowContainer\" class=\"no-users-message\" [@slideInFromTop]>\r\n <p>No users available for this category.</p>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface StatusData {\r\n status: string;\r\n count: number;\r\n color?: string;\r\n icon?: string;\r\n _id?: string;\r\n}\r\n\r\nexport interface CalculatedStatusData extends StatusData {\r\n percentage: number;\r\n isSelected: boolean;\r\n statusClass: string;\r\n iconClass: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StatusCalculatorService {\r\n\r\n calculateTotalCount(statusData: StatusData[]): number {\r\n return statusData?.reduce((total, status) => total + (status.count ?? 0), 0) || 0;\r\n }\r\n\r\n calculateStatusDataWithPercentages(\r\n statusData: StatusData[], \r\n selectedStatus: string | null\r\n ): CalculatedStatusData[] {\r\n if (!statusData) return [];\r\n \r\n const totalCount = this.calculateTotalCount(statusData);\r\n \r\n return statusData.map((status) => ({\r\n ...status,\r\n percentage: totalCount > 0 ? (status.count ?? 0) / totalCount * 100 : 0,\r\n isSelected: selectedStatus === status.status,\r\n statusClass: status.status ? SHARED.STATUS_WITH_DASH + status.status.toLowerCase() : SHARED.EMPTY,\r\n iconClass: SHARED.ICON_WITH_DASH + (status?.status?.toLowerCase() || SHARED.EMPTY)\r\n }));\r\n }\r\n} ","import { Component, OnInit, OnDestroy, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { StatusCalculatorService, CalculatedStatusData } from '../../services/status-calculator.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'lib-document-status',\r\n standalone: false,\r\n templateUrl: './document-status.component.html',\r\n styleUrl: './document-status.component.scss'\r\n})\r\nexport class DocumentStatusComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Input() statusData: any;\r\n \r\n selectedStatus: string | null = null;\r\n statusDataWithPercentages: CalculatedStatusData[] = [];\r\n\r\n \r\n private subscription = new Subscription();\r\n\r\n constructor(\r\n private documentQuery: DocumentQuery,\r\n private documentService: DocumentHelperService,\r\n private statusCalculatorService: StatusCalculatorService\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['contextId'] && !changes['contextId'].firstChange) {\r\n // When contextId changes, refetch status data for the new context\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedStatus().subscribe(status => {\r\n this.selectedStatus= status;\r\n this.updateCalculatedStatusData();\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.documentQuery.selectStatusData().subscribe(statusData => {\r\n if (statusData && statusData.length > 0) {\r\n this.statusData = statusData;\r\n this.updateCalculatedStatusData();\r\n }\r\n })\r\n );\r\n\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n private refetchStatusData(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Use the document service to refresh status data for the new context\r\n this.documentService.refreshStatusData(this.contextId, statusContextId, categoryId);\r\n }\r\n }\r\n\r\n \r\n selectStatus(status: string): void {\r\n const newStatus = this.selectedStatus === status ? null : status;\r\n this.documentService.setSelectedStatus(newStatus);\r\n }\r\n\r\n private updateCalculatedStatusData(): void {\r\n this.statusDataWithPercentages = this.statusCalculatorService.calculateStatusDataWithPercentages(\r\n this.statusData,\r\n this.selectedStatus\r\n );\r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"status-summary-container\">\r\n <div class=\"status-cards\">\r\n \r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"status-card {{ status.statusClass }}\"\r\n [class.selected]=\"status.isSelected\"\r\n (click)=\"selectStatus(status.status || '')\"\r\n >\r\n <div class=\"status-icon {{ status.iconClass }}\">\r\n <i [class]=\"status.icon\"></i>\r\n </div>\r\n <div class=\"status-info\">\r\n <div class=\"status-count\">{{ status.count }}</div>\r\n <div class=\"status-name\">{{ status.status }}</div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\">\r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"progress-segment\"\r\n [style.width.%]=\"status.percentage\"\r\n [style.background-color]=\"status.color\"\r\n ></div>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { Subject, takeUntil, debounceTime, distinctUntilChanged } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'document-search',\r\n templateUrl: './document-search.component.html',\r\n styleUrls: ['./document-search.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentSearchComponent implements OnInit, OnDestroy {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Output() onActionClick = new EventEmitter<void>();\r\n \r\n searchTerm: string = SHARED.EMPTY;\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(private documentHelperService: DocumentHelperService) {}\r\n\r\n ngOnInit(): void {\r\n this.setupSearchSubscription();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n /**\r\n * Sets up the search input subscription with debouncing\r\n */\r\n private setupSearchSubscription(): void {\r\n const searchSubject = new Subject<string>();\r\n searchSubject.pipe(\r\n takeUntil(this.destroy$),\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n ).subscribe(searchTerm => {\r\n this.onSearchChange(searchTerm);\r\n });\r\n\r\n this.searchSubject = searchSubject;\r\n }\r\n\r\n /**\r\n * Handles search term changes from ngModel\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n onSearchInputChange(searchTerm: string): void {\r\n this.searchSubject.next(searchTerm);\r\n }\r\n\r\n /**\r\n * Handles search term changes\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n private onSearchChange(searchTerm: string): void {\r\n const normalizedSearchTerm = searchTerm?.trim() || null;\r\n this.documentHelperService.setSearchKey(normalizedSearchTerm);\r\n }\r\n\r\n /**\r\n * Clears the search input\r\n */\r\n onClearSearch(): void {\r\n this.searchTerm = SHARED.EMPTY;\r\n this.documentHelperService.setSearchKey(null);\r\n }\r\n\r\n private searchSubject = new Subject<string>();\r\n} ","<div class=\"search-container\">\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"pi pi-search search-icon\"></i>\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n \r\n <button \r\n type=\"button\"\r\n class=\"action-button\"\r\n (click)=\"onActionClick.emit()\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n >\r\n Actions\r\n </button>\r\n</div> ","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n@Component({\r\n selector: 'lib-common-sidebar',\r\n templateUrl: './common-sidebar.component.html',\r\n styleUrls: ['./common-sidebar.component.scss'],\r\n standalone: false\r\n})\r\nexport class CommonSidebarComponent {\r\n @Input() visible: boolean = false;\r\n @Input() position: 'left' | 'right' = 'right';\r\n @Input() width: string = SHARED.WIDTH;\r\n @Input() title: string = SHARED.EMPTY;\r\n @Input() showCloseButton: boolean = true;\r\n @Input() modal: boolean = true;\r\n @Input() dismissible: boolean = true;\r\n @Input() closeOnEscape: boolean = true;\r\n @Input() baseZIndex: number = SHARED.BASEZINDEX;\r\n @Input() autoZIndex: boolean = true;\r\n @Input() styleClass: string = SHARED.EMPTY;\r\n @Input() appendTo: string = 'body';\r\n @Input() blockScroll: boolean = true;\r\n @Input() closeIcon: string = SHARED.CLOSE_ICON;\r\n @Input() showSaveButton: boolean = false;\r\n @Input() saveButtonText: string = SHARED.SAVE;\r\n @Input() saveButtonDisabled: boolean = false;\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n @Output() onShow = new EventEmitter<void>();\r\n @Output() onHide = new EventEmitter<void>();\r\n @Output() onSave = new EventEmitter<void>();\r\n\r\n /**\r\n * Opens the sidebar\r\n */\r\n open(): void {\r\n this.visible = true;\r\n this.visibleChange.emit(this.visible);\r\n this.onShow.emit();\r\n }\r\n\r\n /**\r\n * Closes the sidebar\r\n */\r\n close(): void {\r\n this.visible = false;\r\n this.visibleChange.emit(this.visible);\r\n this.onHide.emit();\r\n }\r\n\r\n /**\r\n * Toggles the sidebar visibility\r\n */\r\n toggle(): void {\r\n this.visible = !this.visible;\r\n this.visibleChange.emit(this.visible);\r\n if (this.visible) {\r\n this.onShow.emit();\r\n } else {\r\n this.onHide.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the close button click\r\n */\r\n onCloseClick(): void {\r\n this.close();\r\n }\r\n\r\n /**\r\n * Handles the mask click (when dismissible is true)\r\n */\r\n onMaskClick(): void {\r\n if (this.dismissible) {\r\n this.close();\r\n }\r\n }\r\n}\r\n","<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [modal]=\"modal\"\r\n [dismissible]=\"dismissible\"\r\n [closeOnEscape]=\"closeOnEscape\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [styleClass]=\"styleClass\"\r\n [appendTo]=\"appendTo\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onHide.emit()\"\r\n \r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n <div class=\"header-actions\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <!-- Content projection slot -->\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n","import { Component, Input, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport {SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentUploadComponent } from '../document-upload/document-upload.component';\r\n\r\n/**\r\n * The `FolderContainerComponent` is responsible for rendering a container \r\n * that displays a list of documents and associated folder panel data.\r\n * This component utilizes the `FOLDERPANEL` constant for folder panel data\r\n * and accepts a document list input of type `DocumentModel`.\r\n */\r\n@Component({\r\n selector: 'lib-folder-container',\r\n standalone: false,\r\n templateUrl: './folder-container.component.html',\r\n styleUrl: './folder-container.component.scss',\r\n animations: [\r\n trigger('slideInOut', [\r\n state('visible', style({\r\n height: '*',\r\n opacity: 1,\r\n transform: 'translateY(0)',\r\n overflow: 'hidden',\r\n marginBottom: '1rem',\r\n visibility: 'visible'\r\n })),\r\n state('hidden', style({\r\n height: '0px',\r\n opacity: 0,\r\n transform: 'translateY(-20px)',\r\n overflow: 'hidden',\r\n marginBottom: '0px',\r\n visibility: 'hidden'\r\n })),\r\n transition('visible => hidden', [\r\n animate('250ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ]),\r\n transition('hidden => visible', [\r\n animate('300ms cubic-bezier(0.0, 0.0, 0.2, 1)')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class FolderContainerComponent implements OnInit {\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() documentList?: DocumentModel[];\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() folderList: FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The context ID for the folder container.\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The list of users passed as input to the component.\r\n * @type {UserListModel[]}\r\n */\r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The status data passed as input to the component.\r\n * @type {StatusDataModel[]}\r\n */\r\n @Input() statusData: StatusDataModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The document categories passed as input to the component.\r\n * @type {DocumentCategory[]}\r\n */\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Flag to control user list visibility\r\n */\r\n showUserList: boolean = true;\r\n \r\n /**\r\n * Animation state for user list visibility\r\n */\r\n userListAnimationState: string = SHARED.VISIBLE;\r\n\r\n /**\r\n * Controls the visibility of the document upload sidebar\r\n */\r\n isDocumentUploadSidebarOpen: boolean = false;\r\n\r\n /**\r\n * Reference to the document upload component\r\n */\r\n @ViewChild(DocumentUploadComponent) documentUploadComponent!: DocumentUploadComponent;\r\n \r\n /**\r\n * Tracks whether the save button should be disabled\r\n */\r\n isSaveButtonDisabled: boolean = false;\r\n \r\n constructor(private documentQuery: DocumentQuery) {}\r\n\r\n ngOnInit(): void {\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n this.showUserList = show;\r\n this.userListAnimationState = show ? SHARED.VISIBLE : SHARED.HIDDEN;\r\n });\r\n }\r\n\r\n /**\r\n * Called when the view is initialized to set up the save button state\r\n */\r\n ngAfterViewInit(): void {\r\n this.updateSaveButtonState();\r\n }\r\n\r\n /**\r\n * Updates the save button disabled state based on the document upload component\r\n */\r\n private updateSaveButtonState(): void {\r\n if (this.documentUploadComponent) {\r\n this.isSaveButtonDisabled = this.documentUploadComponent.getSaveButtonDisabled();\r\n }\r\n }\r\n\r\n /**\r\n * Opens the document upload sidebar\r\n */\r\n openDocumentUploadSidebar(): void {\r\n this.isDocumentUploadSidebarOpen = true;\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar hide event\r\n */\r\n onDocumentUploadSidebarHide(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n }\r\n\r\n /**\r\n * Handles the document upload save event\r\n */\r\n onDocumentUploadSave(): void {\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.saveDocumentUpload();\r\n this.updateSaveButtonState();\r\n }\r\n }\r\n\r\n \r\n}\r\n","\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list>\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-common-sidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [modal]=\"true\"\r\n [dismissible]=\"true\"\r\n [closeOnEscape]=\"true\"\r\n [blockScroll]=\"true\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n>\r\n <lib-document-upload [contextId]=\"contextId\"></lib-document-upload>\r\n</lib-common-sidebar>","\r\n/**\r\n * Storing all permission properties.\r\n * @export\r\n * @class PERMISSIONS\r\n * @typedef {PERMISSIONS}\r\n */\r\nexport class PERMISSIONS{\r\n \r\n/**\r\n * Access permission.\r\n * @static\r\n * @type {string}\r\n */\r\nstatic DOCUMENT_POST = 'Documents-POST'\r\nstatic DOCUMENT_DELETE = 'documents-deleteDocumentByDocumentId'\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { SHARED } from '../constant/SHARED';\r\n\r\n/**\r\n * Service for managing user session details.\r\n * @class SessionService\r\n * @typedef {SessionService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n\r\n /**\r\n * Creates an instance of SessionService.\r\n * @param {Router} router - Angular Router for navigation.\r\n */\r\n constructor(public router: Router) {}\r\n\r\n /**\r\n * Retrieves the current user's role from local storage.\r\n * @returns {string | null} The user's role, or null if not found.\r\n */\r\n getUserRole(): string | null {\r\n return localStorage.getItem('role');\r\n }\r\n\r\n /**\r\n * Stores the user session data in local storage.\r\n * @param {any} data - The session data to store.\r\n */\r\n setUserSession(data: any): void {\r\n localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));\r\n }\r\n\r\n /**\r\n * Retrieves the stored user session data.\r\n * @returns {any | null} The parsed session data, or null if not found.\r\n */\r\n getUserSession(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData) : null;\r\n }\r\n\r\n /**\r\n * Retrieves the user's permissions from the stored session data.\r\n * @returns {any | null} The user's permissions, or null if not found.\r\n */\r\n getUserPermissions(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData).permissions : null;\r\n }\r\n\r\n /**\r\n * Retrieves the session ID from the stored session data.\r\n * @returns {any | null} The session ID, or null if not found.\r\n */\r\n getSessionID(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n console.log(sessionData);\r\n if (sessionData) {\r\n const sessionId = JSON.parse(sessionData);\r\n console.log(sessionId);\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Clears all stored session data from local storage.\r\n */\r\n clearSession(): void {\r\n localStorage.clear();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentListResponse, DocumentListItem } from '../models/document-list-response.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PERMISSIONS } from '../../../Shared/constant/PERMISSIONS';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentTableBuilderService {\r\n\r\n constructor(private sessionService: SessionService) { }\r\n\r\n /**\r\n * Builds a single table from document list items\r\n * @param documents Array of document list items\r\n * @returns TableData object\r\n */\r\n buildDocumentTable(documents: DocumentListItem[]): TableData {\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n const hasDeletePermission = userPermissionNames.includes(PERMISSIONS.DOCUMENT_DELETE);\r\n const columns = SHARED.DOCUMENT_TABLE_COLUMNS.filter(col => {\r\n // Always include non-action columns\r\n if (col.type !== SHARED.ACTIONS) {\r\n return true;\r\n }\r\n // Only include action column if user has delete permission\r\n return hasDeletePermission;\r\n });\r\n\r\n return {\r\n columns: columns,\r\n data: documents\r\n };\r\n }\r\n\r\n /**\r\n * Gets completion count for a category\r\n * @param category Document category\r\n * @returns Completion string (e.g., \"2/4\")\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n const total = category.list.length;\r\n const completed = category.list.filter(doc => \r\n doc.status.toLowerCase() === SHARED.APPROVED || \r\n doc.status.toLowerCase() === SHARED.UPLOADED\r\n ).length;\r\n return `${completed}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets pending document count for a category\r\n * @param category Document category\r\n * @returns Number of pending documents\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return category.totalDocs - category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Gets approved document count for a category\r\n * @param category Document category\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Transforms document model to document list item\r\n * @param documents Array of DocumentModel\r\n * @returns Array of DocumentListItem\r\n */\r\n transformDocumentModelToListItem(documents: any[]): DocumentListItem[] {\r\n return documents.map(doc => ({\r\n _id: doc._id || SHARED.EMPTY,\r\n fileName: doc.fileName || SHARED.EMPTY,\r\n docName: doc.docName || doc.documentName || SHARED.EMPTY,\r\n fileSize: doc.fileSize || SHARED.EMPTY,\r\n documentUrl: doc.documentUrl || doc.url || SHARED.EMPTY,\r\n status: doc.status || SHARED.PENDING,\r\n uploadedOn: doc.uploadedOn || doc.uploadDate || SHARED.EMPTY,\r\n ownerName: doc.ownerName || doc.applicantName || SHARED.EMPTY,\r\n contentType: doc.contentType || SHARED.EMPTY,\r\n isUploaded: doc.isUploaded || false\r\n }));\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { DocumentUploadService } from './document-upload.service';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentTableBuilderService } from './document-table-builder.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem, DocumentListResponse } from '../models/document-list-response.model';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { Message } from 'primeng/api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentListService {\r\n\r\n constructor(\r\n private documentUploadService: DocumentUploadService,\r\n private documentHttpService: DocumentHttpService,\r\n private documentQuery: DocumentQuery,\r\n private documentStore: DocumentStore,\r\n private documentTableBuilder: DocumentTableBuilderService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n\r\n /**\r\n * Handle file upload click event\r\n */\r\n handleFileUploadClick(): void {\r\n this.documentStore.setMessage(SHARED.EMPTY_ARRAY);\r\n }\r\n\r\n /**\r\n * Handle save click to update document name\r\n */\r\n handleSaveClick(fileName: string, selectedDocument: DocumentListItem): Observable<any> {\r\n const payload = { fileName };\r\n return this.documentHttpService.updateDocumentName(selectedDocument._id, payload);\r\n }\r\n\r\n\r\n /**\r\n * Get completion count for a category\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n return this.documentTableBuilder.getCompletionCount(category);\r\n }\r\n\r\n /**\r\n * Get pending document count for a category\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getPendingDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Get approved document count for a category\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getApprovedDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Build document categories from API response\r\n */\r\n buildDocumentCategories(documentListResponse: DocumentListResponse[] | null): {\r\n documentCategories: DocumentListResponse[];\r\n categoryTables: TableData[];\r\n categoryCompletionCounts: string[];\r\n } {\r\n if (!documentListResponse) {\r\n return {\r\n documentCategories: SHARED.EMPTY_ARRAY,\r\n categoryTables: SHARED.EMPTY_ARRAY,\r\n categoryCompletionCounts: SHARED.EMPTY_ARRAY\r\n };\r\n }\r\n\r\n // Handle empty response - create a default category to show \"No records found\"\r\n if (documentListResponse.length === 0) {\r\n const defaultCategory = {\r\n label: SHARED.EMPTY,\r\n categoryDescription: SHARED.NO_DOCUMENTS_FOUND,\r\n list: SHARED.EMPTY_ARRAY,\r\n totalDocs: 0,\r\n acceptedDocs: 0,\r\n completed: '0/0'\r\n };\r\n \r\n return {\r\n documentCategories: [defaultCategory],\r\n categoryTables: [this.documentTableBuilder.buildDocumentTable([])],\r\n categoryCompletionCounts: ['0/0']\r\n };\r\n }\r\n\r\n const documentCategories = [...documentListResponse];\r\n const categoryTables = documentListResponse.map(category => \r\n this.documentTableBuilder.buildDocumentTable(category.list)\r\n );\r\n const categoryCompletionCounts = documentListResponse.map(category => \r\n this.getCompletionCount(category)\r\n );\r\n\r\n return {\r\n documentCategories,\r\n categoryTables,\r\n categoryCompletionCounts\r\n };\r\n }\r\n\r\n /**\r\n * Handle table row click\r\n */\r\n handleTableRowClick(rowData: any): DocumentListItem {\r\n return rowData;\r\n }\r\n\r\n /**\r\n * Handle delete action\r\n */\r\n handleDeleteAction(rowData: any, contextId: string): Observable<any> {\r\n if (!rowData._id || !contextId) {\r\n return throwError(() => new Error('Missing required parameters for delete'));\r\n }\r\n\r\n return this.documentHttpService.deleteDocument(rowData._id, contextId);\r\n }\r\n\r\n /**\r\n * Refresh document list for new context\r\n */\r\n refreshDocumentListForNewContext(contextId: string): void {\r\n if (contextId && contextId !== SHARED.EMPTY) {\r\n // Clear current document list response\r\n this.documentStore.setDocumentListResponse(null);\r\n \r\n // Refresh documents for the new context\r\n this.documentHelperService.refreshDocumentsWithoutFilters(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Refresh document list after status update\r\n */\r\n refreshDocumentList(contextId: string): void {\r\n if (contextId) {\r\n this.documentHelperService.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Setup subscription to document list response\r\n */\r\n setupDocumentListSubscription(): Observable<DocumentListResponse[] | null> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n this.documentHelperService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n} ","import { Directive, Input, ElementRef, Renderer2, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n/**\r\n * Directive to conditionally show or hide elements based on user permissions.\r\n * @class HasPermissionDirective\r\n * @typedef {HasPermissionDirective}\r\n */\r\n@Directive({\r\n selector: '[permission]',\r\n standalone: false\r\n})\r\nexport class HasPermissionDirective implements OnChanges {\r\n \r\n /**\r\n * The required permission(s) to display the element.\r\n * Accepts a single string or an array of strings.\r\n * @type {string | string[]}\r\n */\r\n @Input() permission?: string | string[];\r\n\r\n /**\r\n * Creates an instance of HasPermissionDirective.\r\n * @param {ElementRef} el - Reference to the host element.\r\n * @param {Renderer2} renderer - Angular Renderer for DOM manipulation.\r\n * @param {SessionService} sessionService - Service to retrieve user permissions.\r\n */\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n public sessionService: SessionService\r\n ) {}\r\n\r\n /**\r\n * Lifecycle hook that is called when input properties change.\r\n * @param {SimpleChanges} changes - The changes in input properties.\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['permission']) {\r\n this.checkPermission();\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the user has the required permission(s).\r\n * Hides the element if the permission is not found.\r\n */\r\n private checkPermission() {\r\n // If no permission is required (empty string, null, or undefined), show the element\r\n if (!this.permission || this.permission === '' || (Array.isArray(this.permission) && this.permission.length === 0)) {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n return;\r\n }\r\n\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n\r\n const requiredPermissions = Array.isArray(this.permission)\r\n ? this.permission\r\n : [this.permission];\r\n\r\n const hasPermission = requiredPermissions.some(permission =>\r\n userPermissionNames.includes(permission)\r\n );\r\n\r\n if (!hasPermission) {\r\n this.renderer.setStyle(this.el.nativeElement, 'display', 'none');\r\n } else {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n }\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SHARED } from '../../constant/SHARED';\r\nimport { ProcessedRowData, TableData } from './table-primary.model';\r\n\r\n@Component({\r\n selector: 'lib-table-primary',\r\n standalone: false,\r\n templateUrl: './table-primary.component.html',\r\n styleUrl: './table-primary.component.scss'\r\n})\r\nexport class TablePrimaryComponent implements OnChanges {\r\n @Input() tableData: TableData = { columns: [], data: [] };\r\n @Input() showHeader: boolean = true;\r\n @Input() tableStyle: any = { 'min-width': '100%' };\r\n @Output() rowClick = new EventEmitter<any>();\r\n @Output() deleteAction = new EventEmitter<any>();\r\n\r\n processedData: ProcessedRowData[] = [];\r\n \r\n // Expose SHARED constants for template use\r\n readonly SHARED = SHARED;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['tableData'] && this.tableData) {\r\n this.processTableData();\r\n }\r\n }\r\n\r\n private processTableData(): void {\r\n this.processedData = this.tableData.data.map(rowData => {\r\n const processedRow: ProcessedRowData = { ...rowData };\r\n if (rowData.fileName) {\r\n processedRow._fileExtension = this.getFileExtension(rowData.fileName);\r\n processedRow._isPdfFile = processedRow._fileExtension === SHARED.PDF;\r\n processedRow._isImageFile = processedRow._fileExtension === SHARED.JPG || processedRow._fileExtension === SHARED.PNG;\r\n processedRow._isExcelFile = processedRow._fileExtension === SHARED.XLSX;\r\n processedRow._isOtherFile = !processedRow._isPdfFile && !processedRow._isImageFile && !processedRow._isExcelFile;\r\n }\r\n\r\n this.tableData.columns.forEach(col => {\r\n if (col.type === SHARED.STATUS_PARAM && rowData[col.field]) {\r\n const status = rowData[col.field];\r\n processedRow._statusClass = this.getStatusClass(status);\r\n processedRow._statusIcon = this.getStatusIcon(status);\r\n }\r\n });\r\n\r\n return processedRow;\r\n });\r\n }\r\n\r\n getStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.STATUS_APPROVED_CLASS;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.STATUS_ALERT_CLASS;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.STATUS_UPLOADED_CLASS;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.STATUS_REVIEWING_CLASS;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.STATUS_REJECTED_CLASS;\r\n default:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n }\r\n }\r\n\r\n getStatusIcon(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.ICON_CLOCK;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.ICON_CHECK;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.ICON_EXCLAMATION_TRIANGLE;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.ICON_CLOUD_UPLOAD;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.ICON_EYE;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.ICON_TIMES;\r\n default:\r\n return SHARED.ICON_CLOCK;\r\n }\r\n }\r\n\r\n getFileExtension(fileName: string): string {\r\n return fileName.split(SHARED.DOT).pop()?.toUpperCase() || SHARED.PDF;\r\n }\r\n\r\n onActionClick(event: Event, rowData: any): void {\r\n event.stopPropagation();\r\n this.deleteAction.emit(rowData);\r\n }\r\n\r\n onRowClick(rowData: any): void {\r\n this.rowClick.emit(rowData);\r\n }\r\n}\r\n","<div class=\"card\">\r\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\r\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\r\n <tr>\r\n <th *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n {{ col.header }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr (click)=\"onRowClick(rowData)\" class=\"clickable-row\">\r\n <td *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n <!-- Document Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_DOCUMENT\" class=\"document-cell\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"SHARED.ICON_FILE_PDF\" *ngIf=\"rowData._isPdfFile\"></i>\r\n <i [class]=\"SHARED.ICON_IMAGE\" *ngIf=\"rowData._isImageFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE_EXCEL\" *ngIf=\"rowData._isExcelFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE\" *ngIf=\"rowData._isOtherFile\"></i>\r\n </div>\r\n <div class=\"document-details\">\r\n <div class=\"document-name\">{{ rowData.docName }}</div>\r\n <div class=\"file-info\">{{ rowData.fileName }} - {{ rowData.fileSize }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Status Cell -->\r\n \r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_STATUS\" class=\"status-cell\">\r\n <span class=\"status-pill\" [ngClass]=\"rowData._statusClass\">\r\n <i [class]=\"rowData._statusIcon\"></i>\r\n {{ rowData[col.field] }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_ACTIONS\" class=\"actions-cell\">\r\n @if(rowData.isUploaded){\r\n <button pButton pRipple type=\"button\" [icon]=\"SHARED.ICON_DELETE\" \r\n class=\"p-button-text p-button-rounded\" \r\n [permission]=\"'documents-deleteDocumentByDocumentId'\"\r\n (click)=\"onActionClick($event, rowData)\">\r\n </button>\r\n } \r\n </div>\r\n\r\n <!-- Default Text Cell -->\r\n <div *ngIf=\"!col.type || col.type === SHARED.CELL_TYPE_TEXT\" class=\"text-cell\">\r\n {{ rowData[col.field] }}\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- No Records Template -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"tableData.columns.length\" class=\"no-records-cell\">\r\n <div class=\"no-records-content\">\r\n <i class=\"pi pi-inbox\" style=\"font-size: 2rem; color: #6c757d;\"></i>\r\n <p class=\"no-records-text\">No records found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentAction } from './document-actions.service';\r\nimport { DocumentAlertList, SHARED, SUPPORTED_IMAGE_TYPES } from '../../../Shared/constant/SHARED';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\n\r\nexport interface DocumentViewerState {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentViewerService {\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) {}\r\n\r\n /**\r\n * Gets the current document viewer state as an observable\r\n */\r\n get state$(): Observable<DocumentViewerState> {\r\n return this.documentQuery.selectDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state synchronously\r\n */\r\n getCurrentState(): DocumentViewerState {\r\n return this.documentQuery.getDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Updates the selected document and recalculates all computed properties\r\n * @param document The selected document\r\n */\r\n updateSelectedDocument(document: DocumentListItem): void {\r\n this.documentService.set(document);\r\n const alertData = this.getAlertData(document);\r\n const documentStatus = this.calculateDocumentStatus(document);\r\n const documentIsUploaded = this.calculateIsDocumentUploaded(document);\r\n\r\n this.documentStore.updateDocumentViewerState(\r\n document,\r\n undefined, // Keep existing history\r\n undefined, // Keep existing showHistory\r\n undefined, // Keep existing loading\r\n documentStatus,\r\n documentIsUploaded,\r\n alertData\r\n );\r\n\r\n this.loadDocumentHistory(document._id);\r\n }\r\n\r\n /**\r\n * Loads document history data\r\n * @param documentId The document ID\r\n */\r\n loadDocumentHistory(documentId: string): void {\r\n if (documentId) {\r\n this.documentHttpService.getDocumentHistory(documentId)\r\n .subscribe({\r\n next: (history) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined, // Keep existing document\r\n history,\r\n true // Show history\r\n );\r\n },\r\n error: (error) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined, // Keep existing document\r\n undefined, // Keep existing history\r\n false // Hide history\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image\r\n * @param contentType The MIME type of the content\r\n * @returns True if the content type is an image\r\n */\r\n isImage(contentType?: string): boolean {\r\n return contentType ? SUPPORTED_IMAGE_TYPES.includes(contentType) : false;\r\n }\r\n\r\n /**\r\n * Handles document actions and updates status\r\n * @param action The action performed\r\n * @param contextId The context ID for API calls\r\n */\r\n handleDocumentAction(action: DocumentAction, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n switch (action.type) {\r\n case SHARED.ACCEPT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_APPROVED, action.note || SHARED.DOCUMENT_ACCEPTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.REJECT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_REJECTED, action.note || SHARED.DOCUMENT_REJECTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.DELETE_ACTION:\r\n this.deleteDocument(currentState.selectedDocument._id, contextId);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the document status via API call and refreshes all related data\r\n * @param status The new status (Approved, Rejected)\r\n * @param description The status update description\r\n * @param contextId The context ID for API calls\r\n */\r\n private updateDocumentStatus(status: string, description: string, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.updateDocumentStatus(\r\n currentState.selectedDocument._id,\r\n status,\r\n description\r\n ).subscribe({\r\n next: (response) => {\r\n if (currentState.selectedDocument && response.status) {\r\n const normalizedStatus = response.normalizedStatus || response.status.toLowerCase();\r\n const updatedDocument = {\r\n ...currentState.selectedDocument,\r\n status: normalizedStatus\r\n };\r\n \r\n this.updateSelectedDocument(updatedDocument);\r\n }\r\n this.refreshAllData(contextId);\r\n },\r\n error: (error) => {\r\n console.error('Error updating document status:', error);\r\n },\r\n complete: () => {\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Deletes a document and refreshes all data while preserving current filters\r\n * @param documentId The ID of the document to delete\r\n * @param contextId The context ID for API calls\r\n */\r\n private deleteDocument(documentId: string, contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for delete operation');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.deleteDocument(documentId, contextId).subscribe({\r\n next: (res:any) => {\r\n if(res){\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n this.documentStore.clearDocumentViewerState();\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Error deleting document:', error);\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refreshes all related data after document status update\r\n * @param contextId The context ID for API calls\r\n */\r\n private refreshAllData(contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for data refresh');\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (currentState.selectedDocument?._id) {\r\n this.loadDocumentHistory(currentState.selectedDocument._id);\r\n }\r\n\r\n // Use the same refresh method as other components for consistency\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n\r\n /**\r\n * Gets alert data for the document\r\n * @param document The document\r\n * @returns Alert data\r\n */\r\n private getAlertData(document: DocumentListItem): any {\r\n return DocumentAlertList.find((res: any) => res.status === document?.status);\r\n }\r\n\r\n /**\r\n * Calculates the current status of the document for the actions component\r\n * @param document The document\r\n * @returns The current document status\r\n */\r\n private calculateDocumentStatus(document: DocumentListItem): 'pending' | 'accepted' | 'rejected' {\r\n if (!document) return SHARED.STATUS_PENDING as 'pending';\r\n \r\n // First check statusId from API response if available\r\n if (document.statusId) {\r\n switch (document.statusId.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n \r\n // Fall back to status field mapping\r\n switch (document.status?.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n case SHARED.STATUS_DECLINED:\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n default:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n\r\n /**\r\n * Calculates if the document is uploaded and ready for actions\r\n * @param document The document\r\n * @returns True if document is uploaded\r\n */\r\n private calculateIsDocumentUploaded(document: DocumentListItem): boolean {\r\n if (!document) return false;\r\n \r\n // Check if document has a URL and is not in a pending state\r\n const isPending = document.statusId?.toLowerCase() === SHARED.STATUS_PENDING || \r\n document.status?.toLowerCase() === SHARED.STATUS_PENDING;\r\n \r\n return !!(document.documentUrl && !isPending);\r\n }\r\n} ","/**\r\n * Constants for Document History labels and styling\r\n */\r\nexport const DOCUMENT_HISTORY = {\r\n // Document History Labels\r\n LABELS: {\r\n DOCUMENT_REQUESTED: 'Document Requested',\r\n DOCUMENT_UPLOADED: 'Document Uploaded',\r\n DOCUMENT_REJECTED: 'Document Rejected',\r\n DOCUMENT_ACCEPTED: 'Document Accepted'\r\n },\r\n\r\n // Icon classes for different actions\r\n ICONS: {\r\n DOCUMENT_REQUESTED: 'pi pi-file',\r\n DOCUMENT_UPLOADED: 'pi pi-cloud-upload',\r\n DOCUMENT_REJECTED: 'pi pi-times',\r\n DOCUMENT_ACCEPTED: 'pi pi-check'\r\n },\r\n\r\n // Text color classes - matching the design in the image\r\n TEXT_COLORS: {\r\n DOCUMENT_REQUESTED: 'text-gray-700', // Dark gray for better readability\r\n DOCUMENT_UPLOADED: 'text-green-700', // Dark green for uploaded\r\n DOCUMENT_REJECTED: 'text-red-700', // Dark red for rejected\r\n DOCUMENT_ACCEPTED: 'text-green-700' // Dark green for accepted\r\n },\r\n\r\n // Background color classes - matching the light gray design from image\r\n BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'bg-gray-100', // Light gray like in the image\r\n DOCUMENT_UPLOADED: 'bg-green-50', // Very light green\r\n DOCUMENT_REJECTED: 'bg-red-50', // Very light red\r\n DOCUMENT_ACCEPTED: 'bg-green-50' // Very light green\r\n },\r\n\r\n // Border color classes - subtle borders\r\n BORDER_COLORS: {\r\n DOCUMENT_REQUESTED: 'border-gray-300', // Medium gray border\r\n DOCUMENT_UPLOADED: 'border-green-300', // Light green border\r\n DOCUMENT_REJECTED: 'border-red-300', // Light red border\r\n DOCUMENT_ACCEPTED: 'border-green-300' // Light green border\r\n },\r\n\r\n // Icon background color classes - matching the circular icon design\r\n ICON_BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'icon-bg-blue', // Blue for requested (as shown in image)\r\n DOCUMENT_UPLOADED: 'icon-bg-green', // Green for uploaded\r\n DOCUMENT_REJECTED: 'icon-bg-red', // Red for rejected\r\n DOCUMENT_ACCEPTED: 'icon-bg-green' // Green for accepted\r\n }\r\n}; ","import { Injectable } from '@angular/core';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * Service for handling document history styling logic\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryStyleService {\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Get the appropriate icon class based on the action label\r\n */\r\n getActionIcon(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate color class based on the action label\r\n */\r\n getActionColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate background color class based on the action label\r\n */\r\n getActionBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate border color class based on the action label\r\n */\r\n getActionBorderColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate icon background color class based on the action label\r\n */\r\n getActionIconBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n checkValidContent(section: any): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some((item:any) => \r\n item.label || \r\n item.requestDescription || \r\n item.documentUrl || \r\n item.userName\r\n );\r\n }\r\n\r\n getAccordionClass(section: any): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { DocumentHistoryItem, DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentHistoryStyleService } from './document-history-style.service';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\n\r\n// Extended interface for processed items with computed properties\r\ninterface ProcessedDocumentHistoryItem extends DocumentHistoryItem {\r\n actionIcon: string;\r\n actionColor: string;\r\n actionBgColor: string;\r\n actionBorderColor: string;\r\n actionIconBgColor: string;\r\n}\r\n\r\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\r\n list: ProcessedDocumentHistoryItem[];\r\n accordionClass?: string;\r\n hasValidContent?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryService {\r\n\r\n constructor(\r\n private documentHistoryStyleService: DocumentHistoryStyleService, \r\n private http: HttpClient,\r\n private sessionService: SessionService,\r\n private appConfigService: AppConfigService\r\n ) {}\r\n\r\n /**\r\n * Get the CSS class for accordion styling based on the section's label\r\n */\r\n private getAccordionClass(section: ProcessedDocumentHistorySection): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED; // Default class\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n private checkValidContent(section: ProcessedDocumentHistorySection): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some(item => \r\n item.requestDescription !== SHARED.EMPTY && \r\n item.documentUrl !== SHARED.EMPTY && \r\n (item.userName !== SHARED.EMPTY && item.userName !== SHARED.UNKNOWN_USER)\r\n );\r\n }\r\n\r\n /**\r\n * Process history data to add computed properties\r\n */\r\n processHistoryData(historyData: DocumentHistorySection[]): ProcessedDocumentHistorySection[] {\r\n if (!historyData) {\r\n return SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n return historyData.map(section => {\r\n const processedSection: ProcessedDocumentHistorySection = {\r\n ...section,\r\n list: section.list.map(item => ({\r\n ...item,\r\n dateTime: item.dateTime || ERRORS.NO_VALUE_FOUND,\r\n actionIcon: this.documentHistoryStyleService.getActionIcon(item.label),\r\n actionColor: this.documentHistoryStyleService.getActionColor(item.label),\r\n actionBgColor: this.documentHistoryStyleService.getActionBgColor(item.label),\r\n actionBorderColor: this.documentHistoryStyleService.getActionBorderColor(item.label),\r\n actionIconBgColor: this.documentHistoryStyleService.getActionIconBgColor(item.label)\r\n }))\r\n };\r\n\r\n // Add accordion class based on the first item's label\r\n processedSection.accordionClass = this.getAccordionClass(processedSection);\r\n \r\n // Add hasValidContent property\r\n processedSection.hasValidContent = this.checkValidContent(processedSection);\r\n\r\n return processedSection;\r\n });\r\n }\r\n\r\n /**\r\n * Downloads a document when clicked\r\n * @param documentUrl - The URL of the document to download\r\n * @param docName - The name of the document\r\n */\r\n downloadDocument(documentUrl: string, docName?: string): void {\r\n if (!documentUrl) {\r\n console.warn(ERRORS.NO_DOCUMENT_URL);\r\n return;\r\n }\r\n\r\n // Ensure the URL is properly formatted\r\n const fullUrl = this.getFullUrl(documentUrl);\r\n console.log('Downloading document:', { originalUrl: documentUrl, fullUrl, docName });\r\n \r\n // Let the HTTP interceptor handle authentication - no need to add headers manually\r\n const httpOptions = { \r\n responseType: 'blob' as const\r\n };\r\n console.log('HTTP options being sent (interceptor will add auth):', httpOptions);\r\n \r\n this.http.get(fullUrl, httpOptions).subscribe({\r\n next: (blob: Blob) => {\r\n console.log('Download successful, blob size:', blob.size);\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = blobUrl;\r\n a.download = docName ?? SHARED.DOCUMENT;\r\n a.style.display = SHARED.NONE;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(blobUrl);\r\n },\r\n error: (err) => {\r\n console.error('Download failed:', err);\r\n console.error(ERRORS.DOWNLOAD_FAIL, err);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Get the full URL for the document, handling relative URLs\r\n * @private\r\n * @param documentUrl - The document URL (can be relative or absolute)\r\n * @returns {string} The full URL\r\n */\r\n private getFullUrl(documentUrl: string): string {\r\n // If it's already an absolute URL, return as is\r\n if (documentUrl.startsWith('http://') || documentUrl.startsWith('https://')) {\r\n return documentUrl;\r\n }\r\n \r\n // If it's a relative URL, try to get the API base URL\r\n try {\r\n const apiBaseUrl = this.appConfigService.apiBaseUrl;\r\n if (apiBaseUrl) {\r\n // Remove leading slash from documentUrl if present\r\n const cleanUrl = documentUrl.startsWith('/') ? documentUrl.substring(1) : documentUrl;\r\n return `${apiBaseUrl}/${cleanUrl}`;\r\n }\r\n } catch (error) {\r\n console.warn('Could not get API base URL, using original URL:', error);\r\n }\r\n \r\n // Fallback to original URL\r\n return documentUrl;\r\n }\r\n\r\n /**\r\n * Debug method to help identify issues when the library is used in the main project\r\n * @public\r\n */\r\n debugEnvironment(): void {\r\n console.log('=== Document History Service Environment Debug ===');\r\n \r\n // Check session data\r\n const sessionData = this.sessionService.getUserSession();\r\n console.log('Session data:', sessionData);\r\n \r\n // Check localStorage for common token patterns\r\n const localStorageKeys = ['token', 'accessToken', 'authToken', 'jwt', 'userData'];\r\n const localStorageData: any = {};\r\n localStorageKeys.forEach(key => {\r\n const value = localStorage.getItem(key);\r\n if (value) {\r\n try {\r\n localStorageData[key] = JSON.parse(value);\r\n } catch {\r\n localStorageData[key] = value;\r\n }\r\n }\r\n });\r\n console.log('LocalStorage data:', localStorageData);\r\n \r\n // Check API configuration\r\n try {\r\n const apiBaseUrl = this.appConfigService.apiBaseUrl;\r\n console.log('API Base URL:', apiBaseUrl);\r\n } catch (error) {\r\n console.log('API Base URL error:', error);\r\n }\r\n \r\n // Check if we're in a browser environment\r\n console.log('User Agent:', navigator.userAgent);\r\n console.log('Window location:', window.location.href);\r\n \r\n console.log('=== End Debug ===');\r\n }\r\n} ","import { Component, Input } from '@angular/core';\nimport { DocumentHistorySection } from '../../models/document-history.model';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { DocumentHistoryService } from '../../services/document-history.service';\n\n// Extended interface for processed items with computed properties\ninterface ProcessedDocumentHistoryItem {\n label: string;\n dateTime: string;\n requestDescription: string;\n userName: string;\n userRole: string;\n documentUrl?: string;\n docName?: string;\n actionIcon: string;\n actionColor: string;\n actionBgColor: string;\n actionBorderColor: string;\n actionIconBgColor: string;\n}\n\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\n list: ProcessedDocumentHistoryItem[];\n accordionClass?: string;\n hasValidContent?: boolean;\n}\n\n/**\n * Component for displaying document history in a timeline format.\n */\n@Component({\n selector: 'document-history',\n standalone: false,\n templateUrl: './document-history.component.html',\n styleUrls: ['./document-history.component.scss']\n})\nexport class DocumentHistoryComponent {\n \n /**\n * Input data for document history sections\n */\n @Input() historyData: DocumentHistorySection[] = SHARED.EMPTY_ARRAY;\n \n /**\n * Whether to show the history component\n */\n @Input() showHistory: boolean = false;\n\n /**\n * Active accordion index for controlling expand/collapse\n */\n activeAccordionIndex: number = 0;\n\n /**\n * Whether the accordion is expanded\n */\n isAccordionExpanded: boolean = true;\n\n constructor(private documentHistoryService: DocumentHistoryService) {}\n\n /**\n * Handle accordion open event\n */\n onAccordionOpen(): void {\n this.isAccordionExpanded = true;\n this.activeAccordionIndex = 0;\n }\n\n /**\n * Handle accordion close event\n */\n onAccordionClose(): void {\n this.isAccordionExpanded = false;\n this.activeAccordionIndex = -1;\n }\n\n /**\n * Toggle accordion state\n */\n toggleAccordion(): void {\n if (this.isAccordionExpanded) {\n this.onAccordionClose();\n } else {\n this.onAccordionOpen();\n }\n }\n\n /**\n * Process history data to add computed properties\n */\n get processedHistoryData(): ProcessedDocumentHistorySection[] {\n return this.documentHistoryService.processHistoryData(this.historyData);\n }\n\n /**\n * Downloads a document when clicked\n * @param documentUrl - The URL of the document to download\n * @param docName - The name of the document\n */\n downloadDocument(documentUrl: string, docName?: string): void {\n this.documentHistoryService.downloadDocument(documentUrl, docName);\n }\n} ","<div class=\"document-history-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <div class=\"history-sections\">\r\n <div class=\"history-section\" *ngFor=\"let section of processedHistoryData\">\r\n <div *ngIf=\"section.header === 'Initial Request' && section.hasValidContent\" \r\n class=\"initial-request-section\"\r\n [ngClass]=\"section.accordionClass\">\r\n <p-accordion [activeIndex]=\"activeAccordionIndex\" \r\n (onOpen)=\"onAccordionOpen()\" \r\n (onClose)=\"onAccordionClose()\">\r\n <p-accordionTab [header]=\"section.header\">\r\n <div class=\"history-timeline\" *ngIf=\"section.hasValidContent\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription ?? 'No Request' }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button class=\"action-btn download-btn\" \r\n title=\"Download\"\r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\">\r\n <i class=\"pi pi-download\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Show message if no valid content -->\r\n <div class=\"no-content-message\" *ngIf=\"!section.hasValidContent\">\r\n <p>No initial request details available.</p>\r\n </div>\r\n </p-accordionTab>\r\n </p-accordion>\r\n </div>\r\n \r\n <!-- Document History as regular timeline -->\r\n <div *ngIf=\"section.header !== 'Initial Request'\" class=\"document-history-section\">\r\n <div class=\"section-header\" *ngIf=\"section.header\">\r\n <h4 class=\"section-title\">{{ section.header }}</h4>\r\n </div>\r\n \r\n <div class=\"history-timeline\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <!-- Header with icon and timestamp -->\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface DocumentAction {\r\n type: typeof SHARED.REJECT_ACTION | typeof SHARED.ACCEPT_ACTION | typeof SHARED.DELETE_ACTION;\r\n note?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentActionsService {\r\n\r\n /**\r\n * Calculates the card class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the card\r\n */\r\n calculateCardClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-card`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.CARD_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.CARD_REJECTED;\r\n default:\r\n return SHARED.CARD_PENDING;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the reject button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the reject button\r\n */\r\n calculateRejectButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-reject`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_SECONDARY_REJECT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_PRIMARY_REJECT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_REJECT;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the accept button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the accept button\r\n */\r\n calculateAcceptButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-accept`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_PRIMARY_ACCEPT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_SECONDARY_ACCEPT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_ACCEPT;\r\n }\r\n }\r\n\r\n /**\r\n * Creates an accept action\r\n * @param note - The acceptance note\r\n * @returns {DocumentAction} The accept action\r\n */\r\n createAcceptAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.ACCEPT_ACTION as 'accept',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a reject action\r\n * @param note - The rejection note\r\n * @returns {DocumentAction} The reject action\r\n */\r\n createRejectAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.REJECT_ACTION as 'reject',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a delete action\r\n * @returns {DocumentAction} The delete action\r\n */\r\n createDeleteAction(): DocumentAction {\r\n return {\r\n type: SHARED.DELETE_ACTION as 'delete'\r\n };\r\n }\r\n} ","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentActionsService, DocumentAction } from '../../services/document-actions.service';\r\n\r\n@Component({\r\n selector: 'document-actions',\r\n templateUrl: './document-actions.component.html',\r\n styleUrls: ['./document-actions.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentActionsComponent implements OnChanges {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() document?: any;\r\n @Input() documentId?: string;\r\n @Input() currentStatus?: typeof SHARED.STATUS_PENDING | typeof SHARED.STATUS_ACCEPTED | typeof SHARED.STATUS_REJECTED_LOWERCASE;\r\n @Input() isLoading?: boolean = false;\r\n @Input() isUploaded?: boolean = false;\r\n @Input() statusId?: string;\r\n @Output() actionPerformed = new EventEmitter<DocumentAction>();\r\n\r\n showAcceptDialog = false;\r\n showRejectDialog = false;\r\n acceptNote = SHARED.EMPTY;\r\n private _rejectNote = SHARED.EMPTY;\r\n\r\n // Action processing flags\r\n isAccepting = false;\r\n isRejecting = false;\r\n\r\n // Computed properties for template\r\n cardClass: string = SHARED.CARD_PENDING;\r\n rejectButtonClass: string = SHARED.BUTTON_DEFAULT_REJECT;\r\n acceptButtonClass: string = SHARED.BUTTON_DEFAULT_ACCEPT;\r\n isRejectNoteEmpty: boolean = true;\r\n\r\n constructor(private documentActionsService: DocumentActionsService) {}\r\n\r\n get rejectNote(): string {\r\n return this._rejectNote;\r\n }\r\n\r\n set rejectNote(value: string) {\r\n this._rejectNote = value;\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.updateComputedProperties();\r\n \r\n // Reset action flags when isLoading changes to false\r\n if (changes['isLoading'] && !this.isLoading) {\r\n this.resetActionFlags();\r\n }\r\n }\r\n\r\n /**\r\n * Updates computed properties based on currentStatus and statusId\r\n */\r\n private updateComputedProperties(): void {\r\n this.cardClass = this.documentActionsService.calculateCardClass(this.currentStatus, this.statusId);\r\n this.rejectButtonClass = this.documentActionsService.calculateRejectButtonClass(this.currentStatus, this.statusId);\r\n this.acceptButtonClass = this.documentActionsService.calculateAcceptButtonClass(this.currentStatus, this.statusId);\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n /**\r\n * Updates the isRejectNoteEmpty property based on current rejectNote value\r\n */\r\n private updateRejectNoteEmpty(): void {\r\n this.isRejectNoteEmpty = !this.rejectNote || this.rejectNote.trim() === SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Resets the action processing flags\r\n */\r\n private resetActionFlags(): void {\r\n this.isAccepting = false;\r\n this.isRejecting = false;\r\n }\r\n\r\n onAcceptClick(): void {\r\n this.showAcceptDialog = true;\r\n }\r\n\r\n onRejectClick(): void {\r\n this.showRejectDialog = true;\r\n }\r\n\r\n onDeleteClick(): void {\r\n this.actionPerformed.emit(this.documentActionsService.createDeleteAction());\r\n }\r\n\r\n onAcceptConfirm(): void {\r\n this.isAccepting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createAcceptAction(this.acceptNote));\r\n this.acceptNote = SHARED.EMPTY;\r\n this.showAcceptDialog = false;\r\n }\r\n\r\n onRejectConfirm(): void {\r\n this.isRejecting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createRejectAction(this.rejectNote));\r\n this.rejectNote = SHARED.EMPTY;\r\n this.showRejectDialog = false;\r\n }\r\n\r\n onCancel(): void {\r\n this.showAcceptDialog = false;\r\n this.showRejectDialog = false;\r\n this.acceptNote = SHARED.EMPTY;\r\n this.rejectNote = SHARED.EMPTY;\r\n }\r\n\r\n} ","<div class=\"document-actions-container\" >\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <!-- Reject Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn reject-btn\" [ngClass]=\"rejectButtonClass\" (click)=\"onRejectClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? SHARED.BUTTON_LABEL_REJECTED :\r\n SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n\r\n <!-- Accept Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn accept-btn\" [ngClass]=\"acceptButtonClass\" (click)=\"onAcceptClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_ACCEPTED || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT\r\n }}</span>\r\n </button>\r\n\r\n <!-- Delete Button -->\r\n @if(document?.isUploaded){\r\n <button class=\"action-btn delete-btn\" (click)=\"onDeleteClick()\" [disabled]=\"isLoading\"\r\n [permission]=\"'documents-deleteDocumentByDocumentId'\" pTooltip=\"Delete Document\" tooltipPosition=\"top\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Accept Confirmation Dialog -->\r\n<p-dialog [(visible)]=\"showAcceptDialog\" [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"acceptNote\" class=\"note-label\">{{ SHARED.ACCEPT_NOTE_LABEL }}</label>\r\n <textarea id=\"acceptNote\" pInputTextarea [(ngModel)]=\"acceptNote\" [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" class=\"p-button-success\" (click)=\"onAcceptConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<!-- Reject Confirmation Dialog -->\r\n<p-dialog [(visible)]=\"showRejectDialog\" [header]=\"SHARED.REJECT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"rejectNote\" class=\"note-label\">{{ SHARED.REJECT_NOTE_LABEL }}</label>\r\n <textarea id=\"rejectNote\" pInputTextarea [(ngModel)]=\"rejectNote\" [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.REJECT_BUTTON_LABEL\" class=\"p-button-danger\" [disabled]=\"isRejectNoteEmpty\"\r\n (click)=\"onRejectConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { SHARED, SUPPORTED_IMAGE_TYPES } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../../models/document-history.model';\r\nimport { DocumentAction } from '../../services/document-actions.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentViewerService, DocumentViewerState } from '../../services/document-viewer.service';\r\n\r\n/**\r\n * Component for viewing and managing document details.\r\n * @class DocumentViewerComponent\r\n * @typedef {DocumentViewerComponent}\r\n */\r\n@Component({\r\n selector: 'document-viewer',\r\n templateUrl: './document-viewer.component.html',\r\n standalone : false,\r\n styleUrl: './document-viewer.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DocumentViewerComponent implements OnChanges, OnDestroy {\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() selectedDocument?: DocumentListItem; // <-- Made optional to prevent undefined issues\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() documentList?: DocumentListItem[]; // <-- Made optional to prevent undefined issues\r\n /**\r\n * The context ID for API calls\r\n * @type {string}\r\n */\r\n @Input() contextId?: string;\r\n\r\n /**\r\n * Event emitted when document status is updated to refresh the document list\r\n * @type {EventEmitter<void>}\r\n */\r\n @Output() documentStatusUpdated = new EventEmitter<void>();\r\n\r\n /**\r\n * Indicates whether a checkbox is selected.\r\n * @type {boolean}\r\n */\r\n checked: boolean = false;\r\n\r\n /**\r\n * Reference to the dynamic dialog used for displaying additional details.\r\n * @type {(DynamicDialogRef | undefined)}\r\n */\r\n ref: DynamicDialogRef | undefined;\r\n\r\n /**\r\n * Indicates whether the document has been verified.\r\n * @type {boolean}\r\n */\r\n isVerified: boolean = false;\r\n\r\n /**\r\n * Messages for user feedback\r\n * @type {any[]}\r\n */\r\n messages: any[] = [];\r\n\r\n /**\r\n * Current state from the service\r\n * @type {DocumentViewerState}\r\n */\r\n currentState: DocumentViewerState = {\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: SHARED.STATUS_PENDING as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n\r\n /**\r\n * Computed property to determine if the selected document is an image\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentImage(): boolean {\r\n return this.documentViewerService.isImage(this.selectedDocument?.contentType);\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document is a PDF\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentPdf(): boolean {\r\n return this.selectedDocument?.contentType === 'application/pdf';\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document has an unsupported content type\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentUnsupported(): boolean {\r\n return !this.isSelectedDocumentImage && !this.isSelectedDocumentPdf;\r\n }\r\n\r\n /**\r\n * Holds the subscription to manage observable cleanup.\r\n * @private\r\n * @type {Subscription}\r\n */\r\n private subscription: Subscription = new Subscription();\r\n\r\n /**\r\n * Initializes a new instance of the DocumentViewerComponent.\r\n * @param {DocumentHttpService} documentHttpService - Handle the http service.\r\n * @param {DocumentService} documentService - Handle the states.\r\n * @param {DocumentViewerService} documentViewerService - Handle the viewer business logic.\r\n */\r\n constructor(\r\n public documentHttpService : DocumentHttpService, \r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentViewerService: DocumentViewerService,\r\n ) {\r\n // Subscribe to state changes from the service\r\n this.subscription.add(\r\n this.documentViewerService.state$.subscribe(state => {\r\n this.currentState = state;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches the alerts for the selected document.\r\n * @returns {void}\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['selectedDocument'] && this.selectedDocument) {\r\n this.documentViewerService.updateSelectedDocument(this.selectedDocument);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document selection from template\r\n * @param document The selected document\r\n */\r\n handleSelectedDocument(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.documentViewerService.updateSelectedDocument(document);\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image.\r\n * @param {string | undefined} contentType - The MIME type of the content.\r\n * @returns {boolean} `true` if the content type is an image; otherwise, `false`.\r\n */\r\n isImage(contentType?: string): boolean {\r\n return this.documentViewerService.isImage(contentType);\r\n }\r\n\r\n /**\r\n * Handles document actions from the actions component\r\n * @param {DocumentAction} action - The action performed\r\n */\r\n handleDocumentAction(action: DocumentAction): void {\r\n this.documentViewerService.handleDocumentAction(action, this.contextId);\r\n this.documentStatusUpdated.emit();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer-container\">\r\n <div class=\"main-content\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n \r\n <div class=\"content-grid\">\r\n @if(selectedDocument){\r\n <div class=\"document-preview\">\r\n @if(isSelectedDocumentImage){\r\n <div class=\"img-container\">\r\n <img\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n class=\"uploadedImages\"\r\n alt=\"Document Image\"\r\n />\r\n </div>\r\n }@else if(isSelectedDocumentPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n [rotation]=\"0\"\r\n [original-size]=\"false\"\r\n [show-all]=\"true\"\r\n [fit-to-page]=\"false\"\r\n [zoom]=\"1\"\r\n [zoom-scale]=\"'page-width'\"\r\n [stick-to-page]=\"false\"\r\n [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\"\r\n [autoresize]=\"true\"\r\n [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"\r\n ></pdf-viewer>\r\n </div>\r\n }@else if(isSelectedDocumentUnsupported){\r\n <div class=\"incorrect-docType\">\r\n ContentType is incorrect.\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"sidebar\">\r\n <document-actions\r\n [document]=\"selectedDocument\"\r\n [documentId]=\"selectedDocument?._id\"\r\n [currentStatus]=\"currentState.documentStatus\"\r\n [isLoading]=\"currentState.isActionLoading\"\r\n [isUploaded]=\"currentState.documentIsUploaded\"\r\n [statusId]=\"selectedDocument?.statusId\"\r\n (actionPerformed)=\"handleDocumentAction($event)\">\r\n </document-actions>\r\n \r\n <document-history \r\n [historyData]=\"currentState.documentHistory\" \r\n [showHistory]=\"currentState.showDocumentHistory\">\r\n </document-history>\r\n \r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentListItem, DocumentListResponse } from '../../models/document-list-response.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { TableData } from '../../../../Shared/components/table-primary/table-primary.model';\r\nimport { DocumentListService } from '../../services/document-list.service';\r\nimport { Message } from 'primeng/api';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\n\r\n/**\r\n * This component is responsible for displaying and managing a list of documents.\r\n * Provides functionality for file upload, document selection, and dialog management.\r\n * @class DocumentListComponent\r\n */\r\n@Component({\r\n selector: 'lib-document-list',\r\n standalone: false,\r\n templateUrl: './document-list.component.html',\r\n styleUrls: ['./document-list.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentListComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n /**\r\n * Represents the context ID for the document list.\r\n * This value is passed from the parent component.\r\n * @type {string}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The document list response data passed from the parent component.\r\n * @type {DocumentListResponse[] | null}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentListResponse: DocumentListResponse[] | null = null;\r\n\r\n /**\r\n * Subscription to document list response from store\r\n */\r\n private documentListSubscription: Subscription = new Subscription();\r\n\r\n /**\r\n * The currently selected document.\r\n * @type {DocumentModel}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedDocument!: DocumentListItem;\r\n\r\n /**\r\n * Default visibility of the sidebar.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isSidebarVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * Default visibility of the messages.\r\n * @type {Message[]}\r\n * @memberof DocumentListComponent\r\n */\r\n messages: Message[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Default visibility of the dialog.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isdialogVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * The list of documents to display.\r\n * This value is passed from the parent component.\r\n * @type {DocumentModel[]}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentList: DocumentListItem[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Available document types for selection.\r\n * @type {string[]}\r\n * @memberof DocumentListComponent\r\n */\r\n options: any[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The selected option for the document type.\r\n * @type {(string | null)}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedOption: string | null = null;\r\n \r\n /**\r\n * The file name associated with the document.\r\n * It may be undefined until a file is selected or loaded.\r\n * @type {string | undefined}\r\n */\r\n fileName!: string | undefined;\r\n \r\n /**\r\n * Table data for each category\r\n */\r\n categoryTables: TableData[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Document categories from the response\r\n */\r\n documentCategories: DocumentListResponse[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Completion counts for each category\r\n */\r\n categoryCompletionCounts: string[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Getter to format category labels with proper suffix\r\n */\r\n get formattedCategoryLabels(): string[] {\r\n return this.documentCategories.map(category => {\r\n return category.label.endsWith(SHARED.DOCUMENTS) ? category.label : `${category.label} ${SHARED.DOCUMENTS}`;\r\n });\r\n }\r\n\r\n /**\r\n * Creates an instance of DocumentListComponent.\r\n * @class\r\n * @param {DocumentListService} documentListService - The service responsible for document list operations.\r\n */\r\n constructor(\r\n private documentListService: DocumentListService\r\n ) {}\r\n\r\n /**\r\n * Handles changes to input properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.documentListService.refreshDocumentListForNewContext(this.contextId);\r\n }\r\n }\r\n\r\n /** \r\n * Initializes the component by setting up document list subscription.\r\n */\r\n ngOnInit(): void {\r\n this.setupDocumentListSubscription();\r\n }\r\n\r\n /**\r\n * Handles the save click event to update the document's file name.\r\n * This method creates a payload with the updated file name and calls the\r\n * updateDocumentName() method from the documentHttpService. On a successful update,\r\n * it logs a message with the document's ID.\r\n * @returns {void}\r\n */\r\n handleSaveClick(): void {\r\n if (this.fileName && this.selectedDocument) {\r\n this.documentListService.handleSaveClick(this.fileName, this.selectedDocument)\r\n .subscribe((res) => {\r\n console.log(`${SHARED.UPDATE_DOCUMENT_NAME} ${this.selectedDocument._id}`);\r\n });\r\n }\r\n }\r\n\r\n \r\n\r\n /**\r\n * Handles the visibility of the sidebar.\r\n * @param {boolean} isVisible - Indicates whether the sidebar should be visible or not.\r\n * @memberof DocumentListComponent\r\n */\r\n handleOpenSideBar(isVisible: boolean): void {\r\n this.isSidebarVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Builds document categories from the API response\r\n */\r\n buildDocumentCategories(): void {\r\n const result = this.documentListService.buildDocumentCategories(this.documentListResponse);\r\n this.documentCategories = result.documentCategories;\r\n this.categoryTables = result.categoryTables;\r\n this.categoryCompletionCounts = result.categoryCompletionCounts;\r\n }\r\n\r\n /**\r\n * Sets up subscription to document list response from store\r\n */\r\n setupDocumentListSubscription(): void {\r\n this.documentListSubscription.add(\r\n this.documentListService.setupDocumentListSubscription().subscribe({\r\n next: (response: any) => {\r\n this.documentListResponse = response;\r\n this.buildDocumentCategories();\r\n },\r\n error: (error: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Handles table row click event\r\n */\r\n handleTableRowClick(rowData: any): void {\r\n this.isdialogVisible = SHARED.TRUE;\r\n this.selectedDocument = this.documentListService.handleTableRowClick(rowData);\r\n }\r\n\r\n /**\r\n * Handles the delete action from the table component\r\n * @param {any} rowData - The row data containing the document to delete\r\n */\r\n handleDeleteAction(rowData: any): void {\r\n this.documentListService.handleDeleteAction(rowData, this.contextId)\r\n .subscribe({\r\n next: (response) => {\r\n this.documentListService.refreshAllDataWithCurrentFilters(this.contextId);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refreshes the document list after a status update\r\n */\r\n refreshDocumentList(): void {\r\n this.documentListService.refreshDocumentList(this.contextId);\r\n }\r\n\r\n /**\r\n * Cleanup subscriptions on component destroy\r\n */\r\n ngOnDestroy(): void {\r\n this.documentListSubscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer\">\r\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\" \r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\">\r\n <document-viewer \r\n [selectedDocument]=\"selectedDocument\" \r\n [documentList]=\"documentList\" \r\n [contextId]=\"contextId\" \r\n (documentStatusUpdated)=\"refreshDocumentList()\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n <button pButton pRipple class=\"mx-3 w-6rem save-btn-wrapper\" label=\"Save\" (click)=\"handleSaveClick()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\">\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\">\r\n <div class=\"category-header\">\r\n <div class=\"category-title\">\r\n <h3>{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <span class=\"status-badge\">{{ categoryCompletionCounts[i] }} Complete</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary \r\n [tableData]=\"categoryTables[i]\" \r\n [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\"\r\n (deleteAction)=\"handleDeleteAction($event)\">\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../models/document-category.model';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentMenuService {\r\n\r\n constructor(private documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Gets the category name for a given menu item _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The category name or null if not found\r\n */\r\n getMenuItemCategory(menuItemId: string, categories: DocumentCategory[]): string | null {\r\n for (const category of categories) {\r\n if (category.items?.some((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId)) {\r\n return category.label;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the menu item by its _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The menu item or null if not found\r\n */\r\n getMenuItemById(menuItemId: string, categories: DocumentCategory[]): DocumentCategoryItem | null {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Handles user list visibility based on menu item category\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleUserListVisibility(menuItemId: string, categories: DocumentCategory[]): void {\r\n const category = this.getMenuItemCategory(menuItemId, categories);\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n \r\n if (category === SHARED.APPLICATION) {\r\n this.documentStore.setShowUserList(true);\r\n } else if (category === SHARED.APPLICANTS) {\r\n this.documentStore.setShowUserList(true);\r\n } else {\r\n this.documentStore.setShowUserList(false);\r\n this.documentStore.setSelectedUserId(null);\r\n this.documentStore.setSelectedStatus(null);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document status based on selected menu item\r\n * @param menuItemId - The _id of the selected menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleDocumentStatus(menuItemId: string, categories: DocumentCategory[]): void {\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n if (menuItem) {\r\n // You can add logic here to handle document status based on the selected menu item\r\n // For example, filtering documents by status, updating status counts, etc.\r\n console.log('Selected menu item:', menuItem.label, 'with status:', menuItem.status);\r\n }\r\n }\r\n\r\n /**\r\n * Calculates total documents for a menu item\r\n * @param item - The menu item\r\n * @returns Total number of documents\r\n */\r\n getTotalDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys\r\n const pending = status.Pending || status.pending || 0;\r\n const reviewing = status.Reviewing || status.reviewing || 0;\r\n const accepted = status.Accepted || status.approved || 0; // Note: approved maps to Accepted\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n return pending + reviewing + accepted + rejected;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Gets badge value for a menu item\r\n * @param item - The menu item\r\n * @returns Badge value string (e.g., \"2/3\")\r\n */\r\n getBadgeValue(item: DocumentCategoryItem): string {\r\n const approved = this.getApprovedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n return `${approved}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets badge severity based on status\r\n * @param item - The menu item\r\n * @returns Badge severity for PrimeNG\r\n */\r\n getBadgeSeverity(item: DocumentCategoryItem): 'success' | 'info' | 'warning' | 'danger' {\r\n const status = item.status;\r\n const total = this.getTotalDocuments(item);\r\n const approved = this.getApprovedDocuments(item);\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n if (total === 0) return 'info';\r\n \r\n // If any docs are rejected, show red\r\n if (rejected > 0) return 'danger';\r\n \r\n // If all docs are approved, show green\r\n if (approved === total && total > 0) return 'success';\r\n \r\n // Otherwise show amber\r\n return 'warning';\r\n }\r\n\r\n /**\r\n * Checks if badge should be shown for a menu item\r\n * @param item - The menu item\r\n * @returns True if badge should be shown\r\n */\r\n shouldShowBadge(item: DocumentCategoryItem): boolean {\r\n return this.getTotalDocuments(item) > 0;\r\n }\r\n\r\n /**\r\n * Calculates approved documents for a menu item\r\n * @param item - The menu item\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys, with approved mapping to Accepted\r\n return status.Accepted || status.approved || 0;\r\n }\r\n} ","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../../models/document-category.model';\r\nimport { DocumentMenuService } from '../../services/document-menu.service';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\ninterface MenuItemData {\r\n totalDocuments: number;\r\n approvedDocuments: number;\r\n badgeValue: string;\r\n badgeSeverity: 'success' | 'info' | 'warning' | 'danger';\r\n shouldShowBadge: boolean;\r\n}\r\n@Component({\r\n selector: 'lib-documents-menu',\r\n standalone: false,\r\n templateUrl: './documents-menu.component.html',\r\n styleUrl: './documents-menu.component.scss'\r\n})\r\nexport class DocumentsMenuComponent implements OnInit, OnChanges {\r\n @Input() catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\r\n @Input() applicationNumber : string = SHARED.EMPTY\r\n @Input() contextId: string = SHARED.EMPTY;\r\n selectedMenuItem: string | null = null;\r\n selectedMenuItemId: string | null = null;\r\n\r\n // Store the categories from the store\r\n private storeCategories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentMenuService: DocumentMenuService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.selectedMenuItemId = menuItemId;\r\n this.selectedMenuItem = this.findMenuItemLabelById(menuItemId);\r\n });\r\n\r\n // Subscribe to document categories from the store\r\n this.documentQuery.selectDocumentCategories().subscribe(categories => {\r\n if (categories && categories.length > 0) {\r\n this.storeCategories = categories;\r\n this.updateMenuItemsData();\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CATAGORIES] && this.catagories) {\r\n this.updateMenuItemsData();\r\n }\r\n \r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.handleContextIdChange();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the categories to use for the menu\r\n * Priority: Store categories > Input categories\r\n */\r\n get categories(): DocumentCategory[] {\r\n const result = this.storeCategories.length > 0 ? this.storeCategories : this.catagories;\r\n return result;\r\n }\r\n\r\n /**\r\n * Finds the label of a menu item by its _id\r\n * @param id The _id to search for\r\n * @returns The label of the menu item or null if not found\r\n */\r\n private findMenuItemLabelById(id: string | null): string | null {\r\n if (!id) return null;\r\n \r\n for (const category of this.categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === id);\r\n if (item) {\r\n return item.label;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n \r\n /**\r\n * Update menu use catagories\r\n */\r\n private updateMenuItemsData(): void {\r\n this.categories.forEach(category => {\r\n if (category.items) {\r\n category.items.forEach(item => {\r\n const menuData = {\r\n totalDocuments: this.documentMenuService.getTotalDocuments(item),\r\n approvedDocuments: this.documentMenuService.getApprovedDocuments(item),\r\n badgeValue: this.documentMenuService.getBadgeValue(item),\r\n badgeSeverity: this.documentMenuService.getBadgeSeverity(item),\r\n shouldShowBadge: this.documentMenuService.shouldShowBadge(item)\r\n };\r\n (item as any).menuData = menuData;\r\n });\r\n }\r\n });\r\n }\r\n\r\n \r\n /**\r\n * Handle the menu item click\r\n * @param {*} event - Event \r\n * @param {DocumentCategoryItem} item - catagory item\r\n */\r\n onMenuItemClick(event: any, item: DocumentCategoryItem): void {\r\n if (this.selectedMenuItemId === item._id) {\r\n // Immediately clear the selection state\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n \r\n // Update the store\r\n this.documentStore.setSelectedMenuItem(null);\r\n \r\n // Refresh documents\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n \r\n // Force change detection by updating the component state\r\n this.handleDeselection();\r\n } else {\r\n this.selectedMenuItem = item.label;\r\n this.selectedMenuItemId = item._id;\r\n this.documentStore.setSelectedMenuItem(item._id);\r\n this.documentMenuService.handleUserListVisibility(item._id, this.categories);\r\n }\r\n }\r\n\r\n /**\r\n * Handle deselection to ensure immediate visual feedback\r\n */\r\n private handleDeselection(): void {\r\n // Force immediate update of the component state\r\n this.selectedMenuItemId = null;\r\n this.selectedMenuItem = null;\r\n \r\n // Trigger change detection\r\n setTimeout(() => {\r\n // This ensures the UI updates immediately\r\n }, 0);\r\n }\r\n\r\n onSelectMenuItem(menuItemId: string): void {\r\n const label = this.findMenuItemLabelById(menuItemId);\r\n if (label) {\r\n this.selectedMenuItem = label;\r\n this.selectedMenuItemId = menuItemId;\r\n this.documentStore.setSelectedMenuItem(menuItemId);\r\n this.documentMenuService.handleUserListVisibility(menuItemId, this.categories);\r\n }\r\n }\r\n\r\n onUnselectMenuItem(): void {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n\r\n getSelectedMenuItem(): string | null {\r\n return this.selectedMenuItem;\r\n }\r\n\r\n /**\r\n * Handles contextId changes by clearing current selection and refreshing data\r\n */\r\n private handleContextIdChange(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n }\r\n\r\n getSelectedMenuItemId(): string | null {\r\n return this.selectedMenuItemId;\r\n }\r\n}\r\n","<div class=\"document-sidebar-container h-full\">\r\n <p-card class=\"widget-menu-wrapper h-full\">\r\n @if(applicationNumber){\r\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\r\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\r\n <div class=\"expand-icon-wrapper\">\r\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"widget-menu-container\" >\r\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\r\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <span [style]=\"{\r\n color : '#9EA0B3'\r\n }\">{{ item.label === 'Application' ? 'Application Documents' : item.label }}</span>\r\n </ng-template>\r\n <ng-template pTemplate=\"item\" let-item>\r\n <a pRipple \r\n class=\"flex align-items-center p-menuitem-link\"\r\n [class.selected-menu-item]=\"selectedMenuItemId === item._id\"\r\n (click)=\"onMenuItemClick($event, item)\">\r\n <span [class]=\"item.icon\" class=\"text-xl\"></span>\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n <p-badge *ngIf=\"item.menuData?.shouldShowBadge\" \r\n class=\"ml-auto\" \r\n [severity]=\"item.menuData?.badgeSeverity\" \r\n [value]=\"item.menuData?.badgeValue\" />\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n </div>\r\n </div>\r\n </p-card>\r\n</div>\r\n\r\n ","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { DocumentService } from '../../state/document.service';\nimport { Subscription } from 'rxjs';\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\nimport { DocumentHttpService } from '../../services/document-http.service';\nimport { DocumentQuery } from '../../state/document.query';\nimport { DocumentStore } from '../../state/document.store';\nimport { DocumentCategory } from '../../models/document-category.model';\nimport { UserListModel } from '../../models/user-list.model';\nimport { StatusDataModel } from '../../models/status-data.model';\nimport { DocumentListResponse } from '../../models/document-list-response.model';\nimport { DocumentHelperService } from '../../services/document.service';\n\n/**\n *This component is responsible for managing and displaying a list of documents.\n * @class DocumentContainerComponent\n * @typedef {DocumentContainerComponent}\n */\n@Component({\n selector: 'lib-document-container',\n standalone: false,\n templateUrl: './document-container.component.html',\n styleUrl: './document-container.component.scss'\n})\nexport class DocumentContainerComponent implements OnInit, OnDestroy, OnChanges {\n\n /**\n * Creates an instance of DocumentContainerComponent.\n * @param {DocumentStore} documentStore - Query Store service to manage store document-related state.\n * @param {DocumentService} documentService - Service to manage document-related operations.\n * @param {DocumentQuery} documentQuery - Query service to manage document-related state.\n * @param {DocumentHttpService} documentHttpService - Service to make HTTP requests related to documents.\n */\n constructor(public documentStore: DocumentStore, public documentService: DocumentService, public documentQuery: DocumentQuery, public documentHttpService: DocumentHttpService, public documentHelperService : DocumentHelperService) {\n // Note: initializeSelectionWatcher now requires contextId\n // This should be called from the component that has access to contextId\n\n }\n /**\n * Get contextId in input.\n * @type {string}\n */\n @Input() contextId: string = SHARED.EMPTY;\n \n \n /**\n * The list of folders.\n * @type {Array}\n */\n applicationNumber: string = SHARED.EMPTY\n catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\n userList: UserListModel[] = SHARED.EMPTY_ARRAY\n /**\n * Status data for the current selection\n * @type {StatusDataModel[]}\n */\n statusData: StatusDataModel[] = []\n\n /**\n * Document list response from API\n * @type {DocumentListResponse | null}\n */\n documentListResponse: DocumentListResponse[] | null = null;\n /**\n * Holds the subscription to manage observable cleanup.\n * @\n * @type {Subscription}\n */\n subscription: Subscription = new Subscription();\n\n /**\n * Handles changes to input properties\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\n // When contextId changes, clear all state and refetch data for the new context\n this.handleContextIdChange();\n }\n }\n\n /**\n * Fetches the folder and document data on initialization.\n * @returns {void}\n */\n ngOnInit(): void {\n this.clearAllState();\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.initializeData();\n }\n }\n\n /**\n * Initialize all data with proper sequencing to avoid duplicate API calls\n */\n initializeData(): void {\n this.fetchDocumentCatagories();\n this.fetchUserListWithFilters();\n this.setupStatusDataSubscriptions();\n this.setupFilteredDocumentSubscription();\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\n }\n\n /**\n * Clears all state (store and component) comprehensively\n */\n clearAllState(): void {\n this.documentStore.clearSelectionState();\n this.documentStore.clearDocumentViewerState();\n this.documentStore.setDocumentListResponse(null);\n this.documentStore.setDocumentList([]); \n this.documentStore.setDocumentCategories([]);\n this.documentStore.setUserList([]);\n this.documentStore.setStatusData([]);\n this.documentStore.setCurrentDocument(null); \n this.documentStore.setFolders([]);\n this.documentStore.setDocumentAlert(null);\n this.catagories = SHARED.EMPTY_ARRAY;\n this.userList = SHARED.EMPTY_ARRAY;\n this.statusData = [];\n this.documentListResponse = null;\n this.applicationNumber = SHARED.EMPTY;\n }\n\n /**\n * Handles contextId change by clearing all state and refetching data\n */\n handleContextIdChange(): void {\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.subscription.unsubscribe();\n this.subscription = new Subscription();\n this.documentHelperService.cleanupSelectionWatcher();\n this.clearAllState();\n this.initializeData();\n }\n }\n\n /**\n * Sets up subscriptions to monitor menu item and user selection changes\n * to trigger status data fetching and user list refreshing\n */\n setupStatusDataSubscriptions(): void {\n this.subscription.add(\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItem => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.subscription.add(\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.subscription.add(\n this.documentQuery.selectSelectedStatus().subscribe(status => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.fetchStatusData();\n }\n\n /**\n * Fetches status data based on current selections\n */\n fetchStatusData(): void {\n if (!this.contextId) {\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\n return;\n }\n\n const currentState = this.documentQuery.getSelectionState();\n const contextId = currentState.userId || null\n const categoryId = currentState.menuItem || null; \n this.documentHttpService.getStatusDocumentCount(this.contextId,contextId,categoryId).subscribe({\n next: (statusData) => {\n this.statusData = statusData;\n this.documentStore.setStatusData(statusData);\n },\n error: (error) => {\n console.error(ERRORS.ERROR_FETCHING_STATUS_DATA, error);\n }\n });\n }\n\n /**\n * Fetches userlist data with current filters applied\n */\n fetchUserListWithFilters(): void {\n if (!this.contextId) {\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\n return;\n }\n\n const currentState = this.documentQuery.getSelectionState();\n // For user list, we use the contextId but the API might need additional parameters\n // based on current filters. For now, we'll use the base contextId\n // If the API supports filtering by menu item or status, we can add those parameters\n this.documentHttpService.getUserListByContextId(this.contextId).subscribe({\n next: (res: UserListModel[]) => {\n this.userList = res;\n this.documentStore.setUserList(res);\n },\n error: (err: any) => {\n console.error(ERRORS.ERROR_FETCHING_USER_LIST, err);\n }\n });\n }\n /**\n * Fetches document catagory data.\n */\n fetchDocumentCatagories(): void {\n const categoriesSubscription = this.documentHttpService.getDocumentCatagories(this.contextId).subscribe({\n next: (categories: any) => {\n if (categories) {\n this.catagories = categories.categories;\n this.applicationNumber = categories.applicationNumber;\n this.documentStore.setDocumentCategories(categories.categories);\n }\n },\n error: (err: any) => {\n console.error(ERRORS.ERROR_FETCHING_DOCUMENT_CATEGORIES, err);\n }\n });\n this.subscription.add(categoriesSubscription);\n }\n \n /**\n * Refetches all data when contextId changes\n */\n refetchAllDataForNewContext(): void {\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.documentStore.clearSelectionState();\n this.documentStore.clearDocumentViewerState();\n this.fetchDocumentCatagories();\n this.fetchUserListWithFilters();\n this.fetchStatusData();\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\n }\n }\n\n /**\n * Sets up subscription to listen for filtered document responses\n */\n setupFilteredDocumentSubscription(): void {\n this.subscription.add(\n this.documentQuery.selectDocumentListResponse().subscribe({\n next: (response: any) => {\n this.documentListResponse = response;\n },\n error: (error: any) => {\n console.error(ERRORS.ERROR_RECEIVING_DOCUMENT_LIST, error);\n }\n })\n );\n }\n\n /** \n * Unsubscribe subscription on destroy of component and clean up state.\n */\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n this.documentHelperService.cleanupSelectionWatcher();\n this.clearAllState();\n }\n}\n","<div class=\"grid m-0 h-full flex\">\r\n <div class=\"col-12 md:col-2 lg:col-2\">\r\n <lib-documents-menu [catagories]=\"catagories\" [applicationNumber]=\"applicationNumber\" [contextId]=\"contextId\"></lib-documents-menu>\r\n </div>\r\n <div class=\"col-12 md:col-10 lg:col-10 p-0 h-full\" [ngClass]=\"{'custom-scroll': true}\">\r\n <div class=\"card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div >\r\n <lib-document-list [contextId]=\"contextId\" [documentListResponse]=\"documentListResponse\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * The `FolderBlockComponent` is responsible for displaying a block of folders and\r\n * providing filtering functionality based on folder IDs.\r\n *\r\n * It uses data from the `DocumentStore` and constants from the `SHARED` configuration \r\n * to display missing and pending file counts.\r\n */\r\n@Component({\r\n selector: 'lib-folder-block',\r\n standalone: false,\r\n templateUrl: './folder-block.component.html',\r\n styleUrl: './folder-block.component.scss'\r\n})\r\nexport class FolderBlockComponent {\r\n /**\r\n * Array of folder blocks data to display.\r\n * Each folder is represented as a `FolderBlockModel`.\r\n */\r\n @Input() folderList : FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Number of missing files, sourced from the `SHARED` constants. */\r\n missingFileCount = SHARED.MISSINGCOUNT;\r\n\r\n /** Number of pending files, sourced from the `SHARED` constants. */\r\n pendingFileCount = SHARED.PENDINGCOUNT;\r\n\r\n /**\r\n * Injects the `DocumentStore` service to manage and access document-related state.\r\n * @param {DocumentStore} documentStore - The state management store for documents.\r\n */\r\n constructor(public documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Handles the click event for filtering based on the provided folder ID.\r\n * This method validates the folder ID and returns it for further processing. \r\n * If the folder ID is not provided, an empty string is returned.\r\n * @param {string} folderBlockId - The unique identifier of the folder to filter by.\r\n * @returns {string} The validated folder ID, or an empty string if the input is invalid.\r\n */\r\n handleClickForFilter(folderBlockId: string): string {\r\n if (!folderBlockId) {\r\n return SHARED.EMPTY;\r\n }\r\n this.documentStore.setParentDocumentTypeId(folderBlockId);\r\n return folderBlockId;\r\n }\r\n \r\n}\r\n","<div class=\"card p-0 folder-info\">\r\n <div class=\"text-900 text-xl font-semibold ml-2 mb-1\">Folders</div>\r\n <div class=\"grid m-0\">\r\n <div *ngFor=\"let folder of folderList\" class=\"col-12 md:col-6 xl:col-4 container-wrapper\">\r\n <div\r\n class=\"p-3 border-1 h-full surface-border flex flex-column justify-content-between hover:surface-100 cursor-pointer border-round\"\r\n (click)=\"handleClickForFilter(folder._id)\"\r\n >\r\n <div class=\"icon\">\r\n <img src=\"../../../../assets/images/FolderImg.png\" alt=\"\" />\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span class=\"text-600 mt-2\"> {{ folder.documentCount }} Files </span>\r\n <span class=\"text-900 text-lg mt-2 mb-2 font-semibold font-medium\">\r\n {{ folder.folderName }}\r\n </span>\r\n </div>\r\n <hr />\r\n <div class=\"flex justify-content-between\">\r\n <div class=\"flex flex-column\">\r\n <span>Missing</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-pink-500': missingFileCount > 0,\r\n 'text-green-500': missingFileCount === 0\r\n }\"\r\n >\r\n {{ missingFileCount }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span>Pending</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-yellow-500': pendingFileCount > 0,\r\n 'text-green-500': pendingFileCount === 0\r\n }\"\r\n >\r\n {{ pendingFileCount }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\n\r\n/**\r\n * DocumentListItemComponent\r\n *\r\n * This component displays individual document items within a list. \r\n * It accepts a list of documents as input and handles interactions with documents.\r\n */\r\n@Component({\r\n selector: 'lib-document-list-item',\r\n standalone: false,\r\n templateUrl: './document-list-item.component.html',\r\n styleUrls: ['./document-list-item.component.scss']\r\n})\r\nexport class DocumentListItemComponent {\r\n /**\r\n * Emit the selected document.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() documentClick = new EventEmitter<DocumentModel>();\r\n \r\n /**\r\n * The document to display.\r\n * @type {DocumentModel[]}\r\n */\r\n @Input() document!: DocumentModel;\r\n\r\n /**\r\n * Handles interactions with a document.\r\n * @param {DocumentModel} document - The document to be opened or interacted with.\r\n */\r\n handleOpenDocument(document: DocumentModel): void {\r\n if (!document) {\r\n console.error('Error: Document is null or undefined:', document);\r\n return;\r\n }\r\n this.documentClick.emit(document);\r\n }\r\n}\r\n","<div class=\"grid m-0\">\r\n <div\r\n class=\"col-12 flex align-items-center justify-content-between md:col-12 xl:col-12\"\r\n >\r\n <div\r\n class=\"col-5 flex cursor-pointer align-items-center pl-0\"\r\n (click)=\"handleOpenDocument(document)\"\r\n >\r\n <img src=\"../../../../assets/images/Frame.png\" alt=\"\" />\r\n <span class=\"ml-4 file-name-wrapper document-text-wrapper\">{{ document.fileName }}</span>\r\n </div>\r\n <div class=\"col-4 flex align-items-center justify-content-center\">\r\n <span\r\n [class]=\"'product-badge status-' + document.status?.toLowerCase()\"\r\n class=\"flex align-items-center justify-content-center pl-2 pr-2 pt-1 pb-1\"\r\n >\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'pending'\">\r\n <i class=\"pi pi-clock pr-1\" style=\"font-size: 12px;\"></i>\r\n Pending\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'verified'\">\r\n <i class=\"pi pi-check-circle pr-1\" style=\"font-size: 12px;\"></i>\r\n Verified\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'alert'\">\r\n <i class=\"pi pi-bell pr-1\" style=\"font-size: 12px;\"></i>\r\n Alert\r\n </ng-container>\r\n </span>\r\n </div>\r\n <div class=\"document-type file-name-wrapper document-text-wrapper\">\r\n {{document.documentTypeName}}\r\n </div>\r\n </div>\r\n </div>\r\n ","import { ErrorHandler, Injectable, Injector } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/**\r\n * GlobalErrorHandler is a custom error handler that implements the ErrorHandler interface.\r\n * It is used to handle both HTTP errors and other types of errors globally in the application.\r\n * @class\r\n * @implements {ErrorHandler}\r\n * @decorator {Injectable}\r\n */\r\n@Injectable()\r\nexport class GlobalErrorHandler implements ErrorHandler {\r\n /**\r\n * Creates an instance of GlobalErrorHandler.\r\n * @constructor\r\n * @param {Injector} injector - The Angular injector used to get instances of services.\r\n */\r\n constructor(private injector: Injector) { }\r\n\r\n /**\r\n * Handles errors globally in the application.\r\n * \r\n * @param {any} error - The error object that needs to be handled.\r\n * @returns {void}\r\n */\r\n handleError(error: any): void {\r\n console.error('GlobalErrorHandler:', error);\r\n }\r\n}\r\n","import { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentHelperService } from \"../services/document.service\";\r\n\r\n/**\r\n * Directive to display the document data\r\n */\r\n@Directive({\r\n selector: '[doc]',\r\n standalone: false\r\n})\r\nexport class DocumentDirective {\r\n\r\n /**\r\n * Creates an instance of DocumentDirective.\r\n * @param documentService Service to get the document data.\r\n * @param templateRef Reference to the template.\r\n * @param vcr View container reference to manage the view.\r\n */\r\n constructor(\r\n private documentService: DocumentHelperService,\r\n private templateRef: TemplateRef<any>,\r\n private vcr: ViewContainerRef\r\n ) {\r\n this.documentService.get().subscribe((document: DocumentModel | null) => {\r\n this.vcr.clear();\r\n if (document) {\r\n this.vcr.createEmbeddedView(this.templateRef, { $implicit: document });\r\n }\r\n });\r\n }\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\n/**\r\n * Description placeholder\r\n * @class LinkedDocumentComponent\r\n * @typedef {LinkedDocumentComponent}\r\n * @implements {OnChanges}\r\n */\r\n@Component({\r\n selector: 'app-linked-document',\r\n templateUrl: './linked-document.component.html',\r\n styleUrl: './linked-document.component.scss',\r\n standalone : false\r\n})\r\nexport class LinkedDocumentComponent {\r\n /**\r\n * Selected document for view.\r\n * @type {?DocumentModel}\r\n */\r\n @Input() selectedDocument?: DocumentListItem;\r\n /**\r\n * Whole document list.\r\n * @type {?DocumentModel[]}\r\n */\r\n @Input() documentList?: DocumentListItem[];\r\n /**\r\n * Changed selected document.\r\n * @type {*}\r\n */\r\n @Output() selectedDocumentChange = new EventEmitter<DocumentListItem>();\r\n\r\n /**\r\n * Filtered documents.\r\n * @type {DocumentModel[]}\r\n */\r\n filteredDocuments: DocumentModel[] = [];\r\n\r\n /**\r\n * Handle the click on the document.\r\n * @param {DocumentModel} document - Clicked document.\r\n */\r\n handleDocumentClick(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.selectedDocumentChange.emit(this.selectedDocument);\r\n }\r\n\r\n}\r\n","<div class=\"summary-card mb-4 pb-1\">\r\n <div class=\"card p-0 mb-0\"\r\n style=\"border-bottom: 1px solid;border-color: rgba(68, 72, 109, 0.2); border-bottom-right-radius: 0px;border-bottom-left-radius: 0px; background-color: #F9fafb;\">\r\n <div class=\"p-0\">\r\n <h4 class=\"m-0 pt-3 pl-3 mb-3\" style=\"font-size: 21px; font-weight: bold; \">Linked Documents</h4>\r\n </div>\r\n </div>\r\n <div class=\"card mb-0\" style=\"border-top-right-radius: 0px;border-top-left-radius: 0px;\">\r\n @for(document of documentList; track document){\r\n <div class=\"linkedDocument documentName m-2\">\r\n <div class=\"documentName\" [class.selected]=\"document._id === selectedDocument?._id\"\r\n (click)=\"handleDocumentClick(document)\">\r\n <span class=\"pi pi-link\"></span>\r\n {{document.fileName}}\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n \r\n \r\n </div>\r\n ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TablePrimaryComponent } from './components/table-primary/table-primary.component';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { HasPermissionDirective } from '../lib/document/directives/permission.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [TablePrimaryComponent, HasPermissionDirective],\r\n imports: [\r\n CommonModule,\r\n TableModule,\r\n ButtonModule,\r\n RippleModule\r\n ],\r\n exports : [TablePrimaryComponent, HasPermissionDirective]\r\n})\r\nexport class SharedModule { }\r\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DocumentContainerComponent } from './components/document-container/document-container.component';\r\nimport { FolderContainerComponent } from './components/folder-container/folder-container.component';\r\nimport { FolderBlockComponent } from './components/folder-block/folder-block.component';\r\nimport { DocumentListComponent } from './components/document-list/document-list.component';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { DocumentListItemComponent } from './components/document-list-item/document-list-item.component';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { DocumentUploadComponent } from './components/document-upload/document-upload.component';\r\nimport { MessageService } from 'primeng/api';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { ListboxModule } from 'primeng/listbox';\r\nimport { TimelineModule } from 'primeng/timeline';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DocumentViewerComponent } from './components/document-viewer/document-viewer.component';\r\nimport { DocumentHistoryComponent } from './components/document-history/document-history.component';\r\nimport { PdfViewerModule } from 'ng2-pdf-viewer';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { AppConfigService } from '../../Shared/services/app-config.service';\r\nimport { GlobalErrorHandler } from '../../Shared/services/global-error.handler';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DocumentDirective } from './directives/document.directive';\r\nimport { LinkedDocumentComponent } from './components/linked-document/linked-document.component';\r\nimport { DocumentsMenuComponent } from './components/documents-menu/documents-menu.component';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { PanelMenuModule } from 'primeng/panelmenu';\r\nimport { CardModule } from 'primeng/card';\r\nimport { TableModule } from 'primeng/table';\r\nimport { UserListComponent } from './components/user-list/user-list.component';\r\nimport { DocumentStatusComponent } from './components/document-status/document-status.component';\r\nimport { DocumentActionsComponent } from './components/document-actions/document-actions.component';\r\nimport { DocumentSearchComponent } from './components/document-search/document-search.component';\r\nimport { SharedModule } from '../../Shared/shared.module';\r\nimport { DocumentActionsService } from './services/document-actions.service';\r\nimport { CommonSidebarComponent } from './components/common-sidebar/common-sidebar.component';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\n/**\r\n * @module DocumentModule\r\n * \r\n * The `DocumentModule` handles the organization and display of document and folder components \r\n * in the application. This module is designed to support features like folder containers, \r\n * document lists, and individual document items.\r\n */\r\n@NgModule({\r\n declarations: [\r\n /**\r\n * The main container for managing documents.\r\n * DocumentContainerComponent\r\n */\r\n DocumentContainerComponent,\r\n\r\n /**\r\n * A container component to manage folders.\r\n * FolderContainerComponent\r\n */\r\n FolderContainerComponent,\r\n\r\n /**\r\n * A block component that represents an individual folder.\r\n * FolderBlockComponent\r\n */\r\n FolderBlockComponent,\r\n\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A component representing an individual item in the document list.\r\n * DocumentListItemComponent\r\n */\r\n DocumentListItemComponent,\r\n\r\n /** \r\n * A component representing to upload a file.\r\n */\r\n DocumentUploadComponent,\r\n\r\n /**\r\n * A component representing and allow you to view the document.\r\n */\r\n DocumentViewerComponent,\r\n\r\n /**\r\n * A component representing document history timeline.\r\n */\r\n DocumentHistoryComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component which have linked documents.\r\n */\r\n LinkedDocumentComponent,\r\n DocumentsMenuComponent,\r\n UserListComponent,\r\n DocumentStatusComponent,\r\n DocumentActionsComponent,\r\n DocumentSearchComponent,\r\n /**\r\n * A common sidebar component for content projection.\r\n */\r\n CommonSidebarComponent,\r\n\r\n ],\r\n imports: [\r\n /**\r\n * Angular's CommonModule is imported to access common directives like `ngIf` and `ngFor`.\r\n */\r\n CommonModule,\r\n\r\n /**\r\n * PrimeNG AccordionModule is used for creating collapsible sections in the UI.\r\n */\r\n AccordionModule,\r\n\r\n /**\r\n * HttpClienModule for the http calls\r\n */\r\n HttpClientModule,\r\n\r\n /**\r\n * PrimeNG ButtonModule is used for creating buttons in the UI.\r\n */\r\n ButtonModule,\r\n\r\n /**\r\n * PrimeNG SidebarModule is used for creating sidebars.\r\n */\r\n SidebarModule,\r\n\r\n /**\r\n * PrimeNG FileUploadModule is used for uploading file.\r\n */\r\n FileUploadModule,\r\n\r\n /**\r\n * PrimeNG ProgressBarModule is used for showing progress.\r\n */\r\n ProgressBarModule,\r\n\r\n /**\r\n * PrimeNG BadgeModule is used for showing badge value.\r\n */\r\n BadgeModule,\r\n\r\n /**\r\n * PrimeNG ListboxModule is used for showing listbox value.\r\n */\r\n ListboxModule,\r\n\r\n /**\r\n * PrimeNG CheckboxModule is used for showing checkbox value.\r\n */\r\n CheckboxModule,\r\n\r\n /**\r\n * PrimeNG RadioButtonModule is used for showing radio button values.\r\n */\r\n RadioButtonModule,\r\n\r\n /**\r\n * PrimeNG TimelineModule is used for showing timeline value.\r\n */\r\n TimelineModule,\r\n /**\r\n * PrimeNG InputTextareaModule is used for showing textarea value.\r\n */\r\n InputTextareaModule,\r\n /**\r\n * FormsModule to handle the forms.\r\n */\r\n FormsModule,\r\n /**\r\n * PdfViewerModule to handle and make visible the pdf.\r\n */\r\n PdfViewerModule,\r\n /**\r\n * PrimeNG DialogModule is used for showing dialog.\r\n */\r\n DialogModule,\r\n /**\r\n * PrimeNG DropdownModule is used for creating dropdown menus, allowing users to select options from a list.\r\n */\r\n DropdownModule,\r\n /**\r\n * PrimeNG InputTextModule is used for creating InputTextFeilds, allowing users to enter name for a document.\r\n */\r\n InputTextModule,\r\n\r\n MenuModule,\r\n PanelMenuModule,\r\n CardModule,\r\n TableModule,\r\n SharedModule,\r\n InputTextareaModule\r\n \r\n ],\r\n exports: [\r\n /**\r\n * Exports the `DocumentContainerComponent` to be used in other modules.\r\n */\r\n DocumentContainerComponent,\r\n /**\r\n * Exports the `DocumentViewerComponent` to be used in other modules.\r\n */\r\n DocumentViewerComponent,\r\n /**\r\n * Exports the `DocumentActionsComponent` to be used in other modules.\r\n */\r\n DocumentActionsComponent,\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component for searching documents.\r\n */\r\n DocumentSearchComponent,\r\n\r\n /**\r\n * A common sidebar component for content projection.\r\n */\r\n CommonSidebarComponent,\r\n\r\n\r\n ],\r\n providers: [\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n MessageService,\r\n\r\n /**\r\n * Provide the DocumentActionsService to be used in other components.\r\n */\r\n DocumentActionsService,\r\n\r\n\r\n\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n { provide: GlobalErrorHandler, useClass: GlobalErrorHandler },\r\n /**\r\n * Initializes the application configuration by loading it from the AppConfigService\r\n * before the application starts.\r\n * This ensures that the configuration is available for the rest of the app when needed.\r\n * The configuration is loaded asynchronously using the APP_INITIALIZER.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n {\r\n provide: APP_INITIALIZER,\r\n /**\r\n * This useFactory is executed when the app initializes.\r\n * It calls the AppConfigService to load the configuration.\r\n * If an error occurs, it throws an error.\r\n * @param {AppConfigService} configService - The service responsible for loading the application configuration.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n useFactory: (configService: AppConfigService) => () =>\r\n configService.loadAppConfig().catch((error) => {\r\n throw new Error(error);\r\n }),\r\n deps: [AppConfigService],\r\n multi: true,\r\n },\r\n \r\n ]\r\n})\r\nexport class DocumentModule { }\r\n","/*\r\n * Public API Surface of cat-document-lib\r\n */\r\n\r\nexport * from './lib/document/document.module';\r\nexport * from './lib/document/components/document-container/document-container.component';\r\nexport * from './lib/document/components/document-viewer/document-viewer.component';\r\nexport * from './lib/document/components/document-actions/document-actions.component';\r\nexport * from './lib/document/components/document-history/document-history.component';\r\nexport * from './lib/document/components/document-list/document-list.component';\r\nexport * from './lib/document/components/document-search/document-search.component';\r\nexport * from './lib/document/components/common-sidebar/common-sidebar.component';\r\nexport * from './lib/document/models/document-history.model';\r\nexport * from './lib/document/services/document-table-builder.service';\r\nexport * from './lib/document/directives/document.directive';\r\nexport * from './lib/document/directives/permission.directive';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DocumentStore","i3.AppConfigService","i2.DocumentQuery","i3.DocumentHttpService","i1.DocumentService","i2.DocumentStore","i1.DocumentHttpService","i2.FileFormatService","i1.DocumentUploadBusinessService","i2.DocumentUploadFormService","i1.DocumentUploadService","i2.DocumentService","i4.FileFormatService","i5.DocumentUploadBusinessService","i6.DocumentUploadFormService","i7.DocumentUploadDataService","i8","i9","i13","i1.DocumentHelperService","i3.DocumentQuery","i4.UserListService","i5","i1.DocumentQuery","i2.DocumentHelperService","i3.StatusCalculatorService","i4","debounceTime","distinctUntilChanged","i2","i3","i2.DocumentUploadComponent","i3.UserListComponent","i4.DocumentStatusComponent","i5.DocumentSearchComponent","i6.CommonSidebarComponent","i1.SessionService","i2.DocumentHttpService","i4.DocumentStore","i5.DocumentTableBuilderService","i6.DocumentHelperService","i6.HasPermissionDirective","i5.DocumentQuery","i1.DocumentHistoryStyleService","i3.SessionService","i4.AppConfigService","i1.DocumentHistoryService","i1.DocumentActionsService","i6","i9.HasPermissionDirective","i4.DocumentViewerService","i7.DocumentHistoryComponent","i8.DocumentActionsComponent","i1.DocumentListService","i7","i8.TablePrimaryComponent","i9.DocumentViewerComponent","i3.DocumentMenuService","i4.DocumentHelperService","i4.DocumentHttpService","i5.DocumentHelperService","i7.FolderContainerComponent","i8.DocumentListComponent","i9.DocumentsMenuComponent"],"mappings":"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"}