cat-documents-ng 0.1.36 → 0.1.37

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.
@@ -1507,7 +1507,7 @@ class DocumentViewerComponent {
1507
1507
  this.getDocumentAlertList();
1508
1508
  if (this.selectedDocument) {
1509
1509
  this.documentService.set(this.selectedDocument);
1510
- this.alertData = DocumentAlertList.find((res) => res.status === this.selectedDocument?.status);
1510
+ // this.alertData = DocumentAlertList.find((res: any) => res.status === this.selectedDocument?.status);
1511
1511
  }
1512
1512
  }
1513
1513
  getDocumentAlertList() {
@@ -1537,11 +1537,11 @@ class DocumentViewerComponent {
1537
1537
  this.subscription.unsubscribe();
1538
1538
  }
1539
1539
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DocumentViewerComponent, deps: [{ token: DocumentHttpService }, { token: DocumentService }], target: i0.ɵɵFactoryTarget.Component });
1540
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DocumentViewerComponent, isStandalone: false, selector: "document-viewer", inputs: { selectedDocument: "selectedDocument", documentList: "documentList" }, outputs: { updatedDocument: "updatedDocument" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\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-7\">\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 p-0\">\r\n <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.alertStatus !== 'Pending' && !!alertData?.alertStatus) ||\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?.alertStatus === '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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?.alertStatus !== '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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 <ng-content select=\"[action-launcher]\"></ng-content>\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", styles: [".alert-card{background-color:#fb392d1a}.success-alert{border-radius:10px;border:1px solid rgba(251,57,45,.1);background:linear-gradient(0deg,#dedede 0% 100%),#fff}.p-timeline-event-opposite{display:none}.decription{color:#676b89}.textAreaControl textarea{width:100%;resize:vertical;max-width:100%}.document-btn-wrapper .p-button-outlined{color:#f57c00}.document-viewer .p-dialog{width:100%;height:100%;max-height:100%!important;box-shadow:none!important}.document-viewer .p-dialog-header-close-icon{height:20px;width:20px}.document-viewer .p-dialog-header{background-color:#fff;border-radius:0;border-bottom:.771px solid rgba(68,72,109,.1);align-items:start!important}.document-viewer .p-dialog-content{background-color:#fff;border-radius:0}.uploadedImages{width:95%;height:100%;object-fit:contain;border-radius:10px;padding:22px;background:#f7f8fa;border:1px solid #F0F0F0}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: LinkedDocumentComponent, selector: "app-linked-document", inputs: ["selectedDocument", "documentList"], outputs: ["selectedDocumentChange"] }], encapsulation: i0.ViewEncapsulation.None });
1540
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DocumentViewerComponent, isStandalone: false, selector: "document-viewer", inputs: { selectedDocument: "selectedDocument", documentList: "documentList" }, outputs: { updatedDocument: "updatedDocument" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\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-7\">\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 p-0\">\r\n <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.alertStatus !== 'Pending' && !!alertData?.alertStatus) ||\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?.alertStatus === '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 *ngIf=\"alertData?.alertStatus !== 'Verified'\"\r\n class=\"card mb-0\"\r\n [ngClass]=\"\r\n (alertData?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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?.alertStatus !== '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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 <ng-content select=\"[action-launcher]\"></ng-content>\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", styles: [".alert-card{background-color:#fb392d1a}.success-alert{border-radius:10px;border:1px solid rgba(251,57,45,.1);background:linear-gradient(0deg,#dedede 0% 100%),#fff}.p-timeline-event-opposite{display:none}.decription{color:#676b89}.textAreaControl textarea{width:100%;resize:vertical;max-width:100%}.document-btn-wrapper .p-button-outlined{color:#f57c00}.document-viewer .p-dialog{width:100%;height:100%;max-height:100%!important;box-shadow:none!important}.document-viewer .p-dialog-header-close-icon{height:20px;width:20px}.document-viewer .p-dialog-header{background-color:#fff;border-radius:0;border-bottom:.771px solid rgba(68,72,109,.1);align-items:start!important}.document-viewer .p-dialog-content{background-color:#fff;border-radius:0}.uploadedImages{width:95%;height:100%;object-fit:contain;border-radius:10px;padding:22px;background:#f7f8fa;border:1px solid #F0F0F0}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: LinkedDocumentComponent, selector: "app-linked-document", inputs: ["selectedDocument", "documentList"], outputs: ["selectedDocumentChange"] }], encapsulation: i0.ViewEncapsulation.None });
1541
1541
  }
1542
1542
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DocumentViewerComponent, decorators: [{
1543
1543
  type: Component,
1544
- args: [{ selector: 'document-viewer', standalone: false, encapsulation: ViewEncapsulation.None, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\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-7\">\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 p-0\">\r\n <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.alertStatus !== 'Pending' && !!alertData?.alertStatus) ||\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?.alertStatus === '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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?.alertStatus !== '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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 <ng-content select=\"[action-launcher]\"></ng-content>\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", styles: [".alert-card{background-color:#fb392d1a}.success-alert{border-radius:10px;border:1px solid rgba(251,57,45,.1);background:linear-gradient(0deg,#dedede 0% 100%),#fff}.p-timeline-event-opposite{display:none}.decription{color:#676b89}.textAreaControl textarea{width:100%;resize:vertical;max-width:100%}.document-btn-wrapper .p-button-outlined{color:#f57c00}.document-viewer .p-dialog{width:100%;height:100%;max-height:100%!important;box-shadow:none!important}.document-viewer .p-dialog-header-close-icon{height:20px;width:20px}.document-viewer .p-dialog-header{background-color:#fff;border-radius:0;border-bottom:.771px solid rgba(68,72,109,.1);align-items:start!important}.document-viewer .p-dialog-content{background-color:#fff;border-radius:0}.uploadedImages{width:95%;height:100%;object-fit:contain;border-radius:10px;padding:22px;background:#f7f8fa;border:1px solid #F0F0F0}\n"] }]
1544
+ args: [{ selector: 'document-viewer', standalone: false, encapsulation: ViewEncapsulation.None, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\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-7\">\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 p-0\">\r\n <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.alertStatus !== 'Pending' && !!alertData?.alertStatus) ||\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?.alertStatus === '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 *ngIf=\"alertData?.alertStatus !== 'Verified'\"\r\n class=\"card mb-0\"\r\n [ngClass]=\"\r\n (alertData?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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?.alertStatus !== '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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 <ng-content select=\"[action-launcher]\"></ng-content>\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", styles: [".alert-card{background-color:#fb392d1a}.success-alert{border-radius:10px;border:1px solid rgba(251,57,45,.1);background:linear-gradient(0deg,#dedede 0% 100%),#fff}.p-timeline-event-opposite{display:none}.decription{color:#676b89}.textAreaControl textarea{width:100%;resize:vertical;max-width:100%}.document-btn-wrapper .p-button-outlined{color:#f57c00}.document-viewer .p-dialog{width:100%;height:100%;max-height:100%!important;box-shadow:none!important}.document-viewer .p-dialog-header-close-icon{height:20px;width:20px}.document-viewer .p-dialog-header{background-color:#fff;border-radius:0;border-bottom:.771px solid rgba(68,72,109,.1);align-items:start!important}.document-viewer .p-dialog-content{background-color:#fff;border-radius:0}.uploadedImages{width:95%;height:100%;object-fit:contain;border-radius:10px;padding:22px;background:#f7f8fa;border:1px solid #F0F0F0}\n"] }]
1545
1545
  }], ctorParameters: () => [{ type: DocumentHttpService }, { type: DocumentService }], propDecorators: { selectedDocument: [{
1546
1546
  type: Input
1547
1547
  }], documentList: [{
@@ -1 +1 @@
1
- {"version":3,"file":"cat-documents-ng.mjs","sources":["../../../projects/cat-document-lib/src/Shared/constant/SHARED.ts","../../../projects/cat-document-lib/src/Shared/constant/ERROR.ts","../../../projects/cat-document-lib/src/lib/document/state/document.state.ts","../../../projects/cat-document-lib/src/lib/document/state/document.store.ts","../../../projects/cat-document-lib/src/Shared/constant/URLS.ts","../../../projects/cat-document-lib/src/Shared/services/app-config.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.query.ts","../../../projects/cat-document-lib/src/lib/document/services/document-http.service.ts","../../../projects/cat-document-lib/src/lib/document/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/folder-container/folder-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.html","../../../projects/cat-document-lib/src/Shared/constant/PERMISSIONS.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload.service.ts","../../../projects/cat-document-lib/src/Shared/services/session.service.ts","../../../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/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.service.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/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/directives/permission.directive.ts","../../../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/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/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/document-renderer/document-renderer.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-renderer/document-renderer.component.html","../../../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 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 * 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 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 /**\r\n * Identifier used to reference the file input element (e.g., for ViewChild or DOM access).\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE_INPUT = 'fileInput'\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 FOLDERPANEL = [\r\n {\r\n _id: 'folder1',\r\n fileCount: 10,\r\n text: 'Documents',\r\n missingFiles: 3,\r\n pendingFiles: 2,\r\n },\r\n {\r\n _id: 'folder2',\r\n fileCount: 5,\r\n text: 'Images',\r\n missingFiles: 0,\r\n pendingFiles: 1,\r\n },\r\n {\r\n _id: 'folder3',\r\n fileCount: 20,\r\n text: 'Reports',\r\n missingFiles: 5,\r\n pendingFiles: 0,\r\n },\r\n {\r\n _id: 'folder4',\r\n fileCount: 8,\r\n text: 'Videos',\r\n missingFiles: 0,\r\n pendingFiles: 0,\r\n },\r\n {\r\n _id: 'folder5',\r\n fileCount: 15,\r\n text: 'Archives',\r\n missingFiles: 1,\r\n pendingFiles: 3,\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];\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 * 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 /**\r\n * Error message when the file name contains invalid characters.\r\n * Disallowed characters: <, >, :, \", /, \\, |, ?, *\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_INVALID_FILENAME_CHARACTERS = 'File name contains invalid characters: <, >, :, \", /, \\\\, |, ?, *';\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 { Message } from 'primeng/api';\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}\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 selectedDocument: '',\r\n isDocumentUpdated: 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 { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.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 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 setSelectedDocument(selectedDocument: any) {\r\n this.update({ selectedDocument : selectedDocument });\r\n }\r\n\r\n setIsDocumentUpdated(isDocumentUpdated: any) {\r\n this.update({ isDocumentUpdated : isDocumentUpdated });\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 /**\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 /**\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}\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\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 * Retrieves the currently selected document from the store state.\r\n * @returns {Observable<any>} Observable that emits the selected document.\r\n */\r\n getSelectedDocument():Observable<any> {\r\n return this.select((state) => state['selectedDocument']);\r\n }\r\n\r\n /**\r\n * Retrieves the flag indicating whether a document has been updated.\r\n * @returns {Observable<any>} Observable that emits a boolean or status flag.\r\n */\r\n getIsDocumentUpdated():Observable<any> {\r\n return this.select((state) => state['isDocumentUpdated']);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { catchError, EMPTY, Observable, tap, throwError } from 'rxjs';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { HttpClient } 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\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 * 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","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: any): 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, Input } from '@angular/core';\r\nimport { FOLDERPANEL, SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { FolderBlockModel } from '../../models/folder.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 *\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})\r\nexport class FolderContainerComponent {\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","\r\n<lib-folder-block [folderList]=\"folderList\"></lib-folder-block>","\r\n/**\r\n * Storing all permission properties.\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\r\n /**\r\n * Access permission for updating existing documents.\r\n * @static\r\n * @type {string}\r\n */\r\nstatic DOCUMENT_PUT = 'Documents-PUT'\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 { 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.documentName }}</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 { 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 { BehaviorSubject } from \"rxjs\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\n\r\n/**\r\n * Service to manage the document data\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DocumentService {\r\n private documentSubject$ = new BehaviorSubject<DocumentModel | null>(null);\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.documentSubject$.next(document);\r\n }\r\n\r\n /**\r\n * Get the document data\r\n * @returns the document data\r\n */\r\n get() {\r\n return this.documentSubject$.asObservable();\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\n\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?: DocumentModel;\r\n /**\r\n * Whole document list.\r\n * @type {?DocumentModel[]}\r\n */\r\n @Input() documentList?: DocumentModel[];\r\n /**\r\n * Changed selected document.\r\n * @type {*}\r\n */\r\n @Output() selectedDocumentChange = new EventEmitter<DocumentModel>();\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: DocumentModel): 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.documentName}}\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n \r\n \r\n </div>\r\n ","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DocumentAlertList, DUMMYSUMMARY, SHARED, SUPPORTED_IMAGE_TYPES } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { Subject, Subscription, takeUntil } from 'rxjs';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentService } from '../../services/document.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?: DocumentModel; // <-- 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?: DocumentModel[]; // <-- Made optional to prevent undefined issues\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 * Data used for displaying alert messages.\r\n * @type {any}\r\n */\r\n alertData!: any;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n /**\r\n * Emits the updated document after changes like upload, rename, or replace.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() updatedDocument = new EventEmitter<DocumentModel>();\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 * 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 */\r\n constructor(public documentHttpService : DocumentHttpService, private documentService: DocumentService) {}\r\n\r\n /**\r\n * Fetches the alerts for the selected document.\r\n * @returns {void}\r\n */\r\n ngOnChanges() {\r\n this.getDocumentAlertList();\r\n if (this.selectedDocument) {\r\n this.documentService.set(this.selectedDocument);\r\n this.alertData = DocumentAlertList.find((res: any) => res.status === this.selectedDocument?.status);\r\n }\r\n }\r\n\r\n getDocumentAlertList() {\r\n const documentId = this.selectedDocument?._id;\r\n if(documentId) {\r\n this.documentHttpService.getAlertsByDocumentID(documentId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((res) => {\r\n this.alertData = res;\r\n })\r\n }\r\n }\r\n\r\n handleSelectedDocument(document:DocumentModel){\r\n this.selectedDocument = document;\r\n this.updatedDocument.emit({...document});\r\n this.documentService.set(this.selectedDocument);\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 contentType ? SUPPORTED_IMAGE_TYPES.includes(contentType) : false;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n}\r\n","<div class=\"grid\">\r\n <div class=\"col-12\">\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-7\">\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 p-0\">\r\n <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.alertStatus !== 'Pending' && !!alertData?.alertStatus) ||\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?.alertStatus === '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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?.alertStatus !== '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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 <ng-content select=\"[action-launcher]\"></ng-content>\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 { 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 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, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { SHARED } 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 { SessionService } from '../../../../Shared/services/session.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{\r\n\r\n @Output() onRefresh = new EventEmitter();\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 * 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!: DocumentModel;\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 Accordion.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() isCollapsed: 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: DocumentModel[] = 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 | undefined = 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 * 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\r\n documentStatus!: string | undefined;\r\n\r\n /**\r\n * Indicates whether the user has permission to upload or modify documents.\r\n * The exact type depends on the access control implementation.\r\n * @type {any}\r\n */\r\n hasDocumentPutAccess: any;\r\n /**\r\n * Error message related to the file name, if validation fails.\r\n * @type {string}\r\n */\r\n fileNameError!: string;\r\n /**\r\n * Extension of the selected document file (e.g., .pdf, .docx).\r\n * @type {string}\r\n */\r\n documentExtension!: string;\r\n /**\r\n * Regular expression to match disallowed characters in file names.\r\n * Prevents characters like < > : \" / \\ | ? *\r\n * @type {RegExp}\r\n */\r\n disallowedCharsRegex: RegExp = /[<>:\"\\/\\\\|?*]/;\r\n /**\r\n * Reference to the file input element used for uploading documents.\r\n * @type {ElementRef<HTMLInputElement>}\r\n */\r\n @ViewChild(SHARED.FILE_INPUT) fileInput!: ElementRef<HTMLInputElement>;\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 * @param {SessionService} sessionService - Service for managing user session and authentication.\r\n */\r\n constructor(public documentUploadService : DocumentUploadService ,public documentHttpService : DocumentHttpService, public documentQuery : DocumentQuery, public documentStore : DocumentStore, private sessionService: SessionService) {\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 const userPermissions = this.sessionService.getUserPermissions();\r\n const permissionNames = userPermissions.map((perm: any) => perm.name);\r\n this.hasDocumentPutAccess = permissionNames.includes(PERMISSIONS.DOCUMENT_PUT);\r\n }\r\n\r\n handleUpdatedDocument(document: DocumentModel) {\r\n this.selectedDocument = document;\r\n if(document.documentName) {\r\n const extensionMatch = document.documentName.match(/(\\.[^/.]+)$/);\r\n this.documentExtension = extensionMatch ? extensionMatch[0] : '';\r\n this.documentName = document.documentName?.replace(/\\.[^/.]+$/, '');\r\n }\r\n this.documentStatus = document.status;\r\n this.documentStore.setSelectedDocument(document);\r\n setTimeout(() => {\r\n this.onDocumentNameChange({ target: this.fileInput.nativeElement } as any);\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 * Handles the selection of an individual document.\r\n * Opens a dialog to display or manage the selected document.\r\n * @param {DocumentModel} document - The document that was clicked by the user.\r\n * @memberof DocumentListComponent\r\n */\r\n handleClickForDocument(document: DocumentModel): void {\r\n this.isdialogVisible = SHARED.TRUE;\r\n this.selectedDocument = document;\r\n if(document.documentName) {\r\n const extensionMatch = document.documentName.match(/(\\.[^/.]+)$/);\r\n this.documentExtension = extensionMatch ? extensionMatch[0] : '';\r\n this.documentName = document.documentName?.replace(/\\.[^/.]+$/, '');\r\n }\r\n this.documentStatus = document.status;\r\n this.documentStore.setSelectedDocument(document);\r\n setTimeout(() => {\r\n this.onDocumentNameChange({ target: this.fileInput.nativeElement } as any);\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 if(this.documentName !== this.selectedDocument.documentName && !this.fileNameError && this.hasDocumentPutAccess) {\r\n const updatedDocumentName = this.documentExtension ? (this.documentName + this.documentExtension) : this.documentName;\r\n const payload = { documentName: updatedDocumentName };\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 this.documentStore.setIsDocumentUpdated({...res});\r\n })\r\n }\r\n }\r\n /**\r\n * Closes the dialog and resets the selected document.\r\n * @memberof DocumentListComponent\r\n */\r\n handleCloseModal(): void {\r\n if(!!this.fileNameError) return;\r\n this.selectedDocument = { _id: SHARED.EMPTY };\r\n this.documentStore.setSelectedDocument(SHARED.EMPTY);\r\n this.isdialogVisible = SHARED.FALSE;\r\n this.onRefresh.emit();\r\n }\r\n\r\n /**\r\n * Handles changes to the document name input field.\r\n * - Updates the `documentName` property.\r\n * - Validates for disallowed characters and sets appropriate error messages.\r\n * - Dynamically adjusts the width of the input field based on the content using a hidden span element.\r\n * @param {Event} event - The input change event triggered when the user types in the document name field.\r\n */\r\n onDocumentNameChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.documentName = input.value;\r\n\r\n if (this.disallowedCharsRegex.test(this.documentName)) {\r\n this.fileNameError = ERRORS.ERROR_INVALID_FILENAME_CHARACTERS;\r\n } else {\r\n this.fileNameError = SHARED.EMPTY;\r\n }\r\n\r\n const span = document.querySelector('.hidden-measure') as HTMLSpanElement;\r\n \r\n if (span) {\r\n const computedStyle = window.getComputedStyle(input);\r\n span.style.fontSize = computedStyle.fontSize;\r\n span.textContent = input.value || ' ';\r\n input.style.width = `${span.offsetWidth + 50}px`; \r\n input.style.minWidth = `${span.offsetWidth + 50}px`; \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.onRefresh.emit();\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<div class=\"document-viewer\">\r\n <p-dialog [(visible)]=\"isdialogVisible\" [modal]=\"true\" (onHide)=\"handleCloseModal()\"\r\n class=\"w-full h-full document-dailog-wrapper\"\r\n [draggable]=\"false\" [closable]=\"true\">\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <div class=\"w-full flex align-items-center file-input-container\">\r\n <span class=\"hidden-measure\">{{ documentName }}</span>\r\n <input \r\n #fileInput\r\n type=\"text\" \r\n class=\"h-3rem file-input-wrapper\"\r\n pInputText \r\n [readonly]=\"!hasDocumentPutAccess\"\r\n [(ngModel)]=\"documentName\"\r\n (input)=\"onDocumentNameChange($event)\"\r\n (blur)=\"handleSaveClick()\" />\r\n <div class=\"ml-3\">\r\n <p\r\n [class]=\"'product-badge status-' + documentStatus?.toLowerCase()\"\r\n class=\"flex align-items-center justify-content-center px-2 py-1 m-0\"\r\n >\r\n <ng-container *ngIf=\"documentStatus?.toLowerCase() === 'pending'\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-clock pr-1 status-icon-wrapper\" style=\"font-size: 12px;\"></i>\r\n <span>Pending</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"documentStatus?.toLowerCase() === 'verified'\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-check-circle pr-1 status-icon-wrapper\" style=\"font-size: 12px;\"></i>\r\n <span>Verified</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"documentStatus?.toLowerCase() === 'alert'\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-bell pr-1 status-icon-wrapper\" style=\"font-size: 12px;\"></i>\r\n <span>Alert</span>\r\n </div>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </div>\r\n <div *ngIf=\"fileNameError\" class=\"error-message-wrapper\">\r\n {{ fileNameError }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <document-viewer [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\" (updatedDocument)=\"handleUpdatedDocument($event)\">\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"col-12 p-0\">\r\n <div class=\"card p-0 mb-0 document-list-wrapper\">\r\n <p-accordion [activeIndex]=\"isCollapsed ? -1 : 0\">\r\n <p-accordionTab class=\"line-height-2 m-0\">\r\n <ng-template pTemplate=\"header\" let-active=\"active\">\r\n <div class=\"flex align-items-center justify-content-between w-full\">\r\n <span class=\"flex align-items-center gap-2 document-title-wrapper\">\r\n Documents\r\n </span>\r\n @if(isUploadButtonVisible){\r\n <button pButton pRipple class=\"p-button-raised col-3\" [permission]=\"PERMISSION.DOCUMENT_POST\" type=\"button\" label=\"Upload File\"\r\n style=\"border-radius: 10px;\" (click)=\"handleFileUploadClick($event)\"></button>\r\n }\r\n </div>\r\n </ng-template>\r\n @for(document of documentList; track document){\r\n <lib-document-list-item [document]=\"document\"\r\n (documentClick)=\"handleClickForDocument($event)\"></lib-document-list-item>\r\n }\r\n </p-accordionTab>\r\n </p-accordion>\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 { Component, EventEmitter, Input, OnInit, Output } 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 { Subject, Subscription, takeUntil } 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\n\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{\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) {\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 * Get isCollapsed in input.\r\n * @type {string}\r\n */\r\n @Input() isCollapsed : boolean = SHARED.FALSE;\r\n /**\r\n * Get showFolderList in input.\r\n * @type {boolean}\r\n */\r\n @Input() showFolderList : boolean = SHARED.TRUE;\r\n /**\r\n * Get isUploadButtonVisible in input.\r\n * @type {boolean}\r\n */\r\n @Input() isUploadButtonVisible : boolean = SHARED.TRUE;\r\n /**\r\n * Emits the document selected by the user.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() selectedDocument = new EventEmitter<DocumentModel>();\r\n\r\n /**\r\n * Subject used to clean up subscriptions when the component is destroyed.\r\n * Helps prevent memory leaks in observables.\r\n * @type {Subject<void>}\r\n */\r\n public destroy$ = new Subject<void>();\r\n /**\r\n * The list of documents.\r\n * @type {Array}\r\n */\r\n documentList : DocumentModel[] = []\r\n /**\r\n * The list of folders.\r\n * @type {Array}\r\n */\r\n folderList : FolderBlockModel[] = SHARED.EMPTY_ARRAY\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 * Fetches the folder and document data on initialization.\r\n * @returns {void}\r\n */\r\n ngOnInit(): void {\r\n this.fetchFolder();\r\n const folderSubscription = this.documentQuery\r\n .selectParentDocumentTypeId()\r\n .subscribe((folderBlockId: any) => {\r\n if(folderBlockId){\r\n const validFolders = this.folderList.filter(folder => (folder.documentCount ?? 0) > 0);\r\n const idToFetch = folderBlockId ?? validFolders[0]?._id;\r\n if (idToFetch) this.fetchDocuments(idToFetch);\r\n else {\r\n console.warn('No folders with documents available.');\r\n }\r\n }\r\n });\r\n this.subscription.add(folderSubscription);\r\n this.getSelectedDocumentData();\r\n }\r\n\r\n /**\r\n * Subscribes to the selected document from the document query store.\r\n * Emits the selected document using the `selectedDocument` EventEmitter if it exists.\r\n * Automatically unsubscribes when the component is destroyed.\r\n */\r\n getSelectedDocumentData() {\r\n this.documentQuery.getSelectedDocument()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((res) => {\r\n if(res) this.selectedDocument.emit(res)\r\n })\r\n }\r\n \r\n /**\r\n * Fetches the folder data from the API.\r\n * @returns {void}\r\n */\r\n /**\r\n * Fetches the folder data from the API.\r\n * @returns {void}\r\n */\r\npublic fetchFolder(): void { \r\n const folderSubscription = this.documentHttpService.getFoldersData(this.contextId).subscribe({\r\n /**\r\n * Handles the successful API response.\r\n * @param {FolderBlockModel[]} folder - The list of folders returned by the API.\r\n */\r\n next: (folder: FolderBlockModel[]) => {\r\n if (folder && folder.length > 0) {\r\n this.folderList = folder.filter(f => (f.documentCount ?? 0) > 0);\r\n if (this.folderList.length > 0) {\r\n this.fetchDocuments(this.folderList[0]._id);\r\n } else {\r\n console.warn('No folders with documents found.');\r\n }\r\n } else {\r\n console.error(ERRORS.ERROR_ALLDOCUMENT_MISSING);\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 this.subscription.add(folderSubscription);\r\n}\r\n \r\n \r\n\r\n /**\r\n * Fetches the document data from the API.\r\n * @param {string} folderBlockId - The folder ID to fetch the document.\r\n * @returns {void}\r\n */\r\n private fetchDocuments(folderBlockId:string): void {\r\n const documentSubscription = this.documentHttpService.getDocumentByFolderID(folderBlockId, this.contextId).subscribe({ \r\n /**\r\n * Handles the successful API response.\r\n * @param {DocumentModel[]} documentList - The list of documents returned by the API.\r\n */\r\n next: (documentList: DocumentModel[]) => {\r\n if (documentList) {\r\n this.documentList = documentList;\r\n this.documentStore.setDocumentList(documentList)\r\n } else {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS);\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_FETCHING_DOCUMENTS, err);\r\n }\r\n }\r\n )\r\n this.subscription.add(documentSubscription);\r\n }\r\n\r\n /** \r\n * Unsubscribe subscription on destroy of component .\r\n */\r\n ngOnDestroy(): void {\r\n this.documentStore.setParentDocumentTypeId(SHARED.EMPTY);\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"grid m-0 h-full\">\r\n <div class=\"col-12 md:col-12 lg:col-12 p-0 h-full\" [ngClass]=\"showFolderList ? 'custom-scroll' : ''\">\r\n @if(showFolderList){\r\n <div>\r\n <lib-folder-container [documentList]=\"documentList\" [folderList]=\"folderList\" [contextId]=\"contextId\"></lib-folder-container>\r\n </div>\r\n }\r\n <div [ngClass]=\"showFolderList ? 'mt-3' : ''\">\r\n <lib-document-list [isCollapsed]=\"isCollapsed\" [documentList]=\"documentList\" [contextId]=\"contextId\" [isUploadButtonVisible]=\"isUploadButtonVisible\" (onRefresh)=\"fetchFolder()\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>","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 { DocumentService } from \"../services/document.service\";\r\nimport { DocumentModel } from \"../models/document.model\";\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: DocumentService,\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, OnInit } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n@Component({\r\n selector: 'app-document-renderer',\r\n standalone: false,\r\n templateUrl: './document-renderer.component.html',\r\n styleUrl: './document-renderer.component.scss'\r\n})\r\nexport class DocumentRendererComponent implements OnInit{\r\n\r\n selectedDocumentType: string = SHARED.EMPTY\r\n documentType = [\r\n {\r\n \"_id\": \"67e53f7fda90f2dcef43461e\",\r\n \"name\": \"Business Bank Statements\",\r\n \"__v\": 0,\r\n \"label\": \"Business Bank Statements\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b904fefd4fc91fe3d26\",\r\n \"name\": \"Bank Statements\",\r\n \"__v\": 0,\r\n \"label\": \"Bank Statements\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b904fefd4fc91fe3d27\",\r\n \"name\": \"Budget Planner\",\r\n \"__v\": 0,\r\n \"label\": \"Budget Planner\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b904fefd4fc91fe3d28\",\r\n \"name\": \"Credit Card Statements\",\r\n \"__v\": 0,\r\n \"label\": \"Credit Card Statements\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e53f7cda90f2dcef43461c\",\r\n \"name\": \"Payslips\",\r\n \"__v\": 0,\r\n \"label\": \"Payslips\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d32\",\r\n \"name\": \"Accountants certificate\",\r\n \"__v\": 0,\r\n \"label\": \"Accountants certificate\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d33\",\r\n \"name\": \"Company Accounts\",\r\n \"__v\": 0,\r\n \"label\": \"Company Accounts\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d34\",\r\n \"name\": \"Employer Reference\",\r\n \"__v\": 0,\r\n \"label\": \"EmployerReference\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d35\",\r\n \"name\": \"Employers reference request form\",\r\n \"__v\": 0,\r\n \"label\": \"Employers reference request form\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d36\",\r\n \"name\": \"Evidence of Historical Contract Work\",\r\n \"__v\": 0,\r\n \"label\": \"Evidence of Historical Contract Work\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d37\",\r\n \"name\": \"P60\",\r\n \"__v\": 0,\r\n \"label\": \"P60\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d38\",\r\n \"name\": \"Pension Evidence\",\r\n \"__v\": 0,\r\n \"label\": \"Pension Evidence\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d39\",\r\n \"name\": \"SA302s\",\r\n \"__v\": 0,\r\n \"label\": \"SA302s\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d3a\",\r\n \"name\": \"Signed Copy of Contract\",\r\n \"__v\": 0,\r\n \"label\": \"Signed Copy of Contract\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n }\r\n]\r\n\r\n ngOnInit(): void {\r\n console.log(this.documentType);\r\n }\r\n\r\n handleFileUploadClick(event: any) {\r\n console.log('File upload clicked', event);\r\n }\r\n}\r\n","<div class=\"document-renderer-container\">\r\n <div class=\"card p-0 mb-0 document-renderer-wrapper\">\r\n <div class=\"document-header-wrapper flex align-items-center justify-content-between\">\r\n <h4 class=\"m-0 title-wrapper\">Related Documents</h4>\r\n <button pButton pRipple icon=\"pi pi-upload\" class=\"p-button-raised\" type=\"button\" label=\"Upload New Document\"\r\n (click)=\"handleFileUploadClick($event)\"></button>\r\n </div> \r\n\r\n <div class=\"document-list-wrapper\">\r\n <p class=\"m-0\">The following documents have been supplied to support your income declaration.</p>\r\n <div class=\"document-type-wrapper\">\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-dropdown \r\n [options]=\"documentType\" \r\n [(ngModel)]=\"selectedDocumentType\" \r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n placeholder=\"Select Type\" />\r\n </div>\r\n <div class=\"grid m-0 mt-3\">\r\n <div class=\"col-12 md:col-3\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-book type-icon-wrapper\"></i>\r\n <div class=\"ml-3 document-content-wrapper\">\r\n <h4 class=\"m-0\">Latest Payslips</h4>\r\n <p class=\"mt-2\">Uploaded on 28 Mar 2025</p>\r\n <div class=\"flex align-items-center\">\r\n <button pButton pRipple icon=\"pi pi-eye\" class=\"p-button-raised action-btn-wrapper\" type=\"button\" label=\"View\"\r\n ></button>\r\n <button pButton pRipple icon=\"pi pi-download\" class=\"p-button-raised ml-2 action-btn-wrapper\" type=\"button\" label=\"Download\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-3\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-book type-icon-wrapper\"></i>\r\n <div class=\"document-content-wrapper ml-3\">\r\n <h4 class=\"m-0\">Latest Payslips</h4>\r\n <p class=\"mt-2\">Uploaded on 28 Mar 2025</p>\r\n <div class=\"flex align-items-center\">\r\n <button pButton pRipple icon=\"pi pi-eye\" class=\"p-button-raised action-btn-wrapper\" type=\"button\" label=\"View\"\r\n ></button>\r\n <button pButton pRipple icon=\"pi pi-download\" class=\"p-button-raised ml-2 action-btn-wrapper\" type=\"button\" label=\"Download\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-3\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-book type-icon-wrapper\"></i> \r\n <div class=\"document-content-wrapper ml-3\">\r\n <h4 class=\"m-0\">Latest Payslips</h4>\r\n <p class=\"mt-2\">Uploaded on 28 Mar 2025</p>\r\n <div class=\"flex align-items-center\">\r\n <button pButton pRipple icon=\"pi pi-eye\" class=\"p-button-raised action-btn-wrapper\" type=\"button\" label=\"View\"\r\n ></button>\r\n <button pButton pRipple icon=\"pi pi-download\" class=\"p-button-raised ml-2 action-btn-wrapper\" type=\"button\" label=\"Download\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"document-footer-wrapper\">\r\n <div class=\"flex align-items-center mt-3\">\r\n <i class=\"pi pi-info-circle\"></i>\r\n <p class=\"m-0 ml-3\">All documents are securely stored and will only be used for verification purposes. Documents must be less than 3 months old.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>","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 { 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 { HasPermissionDirective } from './directives/permission.directive';\r\nimport { LinkedDocumentComponent } from './components/linked-document/linked-document.component';\r\nimport { DocumentRendererComponent } from './components/document-renderer/document-renderer.component';\r\n\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 directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A directive to give permission.\r\n */\r\n HasPermissionDirective,\r\n\r\n /**\r\n * A component which have linked documents.\r\n */\r\n LinkedDocumentComponent,\r\n\r\n DocumentRendererComponent\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\r\n ],\r\n exports: [\r\n /**\r\n * A directive to give permission.\r\n */\r\n HasPermissionDirective,\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 * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n DocumentRendererComponent\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 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-list/document-list.component';\r\nexport * from './lib/document/components/document-renderer/document-renderer.component';\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","DocumentService","i2","i1.FolderBlockComponent","i1.DocumentService","i2.DocumentStore","i1.DocumentUploadService","i2.DocumentService","i4.FileFormatService","i6","i1.DocumentHttpService","i3","i5.LinkedDocumentComponent","i1.SessionService","i2.DocumentHttpService","i3.DocumentQuery","i4.DocumentStore","i5.SessionService","i7","i8","i16.DocumentListItemComponent","i17.DocumentUploadComponent","i18.DocumentViewerComponent","i19.HasPermissionDirective","i4.DocumentHttpService","i6.FolderContainerComponent","i7.DocumentListComponent"],"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/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/folder-container/folder-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.html","../../../projects/cat-document-lib/src/Shared/constant/PERMISSIONS.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload.service.ts","../../../projects/cat-document-lib/src/Shared/services/session.service.ts","../../../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/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.service.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/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/directives/permission.directive.ts","../../../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/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/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/document-renderer/document-renderer.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-renderer/document-renderer.component.html","../../../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 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 * 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 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 /**\r\n * Identifier used to reference the file input element (e.g., for ViewChild or DOM access).\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE_INPUT = 'fileInput'\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 FOLDERPANEL = [\r\n {\r\n _id: 'folder1',\r\n fileCount: 10,\r\n text: 'Documents',\r\n missingFiles: 3,\r\n pendingFiles: 2,\r\n },\r\n {\r\n _id: 'folder2',\r\n fileCount: 5,\r\n text: 'Images',\r\n missingFiles: 0,\r\n pendingFiles: 1,\r\n },\r\n {\r\n _id: 'folder3',\r\n fileCount: 20,\r\n text: 'Reports',\r\n missingFiles: 5,\r\n pendingFiles: 0,\r\n },\r\n {\r\n _id: 'folder4',\r\n fileCount: 8,\r\n text: 'Videos',\r\n missingFiles: 0,\r\n pendingFiles: 0,\r\n },\r\n {\r\n _id: 'folder5',\r\n fileCount: 15,\r\n text: 'Archives',\r\n missingFiles: 1,\r\n pendingFiles: 3,\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];\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 * 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 /**\r\n * Error message when the file name contains invalid characters.\r\n * Disallowed characters: <, >, :, \", /, \\, |, ?, *\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_INVALID_FILENAME_CHARACTERS = 'File name contains invalid characters: <, >, :, \", /, \\\\, |, ?, *';\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 { Message } from 'primeng/api';\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}\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 selectedDocument: '',\r\n isDocumentUpdated: 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 { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.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 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 setSelectedDocument(selectedDocument: any) {\r\n this.update({ selectedDocument : selectedDocument });\r\n }\r\n\r\n setIsDocumentUpdated(isDocumentUpdated: any) {\r\n this.update({ isDocumentUpdated : isDocumentUpdated });\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 /**\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 /**\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}\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\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 * Retrieves the currently selected document from the store state.\r\n * @returns {Observable<any>} Observable that emits the selected document.\r\n */\r\n getSelectedDocument():Observable<any> {\r\n return this.select((state) => state['selectedDocument']);\r\n }\r\n\r\n /**\r\n * Retrieves the flag indicating whether a document has been updated.\r\n * @returns {Observable<any>} Observable that emits a boolean or status flag.\r\n */\r\n getIsDocumentUpdated():Observable<any> {\r\n return this.select((state) => state['isDocumentUpdated']);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { catchError, EMPTY, Observable, tap, throwError } from 'rxjs';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { HttpClient } 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\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 * 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","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: any): 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, Input } from '@angular/core';\r\nimport { FOLDERPANEL, SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { FolderBlockModel } from '../../models/folder.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 *\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})\r\nexport class FolderContainerComponent {\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","\r\n<lib-folder-block [folderList]=\"folderList\"></lib-folder-block>","\r\n/**\r\n * Storing all permission properties.\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\r\n /**\r\n * Access permission for updating existing documents.\r\n * @static\r\n * @type {string}\r\n */\r\nstatic DOCUMENT_PUT = 'Documents-PUT'\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 { 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.documentName }}</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 { 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 { BehaviorSubject } from \"rxjs\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\n\r\n/**\r\n * Service to manage the document data\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DocumentService {\r\n private documentSubject$ = new BehaviorSubject<DocumentModel | null>(null);\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.documentSubject$.next(document);\r\n }\r\n\r\n /**\r\n * Get the document data\r\n * @returns the document data\r\n */\r\n get() {\r\n return this.documentSubject$.asObservable();\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\n\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?: DocumentModel;\r\n /**\r\n * Whole document list.\r\n * @type {?DocumentModel[]}\r\n */\r\n @Input() documentList?: DocumentModel[];\r\n /**\r\n * Changed selected document.\r\n * @type {*}\r\n */\r\n @Output() selectedDocumentChange = new EventEmitter<DocumentModel>();\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: DocumentModel): 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.documentName}}\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n \r\n \r\n </div>\r\n ","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DocumentAlertList, DUMMYSUMMARY, SHARED, SUPPORTED_IMAGE_TYPES } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { Subject, Subscription, takeUntil } from 'rxjs';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentService } from '../../services/document.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?: DocumentModel; // <-- 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?: DocumentModel[]; // <-- Made optional to prevent undefined issues\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 * Data used for displaying alert messages.\r\n * @type {any}\r\n */\r\n alertData!: any;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n /**\r\n * Emits the updated document after changes like upload, rename, or replace.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() updatedDocument = new EventEmitter<DocumentModel>();\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 * 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 */\r\n constructor(public documentHttpService : DocumentHttpService, private documentService: DocumentService) {}\r\n\r\n /**\r\n * Fetches the alerts for the selected document.\r\n * @returns {void}\r\n */\r\n ngOnChanges() {\r\n this.getDocumentAlertList();\r\n if (this.selectedDocument) {\r\n this.documentService.set(this.selectedDocument);\r\n // this.alertData = DocumentAlertList.find((res: any) => res.status === this.selectedDocument?.status);\r\n }\r\n }\r\n\r\n getDocumentAlertList() {\r\n const documentId = this.selectedDocument?._id;\r\n if(documentId) {\r\n this.documentHttpService.getAlertsByDocumentID(documentId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((res) => {\r\n this.alertData = res;\r\n })\r\n }\r\n }\r\n\r\n handleSelectedDocument(document:DocumentModel){\r\n this.selectedDocument = document;\r\n this.updatedDocument.emit({...document});\r\n this.documentService.set(this.selectedDocument);\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 contentType ? SUPPORTED_IMAGE_TYPES.includes(contentType) : false;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n}\r\n","<div class=\"grid\">\r\n <div class=\"col-12\">\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-7\">\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 p-0\">\r\n <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.alertStatus !== 'Pending' && !!alertData?.alertStatus) ||\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?.alertStatus === '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 *ngIf=\"alertData?.alertStatus !== 'Verified'\"\r\n class=\"card mb-0\"\r\n [ngClass]=\"\r\n (alertData?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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?.alertStatus !== '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?.alertStatus === 'Pending' || !alertData?.alertStatus) &&\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 <ng-content select=\"[action-launcher]\"></ng-content>\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 { 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 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, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { SHARED } 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 { SessionService } from '../../../../Shared/services/session.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{\r\n\r\n @Output() onRefresh = new EventEmitter();\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 * 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!: DocumentModel;\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 Accordion.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() isCollapsed: 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: DocumentModel[] = 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 | undefined = 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 * 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\r\n documentStatus!: string | undefined;\r\n\r\n /**\r\n * Indicates whether the user has permission to upload or modify documents.\r\n * The exact type depends on the access control implementation.\r\n * @type {any}\r\n */\r\n hasDocumentPutAccess: any;\r\n /**\r\n * Error message related to the file name, if validation fails.\r\n * @type {string}\r\n */\r\n fileNameError!: string;\r\n /**\r\n * Extension of the selected document file (e.g., .pdf, .docx).\r\n * @type {string}\r\n */\r\n documentExtension!: string;\r\n /**\r\n * Regular expression to match disallowed characters in file names.\r\n * Prevents characters like < > : \" / \\ | ? *\r\n * @type {RegExp}\r\n */\r\n disallowedCharsRegex: RegExp = /[<>:\"\\/\\\\|?*]/;\r\n /**\r\n * Reference to the file input element used for uploading documents.\r\n * @type {ElementRef<HTMLInputElement>}\r\n */\r\n @ViewChild(SHARED.FILE_INPUT) fileInput!: ElementRef<HTMLInputElement>;\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 * @param {SessionService} sessionService - Service for managing user session and authentication.\r\n */\r\n constructor(public documentUploadService : DocumentUploadService ,public documentHttpService : DocumentHttpService, public documentQuery : DocumentQuery, public documentStore : DocumentStore, private sessionService: SessionService) {\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 const userPermissions = this.sessionService.getUserPermissions();\r\n const permissionNames = userPermissions.map((perm: any) => perm.name);\r\n this.hasDocumentPutAccess = permissionNames.includes(PERMISSIONS.DOCUMENT_PUT);\r\n }\r\n\r\n handleUpdatedDocument(document: DocumentModel) {\r\n this.selectedDocument = document;\r\n if(document.documentName) {\r\n const extensionMatch = document.documentName.match(/(\\.[^/.]+)$/);\r\n this.documentExtension = extensionMatch ? extensionMatch[0] : '';\r\n this.documentName = document.documentName?.replace(/\\.[^/.]+$/, '');\r\n }\r\n this.documentStatus = document.status;\r\n this.documentStore.setSelectedDocument(document);\r\n setTimeout(() => {\r\n this.onDocumentNameChange({ target: this.fileInput.nativeElement } as any);\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 * Handles the selection of an individual document.\r\n * Opens a dialog to display or manage the selected document.\r\n * @param {DocumentModel} document - The document that was clicked by the user.\r\n * @memberof DocumentListComponent\r\n */\r\n handleClickForDocument(document: DocumentModel): void {\r\n this.isdialogVisible = SHARED.TRUE;\r\n this.selectedDocument = document;\r\n if(document.documentName) {\r\n const extensionMatch = document.documentName.match(/(\\.[^/.]+)$/);\r\n this.documentExtension = extensionMatch ? extensionMatch[0] : '';\r\n this.documentName = document.documentName?.replace(/\\.[^/.]+$/, '');\r\n }\r\n this.documentStatus = document.status;\r\n this.documentStore.setSelectedDocument(document);\r\n setTimeout(() => {\r\n this.onDocumentNameChange({ target: this.fileInput.nativeElement } as any);\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 if(this.documentName !== this.selectedDocument.documentName && !this.fileNameError && this.hasDocumentPutAccess) {\r\n const updatedDocumentName = this.documentExtension ? (this.documentName + this.documentExtension) : this.documentName;\r\n const payload = { documentName: updatedDocumentName };\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 this.documentStore.setIsDocumentUpdated({...res});\r\n })\r\n }\r\n }\r\n /**\r\n * Closes the dialog and resets the selected document.\r\n * @memberof DocumentListComponent\r\n */\r\n handleCloseModal(): void {\r\n if(!!this.fileNameError) return;\r\n this.selectedDocument = { _id: SHARED.EMPTY };\r\n this.documentStore.setSelectedDocument(SHARED.EMPTY);\r\n this.isdialogVisible = SHARED.FALSE;\r\n this.onRefresh.emit();\r\n }\r\n\r\n /**\r\n * Handles changes to the document name input field.\r\n * - Updates the `documentName` property.\r\n * - Validates for disallowed characters and sets appropriate error messages.\r\n * - Dynamically adjusts the width of the input field based on the content using a hidden span element.\r\n * @param {Event} event - The input change event triggered when the user types in the document name field.\r\n */\r\n onDocumentNameChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.documentName = input.value;\r\n\r\n if (this.disallowedCharsRegex.test(this.documentName)) {\r\n this.fileNameError = ERRORS.ERROR_INVALID_FILENAME_CHARACTERS;\r\n } else {\r\n this.fileNameError = SHARED.EMPTY;\r\n }\r\n\r\n const span = document.querySelector('.hidden-measure') as HTMLSpanElement;\r\n \r\n if (span) {\r\n const computedStyle = window.getComputedStyle(input);\r\n span.style.fontSize = computedStyle.fontSize;\r\n span.textContent = input.value || ' ';\r\n input.style.width = `${span.offsetWidth + 50}px`; \r\n input.style.minWidth = `${span.offsetWidth + 50}px`; \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.onRefresh.emit();\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<div class=\"document-viewer\">\r\n <p-dialog [(visible)]=\"isdialogVisible\" [modal]=\"true\" (onHide)=\"handleCloseModal()\"\r\n class=\"w-full h-full document-dailog-wrapper\"\r\n [draggable]=\"false\" [closable]=\"true\">\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <div class=\"w-full flex align-items-center file-input-container\">\r\n <span class=\"hidden-measure\">{{ documentName }}</span>\r\n <input \r\n #fileInput\r\n type=\"text\" \r\n class=\"h-3rem file-input-wrapper\"\r\n pInputText \r\n [readonly]=\"!hasDocumentPutAccess\"\r\n [(ngModel)]=\"documentName\"\r\n (input)=\"onDocumentNameChange($event)\"\r\n (blur)=\"handleSaveClick()\" />\r\n <div class=\"ml-3\">\r\n <p\r\n [class]=\"'product-badge status-' + documentStatus?.toLowerCase()\"\r\n class=\"flex align-items-center justify-content-center px-2 py-1 m-0\"\r\n >\r\n <ng-container *ngIf=\"documentStatus?.toLowerCase() === 'pending'\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-clock pr-1 status-icon-wrapper\" style=\"font-size: 12px;\"></i>\r\n <span>Pending</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"documentStatus?.toLowerCase() === 'verified'\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-check-circle pr-1 status-icon-wrapper\" style=\"font-size: 12px;\"></i>\r\n <span>Verified</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"documentStatus?.toLowerCase() === 'alert'\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-bell pr-1 status-icon-wrapper\" style=\"font-size: 12px;\"></i>\r\n <span>Alert</span>\r\n </div>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </div>\r\n <div *ngIf=\"fileNameError\" class=\"error-message-wrapper\">\r\n {{ fileNameError }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <document-viewer [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\" (updatedDocument)=\"handleUpdatedDocument($event)\">\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"col-12 p-0\">\r\n <div class=\"card p-0 mb-0 document-list-wrapper\">\r\n <p-accordion [activeIndex]=\"isCollapsed ? -1 : 0\">\r\n <p-accordionTab class=\"line-height-2 m-0\">\r\n <ng-template pTemplate=\"header\" let-active=\"active\">\r\n <div class=\"flex align-items-center justify-content-between w-full\">\r\n <span class=\"flex align-items-center gap-2 document-title-wrapper\">\r\n Documents\r\n </span>\r\n @if(isUploadButtonVisible){\r\n <button pButton pRipple class=\"p-button-raised col-3\" [permission]=\"PERMISSION.DOCUMENT_POST\" type=\"button\" label=\"Upload File\"\r\n style=\"border-radius: 10px;\" (click)=\"handleFileUploadClick($event)\"></button>\r\n }\r\n </div>\r\n </ng-template>\r\n @for(document of documentList; track document){\r\n <lib-document-list-item [document]=\"document\"\r\n (documentClick)=\"handleClickForDocument($event)\"></lib-document-list-item>\r\n }\r\n </p-accordionTab>\r\n </p-accordion>\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 { Component, EventEmitter, Input, OnInit, Output } 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 { Subject, Subscription, takeUntil } 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\n\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{\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) {\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 * Get isCollapsed in input.\r\n * @type {string}\r\n */\r\n @Input() isCollapsed : boolean = SHARED.FALSE;\r\n /**\r\n * Get showFolderList in input.\r\n * @type {boolean}\r\n */\r\n @Input() showFolderList : boolean = SHARED.TRUE;\r\n /**\r\n * Get isUploadButtonVisible in input.\r\n * @type {boolean}\r\n */\r\n @Input() isUploadButtonVisible : boolean = SHARED.TRUE;\r\n /**\r\n * Emits the document selected by the user.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() selectedDocument = new EventEmitter<DocumentModel>();\r\n\r\n /**\r\n * Subject used to clean up subscriptions when the component is destroyed.\r\n * Helps prevent memory leaks in observables.\r\n * @type {Subject<void>}\r\n */\r\n public destroy$ = new Subject<void>();\r\n /**\r\n * The list of documents.\r\n * @type {Array}\r\n */\r\n documentList : DocumentModel[] = []\r\n /**\r\n * The list of folders.\r\n * @type {Array}\r\n */\r\n folderList : FolderBlockModel[] = SHARED.EMPTY_ARRAY\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 * Fetches the folder and document data on initialization.\r\n * @returns {void}\r\n */\r\n ngOnInit(): void {\r\n this.fetchFolder();\r\n const folderSubscription = this.documentQuery\r\n .selectParentDocumentTypeId()\r\n .subscribe((folderBlockId: any) => {\r\n if(folderBlockId){\r\n const validFolders = this.folderList.filter(folder => (folder.documentCount ?? 0) > 0);\r\n const idToFetch = folderBlockId ?? validFolders[0]?._id;\r\n if (idToFetch) this.fetchDocuments(idToFetch);\r\n else {\r\n console.warn('No folders with documents available.');\r\n }\r\n }\r\n });\r\n this.subscription.add(folderSubscription);\r\n this.getSelectedDocumentData();\r\n }\r\n\r\n /**\r\n * Subscribes to the selected document from the document query store.\r\n * Emits the selected document using the `selectedDocument` EventEmitter if it exists.\r\n * Automatically unsubscribes when the component is destroyed.\r\n */\r\n getSelectedDocumentData() {\r\n this.documentQuery.getSelectedDocument()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((res) => {\r\n if(res) this.selectedDocument.emit(res)\r\n })\r\n }\r\n \r\n /**\r\n * Fetches the folder data from the API.\r\n * @returns {void}\r\n */\r\n /**\r\n * Fetches the folder data from the API.\r\n * @returns {void}\r\n */\r\npublic fetchFolder(): void { \r\n const folderSubscription = this.documentHttpService.getFoldersData(this.contextId).subscribe({\r\n /**\r\n * Handles the successful API response.\r\n * @param {FolderBlockModel[]} folder - The list of folders returned by the API.\r\n */\r\n next: (folder: FolderBlockModel[]) => {\r\n if (folder && folder.length > 0) {\r\n this.folderList = folder.filter(f => (f.documentCount ?? 0) > 0);\r\n if (this.folderList.length > 0) {\r\n this.fetchDocuments(this.folderList[0]._id);\r\n } else {\r\n console.warn('No folders with documents found.');\r\n }\r\n } else {\r\n console.error(ERRORS.ERROR_ALLDOCUMENT_MISSING);\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 this.subscription.add(folderSubscription);\r\n}\r\n \r\n \r\n\r\n /**\r\n * Fetches the document data from the API.\r\n * @param {string} folderBlockId - The folder ID to fetch the document.\r\n * @returns {void}\r\n */\r\n private fetchDocuments(folderBlockId:string): void {\r\n const documentSubscription = this.documentHttpService.getDocumentByFolderID(folderBlockId, this.contextId).subscribe({ \r\n /**\r\n * Handles the successful API response.\r\n * @param {DocumentModel[]} documentList - The list of documents returned by the API.\r\n */\r\n next: (documentList: DocumentModel[]) => {\r\n if (documentList) {\r\n this.documentList = documentList;\r\n this.documentStore.setDocumentList(documentList)\r\n } else {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS);\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_FETCHING_DOCUMENTS, err);\r\n }\r\n }\r\n )\r\n this.subscription.add(documentSubscription);\r\n }\r\n\r\n /** \r\n * Unsubscribe subscription on destroy of component .\r\n */\r\n ngOnDestroy(): void {\r\n this.documentStore.setParentDocumentTypeId(SHARED.EMPTY);\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"grid m-0 h-full\">\r\n <div class=\"col-12 md:col-12 lg:col-12 p-0 h-full\" [ngClass]=\"showFolderList ? 'custom-scroll' : ''\">\r\n @if(showFolderList){\r\n <div>\r\n <lib-folder-container [documentList]=\"documentList\" [folderList]=\"folderList\" [contextId]=\"contextId\"></lib-folder-container>\r\n </div>\r\n }\r\n <div [ngClass]=\"showFolderList ? 'mt-3' : ''\">\r\n <lib-document-list [isCollapsed]=\"isCollapsed\" [documentList]=\"documentList\" [contextId]=\"contextId\" [isUploadButtonVisible]=\"isUploadButtonVisible\" (onRefresh)=\"fetchFolder()\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>","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 { DocumentService } from \"../services/document.service\";\r\nimport { DocumentModel } from \"../models/document.model\";\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: DocumentService,\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, OnInit } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n@Component({\r\n selector: 'app-document-renderer',\r\n standalone: false,\r\n templateUrl: './document-renderer.component.html',\r\n styleUrl: './document-renderer.component.scss'\r\n})\r\nexport class DocumentRendererComponent implements OnInit{\r\n\r\n selectedDocumentType: string = SHARED.EMPTY\r\n documentType = [\r\n {\r\n \"_id\": \"67e53f7fda90f2dcef43461e\",\r\n \"name\": \"Business Bank Statements\",\r\n \"__v\": 0,\r\n \"label\": \"Business Bank Statements\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b904fefd4fc91fe3d26\",\r\n \"name\": \"Bank Statements\",\r\n \"__v\": 0,\r\n \"label\": \"Bank Statements\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b904fefd4fc91fe3d27\",\r\n \"name\": \"Budget Planner\",\r\n \"__v\": 0,\r\n \"label\": \"Budget Planner\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b904fefd4fc91fe3d28\",\r\n \"name\": \"Credit Card Statements\",\r\n \"__v\": 0,\r\n \"label\": \"Credit Card Statements\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cf7\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e53f7cda90f2dcef43461c\",\r\n \"name\": \"Payslips\",\r\n \"__v\": 0,\r\n \"label\": \"Payslips\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d32\",\r\n \"name\": \"Accountants certificate\",\r\n \"__v\": 0,\r\n \"label\": \"Accountants certificate\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d33\",\r\n \"name\": \"Company Accounts\",\r\n \"__v\": 0,\r\n \"label\": \"Company Accounts\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d34\",\r\n \"name\": \"Employer Reference\",\r\n \"__v\": 0,\r\n \"label\": \"EmployerReference\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d35\",\r\n \"name\": \"Employers reference request form\",\r\n \"__v\": 0,\r\n \"label\": \"Employers reference request form\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d36\",\r\n \"name\": \"Evidence of Historical Contract Work\",\r\n \"__v\": 0,\r\n \"label\": \"Evidence of Historical Contract Work\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d37\",\r\n \"name\": \"P60\",\r\n \"__v\": 0,\r\n \"label\": \"P60\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d38\",\r\n \"name\": \"Pension Evidence\",\r\n \"__v\": 0,\r\n \"label\": \"Pension Evidence\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d39\",\r\n \"name\": \"SA302s\",\r\n \"__v\": 0,\r\n \"label\": \"SA302s\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n },\r\n {\r\n \"_id\": \"67e92b914fefd4fc91fe3d3a\",\r\n \"name\": \"Signed Copy of Contract\",\r\n \"__v\": 0,\r\n \"label\": \"Signed Copy of Contract\",\r\n \"parentDocumentTypeId\": \"67e92a524fefd4fc91fe3cfb\",\r\n \"source\": null\r\n }\r\n]\r\n\r\n ngOnInit(): void {\r\n console.log(this.documentType);\r\n }\r\n\r\n handleFileUploadClick(event: any) {\r\n console.log('File upload clicked', event);\r\n }\r\n}\r\n","<div class=\"document-renderer-container\">\r\n <div class=\"card p-0 mb-0 document-renderer-wrapper\">\r\n <div class=\"document-header-wrapper flex align-items-center justify-content-between\">\r\n <h4 class=\"m-0 title-wrapper\">Related Documents</h4>\r\n <button pButton pRipple icon=\"pi pi-upload\" class=\"p-button-raised\" type=\"button\" label=\"Upload New Document\"\r\n (click)=\"handleFileUploadClick($event)\"></button>\r\n </div> \r\n\r\n <div class=\"document-list-wrapper\">\r\n <p class=\"m-0\">The following documents have been supplied to support your income declaration.</p>\r\n <div class=\"document-type-wrapper\">\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-dropdown \r\n [options]=\"documentType\" \r\n [(ngModel)]=\"selectedDocumentType\" \r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n placeholder=\"Select Type\" />\r\n </div>\r\n <div class=\"grid m-0 mt-3\">\r\n <div class=\"col-12 md:col-3\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-book type-icon-wrapper\"></i>\r\n <div class=\"ml-3 document-content-wrapper\">\r\n <h4 class=\"m-0\">Latest Payslips</h4>\r\n <p class=\"mt-2\">Uploaded on 28 Mar 2025</p>\r\n <div class=\"flex align-items-center\">\r\n <button pButton pRipple icon=\"pi pi-eye\" class=\"p-button-raised action-btn-wrapper\" type=\"button\" label=\"View\"\r\n ></button>\r\n <button pButton pRipple icon=\"pi pi-download\" class=\"p-button-raised ml-2 action-btn-wrapper\" type=\"button\" label=\"Download\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-3\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-book type-icon-wrapper\"></i>\r\n <div class=\"document-content-wrapper ml-3\">\r\n <h4 class=\"m-0\">Latest Payslips</h4>\r\n <p class=\"mt-2\">Uploaded on 28 Mar 2025</p>\r\n <div class=\"flex align-items-center\">\r\n <button pButton pRipple icon=\"pi pi-eye\" class=\"p-button-raised action-btn-wrapper\" type=\"button\" label=\"View\"\r\n ></button>\r\n <button pButton pRipple icon=\"pi pi-download\" class=\"p-button-raised ml-2 action-btn-wrapper\" type=\"button\" label=\"Download\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-3\">\r\n <div class=\"flex align-items-center\">\r\n <i class=\"pi pi-book type-icon-wrapper\"></i> \r\n <div class=\"document-content-wrapper ml-3\">\r\n <h4 class=\"m-0\">Latest Payslips</h4>\r\n <p class=\"mt-2\">Uploaded on 28 Mar 2025</p>\r\n <div class=\"flex align-items-center\">\r\n <button pButton pRipple icon=\"pi pi-eye\" class=\"p-button-raised action-btn-wrapper\" type=\"button\" label=\"View\"\r\n ></button>\r\n <button pButton pRipple icon=\"pi pi-download\" class=\"p-button-raised ml-2 action-btn-wrapper\" type=\"button\" label=\"Download\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"document-footer-wrapper\">\r\n <div class=\"flex align-items-center mt-3\">\r\n <i class=\"pi pi-info-circle\"></i>\r\n <p class=\"m-0 ml-3\">All documents are securely stored and will only be used for verification purposes. Documents must be less than 3 months old.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>","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 { 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 { HasPermissionDirective } from './directives/permission.directive';\r\nimport { LinkedDocumentComponent } from './components/linked-document/linked-document.component';\r\nimport { DocumentRendererComponent } from './components/document-renderer/document-renderer.component';\r\n\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 directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A directive to give permission.\r\n */\r\n HasPermissionDirective,\r\n\r\n /**\r\n * A component which have linked documents.\r\n */\r\n LinkedDocumentComponent,\r\n\r\n DocumentRendererComponent\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\r\n ],\r\n exports: [\r\n /**\r\n * A directive to give permission.\r\n */\r\n HasPermissionDirective,\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 * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n DocumentRendererComponent\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 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-list/document-list.component';\r\nexport * from './lib/document/components/document-renderer/document-renderer.component';\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","DocumentService","i2","i1.FolderBlockComponent","i1.DocumentService","i2.DocumentStore","i1.DocumentUploadService","i2.DocumentService","i4.FileFormatService","i6","i1.DocumentHttpService","i3","i5.LinkedDocumentComponent","i1.SessionService","i2.DocumentHttpService","i3.DocumentQuery","i4.DocumentStore","i5.SessionService","i7","i8","i16.DocumentListItemComponent","i17.DocumentUploadComponent","i18.DocumentViewerComponent","i19.HasPermissionDirective","i4.DocumentHttpService","i6.FolderContainerComponent","i7.DocumentListComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cat-documents-ng",
3
- "version": "0.1.36",
3
+ "version": "0.1.37",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.0.0",
6
6
  "@angular/core": "^19.0.0"