cat-documents-ng 0.3.50 → 0.3.52
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.
|
@@ -37,12 +37,12 @@ import * as i6 from 'primeng/inputtext';
|
|
|
37
37
|
import { InputTextModule } from 'primeng/inputtext';
|
|
38
38
|
import * as i2$1 from 'primeng/table';
|
|
39
39
|
import { TableModule } from 'primeng/table';
|
|
40
|
+
import * as i1 from '@angular/router';
|
|
40
41
|
import * as XLSX from 'xlsx';
|
|
41
42
|
import * as i7 from 'ng2-pdf-viewer';
|
|
42
43
|
import { PdfViewerModule } from 'ng2-pdf-viewer';
|
|
43
44
|
import * as i8 from 'ngx-doc-viewer';
|
|
44
45
|
import { NgxDocViewerModule } from 'ngx-doc-viewer';
|
|
45
|
-
import * as i1 from '@angular/router';
|
|
46
46
|
import * as i6$1 from 'primeng/inputtextarea';
|
|
47
47
|
import { InputTextareaModule } from 'primeng/inputtextarea';
|
|
48
48
|
import * as i8$2 from 'primeng/menu';
|
|
@@ -1413,7 +1413,7 @@ class DocumentHttpService {
|
|
|
1413
1413
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1414
1414
|
*/
|
|
1415
1415
|
getDocumentCatagories(contextId) {
|
|
1416
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1416
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1417
1417
|
return this.http.get(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers })
|
|
1418
1418
|
.pipe(tap((response) => {
|
|
1419
1419
|
if (response && response.categories) {
|
|
@@ -1457,7 +1457,7 @@ class DocumentHttpService {
|
|
|
1457
1457
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1458
1458
|
*/
|
|
1459
1459
|
getDocumentByFolderID(folderId, contextId) {
|
|
1460
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1460
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1461
1461
|
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`, { headers }).pipe(tap((records) => {
|
|
1462
1462
|
this.documentStore.set(records);
|
|
1463
1463
|
}), catchError((error) => {
|
|
@@ -1473,7 +1473,7 @@ class DocumentHttpService {
|
|
|
1473
1473
|
* @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.
|
|
1474
1474
|
*/
|
|
1475
1475
|
updateDocumentName(documentId, payload) {
|
|
1476
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1476
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1477
1477
|
return this.http.put(`${this.apiUrl}${URLS.ALIAS_NAME}${documentId}`, payload, { headers }).pipe(catchError((error) => {
|
|
1478
1478
|
return throwError(() => new Error(error));
|
|
1479
1479
|
}));
|
|
@@ -1486,7 +1486,7 @@ class DocumentHttpService {
|
|
|
1486
1486
|
getUserListByContextId(contextId) {
|
|
1487
1487
|
if (!contextId)
|
|
1488
1488
|
return EMPTY;
|
|
1489
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1489
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1490
1490
|
return this.http.get(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(tap((userList) => {
|
|
1491
1491
|
this.documentStore.setUserList(userList);
|
|
1492
1492
|
}), catchError((error) => {
|
|
@@ -1512,7 +1512,7 @@ class DocumentHttpService {
|
|
|
1512
1512
|
if (categoryId) {
|
|
1513
1513
|
params = params.set(SHARED.CATEGORY, categoryId);
|
|
1514
1514
|
}
|
|
1515
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1515
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1516
1516
|
return this.http.get(url, { params, headers }).pipe(tap((statusData) => {
|
|
1517
1517
|
this.documentStore.setStatusData(statusData);
|
|
1518
1518
|
}), catchError((error) => {
|
|
@@ -1541,7 +1541,7 @@ class DocumentHttpService {
|
|
|
1541
1541
|
if (searchKey) {
|
|
1542
1542
|
params = params.set(SHARED.SEARCH_KEY, searchKey);
|
|
1543
1543
|
}
|
|
1544
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1544
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1545
1545
|
return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(tap((response) => {
|
|
1546
1546
|
if (response.documents) {
|
|
1547
1547
|
this.documentStore.setDocumentList(response.documents);
|
|
@@ -1554,7 +1554,7 @@ class DocumentHttpService {
|
|
|
1554
1554
|
if (!documentId) {
|
|
1555
1555
|
return of([]);
|
|
1556
1556
|
}
|
|
1557
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1557
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1558
1558
|
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers }).pipe(catchError((error) => {
|
|
1559
1559
|
return throwError(() => new Error(error));
|
|
1560
1560
|
}));
|
|
@@ -1567,7 +1567,7 @@ class DocumentHttpService {
|
|
|
1567
1567
|
getCategoriesBySource(source) {
|
|
1568
1568
|
if (!source)
|
|
1569
1569
|
return EMPTY;
|
|
1570
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1570
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1571
1571
|
return this.http.get(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(catchError((error) => {
|
|
1572
1572
|
return throwError(() => new Error(error));
|
|
1573
1573
|
}));
|
|
@@ -1580,7 +1580,7 @@ class DocumentHttpService {
|
|
|
1580
1580
|
getDocumentTypesByCategory(categoryId) {
|
|
1581
1581
|
if (!categoryId)
|
|
1582
1582
|
return EMPTY;
|
|
1583
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1583
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1584
1584
|
return this.http.get(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(catchError((error) => {
|
|
1585
1585
|
return throwError(() => new Error(error));
|
|
1586
1586
|
}));
|
|
@@ -1591,7 +1591,7 @@ class DocumentHttpService {
|
|
|
1591
1591
|
* @returns {Observable<any>} Observable that emits the upload response.
|
|
1592
1592
|
*/
|
|
1593
1593
|
uploadFile(formData) {
|
|
1594
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1594
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1595
1595
|
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(catchError((error) => {
|
|
1596
1596
|
return throwError(() => new Error(error));
|
|
1597
1597
|
}));
|
|
@@ -1602,7 +1602,7 @@ class DocumentHttpService {
|
|
|
1602
1602
|
* @returns {Observable<any>} Observable that emits the save response.
|
|
1603
1603
|
*/
|
|
1604
1604
|
saveDocumentUpload(payload) {
|
|
1605
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1605
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1606
1606
|
return this.http.post(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(catchError((error) => {
|
|
1607
1607
|
return throwError(() => new Error(error));
|
|
1608
1608
|
}));
|
|
@@ -1618,7 +1618,7 @@ class DocumentHttpService {
|
|
|
1618
1618
|
const payload = {
|
|
1619
1619
|
statusUpdateDescription: statusUpdateDescription
|
|
1620
1620
|
};
|
|
1621
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1621
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1622
1622
|
return this.http.put(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(tap((response) => {
|
|
1623
1623
|
if (response && response.status) {
|
|
1624
1624
|
const normalizedStatus = this.normalizeStatus(response.status);
|
|
@@ -1652,7 +1652,7 @@ class DocumentHttpService {
|
|
|
1652
1652
|
* @returns {Observable<any>} Observable that emits the delete response
|
|
1653
1653
|
*/
|
|
1654
1654
|
deleteDocument(documentId, contextId) {
|
|
1655
|
-
let headers = new HttpHeaders({ 'Authorization': `Bearer
|
|
1655
|
+
let headers = new HttpHeaders({ 'Authorization': `Bearer 4f84cc39-5446-45cc-9f4d-6fec8fdf45c9` });
|
|
1656
1656
|
return this.http.delete(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(tap(() => {
|
|
1657
1657
|
this.getDocumentCatagories(contextId).subscribe();
|
|
1658
1658
|
this.getUserListByContextId(contextId).subscribe();
|
|
@@ -5768,6 +5768,151 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
5768
5768
|
}]
|
|
5769
5769
|
}] });
|
|
5770
5770
|
|
|
5771
|
+
/**
|
|
5772
|
+
* Service for managing user session details.
|
|
5773
|
+
* @class SessionService
|
|
5774
|
+
* @typedef {SessionService}
|
|
5775
|
+
*/
|
|
5776
|
+
class SessionService {
|
|
5777
|
+
router;
|
|
5778
|
+
/**
|
|
5779
|
+
* Creates an instance of SessionService.
|
|
5780
|
+
* @param {Router} router - Angular Router for navigation.
|
|
5781
|
+
*/
|
|
5782
|
+
constructor(router) {
|
|
5783
|
+
this.router = router;
|
|
5784
|
+
}
|
|
5785
|
+
/**
|
|
5786
|
+
* Retrieves the current user's role from local storage.
|
|
5787
|
+
* @returns {string | null} The user's role, or null if not found.
|
|
5788
|
+
*/
|
|
5789
|
+
getUserRole() {
|
|
5790
|
+
return localStorage.getItem('role');
|
|
5791
|
+
}
|
|
5792
|
+
/**
|
|
5793
|
+
* Stores the user session data in local storage.
|
|
5794
|
+
* @param {any} data - The session data to store.
|
|
5795
|
+
*/
|
|
5796
|
+
setUserSession(data) {
|
|
5797
|
+
localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));
|
|
5798
|
+
}
|
|
5799
|
+
/**
|
|
5800
|
+
* Retrieves the stored user session data.
|
|
5801
|
+
* @returns {any | null} The parsed session data, or null if not found.
|
|
5802
|
+
*/
|
|
5803
|
+
getUserSession() {
|
|
5804
|
+
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
5805
|
+
return sessionData ? JSON.parse(sessionData) : null;
|
|
5806
|
+
}
|
|
5807
|
+
/**
|
|
5808
|
+
* Retrieves the user's permissions from the stored session data.
|
|
5809
|
+
* @returns {any | null} The user's permissions, or null if not found.
|
|
5810
|
+
*/
|
|
5811
|
+
getUserPermissions() {
|
|
5812
|
+
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
5813
|
+
return sessionData ? JSON.parse(sessionData).permissions : null;
|
|
5814
|
+
}
|
|
5815
|
+
/**
|
|
5816
|
+
* Retrieves the session ID from the stored session data.
|
|
5817
|
+
* @returns {any | null} The session ID, or null if not found.
|
|
5818
|
+
*/
|
|
5819
|
+
getSessionID() {
|
|
5820
|
+
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
5821
|
+
console.log(sessionData);
|
|
5822
|
+
if (sessionData) {
|
|
5823
|
+
const sessionId = JSON.parse(sessionData);
|
|
5824
|
+
console.log(sessionId);
|
|
5825
|
+
return sessionId;
|
|
5826
|
+
}
|
|
5827
|
+
return null;
|
|
5828
|
+
}
|
|
5829
|
+
/**
|
|
5830
|
+
* Clears all stored session data from local storage.
|
|
5831
|
+
*/
|
|
5832
|
+
clearSession() {
|
|
5833
|
+
localStorage.clear();
|
|
5834
|
+
}
|
|
5835
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5836
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, providedIn: 'root' });
|
|
5837
|
+
}
|
|
5838
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, decorators: [{
|
|
5839
|
+
type: Injectable,
|
|
5840
|
+
args: [{
|
|
5841
|
+
providedIn: 'root'
|
|
5842
|
+
}]
|
|
5843
|
+
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
5844
|
+
|
|
5845
|
+
/**
|
|
5846
|
+
* Directive to conditionally show or hide elements based on user permissions.
|
|
5847
|
+
* @class HasPermissionDirective
|
|
5848
|
+
* @typedef {HasPermissionDirective}
|
|
5849
|
+
*/
|
|
5850
|
+
class HasPermissionDirective {
|
|
5851
|
+
el;
|
|
5852
|
+
renderer;
|
|
5853
|
+
sessionService;
|
|
5854
|
+
/**
|
|
5855
|
+
* The required permission(s) to display the element.
|
|
5856
|
+
* Accepts a single string or an array of strings.
|
|
5857
|
+
* @type {string | string[]}
|
|
5858
|
+
*/
|
|
5859
|
+
permission;
|
|
5860
|
+
/**
|
|
5861
|
+
* Creates an instance of HasPermissionDirective.
|
|
5862
|
+
* @param {ElementRef} el - Reference to the host element.
|
|
5863
|
+
* @param {Renderer2} renderer - Angular Renderer for DOM manipulation.
|
|
5864
|
+
* @param {SessionService} sessionService - Service to retrieve user permissions.
|
|
5865
|
+
*/
|
|
5866
|
+
constructor(el, renderer, sessionService) {
|
|
5867
|
+
this.el = el;
|
|
5868
|
+
this.renderer = renderer;
|
|
5869
|
+
this.sessionService = sessionService;
|
|
5870
|
+
}
|
|
5871
|
+
/**
|
|
5872
|
+
* Lifecycle hook that is called when input properties change.
|
|
5873
|
+
* @param {SimpleChanges} changes - The changes in input properties.
|
|
5874
|
+
*/
|
|
5875
|
+
ngOnChanges(changes) {
|
|
5876
|
+
if (changes['permission']) {
|
|
5877
|
+
this.checkPermission();
|
|
5878
|
+
}
|
|
5879
|
+
}
|
|
5880
|
+
/**
|
|
5881
|
+
* Checks if the user has the required permission(s).
|
|
5882
|
+
* Hides the element if the permission is not found.
|
|
5883
|
+
*/
|
|
5884
|
+
checkPermission() {
|
|
5885
|
+
// If no permission is required (empty string, null, or undefined), show the element
|
|
5886
|
+
if (!this.permission || this.permission === '' || (Array.isArray(this.permission) && this.permission.length === 0)) {
|
|
5887
|
+
this.renderer.removeStyle(this.el.nativeElement, 'display');
|
|
5888
|
+
return;
|
|
5889
|
+
}
|
|
5890
|
+
const userPermissionsObjects = this.sessionService.getUserPermissions();
|
|
5891
|
+
const userPermissionNames = userPermissionsObjects?.map((perm) => perm.name) || [];
|
|
5892
|
+
const requiredPermissions = Array.isArray(this.permission)
|
|
5893
|
+
? this.permission
|
|
5894
|
+
: [this.permission];
|
|
5895
|
+
const hasPermission = requiredPermissions.some(permission => userPermissionNames.includes(permission));
|
|
5896
|
+
if (!hasPermission) {
|
|
5897
|
+
this.renderer.setStyle(this.el.nativeElement, 'display', 'none');
|
|
5898
|
+
}
|
|
5899
|
+
else {
|
|
5900
|
+
this.renderer.removeStyle(this.el.nativeElement, 'display');
|
|
5901
|
+
}
|
|
5902
|
+
}
|
|
5903
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HasPermissionDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5904
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: HasPermissionDirective, isStandalone: false, selector: "[permission]", inputs: { permission: "permission" }, usesOnChanges: true, ngImport: i0 });
|
|
5905
|
+
}
|
|
5906
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HasPermissionDirective, decorators: [{
|
|
5907
|
+
type: Directive,
|
|
5908
|
+
args: [{
|
|
5909
|
+
selector: '[permission]',
|
|
5910
|
+
standalone: false
|
|
5911
|
+
}]
|
|
5912
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: SessionService }], propDecorators: { permission: [{
|
|
5913
|
+
type: Input
|
|
5914
|
+
}] } });
|
|
5915
|
+
|
|
5771
5916
|
/**
|
|
5772
5917
|
* Component for displaying document history in a timeline format.
|
|
5773
5918
|
*/
|
|
@@ -6023,11 +6168,11 @@ class DocumentHistoryComponent {
|
|
|
6023
6168
|
}
|
|
6024
6169
|
}
|
|
6025
6170
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentHistoryComponent, deps: [{ token: DocumentHistoryService }, { token: DocumentViewerService }, { token: DocumentActionsService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6026
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentHistoryComponent, isStandalone: false, selector: "document-history", inputs: { historyData: "historyData", showHistory: "showHistory", contextId: "contextId", selectedDocument: "selectedDocument" }, outputs: { deleteTaskRequested: "deleteTaskRequested", documentSelected: "documentSelected" }, host: { listeners: { "document:click": "onDocumentClickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <!-- Header Section -->\r\n <div class=\"review-header\">\r\n <h2 class=\"review-title\">Document Review</h2>\r\n <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\">\r\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\r\n Actions\r\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\r\n </button>\r\n\r\n <!-- Actions Dropdown Menu -->\r\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved'\">\r\n <ng-content [select]=\"'action-launcher'\"></ng-content>\r\n </div>\r\n <div *ngIf=\"selectedDocument?.isUploaded\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\r\n <span>Delete task</span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n\r\n <!-- Document Actions Component - Below Header -->\r\n <div class=\"document-actions-section\">\r\n <ng-content select=\"[actions-component]\"></ng-content>\r\n </div>\r\n\r\n\r\n <!-- Alerts Section -->\r\n <!-- <div class=\"alerts-section\">\r\n <div class=\"alert-card\">\r\n <div class=\"alert-header\">\r\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\r\n <span class=\"alert-text\">Alerts</span>\r\n <div class=\"alert-badge\">\r\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\r\n <i class=\"pi pi-chevron-right\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Timeline Section -->\r\n <div class=\"timeline-section\">\r\n <h3 class=\"timeline-title\">Timeline</h3>\r\n <div class=\"timeline-container\">\r\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\r\n <ng-container *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\r\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\r\n <!-- Event Header -->\r\n <div class=\"event-header\">\r\n <div class=\"event-info\">\r\n <i [class]=\"item.eventIcon\"></i>\r\n <span class=\"event-label\">{{ item.label }}</span>\r\n </div>\r\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\r\n </div>\r\n <!-- User Information -->\r\n <div class=\"event-user mb-2\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n <!-- Event Description -->\r\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\r\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\r\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\r\n </ul>\r\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\r\n </div>\r\n\r\n <!-- Document Upload Cards -->\r\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\r\n <div class=\"uploaded-documents\">\r\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <span class=\"document-name\">{{ doc.docName }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\r\n</div>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:.5rem 1rem;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{border-left:4px solid #3b82f6;background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{border-left:4px solid #10b981;background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{border-left:4px solid #ef4444;background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
6171
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentHistoryComponent, isStandalone: false, selector: "document-history", inputs: { historyData: "historyData", showHistory: "showHistory", contextId: "contextId", selectedDocument: "selectedDocument" }, outputs: { deleteTaskRequested: "deleteTaskRequested", documentSelected: "documentSelected" }, host: { listeners: { "document:click": "onDocumentClickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <!-- Header Section -->\r\n <div class=\"review-header\">\r\n <h2 class=\"review-title\">Document Review</h2>\r\n <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\">\r\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\r\n Actions\r\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\r\n </button>\r\n\r\n <!-- Actions Dropdown Menu -->\r\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved'\">\r\n <ng-content [select]=\"'action-launcher'\"></ng-content>\r\n </div>\r\n <div *ngIf=\"selectedDocument?.isUploaded\" [permission]=\"'documents-deleteDocumentByDocumentId'\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\r\n <span>Delete task</span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n\r\n <!-- Document Actions Component - Below Header -->\r\n <div class=\"document-actions-section\">\r\n <ng-content select=\"[actions-component]\"></ng-content>\r\n </div>\r\n\r\n\r\n <!-- Alerts Section -->\r\n <!-- <div class=\"alerts-section\">\r\n <div class=\"alert-card\">\r\n <div class=\"alert-header\">\r\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\r\n <span class=\"alert-text\">Alerts</span>\r\n <div class=\"alert-badge\">\r\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\r\n <i class=\"pi pi-chevron-right\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Timeline Section -->\r\n <div class=\"timeline-section\">\r\n <h3 class=\"timeline-title\">Timeline</h3>\r\n <div class=\"timeline-container\">\r\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\r\n <ng-container *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\r\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\r\n <!-- Event Header -->\r\n <div class=\"event-header\">\r\n <div class=\"event-info\">\r\n <i [class]=\"item.eventIcon\"></i>\r\n <span class=\"event-label\">{{ item.label }}</span>\r\n </div>\r\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\r\n </div>\r\n <!-- User Information -->\r\n <div class=\"event-user mb-2\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n <!-- Event Description -->\r\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\r\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\r\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\r\n </ul>\r\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\r\n </div>\r\n\r\n <!-- Document Upload Cards -->\r\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\r\n <div class=\"uploaded-documents\">\r\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <span class=\"document-name\">{{ doc.docName }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\r\n</div>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:.5rem 1rem;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{border-left:4px solid #3b82f6;background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{border-left:4px solid #10b981;background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{border-left:4px solid #ef4444;background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: HasPermissionDirective, selector: "[permission]", inputs: ["permission"] }] });
|
|
6027
6172
|
}
|
|
6028
6173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentHistoryComponent, decorators: [{
|
|
6029
6174
|
type: Component,
|
|
6030
|
-
args: [{ selector: 'document-history', standalone: false, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <!-- Header Section -->\r\n <div class=\"review-header\">\r\n <h2 class=\"review-title\">Document Review</h2>\r\n <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\">\r\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\r\n Actions\r\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\r\n </button>\r\n\r\n <!-- Actions Dropdown Menu -->\r\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved'\">\r\n <ng-content [select]=\"'action-launcher'\"></ng-content>\r\n </div>\r\n <div *ngIf=\"selectedDocument?.isUploaded\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\r\n <span>Delete task</span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n\r\n <!-- Document Actions Component - Below Header -->\r\n <div class=\"document-actions-section\">\r\n <ng-content select=\"[actions-component]\"></ng-content>\r\n </div>\r\n\r\n\r\n <!-- Alerts Section -->\r\n <!-- <div class=\"alerts-section\">\r\n <div class=\"alert-card\">\r\n <div class=\"alert-header\">\r\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\r\n <span class=\"alert-text\">Alerts</span>\r\n <div class=\"alert-badge\">\r\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\r\n <i class=\"pi pi-chevron-right\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Timeline Section -->\r\n <div class=\"timeline-section\">\r\n <h3 class=\"timeline-title\">Timeline</h3>\r\n <div class=\"timeline-container\">\r\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\r\n <ng-container *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\r\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\r\n <!-- Event Header -->\r\n <div class=\"event-header\">\r\n <div class=\"event-info\">\r\n <i [class]=\"item.eventIcon\"></i>\r\n <span class=\"event-label\">{{ item.label }}</span>\r\n </div>\r\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\r\n </div>\r\n <!-- User Information -->\r\n <div class=\"event-user mb-2\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n <!-- Event Description -->\r\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\r\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\r\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\r\n </ul>\r\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\r\n </div>\r\n\r\n <!-- Document Upload Cards -->\r\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\r\n <div class=\"uploaded-documents\">\r\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <span class=\"document-name\">{{ doc.docName }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\r\n</div>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:.5rem 1rem;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{border-left:4px solid #3b82f6;background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{border-left:4px solid #10b981;background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{border-left:4px solid #ef4444;background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}\n"] }]
|
|
6175
|
+
args: [{ selector: 'document-history', standalone: false, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <!-- Header Section -->\r\n <div class=\"review-header\">\r\n <h2 class=\"review-title\">Document Review</h2>\r\n <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\">\r\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\r\n Actions\r\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\r\n </button>\r\n\r\n <!-- Actions Dropdown Menu -->\r\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved'\">\r\n <ng-content [select]=\"'action-launcher'\"></ng-content>\r\n </div>\r\n <div *ngIf=\"selectedDocument?.isUploaded\" [permission]=\"'documents-deleteDocumentByDocumentId'\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\r\n <span>Delete task</span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n\r\n <!-- Document Actions Component - Below Header -->\r\n <div class=\"document-actions-section\">\r\n <ng-content select=\"[actions-component]\"></ng-content>\r\n </div>\r\n\r\n\r\n <!-- Alerts Section -->\r\n <!-- <div class=\"alerts-section\">\r\n <div class=\"alert-card\">\r\n <div class=\"alert-header\">\r\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\r\n <span class=\"alert-text\">Alerts</span>\r\n <div class=\"alert-badge\">\r\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\r\n <i class=\"pi pi-chevron-right\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Timeline Section -->\r\n <div class=\"timeline-section\">\r\n <h3 class=\"timeline-title\">Timeline</h3>\r\n <div class=\"timeline-container\">\r\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\r\n <ng-container *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\r\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\r\n <!-- Event Header -->\r\n <div class=\"event-header\">\r\n <div class=\"event-info\">\r\n <i [class]=\"item.eventIcon\"></i>\r\n <span class=\"event-label\">{{ item.label }}</span>\r\n </div>\r\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\r\n </div>\r\n <!-- User Information -->\r\n <div class=\"event-user mb-2\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n <!-- Event Description -->\r\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\r\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\r\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\r\n </ul>\r\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\r\n </div>\r\n\r\n <!-- Document Upload Cards -->\r\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\r\n <div class=\"uploaded-documents\">\r\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <span class=\"document-name\">{{ doc.docName }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\r\n</div>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:.5rem 1rem;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{border-left:4px solid #3b82f6;background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{border-left:4px solid #10b981;background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{border-left:4px solid #ef4444;background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}\n"] }]
|
|
6031
6176
|
}], ctorParameters: () => [{ type: DocumentHistoryService }, { type: DocumentViewerService }, { type: DocumentActionsService }, { type: i3.ConfirmationService }], propDecorators: { historyData: [{
|
|
6032
6177
|
type: Input
|
|
6033
6178
|
}], showHistory: [{
|
|
@@ -7509,80 +7654,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
7509
7654
|
args: ['wheel', ['$event']]
|
|
7510
7655
|
}] } });
|
|
7511
7656
|
|
|
7512
|
-
/**
|
|
7513
|
-
* Service for managing user session details.
|
|
7514
|
-
* @class SessionService
|
|
7515
|
-
* @typedef {SessionService}
|
|
7516
|
-
*/
|
|
7517
|
-
class SessionService {
|
|
7518
|
-
router;
|
|
7519
|
-
/**
|
|
7520
|
-
* Creates an instance of SessionService.
|
|
7521
|
-
* @param {Router} router - Angular Router for navigation.
|
|
7522
|
-
*/
|
|
7523
|
-
constructor(router) {
|
|
7524
|
-
this.router = router;
|
|
7525
|
-
}
|
|
7526
|
-
/**
|
|
7527
|
-
* Retrieves the current user's role from local storage.
|
|
7528
|
-
* @returns {string | null} The user's role, or null if not found.
|
|
7529
|
-
*/
|
|
7530
|
-
getUserRole() {
|
|
7531
|
-
return localStorage.getItem('role');
|
|
7532
|
-
}
|
|
7533
|
-
/**
|
|
7534
|
-
* Stores the user session data in local storage.
|
|
7535
|
-
* @param {any} data - The session data to store.
|
|
7536
|
-
*/
|
|
7537
|
-
setUserSession(data) {
|
|
7538
|
-
localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));
|
|
7539
|
-
}
|
|
7540
|
-
/**
|
|
7541
|
-
* Retrieves the stored user session data.
|
|
7542
|
-
* @returns {any | null} The parsed session data, or null if not found.
|
|
7543
|
-
*/
|
|
7544
|
-
getUserSession() {
|
|
7545
|
-
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
7546
|
-
return sessionData ? JSON.parse(sessionData) : null;
|
|
7547
|
-
}
|
|
7548
|
-
/**
|
|
7549
|
-
* Retrieves the user's permissions from the stored session data.
|
|
7550
|
-
* @returns {any | null} The user's permissions, or null if not found.
|
|
7551
|
-
*/
|
|
7552
|
-
getUserPermissions() {
|
|
7553
|
-
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
7554
|
-
return sessionData ? JSON.parse(sessionData).permissions : null;
|
|
7555
|
-
}
|
|
7556
|
-
/**
|
|
7557
|
-
* Retrieves the session ID from the stored session data.
|
|
7558
|
-
* @returns {any | null} The session ID, or null if not found.
|
|
7559
|
-
*/
|
|
7560
|
-
getSessionID() {
|
|
7561
|
-
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
7562
|
-
console.log(sessionData);
|
|
7563
|
-
if (sessionData) {
|
|
7564
|
-
const sessionId = JSON.parse(sessionData);
|
|
7565
|
-
console.log(sessionId);
|
|
7566
|
-
return sessionId;
|
|
7567
|
-
}
|
|
7568
|
-
return null;
|
|
7569
|
-
}
|
|
7570
|
-
/**
|
|
7571
|
-
* Clears all stored session data from local storage.
|
|
7572
|
-
*/
|
|
7573
|
-
clearSession() {
|
|
7574
|
-
localStorage.clear();
|
|
7575
|
-
}
|
|
7576
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7577
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, providedIn: 'root' });
|
|
7578
|
-
}
|
|
7579
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, decorators: [{
|
|
7580
|
-
type: Injectable,
|
|
7581
|
-
args: [{
|
|
7582
|
-
providedIn: 'root'
|
|
7583
|
-
}]
|
|
7584
|
-
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
7585
|
-
|
|
7586
7657
|
class DocumentActionsComponent {
|
|
7587
7658
|
documentActionsService;
|
|
7588
7659
|
sessionService;
|
|
@@ -7899,7 +7970,6 @@ class DocumentViewerComponent {
|
|
|
7899
7970
|
*/
|
|
7900
7971
|
onDocumentSelected(document) {
|
|
7901
7972
|
if (document && document.documentUrl && document.docName) {
|
|
7902
|
-
// Create a temporary document object for the viewer
|
|
7903
7973
|
const tempDocument = {
|
|
7904
7974
|
_id: document._id,
|
|
7905
7975
|
docName: document.docName,
|
|
@@ -7908,11 +7978,13 @@ class DocumentViewerComponent {
|
|
|
7908
7978
|
contentType: document.contentType,
|
|
7909
7979
|
status: document.status,
|
|
7910
7980
|
isUploaded: true,
|
|
7981
|
+
isAliasEditable: document.isAliasEditable,
|
|
7982
|
+
parentDocumentId: document.parentDocumentId,
|
|
7983
|
+
aliasName: document.aliasName,
|
|
7911
7984
|
fileSize: '0',
|
|
7912
|
-
uploadedOn: new Date().toISOString(),
|
|
7913
|
-
ownerName: 'History Document'
|
|
7985
|
+
uploadedOn: new Date().toISOString(),
|
|
7986
|
+
ownerName: 'History Document'
|
|
7914
7987
|
};
|
|
7915
|
-
// Update the selected document to show in the viewer
|
|
7916
7988
|
this.selectedDocument = tempDocument;
|
|
7917
7989
|
}
|
|
7918
7990
|
}
|
|
@@ -8189,15 +8261,12 @@ class DocumentListComponent {
|
|
|
8189
8261
|
this.documentListService.handleDeleteAction(rowData, this.contextId)
|
|
8190
8262
|
.subscribe({
|
|
8191
8263
|
next: (response) => {
|
|
8192
|
-
console.log('response', response);
|
|
8193
8264
|
if (this.selectedDocument && this.selectedDocument._id === rowData._id) {
|
|
8194
8265
|
this.handleCloseModal();
|
|
8195
8266
|
}
|
|
8196
8267
|
this.documentListService.refreshAllDataWithCurrentFilters(this.contextId);
|
|
8197
8268
|
},
|
|
8198
8269
|
error: (error) => {
|
|
8199
|
-
console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);
|
|
8200
|
-
// Show error message without closing dialog
|
|
8201
8270
|
this.showDeleteErrorMessage(error);
|
|
8202
8271
|
}
|
|
8203
8272
|
});
|
|
@@ -8278,7 +8347,6 @@ class DocumentListComponent {
|
|
|
8278
8347
|
* Triggers a refresh of the document data
|
|
8279
8348
|
*/
|
|
8280
8349
|
handleViewerDestroyed() {
|
|
8281
|
-
// Refresh document data when viewer is closed
|
|
8282
8350
|
this.documentListService.refreshDocumentList(this.contextId);
|
|
8283
8351
|
}
|
|
8284
8352
|
/**
|
|
@@ -9200,77 +9268,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
9200
9268
|
type: Output
|
|
9201
9269
|
}] } });
|
|
9202
9270
|
|
|
9203
|
-
/**
|
|
9204
|
-
* Directive to conditionally show or hide elements based on user permissions.
|
|
9205
|
-
* @class HasPermissionDirective
|
|
9206
|
-
* @typedef {HasPermissionDirective}
|
|
9207
|
-
*/
|
|
9208
|
-
class HasPermissionDirective {
|
|
9209
|
-
el;
|
|
9210
|
-
renderer;
|
|
9211
|
-
sessionService;
|
|
9212
|
-
/**
|
|
9213
|
-
* The required permission(s) to display the element.
|
|
9214
|
-
* Accepts a single string or an array of strings.
|
|
9215
|
-
* @type {string | string[]}
|
|
9216
|
-
*/
|
|
9217
|
-
permission;
|
|
9218
|
-
/**
|
|
9219
|
-
* Creates an instance of HasPermissionDirective.
|
|
9220
|
-
* @param {ElementRef} el - Reference to the host element.
|
|
9221
|
-
* @param {Renderer2} renderer - Angular Renderer for DOM manipulation.
|
|
9222
|
-
* @param {SessionService} sessionService - Service to retrieve user permissions.
|
|
9223
|
-
*/
|
|
9224
|
-
constructor(el, renderer, sessionService) {
|
|
9225
|
-
this.el = el;
|
|
9226
|
-
this.renderer = renderer;
|
|
9227
|
-
this.sessionService = sessionService;
|
|
9228
|
-
}
|
|
9229
|
-
/**
|
|
9230
|
-
* Lifecycle hook that is called when input properties change.
|
|
9231
|
-
* @param {SimpleChanges} changes - The changes in input properties.
|
|
9232
|
-
*/
|
|
9233
|
-
ngOnChanges(changes) {
|
|
9234
|
-
if (changes['permission']) {
|
|
9235
|
-
this.checkPermission();
|
|
9236
|
-
}
|
|
9237
|
-
}
|
|
9238
|
-
/**
|
|
9239
|
-
* Checks if the user has the required permission(s).
|
|
9240
|
-
* Hides the element if the permission is not found.
|
|
9241
|
-
*/
|
|
9242
|
-
checkPermission() {
|
|
9243
|
-
// If no permission is required (empty string, null, or undefined), show the element
|
|
9244
|
-
if (!this.permission || this.permission === '' || (Array.isArray(this.permission) && this.permission.length === 0)) {
|
|
9245
|
-
this.renderer.removeStyle(this.el.nativeElement, 'display');
|
|
9246
|
-
return;
|
|
9247
|
-
}
|
|
9248
|
-
const userPermissionsObjects = this.sessionService.getUserPermissions();
|
|
9249
|
-
const userPermissionNames = userPermissionsObjects?.map((perm) => perm.name) || [];
|
|
9250
|
-
const requiredPermissions = Array.isArray(this.permission)
|
|
9251
|
-
? this.permission
|
|
9252
|
-
: [this.permission];
|
|
9253
|
-
const hasPermission = requiredPermissions.some(permission => userPermissionNames.includes(permission));
|
|
9254
|
-
if (!hasPermission) {
|
|
9255
|
-
this.renderer.setStyle(this.el.nativeElement, 'display', 'none');
|
|
9256
|
-
}
|
|
9257
|
-
else {
|
|
9258
|
-
this.renderer.removeStyle(this.el.nativeElement, 'display');
|
|
9259
|
-
}
|
|
9260
|
-
}
|
|
9261
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HasPermissionDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
9262
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: HasPermissionDirective, isStandalone: false, selector: "[permission]", inputs: { permission: "permission" }, usesOnChanges: true, ngImport: i0 });
|
|
9263
|
-
}
|
|
9264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HasPermissionDirective, decorators: [{
|
|
9265
|
-
type: Directive,
|
|
9266
|
-
args: [{
|
|
9267
|
-
selector: '[permission]',
|
|
9268
|
-
standalone: false
|
|
9269
|
-
}]
|
|
9270
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: SessionService }], propDecorators: { permission: [{
|
|
9271
|
-
type: Input
|
|
9272
|
-
}] } });
|
|
9273
|
-
|
|
9274
9271
|
class SharedModule {
|
|
9275
9272
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9276
9273
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: SharedModule, declarations: [TablePrimaryComponent, HasPermissionDirective, ConfirmationDialogComponent], imports: [CommonModule,
|