cat-documents-ng 0.2.45 → 0.2.48

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/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/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/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/ERROR.ts","../../../projects/cat-document-lib/src/Shared/constant/PERMISSIONS.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload.service.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/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/file-format.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/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/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/directives/permission.directive.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 /**\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\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","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 = \"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 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 return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}`, entity).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}/${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<DocumentCategory[]> {\r\n const header = new HttpHeaders({ Authorization: 'Bearer cccc6f79-5be6-4f74-9078-3908164ebc92' });\r\n return this.http.get<DocumentCategory[]>(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers: header }).pipe(\r\n tap((categories: DocumentCategory[]) => {\r\n this.documentStore.setDocumentCategories(categories);\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 return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`, payload).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 const header = new HttpHeaders({ Authorization: 'Bearer cccc6f79-5be6-4f74-9078-3908164ebc92' });\r\n if(!contextId) return EMPTY;\r\n return this.http.get<UserListModel[]>(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers: header }).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 const header = new HttpHeaders({ Authorization: 'Bearer cccc6f79-5be6-4f74-9078-3908164ebc92' });\r\n return this.http.get<StatusDataModel[]>(url, { params, headers: header }).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\r\n const header = new HttpHeaders({ Authorization: 'Bearer cccc6f79-5be6-4f74-9078-3908164ebc92' });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers: header }).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 const header = new HttpHeaders({ Authorization: 'Bearer cccc6f79-5be6-4f74-9078-3908164ebc92' });\r\n return this.http.get<DocumentHistorySection[]>(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers: header });\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\r\n const header = new HttpHeaders({ Authorization: 'Bearer cccc6f79-5be6-4f74-9078-3908164ebc92' });\r\n\r\n return this.http.put<any>(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers: header }).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 const header = new HttpHeaders({ Authorization: 'Bearer cccc6f79-5be6-4f74-9078-3908164ebc92' });\r\n return this.http.delete<any>(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers: header }).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 } 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\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 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 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('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 this.documentHttpService.getDocumentsBySelection(contextId, null, null, null).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error('Error calling initial API:', error);\r\n }\r\n });\r\n this.initializeSelectionWatcher(contextId);\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: (categories) => {\r\n this.documentStore.setDocumentCategories(categories);\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 \r\n // Refresh document list\r\n this.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n}","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 <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\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 // Initial fetch of status data if contextId is provided\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 } 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;\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 // Create a subject to handle search term changes\r\n const searchSubject = new Subject<string>();\r\n \r\n searchSubject.pipe(\r\n takeUntil(this.destroy$),\r\n debounceTime(500), // Wait 500ms after user stops typing\r\n distinctUntilChanged() // Only emit if value has changed\r\n ).subscribe(searchTerm => {\r\n this.onSearchChange(searchTerm);\r\n });\r\n\r\n // Store the subject for use in template\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 // Normalize the search term (trim whitespace and convert to null if empty)\r\n const normalizedSearchTerm = searchTerm?.trim() || null;\r\n \r\n // Update the search key in the store\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 // Subject for handling search input changes\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</div> ","import { Component, Input, OnInit } 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\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[] = [];\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[] = [];\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[] = [];\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 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<document-search [contextId]=\"contextId\"></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 * 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 /**\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}\r\n","\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\n}","import { Injectable } 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 /**\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() {\r\n let formsData = this.handleCreateFormData()\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 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 * @param {any} event - The event emitted by the upload service on success.\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 },\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.documentUploadStore.setMessage([{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) {\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() {\r\n if (this.uploadedFile && this.contextId && this.docTypeId) {\r\n let formData = new FormData();\r\n formData.append(SHARED.FILE, this.uploadedFile, this.uploadedFile.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId)\r\n formData.append(SHARED.DOCUMENT_TYPE_ID, this.docTypeId)\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 { 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 { 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(SHARED.DOCUMENT_TYPES_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 { 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 (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 { 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 { ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation } 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\n/**\r\n * A component for handling document uploads, including file selection, removal, and progress tracking.\r\n * @class DocumentUploadComponent\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 {\r\n\r\n \r\n /**\r\n * Represents the file size.\r\n * @type {number}\r\n */\r\n fileSize: string = SHARED.EMPTY;\r\n /**\r\n * Represent contextId\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY\r\n\r\n /**\r\n * To make file explorer visible.\r\n * @type {!FileUpload}\r\n */\r\n @ViewChild('fileUploader') fileUploader!: FileUpload;\r\n\r\n fileProgress: Map<File, number> = new Map();\r\n\r\n /**\r\n * List of files selected for upload.\r\n * @type {File[]}\r\n */\r\n uploadedFiles: { file: File; formattedSize: string; progress: number }[] = [];\r\n\r\n\r\n /**\r\n * Percentage of the total size calculated for displaying upload progress.\r\n * @type {number}\r\n */\r\n totalSizePercent: number = SHARED.INITIAL_COUNT;\r\n\r\n /**\r\n * The current upload progress percentage (SHARED.INITIAL_VALUE-100).\r\n * @type {number}\r\n */\r\n uploadProgress: number = SHARED.INITIAL_COUNT;\r\n\r\n\r\n /**\r\n * Creates an instance of DocumentUploadComponent.\r\n * @class\r\n * @param {DocumentUploadService} documentUpload - Service for handling document upload.\r\n * @param {DocumentService} uploadService - Service for handling document upload.\r\n * @param {PrimeNGConfig} config - PrimeNG configuration.\r\n * @param {FileFormatService} fileFormatService - Service for formatting file sizes.\r\n * @param {MessageService} messageService - Service for displaying messages.\r\n * @param {ChangeDetectorRef} cdr - Service for detecting changes.\r\n */\r\n constructor(public documentUpload : DocumentUploadService,public uploadService: DocumentService, private config: PrimeNGConfig, public fileFormatService: FileFormatService, public messageService: MessageService, public cdr: ChangeDetectorRef) { }\r\n\r\n /**\r\n * Open the file explorer.\r\n * @param {*} event - The triggering event.\r\n * @param {() => void} callback - A callback function to execute.\r\n * @returns {void} - No return value.\r\n */\r\n choose(event: any, callback: () => void) {\r\n callback();\r\n }\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 * @param {File} file - The file to upload.\r\n * @returns {void}\r\n */\r\n handleTemplatedUpload(file: File) {\r\n this.documentUpload.getUploadFileData(file, this.contextId)\r\n const formattedSize = this.fileFormatService.formatFileSize(file.size, this.config);\r\n const progress = 100;\r\n this.uploadedFiles.push({ file, formattedSize, progress });\r\n this.fileProgress.set(file, progress);\r\n this.totalSizePercent = 100;\r\n }\r\n\r\n /**\r\n * Handle the creation of formdata.\r\n * @param {File} file - The file to append in formdata.\r\n * @returns {*} - The formdata object.\r\n */\r\n handleCreateFormData(file: File) {\r\n const formData = new FormData();\r\n formData.append(SHARED.FILE, file, file.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId)\r\n return formData;\r\n }\r\n /**\r\n * Handles the event when new files are selected.\r\n * @param { { currentFiles: File[] } } event - The event containing the newly selected files.\r\n * @returns {void} - No return value.\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 /**\r\n * Formats the given file size in bytes into a readable format (e.g., KB, MB).\r\n * @param {number} bytes - The size of the file in bytes.\r\n * @returns {string} The formatted file size (e.g., '1.2 KB', '2.3 MB').\r\n */\r\n formatSize(bytes: number) {\r\n this.fileSize = this.fileFormatService.formatFileSize(bytes, this.config)\r\n }\r\n\r\n /**\r\n * Handles the removal of a file from the uploaded files list.\r\n * @param {File} file - The file to be removed.\r\n * @param {number} index - The index of the file in the uploaded files list.\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.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Major progress for the progress bar.\r\n * @param {File} file - File to check progress for.\r\n * @returns {number} - The progress percentage for the file.\r\n */\r\n getProgress(file: File): number {\r\n return this.fileProgress.get(file) || SHARED.INITIAL_COUNT;\r\n }\r\n\r\n /**\r\n * Triggers the file upload dialog.\r\n * Opens the file explorer for selecting files.\r\n * @returns {void}\r\n */\r\n triggerFileUpload() {\r\n this.fileUploader.choose();\r\n }\r\n\r\n}\r\n\r\n","<div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload #fileUploader [multiple]=\"true\" auto=\"true\" accept=\"image/png,application/pdf\" maxFileSize=\"26214400\"\r\n (onSelect)=\"onSelectedFiles($event)\">\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 (onClick)=\"choose($event, chooseCallback)\" icon=\"pi pi-images\" [rounded]=\"true\"\r\n [outlined]=\"true\" />\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 \"> {{ uploadedFile.formattedSize }}</div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> {{ uploadedFile.progress }} %</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 [value]=\"totalSizePercent\" [showValue]=\"false\" styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': totalSizePercent > 100 }\">\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>","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: () => {\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n this.documentStore.clearDocumentViewerState();\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 { Component, Input } from '@angular/core';\nimport { DocumentHistoryItem, DocumentHistorySection } from '../../models/document-history.model';\nimport { DocumentHistoryStyleService } from '../../services/document-history-style.service';\nimport { DOCUMENT_HISTORY } from '../../constant/DOCUMENT_HISTORY';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\n\n// Extended interface for processed items with computed properties\ninterface ProcessedDocumentHistoryItem extends DocumentHistoryItem {\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; // Add accordion class property\n hasValidContent?: boolean; // Add hasValidContent property\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[] = [];\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 documentHistoryStyleService: DocumentHistoryStyleService) {}\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 * Get the CSS class for accordion styling based on the section's label\n */\n private getAccordionClass(section: ProcessedDocumentHistorySection): string {\n if (!section.list || section.list.length === 0) {\n return SHARED.DOCUMENT_REQUESTED; // Default class\n }\n\n const firstItem = section.list[0];\n const label = firstItem.label;\n\n switch (label) {\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\n return SHARED.DOCUMENT_UPLOADED;\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\n return SHARED.DOCUMENT_REJECTED;\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\n return SHARED.DOCUMENT_ACCEPTED;\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\n default:\n return SHARED.DOCUMENT_REQUESTED;\n }\n }\n\n /**\n * Check if a section has valid content to display\n */\n private checkValidContent(section: ProcessedDocumentHistorySection): boolean {\n return section.list && section.list.length > 0 && \n section.list.some(item => \n item.requestDescription !== SHARED.EMPTY && \n item.documentUrl !== SHARED.EMPTY && \n (item.userName !== SHARED.EMPTY && item.userName !== SHARED.UNKNOWN_USER)\n );\n }\n\n /**\n * Process history data to add computed properties\n */\n get processedHistoryData(): ProcessedDocumentHistorySection[] {\n if (!this.historyData) {\n return [];\n }\n return this.historyData.map(section => {\n const processedSection: ProcessedDocumentHistorySection = {\n ...section,\n list: section.list.map(item => ({\n ...item,\n // Ensure dateTime has a fallback value\n dateTime: item.dateTime || 'No date available',\n actionIcon: this.documentHistoryStyleService.getActionIcon(item.label),\n actionColor: this.documentHistoryStyleService.getActionColor(item.label),\n actionBgColor: this.documentHistoryStyleService.getActionBgColor(item.label),\n actionBorderColor: this.documentHistoryStyleService.getActionBorderColor(item.label),\n actionIconBgColor: this.documentHistoryStyleService.getActionIconBgColor(item.label)\n }))\n };\n\n // Add accordion class based on the first item's label\n processedSection.accordionClass = this.getAccordionClass(processedSection);\n \n // Add hasValidContent property\n processedSection.hasValidContent = this.checkValidContent(processedSection);\n\n return processedSection;\n });\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 if (!documentUrl) {\n console.warn('No document URL provided for download');\n return;\n }\n\n // Create a temporary anchor element to trigger download\n const link = document.createElement('a');\n link.href = documentUrl;\n link.download = docName || 'document';\n link.target = '_blank';\n \n // Append to body, click, and remove\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\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 { 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 '../../../../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() 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 // 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\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 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.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.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\" *ngIf=\"isUploaded\">\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <!-- Reject Button -->\r\n <button \r\n class=\"action-btn reject-btn\" \r\n [ngClass]=\"rejectButtonClass\"\r\n (click)=\"onRejectClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isLoading\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? SHARED.BUTTON_LABEL_REJECTED : SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n\r\n <!-- Accept Button -->\r\n <button \r\n class=\"action-btn accept-btn\" \r\n [ngClass]=\"acceptButtonClass\"\r\n (click)=\"onAcceptClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_ACCEPTED || isLoading\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isLoading\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT }}</span>\r\n </button>\r\n\r\n <!-- Delete Button -->\r\n <button \r\n class=\"action-btn delete-btn\" \r\n (click)=\"onDeleteClick()\"\r\n [disabled]=\"isLoading\"\r\n [permission]=\"'Documents-DELETE'\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Accept Confirmation Dialog -->\r\n<p-dialog \r\n [(visible)]=\"showAcceptDialog\" \r\n [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" \r\n [modal]=\"true\" \r\n [draggable]=\"false\" \r\n [closable]=\"true\"\r\n [style]=\"{ width: '25rem', height: '25rem' }\"\r\n 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 \r\n id=\"acceptNote\"\r\n pInputTextarea \r\n [(ngModel)]=\"acceptNote\" \r\n [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\"\r\n class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button \r\n pButton \r\n [label]=\"SHARED.CANCEL_BUTTON_LABEL\" \r\n class=\"p-button-secondary\" \r\n (click)=\"onCancel()\">\r\n </button>\r\n <button \r\n pButton \r\n [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" \r\n class=\"p-button-success\" \r\n (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 \r\n [(visible)]=\"showRejectDialog\" \r\n [header]=\"SHARED.REJECT_CONFIRM_HEADER\" \r\n [modal]=\"true\" \r\n [draggable]=\"false\" \r\n [closable]=\"true\"\r\n [style]=\"{ width: '25rem', height: '25rem' }\"\r\n 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 \r\n id=\"rejectNote\"\r\n pInputTextarea \r\n [(ngModel)]=\"rejectNote\" \r\n [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\"\r\n class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button \r\n pButton \r\n [label]=\"SHARED.CANCEL_BUTTON_LABEL\" \r\n class=\"p-button-secondary\" \r\n (click)=\"onCancel()\">\r\n </button>\r\n <button \r\n pButton \r\n [label]=\"SHARED.REJECT_BUTTON_LABEL\" \r\n class=\"p-button-danger\" \r\n [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 * 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=\"grid\">\r\n <div class=\"col-12\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n <div class=\"p-fluid p-formgrid grid m-0\">\r\n <div class=\"col-12 md:col-12 md:flex justify-content-evenly\">\r\n @if(selectedDocument){\r\n <div id=\"outerContainer col-12 md:col-9\">\r\n <div\r\n *ngIf=\"isImage(selectedDocument?.contentType)\"\r\n class=\"img-container\"\r\n >\r\n <img\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n class=\"uploadedImages\"\r\n alt=\"Document Image\"\r\n />\r\n </div>\r\n @if(selectedDocument?.contentType && selectedDocument?.contentType === \"application/pdf\"){\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: 50vw; height: 75vh\"\r\n ></pdf-viewer>\r\n </div>\r\n }@else{\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=\"left-part col-12 md:col-3 pt-0\">\r\n @if(!selectedDocument?.isUploaded){\r\n <document-actions\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 <!-- <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.status !== 'Pending' && !!alertData?.status) ||\r\n alertData?.isAlert === false\r\n \"\r\n class=\"bg-green-500 border-none border-round-md flex align-items-center mb-3 p-2 px-3\"\r\n >\r\n <i\r\n class=\"pi pi-verified mr-2 cursor-pointer\"\r\n [ngStyle]=\"{\r\n color:\r\n alertData?.status === 'Pending' &&\r\n alertData?.isAlert !== false\r\n ? '#FFFFFF'\r\n : '#8A8EA6'\r\n }\"\r\n style=\"font-size: 20px\"\r\n ></i>\r\n <span class=\"font-semibold text-white\">Verified</span>\r\n </button>\r\n <div\r\n class=\"card mb-0\"\r\n [ngClass]=\"\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? 'alert-card'\r\n : 'success-alert'\r\n \"\r\n >\r\n <div class=\"flex align-items-center mb-2 pb-1\" *ngIf=\"alertData?.status !== 'Verified'\">\r\n <h4 class=\"mr-3 mt-0 mb-0 text-color font-bold\" style=\"font-size: 21px; font-weight: bold; border-color: rgba(68, 72, 109, 0.2) ;\" >Alerts</h4>\r\n <i\r\n class=\"pi pi-exclamation-triangle\"\r\n style=\"font-size: 20px\"\r\n [ngStyle]=\"{\r\n color:\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? '#FB392D'\r\n : '#8A8EA6'\r\n }\"\r\n ></i>\r\n </div>\r\n <p class=\"text-color mb-0\">{{ alertData?.alertMessage }}</p>\r\n </div>\r\n </div>\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 <!-- <app-linked-document (selectedDocumentChange)=\"handleSelectedDocument($event)\" [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\"></app-linked-document> -->\r\n </div>\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, DUMMY_DOCUMENT_SECTIONS } from '../../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { DocumentTypeModel } from '../../models/document-type.model';\r\nimport { DocumentUploadService } from '../../services/document-upload.service';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { PERMISSIONS } from '../../../../Shared/constant/PERMISSIONS';\r\nimport { DocumentTableBuilderService } from '../../services/document-table-builder.service';\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 { DocumentHelperService } from '../../services/document.service';\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 * Default visibility of the upload button.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() isUploadButtonVisible:boolean = SHARED.TRUE;\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 * The name of the document being uploaded or managed.\r\n * @type {string}\r\n * @memberof DocumentListComponent\r\n */\r\n documentName: string = SHARED.EMPTY;\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 set of permissions available for this component.\r\n */\r\n PERMISSION = PERMISSIONS;\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[] = [];\r\n\r\n /**\r\n * Document categories from the response\r\n */\r\n documentCategories: DocumentListResponse[] = [];\r\n\r\n /**\r\n * Completion counts for each category\r\n */\r\n categoryCompletionCounts: string[] = [];\r\n\r\n /**\r\n * Filter properties\r\n */\r\n @Input() status: string | null = null;\r\n @Input() category: string | null = null;\r\n @Input() searchKey: string | null = null;\r\n /**\r\n * Creates an instance of DocumentListComponent.\r\n * @class\r\n * @param {DocumentUploadService} documentUploadService - The service responsible for uploading documents.\r\n * @param {DocumentHttpService} documentHttpService - The service responsible for fetching documents from the server.\r\n * @param {DocumentQuery} documentQuery - The service responsible for geting stored documents.\r\n * @param {DocumentStore} documentStore - The service responsible for storing documents.\r\n */\r\n constructor(\r\n public documentUploadService: DocumentUploadService,\r\n public documentHttpService: DocumentHttpService, \r\n public documentQuery: DocumentQuery, \r\n public documentStore: DocumentStore,\r\n private documentTableBuilder: DocumentTableBuilderService,\r\n private documentHelperService: DocumentHelperService\r\n ) {\r\n \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['contextId'] && !changes['contextId'].firstChange) {\r\n // When contextId changes, refresh the document list for the new context\r\n this.refreshDocumentListForNewContext();\r\n }\r\n }\r\n\r\n /** \r\n * Initializes the component by fetching the document type list.\r\n */\r\n ngOnInit(): void {\r\n this.getDocumentTypeList();\r\n this.setupDocumentListSubscription();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handles the click event for file upload.\r\n * Prevents event propagation and displays the sidebar.\r\n * @param {MouseEvent} event - The click event triggered by the user.\r\n * @memberof DocumentListComponent\r\n */\r\n handleFileUploadClick(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.documentStore.setMessage(SHARED.EMPTY_ARRAY)\r\n this.isSidebarVisible = SHARED.TRUE;\r\n }\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() {\r\n const payload = { fileName: this.fileName };\r\n this.documentHttpService.updateDocumentName(this.selectedDocument._id, payload)\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 * Handles the upload action for a document.\r\n * Validates if a document type is selected and logs the result.\r\n * @memberof DocumentListComponent\r\n */\r\n handleUploadDocument(): void {\r\n if (this.selectedOption) {\r\n this.documentUploadService.getDocumentNameAndType(this.selectedOption);\r\n this.documentUploadService.handleTemplatedUpload();\r\n this.documentQuery.selectMessages().subscribe((message:Message[])=>{\r\n if(message.length > 0){\r\n this.messages = message;\r\n this.selectedOption = null;\r\n setTimeout(() => {\r\n this.messages = SHARED.EMPTY_ARRAY\r\n this.handleOpenSideBar(false);\r\n }, 1000);\r\n }\r\n })\r\n } else {\r\n console.error(ERRORS.INVALID_RECIPIENT);\r\n }\r\n }\r\n\r\n /** \r\n * Fetches the list of document types from the server.\r\n * Updates the options array with the available document types.\r\n * @memberof DocumentListComponent\r\n * @returns {void}\r\n */\r\n getDocumentTypeList() {\r\n this.documentHttpService.getDocumentTypes().subscribe({\r\n /**\r\n * Handles the successful API response.\r\n * @param {DocumentTypeModel[]} documentTypes - The list of document types returned by the API.\r\n */\r\n next: (documentTypes: DocumentTypeModel[]) => {\r\n if (documentTypes) {\r\n this.options = documentTypes.map((doc) => ({\r\n label: doc.label,\r\n value: doc._id\r\n }));\r\n } else {\r\n console.error(ERRORS.ERROR_ALLDOCUMENT_MISSING, documentTypes);\r\n }\r\n },\r\n /**\r\n * Handles errors if the request fails.\r\n * @param {any} err - The error object returned by the server.\r\n */\r\n error: (err: any) => {\r\n console.error(ERRORS.ERROR_DOCUMENT_TYPES, err);\r\n }\r\n });\r\n }\r\n \r\n handleOpenSideBar(isVisible : boolean){\r\n this.isSidebarVisible = isVisible\r\n }\r\n\r\n\r\n\r\n /**\r\n * Gets 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 * Gets 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 * Gets 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 * Builds document categories from the API response\r\n */\r\n buildDocumentCategories(): void {\r\n if (!this.documentListResponse) {\r\n this.documentCategories = SHARED.EMPTY_ARRAY;\r\n this.categoryTables = SHARED.EMPTY_ARRAY;\r\n this.categoryCompletionCounts = SHARED.EMPTY_ARRAY;\r\n return;\r\n }\r\n\r\n // Handle empty response - create a default category to show \"No records found\"\r\n if (this.documentListResponse.length === 0) {\r\n this.documentCategories = [{\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 this.categoryTables = [this.documentTableBuilder.buildDocumentTable([])];\r\n this.categoryCompletionCounts = ['0/0'];\r\n return;\r\n }\r\n\r\n this.documentCategories = [...this.documentListResponse];\r\n this.categoryTables = this.documentListResponse.map(category => \r\n this.documentTableBuilder.buildDocumentTable(category.list)\r\n );\r\n this.categoryCompletionCounts = this.documentListResponse.map(category => \r\n this.getCompletionCount(category)\r\n );\r\n }\r\n\r\n /**\r\n * Sets up subscription to document list response from store\r\n */\r\n private setupDocumentListSubscription(): void {\r\n this.documentListSubscription.add(\r\n this.documentQuery.selectDocumentListResponse().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('Error receiving document list response:', error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n\r\n handleTableRowClick(rowData: any): void {\r\n this.isdialogVisible = SHARED.TRUE;\r\n this.selectedDocument = 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 if (rowData._id && this.contextId) {\r\n this.documentHttpService.deleteDocument(rowData._id, this.contextId).subscribe({\r\n next: (response) => {\r\n console.log('Document deleted successfully:', response);\r\n // Refresh all data with current filters preserved\r\n this.documentHelperService.refreshAllDataWithCurrentFilters(this.contextId);\r\n },\r\n error: (error) => {\r\n console.error('Error deleting document:', error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Refreshes the document list for a new context\r\n */\r\n private refreshDocumentListForNewContext(): void {\r\n if (this.contextId && this.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(this.contextId);\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 if (this.contextId) {\r\n this.documentHelperService.refreshDocumentsWithCurrentSelection(this.contextId);\r\n }\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 [(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>{{ category.label }} Documents</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<div class=\"grid m-0\">\r\n <div class=\"col-12 p-0\">\r\n <p-sidebar [(visible)]=\"isSidebarVisible\" position=\"right\" [styleClass]=\"'right-sidebar'\" class=\"relative\">\r\n <ng-template pTemplate=\"header\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"side-bar-con\">\r\n <lib-document-upload [contextId]=\"contextId\"></lib-document-upload>\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"city\">Select Folder</label>\r\n <p-dropdown id=\"city\" optionLabel=\"label\" optionValue=\"value\" [options]=\"options\"\r\n placeholder=\"Select a Folder\" [(ngModel)]=\"selectedOption\"></p-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"footer\" class=\"bg-gray-100 p-0\">\r\n <div class=\"bg-gray-100 p-4\">\r\n <p-button label=\"Save\" class=\"p-button-rounded p-button-success save-btn\" (click)=\"handleUploadDocument()\"\r\n [disabled]=\"!selectedOption\">\r\n </p-button>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n </div>\r\n</div>","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 * Calculates completed documents for a menu item\r\n * @param item - The menu item\r\n * @returns Number of completed documents\r\n */\r\n getCompletedDocuments(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\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., \"1/2\")\r\n */\r\n getBadgeValue(item: DocumentCategoryItem): string {\r\n const completed = this.getCompletedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n return `${completed}/${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 completed = this.getCompletedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n \r\n if (total === 0) return 'info';\r\n if (completed === total) return 'success';\r\n if (completed > 0) return 'warning';\r\n return 'danger';\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} ","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { DocumentStore } from '../../state/document.store';\nimport { DocumentQuery } from '../../state/document.query';\nimport { DocumentCategory, DocumentCategoryItem } from '../../models/document-category.model';\nimport { DocumentMenuService } from '../../services/document-menu.service';\nimport { DocumentHelperService } from '../../services/document.service';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\n\ninterface MenuItemData {\n totalDocuments: number;\n completedDocuments: number;\n badgeValue: string;\n badgeSeverity: 'success' | 'info' | 'warning' | 'danger';\n shouldShowBadge: boolean;\n}\n@Component({\n selector: 'lib-documents-menu',\n standalone: false,\n templateUrl: './documents-menu.component.html',\n styleUrl: './documents-menu.component.scss'\n})\nexport class DocumentsMenuComponent implements OnInit, OnChanges {\n @Input() catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\n @Input() applicationNumber : string = SHARED.EMPTY\n @Input() contextId: string = SHARED.EMPTY\n selectedMenuItem: string | null = null;\n selectedMenuItemId: string | null = null;\n\n constructor(\n private documentStore: DocumentStore,\n private documentQuery: DocumentQuery,\n private documentMenuService: DocumentMenuService,\n private documentHelperService: DocumentHelperService\n ) {}\n\n ngOnInit(): void {\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\n this.selectedMenuItemId = menuItemId;\n this.selectedMenuItem = this.findMenuItemLabelById(menuItemId);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['catagories'] && this.catagories) {\n this.updateMenuItemsData();\n }\n \n if (changes['contextId'] && !changes['contextId'].firstChange) {\n // When contextId changes, clear current selection and refresh data\n this.handleContextIdChange();\n }\n }\n\n /**\n * Finds the label of a menu item by its _id\n * @param id The _id to search for\n * @returns The label of the menu item or null if not found\n */\n private findMenuItemLabelById(id: string | null): string | null {\n if (!id) return null;\n \n for (const category of this.catagories) {\n if (category.items) {\n const item = category.items.find(item => item._id === id);\n if (item) {\n return item.label;\n }\n }\n }\n return null;\n }\n\n \n /**\n * Update menu use catagories\n */\n private updateMenuItemsData(): void {\n this.catagories.forEach(category => {\n if (category.items) {\n category.items.forEach(item => {\n (item as any).menuData = {\n totalDocuments: this.documentMenuService.getTotalDocuments(item),\n completedDocuments: this.documentMenuService.getCompletedDocuments(item),\n badgeValue: this.documentMenuService.getBadgeValue(item),\n badgeSeverity: this.documentMenuService.getBadgeSeverity(item),\n shouldShowBadge: this.documentMenuService.shouldShowBadge(item)\n };\n });\n }\n });\n }\n\n \n /**\n * Handle the menu item click\n * @param {*} event - Event \n * @param {DocumentCategoryItem} item - catagory item\n */\n onMenuItemClick(event: any, item: DocumentCategoryItem): void {\n if (this.selectedMenuItemId === item._id) {\n this.selectedMenuItem = null;\n this.selectedMenuItemId = null;\n this.documentStore.setSelectedMenuItem(null);\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\n } else {\n this.selectedMenuItem = item.label;\n this.selectedMenuItemId = item._id;\n this.documentStore.setSelectedMenuItem(item._id);\n this.documentMenuService.handleUserListVisibility(item._id, this.catagories);\n }\n }\n\n onSelectMenuItem(menuItemId: string): void {\n const label = this.findMenuItemLabelById(menuItemId);\n if (label) {\n this.selectedMenuItem = label;\n this.selectedMenuItemId = menuItemId;\n this.documentStore.setSelectedMenuItem(menuItemId);\n this.documentMenuService.handleUserListVisibility(menuItemId, this.catagories);\n }\n }\n\n onUnselectMenuItem(): void {\n this.selectedMenuItem = null;\n this.selectedMenuItemId = null;\n this.documentStore.setSelectedMenuItem(null);\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\n }\n\n getSelectedMenuItem(): string | null {\n return this.selectedMenuItem;\n }\n\n /**\n * Handles contextId changes by clearing current selection and refreshing data\n */\n private handleContextIdChange(): void {\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n // Clear current selection\n this.selectedMenuItem = null;\n this.selectedMenuItemId = null;\n this.documentStore.setSelectedMenuItem(null);\n \n // Refresh documents for the new context\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\n }\n }\n\n getSelectedMenuItemId(): string | null {\n return this.selectedMenuItemId;\n }\n}\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]=\"catagories\" 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 }}</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';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentService } from '../../state/document.service';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { URLS } from '../../../../Shared/constant/URLS';\r\nimport { Subscription } from 'rxjs';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentStore } from '../../state/document.store';\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 { DocumentHelperService } from '../../services/document.service';\r\n\r\n/**\r\n *This component is responsible for managing and displaying a list of documents.\r\n * @class DocumentContainerComponent\r\n * @typedef {DocumentContainerComponent}\r\n */\r\n@Component({\r\n selector: 'lib-document-container',\r\n standalone: false,\r\n templateUrl: './document-container.component.html',\r\n styleUrl: './document-container.component.scss'\r\n})\r\nexport class DocumentContainerComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n /**\r\n * Creates an instance of DocumentContainerComponent.\r\n * @param {DocumentStore} documentStore - Query Store service to manage store document-related state.\r\n * @param {DocumentService} documentService - Service to manage document-related operations.\r\n * @param {DocumentQuery} documentQuery - Query service to manage document-related state.\r\n * @param {DocumentHttpService} documentHttpService - Service to make HTTP requests related to documents.\r\n */\r\n constructor(public documentStore: DocumentStore, public documentService: DocumentService, public documentQuery: DocumentQuery, public documentHttpService: DocumentHttpService, public documentHelperService : DocumentHelperService) {\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 * Get contextId in input.\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n \r\n \r\n /**\r\n * The list of folders.\r\n * @type {Array}\r\n */\r\n applicationNumber: string = SHARED.EMPTY\r\n catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\r\n userList: UserListModel[] = SHARED.EMPTY_ARRAY\r\n /**\r\n * Status data for the current selection\r\n * @type {StatusDataModel[]}\r\n */\r\n statusData: StatusDataModel[] = []\r\n\r\n /**\r\n * Document list response from API\r\n * @type {DocumentListResponse | null}\r\n */\r\n documentListResponse: DocumentListResponse[] | null = null;\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 * Handles changes to input properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['contextId'] && !changes['contextId'].firstChange) {\r\n // When contextId changes, refetch all data for the new context\r\n this.refetchAllDataForNewContext();\r\n }\r\n }\r\n\r\n /**\r\n * Fetches the folder and document data on initialization.\r\n * @returns {void}\r\n */\r\n ngOnInit(): void {\r\n this.fetchDocumentCatagories();\r\n this.fetchUserListWithFilters();\r\n this.setupStatusDataSubscriptions();\r\n this.setupFilteredDocumentSubscription();\r\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\r\n }\r\n\r\n /**\r\n * Sets up subscriptions to monitor menu item and user selection changes\r\n * to trigger status data fetching and user list refreshing\r\n */\r\n private setupStatusDataSubscriptions(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItem => {\r\n this.fetchStatusData();\r\n this.fetchUserListWithFilters();\r\n })\r\n );\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\r\n this.fetchStatusData();\r\n this.fetchUserListWithFilters();\r\n })\r\n );\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedStatus().subscribe(status => {\r\n this.fetchStatusData();\r\n this.fetchUserListWithFilters();\r\n })\r\n );\r\n this.fetchStatusData();\r\n this.fetchUserListWithFilters();\r\n }\r\n\r\n /**\r\n * Fetches status data based on current selections\r\n */\r\n private fetchStatusData(): void {\r\n if (!this.contextId) {\r\n console.warn('Context ID is required to fetch status data');\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getSelectionState();\r\n const contextId = currentState.userId || null\r\n const categoryId = currentState.menuItem || null; \r\n this.documentHttpService.getStatusDocumentCount(this.contextId,contextId,categoryId).subscribe({\r\n next: (statusData) => {\r\n this.statusData = statusData;\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error fetching status data:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Fetches userlist data with current filters applied\r\n */\r\n fetchUserListWithFilters(): void {\r\n if (!this.contextId) {\r\n console.warn('Context ID is required to fetch user list');\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getSelectionState();\r\n // For user list, we use the contextId but the API might need additional parameters\r\n // based on current filters. For now, we'll use the base contextId\r\n // If the API supports filtering by menu item or status, we can add those parameters\r\n this.documentHttpService.getUserListByContextId(this.contextId).subscribe({\r\n next: (res: UserListModel[]) => {\r\n this.userList = res;\r\n this.documentStore.setUserList(res);\r\n },\r\n error: (err: any) => {\r\n console.error('Error fetching user list with filters:', err);\r\n }\r\n });\r\n }\r\n /**\r\n * Fetches document catagory data.\r\n */\r\n fetchDocumentCatagories(): void {\r\n const categoriesSubscription = this.documentHttpService.getDocumentCatagories(this.contextId).subscribe({\r\n next: (categories: any) => {\r\n if (categories) {\r\n this.catagories = categories.categories;\r\n this.applicationNumber = categories.applicationNumber\r\n }\r\n },\r\n error: (err: any) => {\r\n console.error('Error fetching document categories:', err);\r\n }\r\n });\r\n this.subscription.add(categoriesSubscription);\r\n }\r\n \r\n /**\r\n * Refetches all data when contextId changes\r\n */\r\n private refetchAllDataForNewContext(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n // Clear current state\r\n this.documentStore.clearSelectionState();\r\n this.documentStore.clearDocumentViewerState();\r\n \r\n // Refetch all data for the new context\r\n this.fetchDocumentCatagories();\r\n this.fetchUserListWithFilters();\r\n this.fetchStatusData();\r\n \r\n // Reinitialize the selection watcher with the new contextId\r\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Sets up subscription to listen for filtered document responses\r\n */\r\n private setupFilteredDocumentSubscription(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectDocumentListResponse().subscribe({\r\n next: (response: any) => {\r\n this.documentListResponse = response;\r\n },\r\n error: (error: any) => {\r\n console.error('Error receiving filtered documents:', error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /** \r\n * Unsubscribe subscription on destroy of component and clean up state.\r\n */\r\n ngOnDestroy(): void {\r\n // Unsubscribe from all subscriptions to prevent memory leaks\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n \r\n // Clean up any state that might have been set during component lifecycle\r\n this.documentStore.clearSelectionState();\r\n this.documentStore.clearDocumentViewerState();\r\n // Clear any cached data\r\n this.catagories = [];\r\n this.userList = [];\r\n this.statusData = [];\r\n this.documentListResponse = null;\r\n this.applicationNumber = '';\r\n }\r\n}\r\n","<div class=\"grid m-0 h-full flex\">\r\n <div class=\"col-12 md:col-3 lg:col-3\">\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-9 lg:col-9 p-0 h-full\" [ngClass]=\"{'custom-scroll': true}\">\r\n <div>\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\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 ],\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 sidebar in the UI.\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 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 ],\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/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.DocumentHelperService","i2.DocumentStore","i3.DocumentQuery","i4.UserListService","i1.DocumentQuery","i2.DocumentHelperService","i3.StatusCalculatorService","i4","debounceTime","distinctUntilChanged","i2","i2.UserListComponent","i3.DocumentStatusComponent","i4.DocumentSearchComponent","i1.DocumentService","i3","i1.SessionService","i5","i1.DocumentUploadService","i2.DocumentService","i4.FileFormatService","i6","i1.DocumentHttpService","i4.DocumentStore","i5.DocumentQuery","i1.DocumentHistoryStyleService","i1.DocumentActionsService","i7","i8.HasPermissionDirective","i4.DocumentViewerService","i8.DocumentHistoryComponent","i9.DocumentActionsComponent","i2.DocumentHttpService","i5.DocumentTableBuilderService","i6.DocumentHelperService","i8","i9","i11","i12","i13","i16.TablePrimaryComponent","i17.DocumentUploadComponent","i18.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/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/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/lib/document/services/document-upload.service.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/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/file-format.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/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/directives/permission.directive.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\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 = \"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 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 return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}`, entity).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}/${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 \r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`).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 return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`, payload).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 return this.http.get<UserListModel[]>(`${this.apiUrl}${URLS.USERLIST}${contextId}`).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 return this.http.get<StatusDataModel[]>(url, { params }).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\r\n return this.http.get<any>(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params }).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 return this.http.get<DocumentHistorySection[]>(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`);\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 return this.http.put<any>(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload).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 return this.http.delete<any>(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`).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 } 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 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 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 // 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 * 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 } 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 <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\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 } 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;\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 // Create a subject to handle search term changes\r\n const searchSubject = new Subject<string>();\r\n \r\n searchSubject.pipe(\r\n takeUntil(this.destroy$),\r\n debounceTime(500), // Wait 500ms after user stops typing\r\n distinctUntilChanged() // Only emit if value has changed\r\n ).subscribe(searchTerm => {\r\n this.onSearchChange(searchTerm);\r\n });\r\n\r\n // Store the subject for use in template\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 // Normalize the search term (trim whitespace and convert to null if empty)\r\n const normalizedSearchTerm = searchTerm?.trim() || null;\r\n \r\n // Update the search key in the store\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 // Subject for handling search input changes\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</div> ","import { Component, Input, OnInit } 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\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[] = [];\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[] = [];\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[] = [];\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 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<document-search [contextId]=\"contextId\"></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>","import { Injectable } 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 /**\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() {\r\n let formsData = this.handleCreateFormData()\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 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 * @param {any} event - The event emitted by the upload service on success.\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 },\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.documentUploadStore.setMessage([{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) {\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() {\r\n if (this.uploadedFile && this.contextId && this.docTypeId) {\r\n let formData = new FormData();\r\n formData.append(SHARED.FILE, this.uploadedFile, this.uploadedFile.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId)\r\n formData.append(SHARED.DOCUMENT_TYPE_ID, this.docTypeId)\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 { 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 { 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(SHARED.DOCUMENT_TYPES_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 * Handle document upload\r\n */\r\n handleUploadDocument(selectedOption: string | null): Observable<Message[]> {\r\n if (!selectedOption) {\r\n return throwError(() => new Error(ERRORS.INVALID_RECIPIENT));\r\n }\r\n\r\n this.documentUploadService.getDocumentNameAndType(selectedOption);\r\n this.documentUploadService.handleTemplatedUpload();\r\n \r\n return this.documentQuery.selectMessages();\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 { 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 (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 { 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 { ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation } 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\n/**\r\n * A component for handling document uploads, including file selection, removal, and progress tracking.\r\n * @class DocumentUploadComponent\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 {\r\n\r\n \r\n /**\r\n * Represents the file size.\r\n * @type {number}\r\n */\r\n fileSize: string = SHARED.EMPTY;\r\n /**\r\n * Represent contextId\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY\r\n\r\n /**\r\n * To make file explorer visible.\r\n * @type {!FileUpload}\r\n */\r\n @ViewChild('fileUploader') fileUploader!: FileUpload;\r\n\r\n fileProgress: Map<File, number> = new Map();\r\n\r\n /**\r\n * List of files selected for upload.\r\n * @type {File[]}\r\n */\r\n uploadedFiles: { file: File; formattedSize: string; progress: number }[] = [];\r\n\r\n\r\n /**\r\n * Percentage of the total size calculated for displaying upload progress.\r\n * @type {number}\r\n */\r\n totalSizePercent: number = SHARED.INITIAL_COUNT;\r\n\r\n /**\r\n * The current upload progress percentage (SHARED.INITIAL_VALUE-100).\r\n * @type {number}\r\n */\r\n uploadProgress: number = SHARED.INITIAL_COUNT;\r\n\r\n\r\n /**\r\n * Creates an instance of DocumentUploadComponent.\r\n * @class\r\n * @param {DocumentUploadService} documentUpload - Service for handling document upload.\r\n * @param {DocumentService} uploadService - Service for handling document upload.\r\n * @param {PrimeNGConfig} config - PrimeNG configuration.\r\n * @param {FileFormatService} fileFormatService - Service for formatting file sizes.\r\n * @param {MessageService} messageService - Service for displaying messages.\r\n * @param {ChangeDetectorRef} cdr - Service for detecting changes.\r\n */\r\n constructor(public documentUpload : DocumentUploadService,public uploadService: DocumentService, private config: PrimeNGConfig, public fileFormatService: FileFormatService, public messageService: MessageService, public cdr: ChangeDetectorRef) { }\r\n\r\n /**\r\n * Open the file explorer.\r\n * @param {*} event - The triggering event.\r\n * @param {() => void} callback - A callback function to execute.\r\n * @returns {void} - No return value.\r\n */\r\n choose(event: any, callback: () => void) {\r\n callback();\r\n }\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 * @param {File} file - The file to upload.\r\n * @returns {void}\r\n */\r\n handleTemplatedUpload(file: File) {\r\n this.documentUpload.getUploadFileData(file, this.contextId)\r\n const formattedSize = this.fileFormatService.formatFileSize(file.size, this.config);\r\n const progress = 100;\r\n this.uploadedFiles.push({ file, formattedSize, progress });\r\n this.fileProgress.set(file, progress);\r\n this.totalSizePercent = 100;\r\n }\r\n\r\n /**\r\n * Handle the creation of formdata.\r\n * @param {File} file - The file to append in formdata.\r\n * @returns {*} - The formdata object.\r\n */\r\n handleCreateFormData(file: File) {\r\n const formData = new FormData();\r\n formData.append(SHARED.FILE, file, file.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId)\r\n return formData;\r\n }\r\n /**\r\n * Handles the event when new files are selected.\r\n * @param { { currentFiles: File[] } } event - The event containing the newly selected files.\r\n * @returns {void} - No return value.\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 /**\r\n * Formats the given file size in bytes into a readable format (e.g., KB, MB).\r\n * @param {number} bytes - The size of the file in bytes.\r\n * @returns {string} The formatted file size (e.g., '1.2 KB', '2.3 MB').\r\n */\r\n formatSize(bytes: number) {\r\n this.fileSize = this.fileFormatService.formatFileSize(bytes, this.config)\r\n }\r\n\r\n /**\r\n * Handles the removal of a file from the uploaded files list.\r\n * @param {File} file - The file to be removed.\r\n * @param {number} index - The index of the file in the uploaded files list.\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.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Major progress for the progress bar.\r\n * @param {File} file - File to check progress for.\r\n * @returns {number} - The progress percentage for the file.\r\n */\r\n getProgress(file: File): number {\r\n return this.fileProgress.get(file) || SHARED.INITIAL_COUNT;\r\n }\r\n\r\n /**\r\n * Triggers the file upload dialog.\r\n * Opens the file explorer for selecting files.\r\n * @returns {void}\r\n */\r\n triggerFileUpload() {\r\n this.fileUploader.choose();\r\n }\r\n\r\n}\r\n\r\n","<div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload #fileUploader [multiple]=\"true\" auto=\"true\" accept=\"image/png,application/pdf\" maxFileSize=\"26214400\"\r\n (onSelect)=\"onSelectedFiles($event)\">\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 (onClick)=\"choose($event, chooseCallback)\" icon=\"pi pi-images\" [rounded]=\"true\"\r\n [outlined]=\"true\" />\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 \"> {{ uploadedFile.formattedSize }}</div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> {{ uploadedFile.progress }} %</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 [value]=\"totalSizePercent\" [showValue]=\"false\" styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': totalSizePercent > 100 }\">\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>","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 } from '@angular/common/http';\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(private documentHistoryStyleService: DocumentHistoryStyleService, private http : HttpClient) {}\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 this.http.get(documentUrl, { responseType: 'blob' }).subscribe({\r\n next: (blob) => {\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(ERRORS.DOWNLOAD_FAIL, err);\r\n }\r\n });\r\n }\r\n} ","import { Component, Input } from '@angular/core';\r\nimport { DocumentHistorySection } from '../../models/document-history.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHistoryService } from '../../services/document-history.service';\r\n\r\n// Extended interface for processed items with computed properties\r\ninterface ProcessedDocumentHistoryItem {\r\n label: string;\r\n dateTime: string;\r\n requestDescription: string;\r\n userName: string;\r\n userRole: string;\r\n documentUrl?: string;\r\n docName?: string;\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/**\r\n * Component for displaying document history in a timeline format.\r\n */\r\n@Component({\r\n selector: 'document-history',\r\n standalone: false,\r\n templateUrl: './document-history.component.html',\r\n styleUrls: ['./document-history.component.scss']\r\n})\r\nexport class DocumentHistoryComponent {\r\n \r\n /**\r\n * Input data for document history sections\r\n */\r\n @Input() historyData: DocumentHistorySection[] = SHARED.EMPTY_ARRAY;\r\n \r\n /**\r\n * Whether to show the history component\r\n */\r\n @Input() showHistory: boolean = false;\r\n\r\n /**\r\n * Active accordion index for controlling expand/collapse\r\n */\r\n activeAccordionIndex: number = 0;\r\n\r\n /**\r\n * Whether the accordion is expanded\r\n */\r\n isAccordionExpanded: boolean = true;\r\n\r\n constructor(private documentHistoryService: DocumentHistoryService) {}\r\n\r\n /**\r\n * Handle accordion open event\r\n */\r\n onAccordionOpen(): void {\r\n this.isAccordionExpanded = true;\r\n this.activeAccordionIndex = 0;\r\n }\r\n\r\n /**\r\n * Handle accordion close event\r\n */\r\n onAccordionClose(): void {\r\n this.isAccordionExpanded = false;\r\n this.activeAccordionIndex = -1;\r\n }\r\n\r\n /**\r\n * Toggle accordion state\r\n */\r\n toggleAccordion(): void {\r\n if (this.isAccordionExpanded) {\r\n this.onAccordionClose();\r\n } else {\r\n this.onAccordionOpen();\r\n }\r\n }\r\n\r\n /**\r\n * Process history data to add computed properties\r\n */\r\n get processedHistoryData(): ProcessedDocumentHistorySection[] {\r\n return this.documentHistoryService.processHistoryData(this.historyData);\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 this.documentHistoryService.downloadDocument(documentUrl, docName);\r\n }\r\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 { 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 '../../../../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() 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 // 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\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 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.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.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\" *ngIf=\"isUploaded\">\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <!-- Reject Button -->\r\n <button \r\n class=\"action-btn reject-btn\" \r\n [ngClass]=\"rejectButtonClass\"\r\n (click)=\"onRejectClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isLoading\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? SHARED.BUTTON_LABEL_REJECTED : SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n\r\n <!-- Accept Button -->\r\n <button \r\n class=\"action-btn accept-btn\" \r\n [ngClass]=\"acceptButtonClass\"\r\n (click)=\"onAcceptClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_ACCEPTED || isLoading\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isLoading\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT }}</span>\r\n </button>\r\n\r\n <!-- Delete Button -->\r\n <button \r\n class=\"action-btn delete-btn\" \r\n (click)=\"onDeleteClick()\"\r\n [disabled]=\"isLoading\"\r\n [permission]=\"'Documents-DELETE'\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Accept Confirmation Dialog -->\r\n<p-dialog \r\n [(visible)]=\"showAcceptDialog\" \r\n [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" \r\n [modal]=\"true\" \r\n [draggable]=\"false\" \r\n [closable]=\"true\"\r\n [style]=\"{ width: '25rem', height: '25rem' }\"\r\n 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 \r\n id=\"acceptNote\"\r\n pInputTextarea \r\n [(ngModel)]=\"acceptNote\" \r\n [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\"\r\n class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button \r\n pButton \r\n [label]=\"SHARED.CANCEL_BUTTON_LABEL\" \r\n class=\"p-button-secondary\" \r\n (click)=\"onCancel()\">\r\n </button>\r\n <button \r\n pButton \r\n [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" \r\n class=\"p-button-success\" \r\n (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 \r\n [(visible)]=\"showRejectDialog\" \r\n [header]=\"SHARED.REJECT_CONFIRM_HEADER\" \r\n [modal]=\"true\" \r\n [draggable]=\"false\" \r\n [closable]=\"true\"\r\n [style]=\"{ width: '25rem', height: '25rem' }\"\r\n 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 \r\n id=\"rejectNote\"\r\n pInputTextarea \r\n [(ngModel)]=\"rejectNote\" \r\n [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\"\r\n class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button \r\n pButton \r\n [label]=\"SHARED.CANCEL_BUTTON_LABEL\" \r\n class=\"p-button-secondary\" \r\n (click)=\"onCancel()\">\r\n </button>\r\n <button \r\n pButton \r\n [label]=\"SHARED.REJECT_BUTTON_LABEL\" \r\n class=\"p-button-danger\" \r\n [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 * 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=\"grid\">\r\n <div class=\"col-12\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n <div class=\"p-fluid p-formgrid grid m-0\">\r\n <div class=\"col-12 md:col-12 md:flex justify-content-evenly\">\r\n @if(selectedDocument){\r\n <div id=\"outerContainer col-12 md:col-9\">\r\n <div\r\n *ngIf=\"isImage(selectedDocument?.contentType)\"\r\n class=\"img-container\"\r\n >\r\n <img\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n class=\"uploadedImages\"\r\n alt=\"Document Image\"\r\n />\r\n </div>\r\n @if(selectedDocument?.contentType && selectedDocument?.contentType === \"application/pdf\"){\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: 50vw; height: 75vh\"\r\n ></pdf-viewer>\r\n </div>\r\n }@else{\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=\"left-part col-12 md:col-3 pt-0\">\r\n @if(!selectedDocument?.isUploaded){\r\n <document-actions\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 <!-- <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.status !== 'Pending' && !!alertData?.status) ||\r\n alertData?.isAlert === false\r\n \"\r\n class=\"bg-green-500 border-none border-round-md flex align-items-center mb-3 p-2 px-3\"\r\n >\r\n <i\r\n class=\"pi pi-verified mr-2 cursor-pointer\"\r\n [ngStyle]=\"{\r\n color:\r\n alertData?.status === 'Pending' &&\r\n alertData?.isAlert !== false\r\n ? '#FFFFFF'\r\n : '#8A8EA6'\r\n }\"\r\n style=\"font-size: 20px\"\r\n ></i>\r\n <span class=\"font-semibold text-white\">Verified</span>\r\n </button>\r\n <div\r\n class=\"card mb-0\"\r\n [ngClass]=\"\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? 'alert-card'\r\n : 'success-alert'\r\n \"\r\n >\r\n <div class=\"flex align-items-center mb-2 pb-1\" *ngIf=\"alertData?.status !== 'Verified'\">\r\n <h4 class=\"mr-3 mt-0 mb-0 text-color font-bold\" style=\"font-size: 21px; font-weight: bold; border-color: rgba(68, 72, 109, 0.2) ;\" >Alerts</h4>\r\n <i\r\n class=\"pi pi-exclamation-triangle\"\r\n style=\"font-size: 20px\"\r\n [ngStyle]=\"{\r\n color:\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? '#FB392D'\r\n : '#8A8EA6'\r\n }\"\r\n ></i>\r\n </div>\r\n <p class=\"text-color mb-0\">{{ alertData?.alertMessage }}</p>\r\n </div>\r\n </div>\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 <!-- <app-linked-document (selectedDocumentChange)=\"handleSelectedDocument($event)\" [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\"></app-linked-document> -->\r\n </div>\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[] = [];\r\n\r\n /**\r\n * Document categories from the response\r\n */\r\n documentCategories: DocumentListResponse[] = [];\r\n\r\n /**\r\n * Completion counts for each category\r\n */\r\n categoryCompletionCounts: string[] = [];\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 * Handles the upload action for a document.\r\n * Validates if a document type is selected and logs the result.\r\n * @memberof DocumentListComponent\r\n */\r\n handleUploadDocument(): void {\r\n this.documentListService.handleUploadDocument(this.selectedOption)\r\n .subscribe({\r\n next: (message: Message[]) => {\r\n if (message.length > 0) {\r\n this.messages = message;\r\n this.selectedOption = null;\r\n setTimeout(() => {\r\n this.messages = SHARED.EMPTY_ARRAY;\r\n this.handleOpenSideBar(false);\r\n }, 1000);\r\n }\r\n },\r\n error: (error) => {\r\n console.error(error.message);\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 private 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 [(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>{{ category.label }} Documents</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<div class=\"grid m-0\">\r\n <div class=\"col-12 p-0\">\r\n <p-sidebar [(visible)]=\"isSidebarVisible\" position=\"right\" [styleClass]=\"'right-sidebar'\" class=\"relative\">\r\n <ng-template pTemplate=\"header\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"side-bar-con\">\r\n <lib-document-upload [contextId]=\"contextId\"></lib-document-upload>\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"city\">Select Folder</label>\r\n <p-dropdown id=\"city\" optionLabel=\"label\" optionValue=\"value\" [options]=\"options\"\r\n placeholder=\"Select a Folder\" [(ngModel)]=\"selectedOption\"></p-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"footer\" class=\"bg-gray-100 p-0\">\r\n <div class=\"bg-gray-100 p-4\">\r\n <p-button label=\"Save\" class=\"p-button-rounded p-button-success save-btn\" (click)=\"handleUploadDocument()\"\r\n [disabled]=\"!selectedOption\">\r\n </p-button>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n </div>\r\n</div>","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 * Calculates completed documents for a menu item\r\n * @param item - The menu item\r\n * @returns Number of completed documents\r\n */\r\n getCompletedDocuments(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\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., \"1/2\")\r\n */\r\n getBadgeValue(item: DocumentCategoryItem): string {\r\n const completed = this.getCompletedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n return `${completed}/${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 completed = this.getCompletedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n \r\n if (total === 0) return 'info';\r\n if (completed === total) return 'success';\r\n if (completed > 0) return 'warning';\r\n return 'danger';\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} ","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 completedDocuments: 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['catagories'] && this.catagories) {\r\n this.updateMenuItemsData();\r\n }\r\n \r\n if (changes['contextId'] && !changes['contextId'].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 completedDocuments: this.documentMenuService.getCompletedDocuments(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 this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\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 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 }}</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';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentService } from '../../state/document.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentStore } from '../../state/document.store';\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 { DocumentHelperService } from '../../services/document.service';\r\n\r\n/**\r\n *This component is responsible for managing and displaying a list of documents.\r\n * @class DocumentContainerComponent\r\n * @typedef {DocumentContainerComponent}\r\n */\r\n@Component({\r\n selector: 'lib-document-container',\r\n standalone: false,\r\n templateUrl: './document-container.component.html',\r\n styleUrl: './document-container.component.scss'\r\n})\r\nexport class DocumentContainerComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n /**\r\n * Creates an instance of DocumentContainerComponent.\r\n * @param {DocumentStore} documentStore - Query Store service to manage store document-related state.\r\n * @param {DocumentService} documentService - Service to manage document-related operations.\r\n * @param {DocumentQuery} documentQuery - Query service to manage document-related state.\r\n * @param {DocumentHttpService} documentHttpService - Service to make HTTP requests related to documents.\r\n */\r\n constructor(public documentStore: DocumentStore, public documentService: DocumentService, public documentQuery: DocumentQuery, public documentHttpService: DocumentHttpService, public documentHelperService : DocumentHelperService) {\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 * Get contextId in input.\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n \r\n \r\n /**\r\n * The list of folders.\r\n * @type {Array}\r\n */\r\n applicationNumber: string = SHARED.EMPTY\r\n catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\r\n userList: UserListModel[] = SHARED.EMPTY_ARRAY\r\n /**\r\n * Status data for the current selection\r\n * @type {StatusDataModel[]}\r\n */\r\n statusData: StatusDataModel[] = []\r\n\r\n /**\r\n * Document list response from API\r\n * @type {DocumentListResponse | null}\r\n */\r\n documentListResponse: DocumentListResponse[] | null = null;\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 * 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 // When contextId changes, refetch all data for the new context\r\n this.refetchAllDataForNewContext();\r\n }\r\n }\r\n\r\n /**\r\n * Fetches the folder and document data on initialization.\r\n * @returns {void}\r\n */\r\n ngOnInit(): void {\r\n this.initializeData();\r\n }\r\n\r\n /**\r\n * Initialize all data with proper sequencing to avoid duplicate API calls\r\n */\r\n private initializeData(): void {\r\n this.fetchDocumentCatagories();\r\n this.fetchUserListWithFilters();\r\n this.setupStatusDataSubscriptions();\r\n this.setupFilteredDocumentSubscription();\r\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\r\n }\r\n\r\n /**\r\n * Sets up subscriptions to monitor menu item and user selection changes\r\n * to trigger status data fetching and user list refreshing\r\n */\r\n private setupStatusDataSubscriptions(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItem => {\r\n this.fetchStatusData();\r\n if (this.catagories.length > 0) {\r\n this.fetchUserListWithFilters();\r\n }\r\n })\r\n );\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\r\n this.fetchStatusData();\r\n if (this.catagories.length > 0) {\r\n this.fetchUserListWithFilters();\r\n }\r\n })\r\n );\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedStatus().subscribe(status => {\r\n this.fetchStatusData();\r\n if (this.catagories.length > 0) {\r\n this.fetchUserListWithFilters();\r\n }\r\n })\r\n );\r\n this.fetchStatusData();\r\n }\r\n\r\n /**\r\n * Fetches status data based on current selections\r\n */\r\n private fetchStatusData(): void {\r\n if (!this.contextId) {\r\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getSelectionState();\r\n const contextId = currentState.userId || null\r\n const categoryId = currentState.menuItem || null; \r\n this.documentHttpService.getStatusDocumentCount(this.contextId,contextId,categoryId).subscribe({\r\n next: (statusData) => {\r\n this.statusData = statusData;\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_FETCHING_STATUS_DATA, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Fetches userlist data with current filters applied\r\n */\r\n fetchUserListWithFilters(): void {\r\n if (!this.contextId) {\r\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getSelectionState();\r\n // For user list, we use the contextId but the API might need additional parameters\r\n // based on current filters. For now, we'll use the base contextId\r\n // If the API supports filtering by menu item or status, we can add those parameters\r\n this.documentHttpService.getUserListByContextId(this.contextId).subscribe({\r\n next: (res: UserListModel[]) => {\r\n this.userList = res;\r\n this.documentStore.setUserList(res);\r\n },\r\n error: (err: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_USER_LIST, err);\r\n }\r\n });\r\n }\r\n /**\r\n * Fetches document catagory data.\r\n */\r\n fetchDocumentCatagories(): void {\r\n const categoriesSubscription = this.documentHttpService.getDocumentCatagories(this.contextId).subscribe({\r\n next: (categories: any) => {\r\n if (categories) {\r\n this.catagories = categories.categories;\r\n this.applicationNumber = categories.applicationNumber;\r\n this.documentStore.setDocumentCategories(categories.categories);\r\n }\r\n },\r\n error: (err: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENT_CATEGORIES, err);\r\n }\r\n });\r\n this.subscription.add(categoriesSubscription);\r\n }\r\n \r\n /**\r\n * Refetches all data when contextId changes\r\n */\r\n private refetchAllDataForNewContext(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.documentStore.clearSelectionState();\r\n this.documentStore.clearDocumentViewerState();\r\n this.fetchDocumentCatagories();\r\n this.fetchUserListWithFilters();\r\n this.fetchStatusData();\r\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Sets up subscription to listen for filtered document responses\r\n */\r\n private setupFilteredDocumentSubscription(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectDocumentListResponse().subscribe({\r\n next: (response: any) => {\r\n this.documentListResponse = response;\r\n },\r\n error: (error: any) => {\r\n console.error(ERRORS.ERROR_RECEIVING_DOCUMENT_LIST, error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /** \r\n * Unsubscribe subscription on destroy of component and clean up state.\r\n */\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n \r\n this.documentStore.clearSelectionState();\r\n this.documentStore.clearDocumentViewerState();\r\n this.catagories = SHARED.EMPTY_ARRAY;\r\n this.userList = SHARED.EMPTY_ARRAY;\r\n this.statusData = SHARED.EMPTY_ARRAY;\r\n this.documentListResponse = null;\r\n this.applicationNumber = SHARED.EMPTY;\r\n }\r\n}\r\n","<div class=\"grid m-0 h-full flex\">\r\n <div class=\"col-12 md:col-3 lg:col-3\">\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-9 lg:col-9 p-0 h-full\" [ngClass]=\"{'custom-scroll': true}\">\r\n <div>\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\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 ],\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 sidebar in the UI.\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 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 ],\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/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.DocumentHelperService","i2.DocumentStore","i3.DocumentQuery","i4.UserListService","i5","i1.DocumentQuery","i2.DocumentHelperService","i3.StatusCalculatorService","i4","debounceTime","distinctUntilChanged","i2","i2.UserListComponent","i3.DocumentStatusComponent","i4.DocumentSearchComponent","i1.DocumentService","i3","i1.SessionService","i1.DocumentUploadService","i2.DocumentHttpService","i4.DocumentStore","i5.DocumentTableBuilderService","i6.DocumentHelperService","i2.DocumentService","i4.FileFormatService","i6","i1.DocumentHttpService","i5.DocumentQuery","i1.DocumentHistoryStyleService","i1.DocumentHistoryService","i1.DocumentActionsService","i7","i8.HasPermissionDirective","i4.DocumentViewerService","i8.DocumentHistoryComponent","i9.DocumentActionsComponent","i1.DocumentListService","i8","i11.TablePrimaryComponent","i12.DocumentUploadComponent","i13.DocumentViewerComponent","i3.DocumentMenuService","i4.DocumentHelperService","i9","i4.DocumentHttpService","i5.DocumentHelperService","i7.FolderContainerComponent","i8.DocumentListComponent","i9.DocumentsMenuComponent"],"mappings":"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"}