cat-documents-ng 0.2.97 → 0.2.99
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.
- package/README.md +322 -322
- package/Shared/components/table-primary/table-primary.component.d.ts +2 -0
- package/Shared/constant/SHARED.d.ts +5 -0
- package/fesm2022/cat-documents-ng.mjs +246 -231
- package/fesm2022/cat-documents-ng.mjs.map +1 -1
- package/lib/document/components/document-container/document-container.component.d.ts +3 -1
- package/lib/document/components/document-list/document-list.component.d.ts +42 -6
- package/lib/document/components/documents-menu/documents-menu.component.d.ts +1 -0
- package/lib/document/services/document-http.service.d.ts +3 -3
- package/lib/document/services/document-list.service.d.ts +6 -0
- package/lib/document/services/document-menu.service.d.ts +18 -6
- package/lib/document/services/document-table-builder.service.d.ts +1 -3
- package/package.json +1 -1
- package/Shared/constant/PERMISSIONS.d.ts +0 -15
|
@@ -27,10 +27,9 @@ import * as i4 from 'primeng/sidebar';
|
|
|
27
27
|
import { SidebarModule } from 'primeng/sidebar';
|
|
28
28
|
import * as i5 from 'primeng/messages';
|
|
29
29
|
import { MessagesModule } from 'primeng/messages';
|
|
30
|
-
import * as i1 from '@angular/router';
|
|
31
30
|
import * as i8 from 'primeng/dialog';
|
|
32
31
|
import { DialogModule } from 'primeng/dialog';
|
|
33
|
-
import * as
|
|
32
|
+
import * as i8$1 from 'primeng/inputtext';
|
|
34
33
|
import { InputTextModule } from 'primeng/inputtext';
|
|
35
34
|
import * as i2$2 from 'primeng/table';
|
|
36
35
|
import { TableModule } from 'primeng/table';
|
|
@@ -38,13 +37,14 @@ import * as i6$1 from 'ng2-pdf-viewer';
|
|
|
38
37
|
import { PdfViewerModule } from 'ng2-pdf-viewer';
|
|
39
38
|
import * as i3$2 from 'primeng/accordion';
|
|
40
39
|
import { AccordionModule } from 'primeng/accordion';
|
|
40
|
+
import * as i1 from '@angular/router';
|
|
41
41
|
import * as i6 from 'primeng/inputtextarea';
|
|
42
42
|
import { InputTextareaModule } from 'primeng/inputtextarea';
|
|
43
43
|
import * as i9$1 from 'primeng/tooltip';
|
|
44
44
|
import { TooltipModule } from 'primeng/tooltip';
|
|
45
|
-
import * as i7
|
|
45
|
+
import * as i7 from 'primeng/badge';
|
|
46
46
|
import { BadgeModule } from 'primeng/badge';
|
|
47
|
-
import * as i8$
|
|
47
|
+
import * as i8$2 from 'primeng/menu';
|
|
48
48
|
import { MenuModule } from 'primeng/menu';
|
|
49
49
|
import * as i9$2 from 'primeng/card';
|
|
50
50
|
import { CardModule } from 'primeng/card';
|
|
@@ -285,10 +285,15 @@ class SHARED {
|
|
|
285
285
|
static UPLOAD_PROGRESS_100 = 100;
|
|
286
286
|
static UPLOAD_PROGRESS_10 = 10;
|
|
287
287
|
static APPLICANT = 'Applicant';
|
|
288
|
+
static APPLICANT_LOWERCASE = 'applicant';
|
|
289
|
+
static APPLICATION_LOWERCASE = 'application';
|
|
290
|
+
static DOCUMENT_LOWERCASE = 'document';
|
|
291
|
+
static USER_LOWERCASE = 'user';
|
|
288
292
|
static CATAGORIES = 'catagories';
|
|
289
293
|
static DOCUMENTS = 'Documents';
|
|
290
294
|
static UPLOAD_FAILED = 'Upload failed';
|
|
291
295
|
static USER_LIST = 'userList';
|
|
296
|
+
static HYPEN = '-';
|
|
292
297
|
static CATEGORIES = 'categories';
|
|
293
298
|
static UNSAVED_CHANGES_MESSAGE = 'You will loose all the data that was filled in the respective fields.';
|
|
294
299
|
static UNSAVED_CHANGES_HEADER = 'Unsaved Changes';
|
|
@@ -1333,7 +1338,7 @@ class DocumentHttpService {
|
|
|
1333
1338
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1334
1339
|
*/
|
|
1335
1340
|
getDocumentCatagories(contextId) {
|
|
1336
|
-
let headers = new HttpHeaders(
|
|
1341
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1337
1342
|
return this.http.get(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers }).pipe(tap((response) => {
|
|
1338
1343
|
// Store only the categories array, not the entire response
|
|
1339
1344
|
if (response && response.categories) {
|
|
@@ -1347,7 +1352,7 @@ class DocumentHttpService {
|
|
|
1347
1352
|
* Fetches a document by its path name and transforms the response for dropdown options.
|
|
1348
1353
|
* Includes error handling for failed API requests.
|
|
1349
1354
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1350
|
-
|
|
1355
|
+
*/
|
|
1351
1356
|
// getDocumentTypes(): Observable<DocumentTypeModel[]> {
|
|
1352
1357
|
// return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.DOCUMENT_TYPES}`).pipe(
|
|
1353
1358
|
// tap((documentTypes: DocumentTypeModel[]) => {
|
|
@@ -1362,7 +1367,7 @@ class DocumentHttpService {
|
|
|
1362
1367
|
* Fetches a document by its path name and transforms the response for dropdown options.
|
|
1363
1368
|
* @param {string} documentId - The document ID to fetch the document.
|
|
1364
1369
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1365
|
-
|
|
1370
|
+
*/
|
|
1366
1371
|
getAlertsByDocumentID(documentId) {
|
|
1367
1372
|
return this.http.get(`${this.apiUrl}${URLS.ALERT_BY_DOCUMENT_ID}${documentId}`).pipe(tap((documentAlert) => {
|
|
1368
1373
|
this.documentStore.setDocumentAlert(documentAlert);
|
|
@@ -1375,7 +1380,7 @@ class DocumentHttpService {
|
|
|
1375
1380
|
* @param {string} folderId - The folder ID to fetch the document.
|
|
1376
1381
|
* @param {string} contextId - The context ID to fetch the document.
|
|
1377
1382
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1378
|
-
|
|
1383
|
+
*/
|
|
1379
1384
|
getDocumentByFolderID(folderId, contextId) {
|
|
1380
1385
|
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`).pipe(tap((records) => {
|
|
1381
1386
|
this.documentStore.set(records);
|
|
@@ -1392,7 +1397,7 @@ class DocumentHttpService {
|
|
|
1392
1397
|
* @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.
|
|
1393
1398
|
*/
|
|
1394
1399
|
updateDocumentName(documentId, payload) {
|
|
1395
|
-
let headers = new HttpHeaders(
|
|
1400
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1396
1401
|
return this.http.put(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`, payload, { headers }).pipe(catchError((error) => {
|
|
1397
1402
|
return throwError(() => new Error(error));
|
|
1398
1403
|
}));
|
|
@@ -1403,9 +1408,9 @@ class DocumentHttpService {
|
|
|
1403
1408
|
* @returns {Observable<UserListModel[]>} Observable that emits the user list data.
|
|
1404
1409
|
*/
|
|
1405
1410
|
getUserListByContextId(contextId) {
|
|
1411
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1406
1412
|
if (!contextId)
|
|
1407
1413
|
return EMPTY;
|
|
1408
|
-
let headers = new HttpHeaders({ Authorization: `Bearer ec20c488-dee2-4598-96df-9137ab0d85ce` });
|
|
1409
1414
|
return this.http.get(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(tap((userList) => {
|
|
1410
1415
|
this.documentStore.setUserList(userList);
|
|
1411
1416
|
}), catchError((error) => {
|
|
@@ -1422,6 +1427,7 @@ class DocumentHttpService {
|
|
|
1422
1427
|
getStatusDocumentCount(applicationId, contextId = null, categoryId = null) {
|
|
1423
1428
|
if (!applicationId)
|
|
1424
1429
|
return EMPTY;
|
|
1430
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1425
1431
|
let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;
|
|
1426
1432
|
let params = new HttpParams();
|
|
1427
1433
|
const contextParam = contextId || null;
|
|
@@ -1431,7 +1437,6 @@ class DocumentHttpService {
|
|
|
1431
1437
|
if (categoryId) {
|
|
1432
1438
|
params = params.set(SHARED.CATEGORY, categoryId);
|
|
1433
1439
|
}
|
|
1434
|
-
let headers = new HttpHeaders({ Authorization: `Bearer ec20c488-dee2-4598-96df-9137ab0d85ce` });
|
|
1435
1440
|
return this.http.get(url, { params, headers }).pipe(tap((statusData) => {
|
|
1436
1441
|
this.documentStore.setStatusData(statusData);
|
|
1437
1442
|
}), catchError((error) => {
|
|
@@ -1451,10 +1456,7 @@ class DocumentHttpService {
|
|
|
1451
1456
|
*/
|
|
1452
1457
|
getDocumentsBySelection(contextId, menuItem, userId, status, searchKey = null) {
|
|
1453
1458
|
let params = new HttpParams();
|
|
1454
|
-
|
|
1455
|
-
// if (menuItem) {
|
|
1456
|
-
// params = params.set(SHARED.CATEGORY, menuItem);
|
|
1457
|
-
// }
|
|
1459
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1458
1460
|
if (userId) {
|
|
1459
1461
|
params = params.set(SHARED.CONTEXT_ID, userId);
|
|
1460
1462
|
}
|
|
@@ -1464,7 +1466,6 @@ class DocumentHttpService {
|
|
|
1464
1466
|
if (searchKey) {
|
|
1465
1467
|
params = params.set(SHARED.SEARCH_KEY, searchKey);
|
|
1466
1468
|
}
|
|
1467
|
-
let headers = new HttpHeaders({ Authorization: `Bearer ec20c488-dee2-4598-96df-9137ab0d85ce` });
|
|
1468
1469
|
return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(tap((response) => {
|
|
1469
1470
|
if (response.documents) {
|
|
1470
1471
|
this.documentStore.setDocumentList(response.documents);
|
|
@@ -1477,8 +1478,10 @@ class DocumentHttpService {
|
|
|
1477
1478
|
if (!documentId) {
|
|
1478
1479
|
return of([]);
|
|
1479
1480
|
}
|
|
1480
|
-
let headers = new HttpHeaders(
|
|
1481
|
-
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers })
|
|
1481
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1482
|
+
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers }).pipe(catchError((error) => {
|
|
1483
|
+
return throwError(() => new Error(error));
|
|
1484
|
+
}));
|
|
1482
1485
|
}
|
|
1483
1486
|
/**
|
|
1484
1487
|
* Fetches document categories by source (Applicant/Application).
|
|
@@ -1488,7 +1491,7 @@ class DocumentHttpService {
|
|
|
1488
1491
|
getCategoriesBySource(source) {
|
|
1489
1492
|
if (!source)
|
|
1490
1493
|
return EMPTY;
|
|
1491
|
-
let headers = new HttpHeaders(
|
|
1494
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1492
1495
|
return this.http.get(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(catchError((error) => {
|
|
1493
1496
|
return throwError(() => new Error(error));
|
|
1494
1497
|
}));
|
|
@@ -1501,7 +1504,7 @@ class DocumentHttpService {
|
|
|
1501
1504
|
getDocumentTypesByCategory(categoryId) {
|
|
1502
1505
|
if (!categoryId)
|
|
1503
1506
|
return EMPTY;
|
|
1504
|
-
let headers = new HttpHeaders(
|
|
1507
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1505
1508
|
return this.http.get(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(catchError((error) => {
|
|
1506
1509
|
return throwError(() => new Error(error));
|
|
1507
1510
|
}));
|
|
@@ -1512,7 +1515,7 @@ class DocumentHttpService {
|
|
|
1512
1515
|
* @returns {Observable<any>} Observable that emits the upload response.
|
|
1513
1516
|
*/
|
|
1514
1517
|
uploadFile(formData) {
|
|
1515
|
-
let headers = new HttpHeaders(
|
|
1518
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1516
1519
|
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(catchError((error) => {
|
|
1517
1520
|
return throwError(() => new Error(error));
|
|
1518
1521
|
}));
|
|
@@ -1523,7 +1526,7 @@ class DocumentHttpService {
|
|
|
1523
1526
|
* @returns {Observable<any>} Observable that emits the save response.
|
|
1524
1527
|
*/
|
|
1525
1528
|
saveDocumentUpload(payload) {
|
|
1526
|
-
let headers = new HttpHeaders(
|
|
1529
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1527
1530
|
return this.http.post(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(catchError((error) => {
|
|
1528
1531
|
return throwError(() => new Error(error));
|
|
1529
1532
|
}));
|
|
@@ -1539,7 +1542,7 @@ class DocumentHttpService {
|
|
|
1539
1542
|
const payload = {
|
|
1540
1543
|
statusUpdateDescription: statusUpdateDescription
|
|
1541
1544
|
};
|
|
1542
|
-
let headers = new HttpHeaders(
|
|
1545
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1543
1546
|
return this.http.put(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(tap((response) => {
|
|
1544
1547
|
if (response && response.status) {
|
|
1545
1548
|
const normalizedStatus = this.normalizeStatus(response.status);
|
|
@@ -1573,7 +1576,7 @@ class DocumentHttpService {
|
|
|
1573
1576
|
* @returns {Observable<any>} Observable that emits the delete response
|
|
1574
1577
|
*/
|
|
1575
1578
|
deleteDocument(documentId, contextId) {
|
|
1576
|
-
let headers = new HttpHeaders(
|
|
1579
|
+
let headers = new HttpHeaders().set('Authorization', `Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19`);
|
|
1577
1580
|
return this.http.delete(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(tap(() => {
|
|
1578
1581
|
this.getDocumentCatagories(contextId).subscribe();
|
|
1579
1582
|
this.getUserListByContextId(contextId).subscribe();
|
|
@@ -2224,7 +2227,7 @@ class DocumentService {
|
|
|
2224
2227
|
* @returns {Observable<any>} Observable that emits the newly created document.
|
|
2225
2228
|
*/
|
|
2226
2229
|
create(entity) {
|
|
2227
|
-
const headers = { 'Authorization': 'Bearer
|
|
2230
|
+
const headers = { 'Authorization': 'Bearer f30070c4-0855-413e-a6ea-1b9fd30b7c19' };
|
|
2228
2231
|
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(tap((newEntity) => this.documentStore.add(newEntity)));
|
|
2229
2232
|
}
|
|
2230
2233
|
/**
|
|
@@ -3777,8 +3780,6 @@ class UserListService {
|
|
|
3777
3780
|
* @returns Filtered user list
|
|
3778
3781
|
*/
|
|
3779
3782
|
filterUsersByCategory(userList, categories) {
|
|
3780
|
-
// No menu item filtering - return all users
|
|
3781
|
-
// The menu item is now used for navigation, not filtering
|
|
3782
3783
|
return userList;
|
|
3783
3784
|
}
|
|
3784
3785
|
selectUser(userId, userData) {
|
|
@@ -3893,19 +3894,6 @@ class UserListComponent {
|
|
|
3893
3894
|
}
|
|
3894
3895
|
this.cdr.markForCheck();
|
|
3895
3896
|
});
|
|
3896
|
-
// Remove menu item dependency - users are no longer filtered by menu item
|
|
3897
|
-
// this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {
|
|
3898
|
-
// this.updateFilteredUserData();
|
|
3899
|
-
// if (this.selectedUser) {
|
|
3900
|
-
// const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);
|
|
3901
|
-
// if (!selectedUserInFiltered) {
|
|
3902
|
-
// this.selectedUser = undefined;
|
|
3903
|
-
// this.documentStore.setSelectedUserId(null);
|
|
3904
|
-
// this.userSelected.emit(SHARED.EMPTY);
|
|
3905
|
-
// }
|
|
3906
|
-
// }
|
|
3907
|
-
// this.cdr.markForCheck();
|
|
3908
|
-
// });
|
|
3909
3897
|
this.documentQuery.selectShowUserList().subscribe(show => {
|
|
3910
3898
|
if (!show && this.selectedUser) {
|
|
3911
3899
|
this.selectedUser = undefined;
|
|
@@ -4412,118 +4400,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
4412
4400
|
args: [SidebarComponent]
|
|
4413
4401
|
}] } });
|
|
4414
4402
|
|
|
4415
|
-
/**
|
|
4416
|
-
* Storing all permission properties.
|
|
4417
|
-
* @export
|
|
4418
|
-
* @class PERMISSIONS
|
|
4419
|
-
* @typedef {PERMISSIONS}
|
|
4420
|
-
*/
|
|
4421
|
-
class PERMISSIONS {
|
|
4422
|
-
/**
|
|
4423
|
-
* Access permission.
|
|
4424
|
-
* @static
|
|
4425
|
-
* @type {string}
|
|
4426
|
-
*/
|
|
4427
|
-
static DOCUMENT_POST = 'Documents-POST';
|
|
4428
|
-
static DOCUMENT_DELETE = 'documents-deleteDocumentByDocumentId';
|
|
4429
|
-
}
|
|
4430
|
-
|
|
4431
|
-
/**
|
|
4432
|
-
* Service for managing user session details.
|
|
4433
|
-
* @class SessionService
|
|
4434
|
-
* @typedef {SessionService}
|
|
4435
|
-
*/
|
|
4436
|
-
class SessionService {
|
|
4437
|
-
router;
|
|
4438
|
-
/**
|
|
4439
|
-
* Creates an instance of SessionService.
|
|
4440
|
-
* @param {Router} router - Angular Router for navigation.
|
|
4441
|
-
*/
|
|
4442
|
-
constructor(router) {
|
|
4443
|
-
this.router = router;
|
|
4444
|
-
}
|
|
4445
|
-
/**
|
|
4446
|
-
* Retrieves the current user's role from local storage.
|
|
4447
|
-
* @returns {string | null} The user's role, or null if not found.
|
|
4448
|
-
*/
|
|
4449
|
-
getUserRole() {
|
|
4450
|
-
return localStorage.getItem('role');
|
|
4451
|
-
}
|
|
4452
|
-
/**
|
|
4453
|
-
* Stores the user session data in local storage.
|
|
4454
|
-
* @param {any} data - The session data to store.
|
|
4455
|
-
*/
|
|
4456
|
-
setUserSession(data) {
|
|
4457
|
-
localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));
|
|
4458
|
-
}
|
|
4459
|
-
/**
|
|
4460
|
-
* Retrieves the stored user session data.
|
|
4461
|
-
* @returns {any | null} The parsed session data, or null if not found.
|
|
4462
|
-
*/
|
|
4463
|
-
getUserSession() {
|
|
4464
|
-
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
4465
|
-
return sessionData ? JSON.parse(sessionData) : null;
|
|
4466
|
-
}
|
|
4467
|
-
/**
|
|
4468
|
-
* Retrieves the user's permissions from the stored session data.
|
|
4469
|
-
* @returns {any | null} The user's permissions, or null if not found.
|
|
4470
|
-
*/
|
|
4471
|
-
getUserPermissions() {
|
|
4472
|
-
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
4473
|
-
return sessionData ? JSON.parse(sessionData).permissions : null;
|
|
4474
|
-
}
|
|
4475
|
-
/**
|
|
4476
|
-
* Retrieves the session ID from the stored session data.
|
|
4477
|
-
* @returns {any | null} The session ID, or null if not found.
|
|
4478
|
-
*/
|
|
4479
|
-
getSessionID() {
|
|
4480
|
-
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
4481
|
-
console.log(sessionData);
|
|
4482
|
-
if (sessionData) {
|
|
4483
|
-
const sessionId = JSON.parse(sessionData);
|
|
4484
|
-
console.log(sessionId);
|
|
4485
|
-
return sessionId;
|
|
4486
|
-
}
|
|
4487
|
-
return null;
|
|
4488
|
-
}
|
|
4489
|
-
/**
|
|
4490
|
-
* Clears all stored session data from local storage.
|
|
4491
|
-
*/
|
|
4492
|
-
clearSession() {
|
|
4493
|
-
localStorage.clear();
|
|
4494
|
-
}
|
|
4495
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4496
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, providedIn: 'root' });
|
|
4497
|
-
}
|
|
4498
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, decorators: [{
|
|
4499
|
-
type: Injectable,
|
|
4500
|
-
args: [{
|
|
4501
|
-
providedIn: 'root'
|
|
4502
|
-
}]
|
|
4503
|
-
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
4504
|
-
|
|
4505
4403
|
class DocumentTableBuilderService {
|
|
4506
|
-
|
|
4507
|
-
constructor(sessionService) {
|
|
4508
|
-
this.sessionService = sessionService;
|
|
4509
|
-
}
|
|
4404
|
+
constructor() { }
|
|
4510
4405
|
/**
|
|
4511
4406
|
* Builds a single table from document list items
|
|
4512
4407
|
* @param documents Array of document list items
|
|
4513
4408
|
* @returns TableData object
|
|
4514
4409
|
*/
|
|
4515
4410
|
buildDocumentTable(documents) {
|
|
4516
|
-
|
|
4517
|
-
const
|
|
4518
|
-
const hasDeletePermission = userPermissionNames.includes(PERMISSIONS.DOCUMENT_DELETE);
|
|
4519
|
-
const columns = SHARED.DOCUMENT_TABLE_COLUMNS.filter(col => {
|
|
4520
|
-
// Always include non-action columns
|
|
4521
|
-
if (col.type !== SHARED.ACTIONS) {
|
|
4522
|
-
return true;
|
|
4523
|
-
}
|
|
4524
|
-
// Only include action column if user has delete permission
|
|
4525
|
-
return hasDeletePermission;
|
|
4526
|
-
});
|
|
4411
|
+
// Filter out the actions column completely - not needed for anyone
|
|
4412
|
+
const columns = SHARED.DOCUMENT_TABLE_COLUMNS.filter(col => col.type !== SHARED.ACTIONS);
|
|
4527
4413
|
return {
|
|
4528
4414
|
columns: columns,
|
|
4529
4415
|
data: documents
|
|
@@ -4575,7 +4461,7 @@ class DocumentTableBuilderService {
|
|
|
4575
4461
|
isUploaded: doc.isUploaded || false
|
|
4576
4462
|
}));
|
|
4577
4463
|
}
|
|
4578
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentTableBuilderService, deps: [
|
|
4464
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentTableBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4579
4465
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentTableBuilderService, providedIn: 'root' });
|
|
4580
4466
|
}
|
|
4581
4467
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentTableBuilderService, decorators: [{
|
|
@@ -4583,7 +4469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
4583
4469
|
args: [{
|
|
4584
4470
|
providedIn: 'root'
|
|
4585
4471
|
}]
|
|
4586
|
-
}], ctorParameters: () => [
|
|
4472
|
+
}], ctorParameters: () => [] });
|
|
4587
4473
|
|
|
4588
4474
|
class DocumentListService {
|
|
4589
4475
|
documentUploadService;
|
|
@@ -4631,6 +4517,14 @@ class DocumentListService {
|
|
|
4631
4517
|
getApprovedDocumentCount(category) {
|
|
4632
4518
|
return this.documentTableBuilder.getApprovedDocumentCount(category);
|
|
4633
4519
|
}
|
|
4520
|
+
/**
|
|
4521
|
+
* Sorts document categories alphabetically by label
|
|
4522
|
+
* @param categories - The list of document categories to sort
|
|
4523
|
+
* @returns Sorted categories array
|
|
4524
|
+
*/
|
|
4525
|
+
sortDocumentCategoriesAlphabetically(categories) {
|
|
4526
|
+
return [...categories].sort((a, b) => a.label.localeCompare(b.label));
|
|
4527
|
+
}
|
|
4634
4528
|
/**
|
|
4635
4529
|
* Build document categories from API response
|
|
4636
4530
|
*/
|
|
@@ -4658,9 +4552,11 @@ class DocumentListService {
|
|
|
4658
4552
|
categoryCompletionCounts: ['0/0']
|
|
4659
4553
|
};
|
|
4660
4554
|
}
|
|
4661
|
-
|
|
4662
|
-
const
|
|
4663
|
-
const
|
|
4555
|
+
// Sort categories alphabetically
|
|
4556
|
+
const sortedCategories = this.sortDocumentCategoriesAlphabetically(documentListResponse);
|
|
4557
|
+
const documentCategories = [...sortedCategories];
|
|
4558
|
+
const categoryTables = sortedCategories.map(category => this.documentTableBuilder.buildDocumentTable(category.list));
|
|
4559
|
+
const categoryCompletionCounts = sortedCategories.map(category => this.getCompletionCount(category));
|
|
4664
4560
|
return {
|
|
4665
4561
|
documentCategories,
|
|
4666
4562
|
categoryTables,
|
|
@@ -4731,6 +4627,10 @@ class TablePrimaryComponent {
|
|
|
4731
4627
|
processedData = [];
|
|
4732
4628
|
// Expose SHARED constants for template use
|
|
4733
4629
|
SHARED = SHARED;
|
|
4630
|
+
// Computed property for visible columns (excluding actions)
|
|
4631
|
+
get visibleColumns() {
|
|
4632
|
+
return this.tableData.columns.filter(col => col.type !== SHARED.CELL_TYPE_ACTIONS);
|
|
4633
|
+
}
|
|
4734
4634
|
ngOnChanges(changes) {
|
|
4735
4635
|
if (changes['tableData'] && this.tableData) {
|
|
4736
4636
|
this.processTableData();
|
|
@@ -4798,12 +4698,15 @@ class TablePrimaryComponent {
|
|
|
4798
4698
|
onRowClick(rowData) {
|
|
4799
4699
|
this.rowClick.emit(rowData);
|
|
4800
4700
|
}
|
|
4701
|
+
getVisibleColumnCount() {
|
|
4702
|
+
return this.visibleColumns.length;
|
|
4703
|
+
}
|
|
4801
4704
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablePrimaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4802
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TablePrimaryComponent, isStandalone: false, selector: "lib-table-primary", inputs: { tableData: "tableData", showHeader: "showHeader", tableStyle: "tableStyle" }, outputs: { rowClick: "rowClick" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card\">\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\n <tr>\n <
|
|
4705
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TablePrimaryComponent, isStandalone: false, selector: "lib-table-primary", inputs: { tableData: "tableData", showHeader: "showHeader", tableStyle: "tableStyle" }, outputs: { rowClick: "rowClick" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card\">\r\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\r\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\r\n <tr>\r\n <ng-container *ngFor=\"let col of visibleColumns\">\r\n <th [style.width]=\"col.width\">\r\n {{ col.header }}\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr (click)=\"onRowClick(rowData)\" class=\"clickable-row\">\r\n <ng-container *ngFor=\"let col of visibleColumns\">\r\n <td [style.width]=\"col.width\">\r\n <!-- Document Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_DOCUMENT\" class=\"document-cell\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"SHARED.ICON_FILE_PDF\" *ngIf=\"rowData._isPdfFile\"></i>\r\n <i [class]=\"SHARED.ICON_IMAGE\" *ngIf=\"rowData._isImageFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE_EXCEL\" *ngIf=\"rowData._isExcelFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE\" *ngIf=\"rowData._isOtherFile\"></i>\r\n </div>\r\n <div class=\"document-details\">\r\n <div class=\"document-name\">{{ rowData.docName }}</div>\r\n <div class=\"file-info\">{{ rowData.fileName }} - {{ rowData.fileSize }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Status Cell -->\r\n \r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_STATUS\" class=\"status-cell\">\r\n <span class=\"status-pill\" [ngClass]=\"rowData._statusClass\">\r\n <i [class]=\"rowData._statusIcon\"></i>\r\n {{ rowData[col.field] }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_ACTIONS\" class=\"actions-cell\">\r\n <!-- Actions content can be added here if needed -->\r\n </div>\r\n\r\n <!-- Default Text Cell -->\r\n <div *ngIf=\"!col.type || col.type === SHARED.CELL_TYPE_TEXT\" class=\"text-cell\">\r\n {{ rowData[col.field] }}\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- No Records Template -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"getVisibleColumnCount()\" class=\"no-records-cell\">\r\n <div class=\"no-records-content\">\r\n <i class=\"pi pi-inbox\" style=\"font-size: 2rem; color: #6c757d;\"></i>\r\n <p class=\"no-records-text\">No records found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>", styles: [".document-cell .document-info{display:flex;align-items:center;gap:.75rem;text-align:left}.document-cell .document-info .document-icon{width:40px;height:40px;background-color:#e3f2fd;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#1976d2;font-size:1.25rem;flex-shrink:0}.document-cell .document-info .document-details{flex:1;min-width:0}.document-cell .document-info .document-details .document-name{font-weight:400;color:#334155;line-height:20px;font-size:14px;margin-bottom:.25rem;text-align:left;word-break:break-word}.document-cell .document-info .document-details .file-info{font-size:.75rem;color:#6c757d;text-align:left}.status-cell .status-pill{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;padding:.375rem .75rem;border-radius:20px;font-size:.75rem;font-weight:500;white-space:nowrap;min-width:80px}.status-cell .status-pill i{font-size:.875rem}.status-cell .status-pill.status-pending{background-color:#f3f4f6;color:#6b7280}.status-cell .status-pill.status-approved{background-color:#d1fae5;color:#065f46}.status-cell .status-pill.status-alert{background-color:#fee2e2;color:#dc2626}.status-cell .status-pill.status-uploaded{background-color:#dbeafe;color:#1d4ed8}.status-cell .status-pill.status-reviewing{background-color:#fef3c7;color:#d97706}.status-cell .status-pill.status-rejected{background-color:#fee2e2;color:#dc2626}.actions-cell{text-align:left}.actions-cell .p-button{width:2rem;height:2rem;border-radius:50%;background-color:transparent;border:none;color:#6c757d}.actions-cell .p-button:hover{background-color:#f8f9fa;color:#495057}.text-cell{font-weight:500;color:#475569;font-size:14px;line-height:20px;text-align:left}.clickable-row{cursor:pointer;transition:background-color .2s ease}.clickable-row:hover{background-color:#f8f9fa!important}.clickable-row:active{background-color:#e9ecef!important}::ng-deep .p-datatable .p-datatable-wrapper{border:1px solid #E2E8F0;border-radius:10px}::ng-deep .p-datatable .p-datatable-thead>tr>th{background-color:#f8f9fa;border:none;border-bottom:1px solid #dee2e6;padding:1rem 1.5rem;font-weight:600;color:#64748b;font-size:.875rem;text-transform:capitalize;letter-spacing:.5px;text-align:left;border-radius:8px 8px 0 0}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-child{border-top-left-radius:8px}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-top-right-radius:8px}::ng-deep .p-datatable .p-datatable-tbody>tr{border-bottom:1px solid #f1f3f4}::ng-deep .p-datatable .p-datatable-tbody>tr:hover{background-color:#f8f9fa}::ng-deep .p-datatable .p-datatable-tbody>tr:last-child>td:first-child{border-bottom-left-radius:8px}::ng-deep .p-datatable .p-datatable-tbody>tr:last-child>td:last-child{border-bottom-right-radius:8px}::ng-deep .p-datatable .p-datatable-tbody>tr>td{border:none;padding:1rem 1.5rem;vertical-align:middle;text-align:left}.no-records-cell{text-align:center;padding:3rem 1.5rem!important;border:none}.no-records-cell .no-records-content{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem}.no-records-cell .no-records-content .no-records-text{margin:0;color:#6c757d;font-size:1rem;font-weight:500}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] });
|
|
4803
4706
|
}
|
|
4804
4707
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablePrimaryComponent, decorators: [{
|
|
4805
4708
|
type: Component,
|
|
4806
|
-
args: [{ selector: 'lib-table-primary', standalone: false, template: "<div class=\"card\">\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\n <tr>\n <
|
|
4709
|
+
args: [{ selector: 'lib-table-primary', standalone: false, template: "<div class=\"card\">\r\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\r\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\r\n <tr>\r\n <ng-container *ngFor=\"let col of visibleColumns\">\r\n <th [style.width]=\"col.width\">\r\n {{ col.header }}\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr (click)=\"onRowClick(rowData)\" class=\"clickable-row\">\r\n <ng-container *ngFor=\"let col of visibleColumns\">\r\n <td [style.width]=\"col.width\">\r\n <!-- Document Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_DOCUMENT\" class=\"document-cell\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"SHARED.ICON_FILE_PDF\" *ngIf=\"rowData._isPdfFile\"></i>\r\n <i [class]=\"SHARED.ICON_IMAGE\" *ngIf=\"rowData._isImageFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE_EXCEL\" *ngIf=\"rowData._isExcelFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE\" *ngIf=\"rowData._isOtherFile\"></i>\r\n </div>\r\n <div class=\"document-details\">\r\n <div class=\"document-name\">{{ rowData.docName }}</div>\r\n <div class=\"file-info\">{{ rowData.fileName }} - {{ rowData.fileSize }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Status Cell -->\r\n \r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_STATUS\" class=\"status-cell\">\r\n <span class=\"status-pill\" [ngClass]=\"rowData._statusClass\">\r\n <i [class]=\"rowData._statusIcon\"></i>\r\n {{ rowData[col.field] }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_ACTIONS\" class=\"actions-cell\">\r\n <!-- Actions content can be added here if needed -->\r\n </div>\r\n\r\n <!-- Default Text Cell -->\r\n <div *ngIf=\"!col.type || col.type === SHARED.CELL_TYPE_TEXT\" class=\"text-cell\">\r\n {{ rowData[col.field] }}\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- No Records Template -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"getVisibleColumnCount()\" class=\"no-records-cell\">\r\n <div class=\"no-records-content\">\r\n <i class=\"pi pi-inbox\" style=\"font-size: 2rem; color: #6c757d;\"></i>\r\n <p class=\"no-records-text\">No records found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>", styles: [".document-cell .document-info{display:flex;align-items:center;gap:.75rem;text-align:left}.document-cell .document-info .document-icon{width:40px;height:40px;background-color:#e3f2fd;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#1976d2;font-size:1.25rem;flex-shrink:0}.document-cell .document-info .document-details{flex:1;min-width:0}.document-cell .document-info .document-details .document-name{font-weight:400;color:#334155;line-height:20px;font-size:14px;margin-bottom:.25rem;text-align:left;word-break:break-word}.document-cell .document-info .document-details .file-info{font-size:.75rem;color:#6c757d;text-align:left}.status-cell .status-pill{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;padding:.375rem .75rem;border-radius:20px;font-size:.75rem;font-weight:500;white-space:nowrap;min-width:80px}.status-cell .status-pill i{font-size:.875rem}.status-cell .status-pill.status-pending{background-color:#f3f4f6;color:#6b7280}.status-cell .status-pill.status-approved{background-color:#d1fae5;color:#065f46}.status-cell .status-pill.status-alert{background-color:#fee2e2;color:#dc2626}.status-cell .status-pill.status-uploaded{background-color:#dbeafe;color:#1d4ed8}.status-cell .status-pill.status-reviewing{background-color:#fef3c7;color:#d97706}.status-cell .status-pill.status-rejected{background-color:#fee2e2;color:#dc2626}.actions-cell{text-align:left}.actions-cell .p-button{width:2rem;height:2rem;border-radius:50%;background-color:transparent;border:none;color:#6c757d}.actions-cell .p-button:hover{background-color:#f8f9fa;color:#495057}.text-cell{font-weight:500;color:#475569;font-size:14px;line-height:20px;text-align:left}.clickable-row{cursor:pointer;transition:background-color .2s ease}.clickable-row:hover{background-color:#f8f9fa!important}.clickable-row:active{background-color:#e9ecef!important}::ng-deep .p-datatable .p-datatable-wrapper{border:1px solid #E2E8F0;border-radius:10px}::ng-deep .p-datatable .p-datatable-thead>tr>th{background-color:#f8f9fa;border:none;border-bottom:1px solid #dee2e6;padding:1rem 1.5rem;font-weight:600;color:#64748b;font-size:.875rem;text-transform:capitalize;letter-spacing:.5px;text-align:left;border-radius:8px 8px 0 0}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-child{border-top-left-radius:8px}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-top-right-radius:8px}::ng-deep .p-datatable .p-datatable-tbody>tr{border-bottom:1px solid #f1f3f4}::ng-deep .p-datatable .p-datatable-tbody>tr:hover{background-color:#f8f9fa}::ng-deep .p-datatable .p-datatable-tbody>tr:last-child>td:first-child{border-bottom-left-radius:8px}::ng-deep .p-datatable .p-datatable-tbody>tr:last-child>td:last-child{border-bottom-right-radius:8px}::ng-deep .p-datatable .p-datatable-tbody>tr>td{border:none;padding:1rem 1.5rem;vertical-align:middle;text-align:left}.no-records-cell{text-align:center;padding:3rem 1.5rem!important;border:none}.no-records-cell .no-records-content{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem}.no-records-cell .no-records-content .no-records-text{margin:0;color:#6c757d;font-size:1rem;font-weight:500}\n"] }]
|
|
4807
4710
|
}], propDecorators: { tableData: [{
|
|
4808
4711
|
type: Input
|
|
4809
4712
|
}], showHeader: [{
|
|
@@ -5495,6 +5398,80 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
5495
5398
|
}]
|
|
5496
5399
|
}] });
|
|
5497
5400
|
|
|
5401
|
+
/**
|
|
5402
|
+
* Service for managing user session details.
|
|
5403
|
+
* @class SessionService
|
|
5404
|
+
* @typedef {SessionService}
|
|
5405
|
+
*/
|
|
5406
|
+
class SessionService {
|
|
5407
|
+
router;
|
|
5408
|
+
/**
|
|
5409
|
+
* Creates an instance of SessionService.
|
|
5410
|
+
* @param {Router} router - Angular Router for navigation.
|
|
5411
|
+
*/
|
|
5412
|
+
constructor(router) {
|
|
5413
|
+
this.router = router;
|
|
5414
|
+
}
|
|
5415
|
+
/**
|
|
5416
|
+
* Retrieves the current user's role from local storage.
|
|
5417
|
+
* @returns {string | null} The user's role, or null if not found.
|
|
5418
|
+
*/
|
|
5419
|
+
getUserRole() {
|
|
5420
|
+
return localStorage.getItem('role');
|
|
5421
|
+
}
|
|
5422
|
+
/**
|
|
5423
|
+
* Stores the user session data in local storage.
|
|
5424
|
+
* @param {any} data - The session data to store.
|
|
5425
|
+
*/
|
|
5426
|
+
setUserSession(data) {
|
|
5427
|
+
localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));
|
|
5428
|
+
}
|
|
5429
|
+
/**
|
|
5430
|
+
* Retrieves the stored user session data.
|
|
5431
|
+
* @returns {any | null} The parsed session data, or null if not found.
|
|
5432
|
+
*/
|
|
5433
|
+
getUserSession() {
|
|
5434
|
+
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
5435
|
+
return sessionData ? JSON.parse(sessionData) : null;
|
|
5436
|
+
}
|
|
5437
|
+
/**
|
|
5438
|
+
* Retrieves the user's permissions from the stored session data.
|
|
5439
|
+
* @returns {any | null} The user's permissions, or null if not found.
|
|
5440
|
+
*/
|
|
5441
|
+
getUserPermissions() {
|
|
5442
|
+
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
5443
|
+
return sessionData ? JSON.parse(sessionData).permissions : null;
|
|
5444
|
+
}
|
|
5445
|
+
/**
|
|
5446
|
+
* Retrieves the session ID from the stored session data.
|
|
5447
|
+
* @returns {any | null} The session ID, or null if not found.
|
|
5448
|
+
*/
|
|
5449
|
+
getSessionID() {
|
|
5450
|
+
const sessionData = localStorage.getItem(SHARED.SESSIONKEY);
|
|
5451
|
+
console.log(sessionData);
|
|
5452
|
+
if (sessionData) {
|
|
5453
|
+
const sessionId = JSON.parse(sessionData);
|
|
5454
|
+
console.log(sessionId);
|
|
5455
|
+
return sessionId;
|
|
5456
|
+
}
|
|
5457
|
+
return null;
|
|
5458
|
+
}
|
|
5459
|
+
/**
|
|
5460
|
+
* Clears all stored session data from local storage.
|
|
5461
|
+
*/
|
|
5462
|
+
clearSession() {
|
|
5463
|
+
localStorage.clear();
|
|
5464
|
+
}
|
|
5465
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5466
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, providedIn: 'root' });
|
|
5467
|
+
}
|
|
5468
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionService, decorators: [{
|
|
5469
|
+
type: Injectable,
|
|
5470
|
+
args: [{
|
|
5471
|
+
providedIn: 'root'
|
|
5472
|
+
}]
|
|
5473
|
+
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
5474
|
+
|
|
5498
5475
|
/**
|
|
5499
5476
|
* Directive to conditionally show or hide elements based on user permissions.
|
|
5500
5477
|
* @class HasPermissionDirective
|
|
@@ -5869,6 +5846,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
5869
5846
|
*/
|
|
5870
5847
|
class DocumentListComponent {
|
|
5871
5848
|
documentListService;
|
|
5849
|
+
documentHttpService;
|
|
5872
5850
|
/**
|
|
5873
5851
|
* Represents the context ID for the document list.
|
|
5874
5852
|
* This value is passed from the parent component.
|
|
@@ -5963,7 +5941,29 @@ class DocumentListComponent {
|
|
|
5963
5941
|
* Completion counts for each category
|
|
5964
5942
|
*/
|
|
5965
5943
|
categoryCompletionCounts = SHARED.EMPTY_ARRAY;
|
|
5944
|
+
/**
|
|
5945
|
+
* Message to display for document deletion
|
|
5946
|
+
*/
|
|
5966
5947
|
deleteMessage = SHARED.EMPTY_ARRAY;
|
|
5948
|
+
/**
|
|
5949
|
+
* The name of the document being edited
|
|
5950
|
+
*/
|
|
5951
|
+
documentName = SHARED.EMPTY;
|
|
5952
|
+
/**
|
|
5953
|
+
* Error message for invalid file names.
|
|
5954
|
+
*/
|
|
5955
|
+
fileNameError = SHARED.EMPTY;
|
|
5956
|
+
/**
|
|
5957
|
+
* The file extension of the document being edited
|
|
5958
|
+
*/
|
|
5959
|
+
documentExtension;
|
|
5960
|
+
handleSelectedDocument = new EventEmitter();
|
|
5961
|
+
/**
|
|
5962
|
+
* Regular expression to match disallowed characters in file names.
|
|
5963
|
+
* Prevents characters like < > : " / \ | ? *
|
|
5964
|
+
* @type {RegExp}
|
|
5965
|
+
*/
|
|
5966
|
+
disallowedCharsRegex = /[<>:"\/\\|?*]/;
|
|
5967
5967
|
/**
|
|
5968
5968
|
* Getter to format category labels with proper suffix
|
|
5969
5969
|
*/
|
|
@@ -5977,8 +5977,9 @@ class DocumentListComponent {
|
|
|
5977
5977
|
* @class
|
|
5978
5978
|
* @param {DocumentListService} documentListService - The service responsible for document list operations.
|
|
5979
5979
|
*/
|
|
5980
|
-
constructor(documentListService) {
|
|
5980
|
+
constructor(documentListService, documentHttpService) {
|
|
5981
5981
|
this.documentListService = documentListService;
|
|
5982
|
+
this.documentHttpService = documentHttpService;
|
|
5982
5983
|
}
|
|
5983
5984
|
/**
|
|
5984
5985
|
* Handles changes to input properties
|
|
@@ -6048,6 +6049,7 @@ class DocumentListComponent {
|
|
|
6048
6049
|
handleTableRowClick(rowData) {
|
|
6049
6050
|
this.isdialogVisible = SHARED.TRUE;
|
|
6050
6051
|
this.selectedDocument = this.documentListService.handleTableRowClick(rowData);
|
|
6052
|
+
this.handleSelectedDocument.emit(this.selectedDocument);
|
|
6051
6053
|
}
|
|
6052
6054
|
/**
|
|
6053
6055
|
* Handles the delete action from the table component
|
|
@@ -6097,23 +6099,24 @@ class DocumentListComponent {
|
|
|
6097
6099
|
if (!this.documentCategories || !this.documentCategoriesContainer) {
|
|
6098
6100
|
return;
|
|
6099
6101
|
}
|
|
6100
|
-
|
|
6101
|
-
|
|
6102
|
-
category.label.toLowerCase().includes(
|
|
6102
|
+
const sortedCategories = this.documentCategories;
|
|
6103
|
+
let targetCategory = sortedCategories.find(category => category.label.toLowerCase().includes(SHARED.APPLICATION_LOWERCASE) ||
|
|
6104
|
+
category.label.toLowerCase().includes(SHARED.APPLICANT_LOWERCASE) ||
|
|
6105
|
+
category.label.toLowerCase().includes(SHARED.DOCUMENT_LOWERCASE));
|
|
6103
6106
|
if (!targetCategory) {
|
|
6104
|
-
if (menuItemId.includes(
|
|
6105
|
-
targetCategory =
|
|
6107
|
+
if (menuItemId.includes(SHARED.APPLICATION_LOWERCASE)) {
|
|
6108
|
+
targetCategory = sortedCategories.find(cat => cat.label.toLowerCase().includes(SHARED.APPLICATION_LOWERCASE));
|
|
6106
6109
|
}
|
|
6107
|
-
else if (menuItemId.includes(
|
|
6108
|
-
targetCategory =
|
|
6109
|
-
cat.label.toLowerCase().includes(
|
|
6110
|
+
else if (menuItemId.includes(SHARED.APPLICANT_LOWERCASE) || menuItemId.includes(SHARED.USER_LOWERCASE)) {
|
|
6111
|
+
targetCategory = sortedCategories.find(cat => cat.label.toLowerCase().includes(SHARED.APPLICANT_LOWERCASE) ||
|
|
6112
|
+
cat.label.toLowerCase().includes(SHARED.USER_LOWERCASE));
|
|
6110
6113
|
}
|
|
6111
6114
|
else {
|
|
6112
|
-
targetCategory =
|
|
6115
|
+
targetCategory = sortedCategories[0];
|
|
6113
6116
|
}
|
|
6114
6117
|
}
|
|
6115
6118
|
if (targetCategory) {
|
|
6116
|
-
const categoryIndex =
|
|
6119
|
+
const categoryIndex = sortedCategories.findIndex(cat => cat === targetCategory);
|
|
6117
6120
|
const categoryElements = this.documentCategoriesContainer.nativeElement.querySelectorAll('.category');
|
|
6118
6121
|
if (categoryElements[categoryIndex]) {
|
|
6119
6122
|
categoryElements[categoryIndex].scrollIntoView({
|
|
@@ -6121,15 +6124,8 @@ class DocumentListComponent {
|
|
|
6121
6124
|
block: 'start',
|
|
6122
6125
|
inline: 'nearest'
|
|
6123
6126
|
});
|
|
6124
|
-
// Add a temporary highlight effect
|
|
6125
6127
|
this.highlightCategory(categoryElements[categoryIndex]);
|
|
6126
6128
|
}
|
|
6127
|
-
else {
|
|
6128
|
-
console.log('Scroll: Category element not found at index:', categoryIndex);
|
|
6129
|
-
}
|
|
6130
|
-
}
|
|
6131
|
-
else {
|
|
6132
|
-
console.log('Scroll: No target category found');
|
|
6133
6129
|
}
|
|
6134
6130
|
}
|
|
6135
6131
|
/**
|
|
@@ -6138,39 +6134,25 @@ class DocumentListComponent {
|
|
|
6138
6134
|
*/
|
|
6139
6135
|
scrollToCategorySectionWithNavigationInfo(navigationInfo) {
|
|
6140
6136
|
if (!this.documentCategories || !this.documentCategoriesContainer) {
|
|
6141
|
-
console.log('Scroll: Missing required data for scrolling');
|
|
6142
6137
|
return;
|
|
6143
6138
|
}
|
|
6144
|
-
|
|
6145
|
-
|
|
6146
|
-
console.log('Scroll: Available categories:', this.documentCategories.map(cat => cat.label));
|
|
6147
|
-
// Find the target category by exact menu item label match
|
|
6148
|
-
// This is the clean, dynamic approach since menu item labels match section labels
|
|
6149
|
-
const targetCategory = this.documentCategories.find(category => category.label.toLowerCase() === navigationInfo.menuItemLabel.toLowerCase());
|
|
6139
|
+
const sortedCategories = this.documentCategories;
|
|
6140
|
+
const targetCategory = sortedCategories.find(category => category.label.toLowerCase() === navigationInfo.menuItemLabel.toLowerCase());
|
|
6150
6141
|
if (targetCategory) {
|
|
6151
|
-
|
|
6152
|
-
// Try to find the element by semantic ID first (more reliable)
|
|
6153
|
-
const sectionId = 'section-' + targetCategory.label.toLowerCase().replace(' ', '-');
|
|
6142
|
+
const sectionId = 'section-' + targetCategory.label.toLowerCase().replace(SHARED.EMPTY_SPACE, SHARED.HYPEN);
|
|
6154
6143
|
let targetElement = this.documentCategoriesContainer.nativeElement.querySelector(`#${sectionId}`);
|
|
6155
6144
|
if (targetElement) {
|
|
6156
|
-
console.log('Scroll: Found target element by ID:', sectionId);
|
|
6157
|
-
// Scroll to the target category with smooth behavior
|
|
6158
|
-
// Use scrollIntoView to work with the parent content container
|
|
6159
6145
|
targetElement.scrollIntoView({
|
|
6160
6146
|
behavior: 'smooth',
|
|
6161
6147
|
block: 'start',
|
|
6162
6148
|
inline: 'nearest'
|
|
6163
6149
|
});
|
|
6164
|
-
// Add a temporary highlight effect
|
|
6165
6150
|
this.highlightCategory(targetElement);
|
|
6166
6151
|
}
|
|
6167
6152
|
else {
|
|
6168
|
-
|
|
6169
|
-
console.log('Scroll: Element not found by ID, using index-based approach');
|
|
6170
|
-
const categoryIndex = this.documentCategories.findIndex(cat => cat === targetCategory);
|
|
6153
|
+
const categoryIndex = sortedCategories.findIndex(cat => cat === targetCategory);
|
|
6171
6154
|
const categoryElements = this.documentCategoriesContainer.nativeElement.querySelectorAll('.category');
|
|
6172
6155
|
if (categoryElements[categoryIndex]) {
|
|
6173
|
-
console.log('Scroll: Scrolling to category element by index');
|
|
6174
6156
|
categoryElements[categoryIndex].scrollIntoView({
|
|
6175
6157
|
behavior: 'smooth',
|
|
6176
6158
|
block: 'start',
|
|
@@ -6178,24 +6160,15 @@ class DocumentListComponent {
|
|
|
6178
6160
|
});
|
|
6179
6161
|
this.highlightCategory(categoryElements[categoryIndex]);
|
|
6180
6162
|
}
|
|
6181
|
-
else {
|
|
6182
|
-
console.log('Scroll: Category element not found at index:', categoryIndex);
|
|
6183
|
-
}
|
|
6184
6163
|
}
|
|
6185
6164
|
}
|
|
6186
|
-
else {
|
|
6187
|
-
console.log('Scroll: No target category found for menu item:', navigationInfo.menuItemLabel);
|
|
6188
|
-
console.log('Scroll: Available sections:', this.documentCategories.map(cat => cat.label));
|
|
6189
|
-
}
|
|
6190
6165
|
}
|
|
6191
6166
|
/**
|
|
6192
6167
|
* Adds a temporary highlight effect to the scrolled category
|
|
6193
6168
|
* @param categoryElement - The DOM element of the category to highlight
|
|
6194
6169
|
*/
|
|
6195
6170
|
highlightCategory(categoryElement) {
|
|
6196
|
-
// Add highlight class
|
|
6197
6171
|
categoryElement.classList.add('category-highlight');
|
|
6198
|
-
// Remove highlight after animation
|
|
6199
6172
|
setTimeout(() => {
|
|
6200
6173
|
categoryElement.classList.remove('category-highlight');
|
|
6201
6174
|
}, 2000);
|
|
@@ -6209,23 +6182,18 @@ class DocumentListComponent {
|
|
|
6209
6182
|
if (!this.documentCategories || !this.documentCategoriesContainer) {
|
|
6210
6183
|
return;
|
|
6211
6184
|
}
|
|
6212
|
-
// Find the target category
|
|
6213
6185
|
const targetCategory = this.documentCategories.find(category => category.label.toLowerCase() === navigationInfo.menuItemLabel.toLowerCase());
|
|
6214
6186
|
if (!targetCategory) {
|
|
6215
6187
|
return;
|
|
6216
6188
|
}
|
|
6217
|
-
// Create a temporary observer to find the target element
|
|
6218
6189
|
const observer = new IntersectionObserver((entries) => {
|
|
6219
6190
|
entries.forEach(entry => {
|
|
6220
6191
|
if (entry.isIntersecting && entry.target.id === `section-${targetCategory.label.toLowerCase().replace(' ', '-')}`) {
|
|
6221
|
-
// Element is visible, scroll to it
|
|
6222
6192
|
entry.target.scrollIntoView({
|
|
6223
6193
|
behavior: 'smooth',
|
|
6224
6194
|
block: 'start'
|
|
6225
6195
|
});
|
|
6226
|
-
// Highlight the element
|
|
6227
6196
|
this.highlightCategory(entry.target);
|
|
6228
|
-
// Disconnect observer after use
|
|
6229
6197
|
observer.disconnect();
|
|
6230
6198
|
}
|
|
6231
6199
|
});
|
|
@@ -6233,30 +6201,57 @@ class DocumentListComponent {
|
|
|
6233
6201
|
threshold: 0.1,
|
|
6234
6202
|
rootMargin: '0px 0px -100px 0px'
|
|
6235
6203
|
});
|
|
6236
|
-
// Observe all category elements
|
|
6237
6204
|
const categoryElements = this.documentCategoriesContainer.nativeElement.querySelectorAll('.category');
|
|
6238
6205
|
categoryElements.forEach((element) => {
|
|
6239
6206
|
observer.observe(element);
|
|
6240
6207
|
});
|
|
6241
|
-
// Fallback: if no intersection after a short delay, use direct scrolling
|
|
6242
6208
|
setTimeout(() => {
|
|
6243
6209
|
observer.disconnect();
|
|
6244
6210
|
this.scrollToCategorySectionWithNavigationInfo(navigationInfo);
|
|
6245
6211
|
}, 100);
|
|
6246
6212
|
}
|
|
6213
|
+
onDocumentNameChange(event) {
|
|
6214
|
+
const input = event.target;
|
|
6215
|
+
this.documentName = input.value;
|
|
6216
|
+
if (this.disallowedCharsRegex.test(this.documentName)) {
|
|
6217
|
+
// this.fileNameError = ERRORS.ERROR_INVALID_FILENAME_CHARACTERS;
|
|
6218
|
+
}
|
|
6219
|
+
else {
|
|
6220
|
+
this.fileNameError = SHARED.EMPTY;
|
|
6221
|
+
}
|
|
6222
|
+
const span = document.querySelector('.hidden-measure');
|
|
6223
|
+
if (span) {
|
|
6224
|
+
const computedStyle = window.getComputedStyle(input);
|
|
6225
|
+
span.style.fontSize = computedStyle.fontSize;
|
|
6226
|
+
span.textContent = input.value || ' ';
|
|
6227
|
+
input.style.width = `${span.offsetWidth + 50}px`;
|
|
6228
|
+
input.style.minWidth = `${span.offsetWidth + 50}px`;
|
|
6229
|
+
}
|
|
6230
|
+
}
|
|
6231
|
+
handleSaveClick() {
|
|
6232
|
+
if (this.documentName !== this.selectedDocument.docName && !this.fileNameError) {
|
|
6233
|
+
const updatedDocumentName = this.documentExtension ? (this.documentName + this.documentExtension) : this.documentName;
|
|
6234
|
+
const payload = { documentName: updatedDocumentName };
|
|
6235
|
+
this.documentHttpService.updateDocumentName(this.selectedDocument._id, payload)
|
|
6236
|
+
.subscribe((res) => {
|
|
6237
|
+
console.log(`${SHARED.UPDATE_DOCUMENT_NAME} ${this.selectedDocument._id}`);
|
|
6238
|
+
console.log(res);
|
|
6239
|
+
});
|
|
6240
|
+
}
|
|
6241
|
+
}
|
|
6247
6242
|
/**
|
|
6248
6243
|
* Cleanup subscriptions on component destroy
|
|
6249
6244
|
*/
|
|
6250
6245
|
ngOnDestroy() {
|
|
6251
6246
|
this.documentListSubscription.unsubscribe();
|
|
6252
6247
|
}
|
|
6253
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentListComponent, deps: [{ token: DocumentListService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6254
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentListComponent, isStandalone: false, selector: "lib-document-list", inputs: { contextId: "contextId", documentListResponse: "documentListResponse", selectedMenuItemId: "selectedMenuItemId", navigationInfo: "navigationInfo", documentList: "documentList" }, viewQueries: [{ propertyName: "documentCategoriesContainer", first: true, predicate: ["documentCategoriesContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-viewer\">\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\" \n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\"\n (onHide)=\"handleCloseModal()\">\n <p-messages \n[(value)]=\"deleteMessage\" \n[enableService]=\"false\" \n[closable]=\"false\" />\n <document-viewer \n [selectedDocument]=\"selectedDocument\" \n [documentList]=\"documentList\" \n [contextId]=\"contextId\" \n (documentStatusUpdated)=\"refreshDocumentList($event.actionType === 'delete')\">\n <ng-template pTemplate=\"header\">\n <div class=\"w-full flex align-items-center justify-content-between\">\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\n [(ngModel)]=\"fileName\" />\n \n </div>\n </ng-template>\n <ng-content></ng-content>\n </document-viewer>\n </p-dialog>\n</div>\n\n<div class=\"document-categories-container\" #documentCategoriesContainer>\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\" [id]=\"'section-' + category.label.toLowerCase().replace(' ', '-')\">\n <div class=\"category-header\">\n <div class=\"category-title\">\n <h3>{{ formattedCategoryLabels[i] }}</h3>\n <p class=\"category-description\">{{ category.categoryDescription }}</p>\n </div>\n <div class=\"completion-status\">\n <span class=\"status-badge\">{{ categoryCompletionCounts[i] }} Complete</span>\n </div>\n </div>\n\n <div class=\"table-container\">\n <lib-table-primary \n [tableData]=\"categoryTables[i]\" \n [tableStyle]=\"{ 'min-width': '100%' }\"\n (rowClick)=\"handleTableRowClick($event)\"\n (deleteAction)=\"handleDeleteAction($event)\">\n </lib-table-primary>\n </div>\n </div>\n</div>\n", styles: [".document-list-wrapper .p-accordion-header-link{padding:.5rem}.document-list-wrapper .p-sidebar-right,.right-sidebar{width:35%}.document-title-wrapper{font-size:20px;font-weight:700;color:var(--text-color)}.document-input-field{display:flex;flex-direction:column}.document-input-field input{width:100%;height:46px;padding:10px 15px;gap:10px;border-radius:10px;outline:none;border:1px solid rgba(76,98,146,.1019607843);font-size:15px}label{color:#0f1729;font-weight:600}.document-list-dropDown .p-element{padding:10px 0 10px 15px}.document-list-dropDown .p-dropdown{border-radius:10px!important}.side-bar-con{display:flex;flex-direction:column}.save-btn-con{width:100%;border-top:1px solid rgba(76,98,146,.2);background:#4c629214;padding:13px 40px}.save-btn-wrapper{padding:10px 4px}.save-btn .p-button{height:45px!important;width:140px;border-radius:10px}.p-sidebar-footer{padding:0}.file-input-wrapper.p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa!important}.document-viewer{position:relative;z-index:1}.document-viewer ::ng-deep .p-dialog{z-index:9999!important}.document-viewer ::ng-deep .p-dialog-mask{z-index:9998!important}.document-viewer ::ng-deep .p-dialog{width:100vw!important;height:100vh!important;max-width:none!important;max-height:none!important;margin:0!important;top:0!important;left:0!important;transform:none!important}.document-viewer ::ng-deep .p-dialog-content{height:calc(100vh - 60px)!important;max-height:none!important}.document-categories-container{padding:1rem;background-color:#f8f9fa;min-height:auto}.document-categories-container .category{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden;transition:all .3s ease}.document-categories-container .category .category-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-categories-container .category .category-header .category-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-categories-container .category .category-header .category-title .category-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-categories-container .category .category-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-categories-container .category .table-container{padding:0}@keyframes highlightPulse{0%{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}50%{transform:scale(1.03);box-shadow:0 6px 25px #3b82f680}to{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}}.document-sections-container{padding:1rem;background-color:#f8f9fa;min-height:100vh}.document-sections-container .section{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden}.document-sections-container .section .section-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-sections-container .section .section-header .section-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-sections-container .section .section-header .section-title .section-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-sections-container .section .section-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-sections-container .section .table-container{padding:0}@media (max-width: 768px){.document-categories-container,.document-sections-container{padding:.5rem}.document-categories-container .category .category-header,.document-categories-container .category .section-header,.document-categories-container .section .category-header,.document-categories-container .section .section-header,.document-sections-container .category .category-header,.document-sections-container .category .section-header,.document-sections-container .section .category-header,.document-sections-container .section .section-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-categories-container .category .category-header .completion-status,.document-categories-container .category .section-header .completion-status,.document-categories-container .section .category-header .completion-status,.document-categories-container .section .section-header .completion-status,.document-sections-container .category .category-header .completion-status,.document-sections-container .category .section-header .completion-status,.document-sections-container .section .category-header .completion-status,.document-sections-container .section .section-header .completion-status{align-self:flex-end}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: TablePrimaryComponent, selector: "lib-table-primary", inputs: ["tableData", "showHeader", "tableStyle"], outputs: ["rowClick"] }, { kind: "component", type: DocumentViewerComponent, selector: "document-viewer", inputs: ["selectedDocument", "documentList", "contextId"], outputs: ["documentStatusUpdated"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
6248
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentListComponent, deps: [{ token: DocumentListService }, { token: DocumentHttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6249
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentListComponent, isStandalone: false, selector: "lib-document-list", inputs: { contextId: "contextId", documentListResponse: "documentListResponse", selectedMenuItemId: "selectedMenuItemId", navigationInfo: "navigationInfo", documentList: "documentList" }, outputs: { handleSelectedDocument: "handleSelectedDocument" }, viewQueries: [{ propertyName: "documentCategoriesContainer", first: true, predicate: ["documentCategoriesContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-viewer\">\r\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\"\r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\" (onHide)=\"handleCloseModal()\">\r\n <p-messages [(value)]=\"deleteMessage\" [enableService]=\"false\" [closable]=\"false\" />\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"inline-flex align-items-center justify-content-center gap-2\">\r\n <span class=\"font-bold white-space-nowrap hidden-measure\">\r\n {{selectedDocument?.docName}}\r\n </span>\r\n <input #fileInput type=\"text\" class=\"h-3rem file-input-wrapper\" pInputText [(ngModel)]=\"documentName\"\r\n (input)=\"onDocumentNameChange($event)\" (blur)=\"handleSaveClick()\" />\r\n <div *ngIf=\"fileNameError\" class=\"error-message-wrapper\">\r\n {{ fileNameError }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <document-viewer [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\" [contextId]=\"contextId\"\r\n (documentStatusUpdated)=\"refreshDocumentList($event.actionType === 'delete')\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n\r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\" #documentCategoriesContainer>\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\"\r\n [id]=\"'section-' + category.label.toLowerCase().replace(' ', '-')\">\r\n <div class=\"category-header\">\r\n <div class=\"category-title\">\r\n <h3>{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <span class=\"status-badge\">{{ categoryCompletionCounts[i] }} Complete</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary [tableData]=\"categoryTables[i]\" [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\" (deleteAction)=\"handleDeleteAction($event)\">\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-list-wrapper .p-accordion-header-link{padding:.5rem}.document-list-wrapper .p-sidebar-right,.right-sidebar{width:35%}.document-title-wrapper{font-size:20px;font-weight:700;color:var(--text-color)}.document-input-field{display:flex;flex-direction:column}.document-input-field input{width:100%;height:46px;padding:10px 15px;gap:10px;border-radius:10px;outline:none;border:1px solid rgba(76,98,146,.1019607843);font-size:15px}label{color:#0f1729;font-weight:600}.document-list-dropDown .p-element{padding:10px 0 10px 15px}.document-list-dropDown .p-dropdown{border-radius:10px!important}.side-bar-con{display:flex;flex-direction:column}.save-btn-con{width:100%;border-top:1px solid rgba(76,98,146,.2);background:#4c629214;padding:13px 40px}.save-btn-wrapper{padding:10px 4px}.save-btn .p-button{height:45px!important;width:140px;border-radius:10px}.p-sidebar-footer{padding:0}.file-input-wrapper.p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa!important}.document-viewer{position:relative;z-index:1}.document-viewer ::ng-deep .p-dialog{z-index:9999!important}.document-viewer ::ng-deep .p-dialog-mask{z-index:9998!important}.document-viewer ::ng-deep .p-dialog{width:100vw!important;height:100vh!important;max-width:none!important;max-height:none!important;margin:0!important;top:0!important;left:0!important;transform:none!important}.document-viewer ::ng-deep .p-dialog-content{height:calc(100vh - 60px)!important;max-height:none!important}.document-categories-container{padding:1rem;background-color:#f8f9fa;min-height:auto}.document-categories-container .category{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden;transition:all .3s ease}.document-categories-container .category .category-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-categories-container .category .category-header .category-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-categories-container .category .category-header .category-title .category-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-categories-container .category .category-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-categories-container .category .table-container{padding:0}@keyframes highlightPulse{0%{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}50%{transform:scale(1.03);box-shadow:0 6px 25px #3b82f680}to{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}}.document-sections-container{padding:1rem;background-color:#f8f9fa;min-height:100vh}.document-sections-container .section{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden}.document-sections-container .section .section-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-sections-container .section .section-header .section-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-sections-container .section .section-header .section-title .section-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-sections-container .section .section-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-sections-container .section .table-container{padding:0}@media (max-width: 768px){.document-categories-container,.document-sections-container{padding:.5rem}.document-categories-container .category .category-header,.document-categories-container .category .section-header,.document-categories-container .section .category-header,.document-categories-container .section .section-header,.document-sections-container .category .category-header,.document-sections-container .category .section-header,.document-sections-container .section .category-header,.document-sections-container .section .section-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-categories-container .category .category-header .completion-status,.document-categories-container .category .section-header .completion-status,.document-categories-container .section .category-header .completion-status,.document-categories-container .section .section-header .completion-status,.document-sections-container .category .category-header .completion-status,.document-sections-container .category .section-header .completion-status,.document-sections-container .section .category-header .completion-status,.document-sections-container .section .section-header .completion-status{align-self:flex-end}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i8$1.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: TablePrimaryComponent, selector: "lib-table-primary", inputs: ["tableData", "showHeader", "tableStyle"], outputs: ["rowClick"] }, { kind: "component", type: DocumentViewerComponent, selector: "document-viewer", inputs: ["selectedDocument", "documentList", "contextId"], outputs: ["documentStatusUpdated"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
6255
6250
|
}
|
|
6256
6251
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentListComponent, decorators: [{
|
|
6257
6252
|
type: Component,
|
|
6258
|
-
args: [{ selector: 'lib-document-list', standalone: false, encapsulation: ViewEncapsulation.None, template: "<div class=\"document-viewer\">\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\"
|
|
6259
|
-
}], ctorParameters: () => [{ type: DocumentListService }], propDecorators: { contextId: [{
|
|
6253
|
+
args: [{ selector: 'lib-document-list', standalone: false, encapsulation: ViewEncapsulation.None, template: "<div class=\"document-viewer\">\r\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\"\r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\" (onHide)=\"handleCloseModal()\">\r\n <p-messages [(value)]=\"deleteMessage\" [enableService]=\"false\" [closable]=\"false\" />\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"inline-flex align-items-center justify-content-center gap-2\">\r\n <span class=\"font-bold white-space-nowrap hidden-measure\">\r\n {{selectedDocument?.docName}}\r\n </span>\r\n <input #fileInput type=\"text\" class=\"h-3rem file-input-wrapper\" pInputText [(ngModel)]=\"documentName\"\r\n (input)=\"onDocumentNameChange($event)\" (blur)=\"handleSaveClick()\" />\r\n <div *ngIf=\"fileNameError\" class=\"error-message-wrapper\">\r\n {{ fileNameError }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <document-viewer [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\" [contextId]=\"contextId\"\r\n (documentStatusUpdated)=\"refreshDocumentList($event.actionType === 'delete')\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n\r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\" #documentCategoriesContainer>\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\"\r\n [id]=\"'section-' + category.label.toLowerCase().replace(' ', '-')\">\r\n <div class=\"category-header\">\r\n <div class=\"category-title\">\r\n <h3>{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <span class=\"status-badge\">{{ categoryCompletionCounts[i] }} Complete</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary [tableData]=\"categoryTables[i]\" [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\" (deleteAction)=\"handleDeleteAction($event)\">\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-list-wrapper .p-accordion-header-link{padding:.5rem}.document-list-wrapper .p-sidebar-right,.right-sidebar{width:35%}.document-title-wrapper{font-size:20px;font-weight:700;color:var(--text-color)}.document-input-field{display:flex;flex-direction:column}.document-input-field input{width:100%;height:46px;padding:10px 15px;gap:10px;border-radius:10px;outline:none;border:1px solid rgba(76,98,146,.1019607843);font-size:15px}label{color:#0f1729;font-weight:600}.document-list-dropDown .p-element{padding:10px 0 10px 15px}.document-list-dropDown .p-dropdown{border-radius:10px!important}.side-bar-con{display:flex;flex-direction:column}.save-btn-con{width:100%;border-top:1px solid rgba(76,98,146,.2);background:#4c629214;padding:13px 40px}.save-btn-wrapper{padding:10px 4px}.save-btn .p-button{height:45px!important;width:140px;border-radius:10px}.p-sidebar-footer{padding:0}.file-input-wrapper.p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa!important}.document-viewer{position:relative;z-index:1}.document-viewer ::ng-deep .p-dialog{z-index:9999!important}.document-viewer ::ng-deep .p-dialog-mask{z-index:9998!important}.document-viewer ::ng-deep .p-dialog{width:100vw!important;height:100vh!important;max-width:none!important;max-height:none!important;margin:0!important;top:0!important;left:0!important;transform:none!important}.document-viewer ::ng-deep .p-dialog-content{height:calc(100vh - 60px)!important;max-height:none!important}.document-categories-container{padding:1rem;background-color:#f8f9fa;min-height:auto}.document-categories-container .category{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden;transition:all .3s ease}.document-categories-container .category .category-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-categories-container .category .category-header .category-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-categories-container .category .category-header .category-title .category-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-categories-container .category .category-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-categories-container .category .table-container{padding:0}@keyframes highlightPulse{0%{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}50%{transform:scale(1.03);box-shadow:0 6px 25px #3b82f680}to{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}}.document-sections-container{padding:1rem;background-color:#f8f9fa;min-height:100vh}.document-sections-container .section{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden}.document-sections-container .section .section-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-sections-container .section .section-header .section-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-sections-container .section .section-header .section-title .section-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-sections-container .section .section-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-sections-container .section .table-container{padding:0}@media (max-width: 768px){.document-categories-container,.document-sections-container{padding:.5rem}.document-categories-container .category .category-header,.document-categories-container .category .section-header,.document-categories-container .section .category-header,.document-categories-container .section .section-header,.document-sections-container .category .category-header,.document-sections-container .category .section-header,.document-sections-container .section .category-header,.document-sections-container .section .section-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-categories-container .category .category-header .completion-status,.document-categories-container .category .section-header .completion-status,.document-categories-container .section .category-header .completion-status,.document-categories-container .section .section-header .completion-status,.document-sections-container .category .category-header .completion-status,.document-sections-container .category .section-header .completion-status,.document-sections-container .section .category-header .completion-status,.document-sections-container .section .section-header .completion-status{align-self:flex-end}}\n"] }]
|
|
6254
|
+
}], ctorParameters: () => [{ type: DocumentListService }, { type: DocumentHttpService }], propDecorators: { contextId: [{
|
|
6260
6255
|
type: Input
|
|
6261
6256
|
}], documentListResponse: [{
|
|
6262
6257
|
type: Input
|
|
@@ -6269,6 +6264,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
6269
6264
|
args: ['documentCategoriesContainer', { static: false }]
|
|
6270
6265
|
}], documentList: [{
|
|
6271
6266
|
type: Input
|
|
6267
|
+
}], handleSelectedDocument: [{
|
|
6268
|
+
type: Output
|
|
6272
6269
|
}] } });
|
|
6273
6270
|
|
|
6274
6271
|
class DocumentMenuService {
|
|
@@ -6276,6 +6273,34 @@ class DocumentMenuService {
|
|
|
6276
6273
|
constructor(documentStore) {
|
|
6277
6274
|
this.documentStore = documentStore;
|
|
6278
6275
|
}
|
|
6276
|
+
/**
|
|
6277
|
+
* Sorts categories alphabetically by label
|
|
6278
|
+
* @param categories - The list of document categories to sort
|
|
6279
|
+
* @returns Sorted categories array
|
|
6280
|
+
*/
|
|
6281
|
+
sortCategoriesAlphabetically(categories) {
|
|
6282
|
+
return [...categories].sort((a, b) => a.label.localeCompare(b.label));
|
|
6283
|
+
}
|
|
6284
|
+
/**
|
|
6285
|
+
* Sorts menu items within each category alphabetically by label
|
|
6286
|
+
* @param categories - The list of document categories to sort
|
|
6287
|
+
* @returns Categories with sorted menu items
|
|
6288
|
+
*/
|
|
6289
|
+
sortMenuItemsAlphabetically(categories) {
|
|
6290
|
+
return categories.map(category => ({
|
|
6291
|
+
...category,
|
|
6292
|
+
items: category.items ? [...category.items].sort((a, b) => a.label.localeCompare(b.label)) : category.items
|
|
6293
|
+
}));
|
|
6294
|
+
}
|
|
6295
|
+
/**
|
|
6296
|
+
* Sorts both categories and their menu items alphabetically
|
|
6297
|
+
* @param categories - The list of document categories to sort
|
|
6298
|
+
* @returns Fully sorted categories array
|
|
6299
|
+
*/
|
|
6300
|
+
sortCategoriesAndMenuItems(categories) {
|
|
6301
|
+
const sortedCategories = this.sortCategoriesAlphabetically(categories);
|
|
6302
|
+
return this.sortMenuItemsAlphabetically(sortedCategories);
|
|
6303
|
+
}
|
|
6279
6304
|
/**
|
|
6280
6305
|
* Gets the category name for a given menu item _id
|
|
6281
6306
|
* @param menuItemId - The _id of the menu item
|
|
@@ -6318,18 +6343,6 @@ class DocumentMenuService {
|
|
|
6318
6343
|
// Menu items are now used for navigation, not filtering
|
|
6319
6344
|
this.documentStore.setShowUserList(true);
|
|
6320
6345
|
}
|
|
6321
|
-
/**
|
|
6322
|
-
* Handles document status based on selected menu item
|
|
6323
|
-
* @param menuItemId - The _id of the selected menu item
|
|
6324
|
-
* @param categories - The list of document categories
|
|
6325
|
-
*/
|
|
6326
|
-
handleDocumentStatus(menuItemId, categories) {
|
|
6327
|
-
const menuItem = this.getMenuItemById(menuItemId, categories);
|
|
6328
|
-
if (menuItem) {
|
|
6329
|
-
// Menu items are now used for navigation, not status filtering
|
|
6330
|
-
console.log('Selected menu item for navigation:', menuItem.label);
|
|
6331
|
-
}
|
|
6332
|
-
}
|
|
6333
6346
|
/**
|
|
6334
6347
|
* Calculates total documents for a menu item
|
|
6335
6348
|
* @param item - The menu item
|
|
@@ -6368,19 +6381,14 @@ class DocumentMenuService {
|
|
|
6368
6381
|
const approved = this.getApprovedDocuments(item);
|
|
6369
6382
|
if (total === 0)
|
|
6370
6383
|
return 'info';
|
|
6371
|
-
// 1st Preference: Grey if any documents are pending
|
|
6372
6384
|
if (pending > 0)
|
|
6373
6385
|
return 'info';
|
|
6374
|
-
// 2nd Preference: Red if any documents are rejected
|
|
6375
6386
|
if (rejected > 0)
|
|
6376
6387
|
return 'danger';
|
|
6377
|
-
// 3rd Preference: Amber if any documents are reviewing
|
|
6378
6388
|
if (reviewing > 0)
|
|
6379
6389
|
return 'warning';
|
|
6380
|
-
// 4th Preference: Green if all documents are approved
|
|
6381
6390
|
if (approved === total && total > 0)
|
|
6382
6391
|
return 'success';
|
|
6383
|
-
// Fallback: show amber for any other state
|
|
6384
6392
|
return 'warning';
|
|
6385
6393
|
}
|
|
6386
6394
|
/**
|
|
@@ -6465,10 +6473,11 @@ class DocumentsMenuComponent {
|
|
|
6465
6473
|
/**
|
|
6466
6474
|
* Gets the categories to use for the menu
|
|
6467
6475
|
* Priority: Store categories > Input categories
|
|
6476
|
+
* Categories and menu items are sorted alphabetically
|
|
6468
6477
|
*/
|
|
6469
6478
|
get categories() {
|
|
6470
6479
|
const result = this.storeCategories.length > 0 ? this.storeCategories : this.catagories;
|
|
6471
|
-
return result;
|
|
6480
|
+
return this.documentMenuService.sortCategoriesAndMenuItems(result);
|
|
6472
6481
|
}
|
|
6473
6482
|
/**
|
|
6474
6483
|
* Finds the label of a menu item by its _id
|
|
@@ -6510,7 +6519,8 @@ class DocumentsMenuComponent {
|
|
|
6510
6519
|
* Update menu use catagories
|
|
6511
6520
|
*/
|
|
6512
6521
|
updateMenuItemsData() {
|
|
6513
|
-
this.
|
|
6522
|
+
const sortedCategories = this.documentMenuService.sortCategoriesAndMenuItems(this.categories);
|
|
6523
|
+
sortedCategories.forEach(category => {
|
|
6514
6524
|
if (category.items) {
|
|
6515
6525
|
category.items.forEach(item => {
|
|
6516
6526
|
const menuData = {
|
|
@@ -6631,11 +6641,11 @@ class DocumentsMenuComponent {
|
|
|
6631
6641
|
return this.selectedMenuItemId;
|
|
6632
6642
|
}
|
|
6633
6643
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentsMenuComponent, deps: [{ token: DocumentStore }, { token: DocumentQuery }, { token: DocumentMenuService }, { token: DocumentHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6634
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DocumentsMenuComponent, isStandalone: false, selector: "lib-documents-menu", inputs: { catagories: "catagories", applicationNumber: "applicationNumber", contextId: "contextId" }, outputs: { menuItemSelected: "menuItemSelected" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-sidebar-container h-full\">\n <!-- Menu items are now used for navigation to specific sections, not for filtering documents -->\n <p-card class=\"widget-menu-wrapper h-full\">\n @if(applicationNumber){\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\n <div class=\"expand-icon-wrapper\">\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\n </div>\n </div>\n }\n\n <div class=\"widget-menu-container\" >\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\n <ng-template pTemplate=\"submenuheader\" let-item>\n <span [style]=\"{\n color : '#9EA0B3'\n }\">{{ item.label === 'Application' ? 'Application Documents' : item.label }}</span>\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n <a pRipple \n class=\"flex align-items-center p-menuitem-link\"\n [class.selected-menu-item]=\"selectedMenuItemId === item._id\"\n (click)=\"onMenuItemClick($event, item)\">\n <span [class]=\"item.icon\" class=\"text-xl\"></span>\n <span class=\"ml-2\">{{ item.label }}</span>\n <p-badge *ngIf=\"item.menuData?.shouldShowBadge\" \n class=\"ml-auto\" \n [severity]=\"item.menuData?.badgeSeverity\" \n [value]=\"item.menuData?.badgeValue\" />\n </a>\n </ng-template>\n </p-menu>\n </div>\n </div>\n </p-card>\n</div>\n\n ", styles: [".expand-icon-wrapper{border:1px solid var(--primary-color);height:24px;width:24px;border-radius:50%;background:var(--blue-bg-light)}::ng-deep .p-badge.p-badge-success{background-color:#dcfce7;color:#16a34a;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-danger{background-color:#fee2e2;color:#dc2626;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-warning{background-color:#fef3c7;color:#d97706;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-info{background-color:#e5e7eb;color:#000;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-menu .p-menuitem>.p-menuitem-content .p-menuitem-link{color:#1f2937}@media screen and (min-width: 768px){::ng-deep .md\\:w-15rem{width:100%!important}}::ng-deep .p-menu .p-menuitem:not(p-highlight):not(p-disabled)>.p-menuitem-content:hover{color:#06f!important;border:none!important}::ng-deep .p-menu{border:none}::ng-deep .custom-scroll{scrollbar-gutter:inherit}::ng-deep .selected-menu-item{background-color:#0066ff1a!important;color:var(--primary-color)!important;border:1px solid rgba(68,72,109,.1)!important;border-radius:10px!important}::ng-deep .selected-menu-item .text-xl{color:var(--primary-color)!important}::ng-deep .p-menuitem-link:not(.selected-menu-item){background-color:#fff!important;border:none!important;border-radius:0!important}::ng-deep .p-menuitem-link:not(.selected-menu-item) .text-xl{color:var(--text-color)!important}::ng-deep .p-panelmenu .p-panelmenu-content{border:none!important}.application-title-wrapper{color:#9ea0b3;font-weight:500}.widget-menu-wrapper{margin-top:8px}.widget-menu-header-wrapper{padding:4px 4px 4px 16px}.widget-menu-container{height:calc(100vh - 60px);overflow-y:auto;overflow-x:hidden}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}::ng-deep .document-sidebar-container .p-card{height:100%;box-shadow:none}::ng-deep .document-sidebar-container .p-card .p-card-content{height:100%;padding:0!important}::ng-deep .document-sidebar-container .p-card .p-card-body{height:100%;width:100%;padding:12px 8px;border-radius:10px;border:1px solid #e5e7eb}::ng-deep .document-sidebar-container .widget-menu-wrapper .p-panelmenu-panel .p-panelmenu-expanded .p-panelmenu-content{border:none!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content{border:none;color:var(--text-color);font-weight:400!important;background-color:var(--surface-0)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action{color:var(--text-color);font-weight:400!important;position:relative;padding:12px}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-icon-wrapper{position:absolute;right:0;top:16px;margin-right:7px;transform:rotate(90deg)!important;transition:none!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text{max-width:75%;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active{border:1px solid rgba(68,72,109,.1);border-radius:10px;padding:12px;color:var(--primary-color);background-color:#0066ff1a!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active .p-menuitem-icon{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active .p-menuitem-text{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .company-action-wrapper:not(.p-disabled).p-highlight .p-panelmenu-header-content{margin:12px 0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content{background-color:transparent!important;border-radius:10px;padding:12px;border-bottom:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content .p-panelmenu-header-action{padding:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content .p-panelmenu-header-action .p-icon-wrapper{transform:rotate(180deg)!important;transition:none!important;top:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link{background-color:#fff!important;color:var(--text-color);padding:12px 6px!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link .p-menuitem-text{max-width:75%;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active{border:1px solid rgba(68,72,109,.1);border-radius:10px;padding:12px;color:var(--primary-color);box-shadow:none!important;background-color:#0066ff1a!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active .p-menuitem-icon{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active .p-menuitem-text{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem.p-focus>.p-menuitem-content{background-color:#fff!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-focus)>.p-menuitem-content .p-menuitem-link{background-color:#fff!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item){background-color:#fff!important;border:none!important;border-radius:0!important;color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item) .p-menuitem-icon{color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item) .p-menuitem-text{color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .p-panelmenu-expanded .p-panelmenu-content{border:1px solid rgba(68,72,109,.1)!important;border-top:0!important;border-bottom-left-radius:10px;border-bottom-right-radius:10px}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .widget-separator{border-top:1px solid rgba(68,72,109,.1)!important}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .widget-separator .p-panelmenu-header-content .p-panelmenu-header-action{padding:0!important}.no-documents-message{padding:12px 16px;text-align:center}.no-documents-message .text-muted{color:#9ea0b3;font-size:14px;font-style:italic}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7$1.Badge, selector: "p-badge", inputs: ["styleClass", "style", "badgeSize", "severity", "value", "badgeDisabled", "size"] }, { kind: "component", type: i8$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i9$2.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }] });
|
|
6644
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DocumentsMenuComponent, isStandalone: false, selector: "lib-documents-menu", inputs: { catagories: "catagories", applicationNumber: "applicationNumber", contextId: "contextId" }, outputs: { menuItemSelected: "menuItemSelected" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-sidebar-container h-full\">\r\n <!-- Menu items are now used for navigation to specific sections, not for filtering documents -->\r\n <p-card class=\"widget-menu-wrapper h-full\">\r\n @if(applicationNumber){\r\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\r\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\r\n <div class=\"expand-icon-wrapper\">\r\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"widget-menu-container\" >\r\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\r\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <span [style]=\"{\r\n color : '#9EA0B3'\r\n }\">{{ item.label }} Documents</span>\r\n </ng-template>\r\n <ng-template pTemplate=\"item\" let-item>\r\n <a pRipple \r\n class=\"flex align-items-center p-menuitem-link\"\r\n [class.selected-menu-item]=\"selectedMenuItemId === item._id\"\r\n (click)=\"onMenuItemClick($event, item)\">\r\n <span [class]=\"item.icon\" class=\"text-xl\"></span>\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n <p-badge *ngIf=\"item.menuData?.shouldShowBadge\" \r\n class=\"ml-auto\" \r\n [severity]=\"item.menuData?.badgeSeverity\" \r\n [value]=\"item.menuData?.badgeValue\" />\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n </div>\r\n </div>\r\n </p-card>\r\n</div>\r\n\r\n ", styles: [".expand-icon-wrapper{border:1px solid var(--primary-color);height:24px;width:24px;border-radius:50%;background:var(--blue-bg-light)}::ng-deep .p-badge.p-badge-success{background-color:#dcfce7;color:#16a34a;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-danger{background-color:#fee2e2;color:#dc2626;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-warning{background-color:#fef3c7;color:#d97706;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-info{background-color:#e5e7eb;color:#000;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-menu .p-menuitem>.p-menuitem-content .p-menuitem-link{color:#1f2937}@media screen and (min-width: 768px){::ng-deep .md\\:w-15rem{width:100%!important}}::ng-deep .p-menu .p-menuitem:not(p-highlight):not(p-disabled)>.p-menuitem-content:hover{color:#06f!important;border:none!important}::ng-deep .p-menu{border:none}::ng-deep .custom-scroll{scrollbar-gutter:inherit}::ng-deep .selected-menu-item{background-color:#0066ff1a!important;color:var(--primary-color)!important;border:1px solid rgba(68,72,109,.1)!important;border-radius:10px!important}::ng-deep .selected-menu-item .text-xl{color:var(--primary-color)!important}::ng-deep .p-menuitem-link:not(.selected-menu-item){background-color:#fff!important;border:none!important;border-radius:0!important}::ng-deep .p-menuitem-link:not(.selected-menu-item) .text-xl{color:var(--text-color)!important}::ng-deep .p-panelmenu .p-panelmenu-content{border:none!important}.application-title-wrapper{color:#9ea0b3;font-weight:500}.widget-menu-wrapper{margin-top:8px}.widget-menu-header-wrapper{padding:4px 4px 4px 16px}.widget-menu-container{height:calc(100vh - 60px);overflow-y:auto;overflow-x:hidden}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}::ng-deep .document-sidebar-container .p-card{height:100%;box-shadow:none}::ng-deep .document-sidebar-container .p-card .p-card-content{height:100%;padding:0!important}::ng-deep .document-sidebar-container .p-card .p-card-body{height:100%;width:100%;padding:12px 8px;border-radius:10px;border:1px solid #e5e7eb}::ng-deep .document-sidebar-container .widget-menu-wrapper .p-panelmenu-panel .p-panelmenu-expanded .p-panelmenu-content{border:none!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content{border:none;color:var(--text-color);font-weight:400!important;background-color:var(--surface-0)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action{color:var(--text-color);font-weight:400!important;position:relative;padding:12px}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-icon-wrapper{position:absolute;right:0;top:16px;margin-right:7px;transform:rotate(90deg)!important;transition:none!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text{max-width:75%;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active{border:1px solid rgba(68,72,109,.1);border-radius:10px;padding:12px;color:var(--primary-color);background-color:#0066ff1a!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active .p-menuitem-icon{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active .p-menuitem-text{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .company-action-wrapper:not(.p-disabled).p-highlight .p-panelmenu-header-content{margin:12px 0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content{background-color:transparent!important;border-radius:10px;padding:12px;border-bottom:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content .p-panelmenu-header-action{padding:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content .p-panelmenu-header-action .p-icon-wrapper{transform:rotate(180deg)!important;transition:none!important;top:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link{background-color:#fff!important;color:var(--text-color);padding:12px 6px!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link .p-menuitem-text{max-width:75%;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active{border:1px solid rgba(68,72,109,.1);border-radius:10px;padding:12px;color:var(--primary-color);box-shadow:none!important;background-color:#0066ff1a!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active .p-menuitem-icon{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active .p-menuitem-text{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem.p-focus>.p-menuitem-content{background-color:#fff!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-focus)>.p-menuitem-content .p-menuitem-link{background-color:#fff!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item){background-color:#fff!important;border:none!important;border-radius:0!important;color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item) .p-menuitem-icon{color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item) .p-menuitem-text{color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .p-panelmenu-expanded .p-panelmenu-content{border:1px solid rgba(68,72,109,.1)!important;border-top:0!important;border-bottom-left-radius:10px;border-bottom-right-radius:10px}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .widget-separator{border-top:1px solid rgba(68,72,109,.1)!important}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .widget-separator .p-panelmenu-header-content .p-panelmenu-header-action{padding:0!important}.no-documents-message{padding:12px 16px;text-align:center}.no-documents-message .text-muted{color:#9ea0b3;font-size:14px;font-style:italic}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.Badge, selector: "p-badge", inputs: ["styleClass", "style", "badgeSize", "severity", "value", "badgeDisabled", "size"] }, { kind: "component", type: i8$2.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i9$2.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }] });
|
|
6635
6645
|
}
|
|
6636
6646
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentsMenuComponent, decorators: [{
|
|
6637
6647
|
type: Component,
|
|
6638
|
-
args: [{ selector: 'lib-documents-menu', standalone: false, template: "<div class=\"document-sidebar-container h-full\">\n <!-- Menu items are now used for navigation to specific sections, not for filtering documents -->\n <p-card class=\"widget-menu-wrapper h-full\">\n @if(applicationNumber){\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\n <div class=\"expand-icon-wrapper\">\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\n </div>\n </div>\n }\n\n <div class=\"widget-menu-container\" >\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\n <ng-template pTemplate=\"submenuheader\" let-item>\n <span [style]=\"{\n color : '#9EA0B3'\n }\">{{ item.label
|
|
6648
|
+
args: [{ selector: 'lib-documents-menu', standalone: false, template: "<div class=\"document-sidebar-container h-full\">\r\n <!-- Menu items are now used for navigation to specific sections, not for filtering documents -->\r\n <p-card class=\"widget-menu-wrapper h-full\">\r\n @if(applicationNumber){\r\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\r\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\r\n <div class=\"expand-icon-wrapper\">\r\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"widget-menu-container\" >\r\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\r\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <span [style]=\"{\r\n color : '#9EA0B3'\r\n }\">{{ item.label }} Documents</span>\r\n </ng-template>\r\n <ng-template pTemplate=\"item\" let-item>\r\n <a pRipple \r\n class=\"flex align-items-center p-menuitem-link\"\r\n [class.selected-menu-item]=\"selectedMenuItemId === item._id\"\r\n (click)=\"onMenuItemClick($event, item)\">\r\n <span [class]=\"item.icon\" class=\"text-xl\"></span>\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n <p-badge *ngIf=\"item.menuData?.shouldShowBadge\" \r\n class=\"ml-auto\" \r\n [severity]=\"item.menuData?.badgeSeverity\" \r\n [value]=\"item.menuData?.badgeValue\" />\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n </div>\r\n </div>\r\n </p-card>\r\n</div>\r\n\r\n ", styles: [".expand-icon-wrapper{border:1px solid var(--primary-color);height:24px;width:24px;border-radius:50%;background:var(--blue-bg-light)}::ng-deep .p-badge.p-badge-success{background-color:#dcfce7;color:#16a34a;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-danger{background-color:#fee2e2;color:#dc2626;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-warning{background-color:#fef3c7;color:#d97706;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-badge.p-badge-info{background-color:#e5e7eb;color:#000;font-family:inherit;font-size:12px;font-weight:400;font-style:inherit}::ng-deep .p-menu .p-menuitem>.p-menuitem-content .p-menuitem-link{color:#1f2937}@media screen and (min-width: 768px){::ng-deep .md\\:w-15rem{width:100%!important}}::ng-deep .p-menu .p-menuitem:not(p-highlight):not(p-disabled)>.p-menuitem-content:hover{color:#06f!important;border:none!important}::ng-deep .p-menu{border:none}::ng-deep .custom-scroll{scrollbar-gutter:inherit}::ng-deep .selected-menu-item{background-color:#0066ff1a!important;color:var(--primary-color)!important;border:1px solid rgba(68,72,109,.1)!important;border-radius:10px!important}::ng-deep .selected-menu-item .text-xl{color:var(--primary-color)!important}::ng-deep .p-menuitem-link:not(.selected-menu-item){background-color:#fff!important;border:none!important;border-radius:0!important}::ng-deep .p-menuitem-link:not(.selected-menu-item) .text-xl{color:var(--text-color)!important}::ng-deep .p-panelmenu .p-panelmenu-content{border:none!important}.application-title-wrapper{color:#9ea0b3;font-weight:500}.widget-menu-wrapper{margin-top:8px}.widget-menu-header-wrapper{padding:4px 4px 4px 16px}.widget-menu-container{height:calc(100vh - 60px);overflow-y:auto;overflow-x:hidden}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}::ng-deep .document-sidebar-container .p-card{height:100%;box-shadow:none}::ng-deep .document-sidebar-container .p-card .p-card-content{height:100%;padding:0!important}::ng-deep .document-sidebar-container .p-card .p-card-body{height:100%;width:100%;padding:12px 8px;border-radius:10px;border:1px solid #e5e7eb}::ng-deep .document-sidebar-container .widget-menu-wrapper .p-panelmenu-panel .p-panelmenu-expanded .p-panelmenu-content{border:none!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content{border:none;color:var(--text-color);font-weight:400!important;background-color:var(--surface-0)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action{color:var(--text-color);font-weight:400!important;position:relative;padding:12px}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-icon-wrapper{position:absolute;right:0;top:16px;margin-right:7px;transform:rotate(90deg)!important;transition:none!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text{max-width:75%;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active{border:1px solid rgba(68,72,109,.1);border-radius:10px;padding:12px;color:var(--primary-color);background-color:#0066ff1a!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active .p-menuitem-icon{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-menuitem-link-active .p-menuitem-text{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .company-action-wrapper:not(.p-disabled).p-highlight .p-panelmenu-header-content{margin:12px 0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content{background-color:transparent!important;border-radius:10px;padding:12px;border-bottom:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content .p-panelmenu-header-action{padding:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .no-highlight.p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content .p-panelmenu-header-action .p-icon-wrapper{transform:rotate(180deg)!important;transition:none!important;top:0!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link{background-color:#fff!important;color:var(--text-color);padding:12px 6px!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link .p-menuitem-text{max-width:75%;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active{border:1px solid rgba(68,72,109,.1);border-radius:10px;padding:12px;color:var(--primary-color);box-shadow:none!important;background-color:#0066ff1a!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active .p-menuitem-icon{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link-active .p-menuitem-text{color:var(--primary-color)}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem.p-focus>.p-menuitem-content{background-color:#fff!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-focus)>.p-menuitem-content .p-menuitem-link{background-color:#fff!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item){background-color:#fff!important;border:none!important;border-radius:0!important;color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item) .p-menuitem-icon{color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu .p-panelmenu-content .p-menuitem>.p-menuitem-content .p-menuitem-link:not(.selected-menu-item) .p-menuitem-text{color:var(--text-color)!important}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .p-panelmenu-expanded .p-panelmenu-content{border:1px solid rgba(68,72,109,.1)!important;border-top:0!important;border-bottom-left-radius:10px;border-bottom-right-radius:10px}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .widget-separator{border-top:1px solid rgba(68,72,109,.1)!important}::ng-deep .widget-menu-wrapper .p-panelmenu-panel .widget-separator .p-panelmenu-header-content .p-panelmenu-header-action{padding:0!important}.no-documents-message{padding:12px 16px;text-align:center}.no-documents-message .text-muted{color:#9ea0b3;font-size:14px;font-style:italic}\n"] }]
|
|
6639
6649
|
}], ctorParameters: () => [{ type: DocumentStore }, { type: DocumentQuery }, { type: DocumentMenuService }, { type: DocumentHelperService }], propDecorators: { catagories: [{
|
|
6640
6650
|
type: Input
|
|
6641
6651
|
}], applicationNumber: [{
|
|
@@ -6678,6 +6688,7 @@ class DocumentContainerComponent {
|
|
|
6678
6688
|
* Reference to the content scroll container
|
|
6679
6689
|
*/
|
|
6680
6690
|
contentScrollContainer;
|
|
6691
|
+
selectedDocument = new EventEmitter();
|
|
6681
6692
|
/**
|
|
6682
6693
|
* Subscription to track selected menu item changes
|
|
6683
6694
|
*/
|
|
@@ -6913,6 +6924,10 @@ class DocumentContainerComponent {
|
|
|
6913
6924
|
}
|
|
6914
6925
|
}));
|
|
6915
6926
|
}
|
|
6927
|
+
onDocumentSelected(document) {
|
|
6928
|
+
console.log('Document selected:', document);
|
|
6929
|
+
this.selectedDocument.emit(document);
|
|
6930
|
+
}
|
|
6916
6931
|
/**
|
|
6917
6932
|
* Unsubscribe subscription on destroy of component and clean up state.
|
|
6918
6933
|
*/
|
|
@@ -6927,11 +6942,11 @@ class DocumentContainerComponent {
|
|
|
6927
6942
|
this.clearAllState();
|
|
6928
6943
|
}
|
|
6929
6944
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContainerComponent, deps: [{ token: DocumentHttpService }, { token: DocumentHelperService }, { token: DocumentQuery }, { token: DocumentStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
6930
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentContainerComponent, isStandalone: false, selector: "lib-document-container", inputs: { contextId: "contextId" }, viewQueries: [{ propertyName: "contentScrollContainer", first: true, predicate: ["contentScrollContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-container-layout\">\r\n <!-- Fixed Left Menu -->\r\n <div class=\"menu-panel\">\r\n <lib-documents-menu \r\n [catagories]=\"catagories\" \r\n [applicationNumber]=\"applicationNumber\" \r\n [contextId]=\"contextId\"\r\n (menuItemSelected)=\"onMenuItemSelected($event)\">\r\n </lib-documents-menu>\r\n </div>\r\n \r\n <!-- Scrollable Right Content -->\r\n <div class=\"content-panel\" #contentScrollContainer>\r\n <div class=\"card content-card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div>\r\n <lib-document-list \r\n [contextId]=\"contextId\" \r\n [documentListResponse]=\"documentListResponse\"\r\n [selectedMenuItemId]=\"selectedMenuItemId\"\r\n [navigationInfo]=\"navigationInfo\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-container-layout{display:flex;height:98vh;overflow:auto;position:relative}.menu-panel{position:fixed;left:0;top:0;bottom:0;width:280px;background-color:#fff;overflow-y:auto;overflow-x:hidden
|
|
6945
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentContainerComponent, isStandalone: false, selector: "lib-document-container", inputs: { contextId: "contextId" }, viewQueries: [{ propertyName: "contentScrollContainer", first: true, predicate: ["contentScrollContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-container-layout\">\r\n <!-- Fixed Left Menu -->\r\n <div class=\"menu-panel\">\r\n <lib-documents-menu \r\n [catagories]=\"catagories\" \r\n [applicationNumber]=\"applicationNumber\" \r\n [contextId]=\"contextId\"\r\n (menuItemSelected)=\"onMenuItemSelected($event)\">\r\n </lib-documents-menu>\r\n </div>\r\n \r\n <!-- Scrollable Right Content -->\r\n <div class=\"content-panel\" #contentScrollContainer>\r\n <div class=\"card content-card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div>\r\n <lib-document-list \r\n [contextId]=\"contextId\" \r\n [documentListResponse]=\"documentListResponse\"\r\n [selectedMenuItemId]=\"selectedMenuItemId\"\r\n [navigationInfo]=\"navigationInfo\"\r\n (handleSelectedDocument)=\"onDocumentSelected($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-container-layout{display:flex;height:98vh;overflow:auto;position:relative}.menu-panel{position:fixed;left:0;top:0;bottom:0;width:280px;background-color:#fff;overflow-y:auto;overflow-x:hidden}.menu-panel::-webkit-scrollbar{width:6px}.menu-panel::-webkit-scrollbar-track{background:#f1f5f9}.menu-panel::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.menu-panel::-webkit-scrollbar-thumb:hover{background:#94a3b8}.content-panel{flex:1;margin-left:280px;display:flex;flex-direction:column;height:98vh;overflow-y:auto;overflow-x:hidden;padding:0;position:relative;z-index:10}.content-panel::-webkit-scrollbar{width:8px}.content-panel::-webkit-scrollbar-track{background:#f8fafc}.content-panel::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.content-panel::-webkit-scrollbar-thumb:hover{background:#94a3b8}@media (max-width: 1024px){.menu-panel{width:240px}.content-panel{margin-left:240px}}@media (max-width: 768px){.document-container-layout{flex-direction:column}.menu-panel{position:relative;width:100%;height:200px;border-right:none;border-bottom:1px solid #e5e7eb;z-index:auto}.content-panel{margin-left:0;flex:1}}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}*{scrollbar-width:thin}body,html{height:100%}::ng-deep .p-card{overflow:visible!important}::ng-deep .p-card-body{overflow:visible!important}::ng-deep .p-dialog{z-index:9999!important}::ng-deep .p-dialog-mask{z-index:9998!important}::ng-deep .content-panel .p-card{overflow:visible!important}\n"], dependencies: [{ kind: "component", type: FolderContainerComponent, selector: "lib-folder-container", inputs: ["documentList", "folderList", "contextId", "userList", "statusData", "categories"] }, { kind: "component", type: DocumentListComponent, selector: "lib-document-list", inputs: ["contextId", "documentListResponse", "selectedMenuItemId", "navigationInfo", "documentList"], outputs: ["handleSelectedDocument"] }, { kind: "component", type: DocumentsMenuComponent, selector: "lib-documents-menu", inputs: ["catagories", "applicationNumber", "contextId"], outputs: ["menuItemSelected"] }] });
|
|
6931
6946
|
}
|
|
6932
6947
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContainerComponent, decorators: [{
|
|
6933
6948
|
type: Component,
|
|
6934
|
-
args: [{ selector: 'lib-document-container', standalone: false, template: "<div class=\"document-container-layout\">\r\n <!-- Fixed Left Menu -->\r\n <div class=\"menu-panel\">\r\n <lib-documents-menu \r\n [catagories]=\"catagories\" \r\n [applicationNumber]=\"applicationNumber\" \r\n [contextId]=\"contextId\"\r\n (menuItemSelected)=\"onMenuItemSelected($event)\">\r\n </lib-documents-menu>\r\n </div>\r\n \r\n <!-- Scrollable Right Content -->\r\n <div class=\"content-panel\" #contentScrollContainer>\r\n <div class=\"card content-card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div>\r\n <lib-document-list \r\n [contextId]=\"contextId\" \r\n [documentListResponse]=\"documentListResponse\"\r\n [selectedMenuItemId]=\"selectedMenuItemId\"\r\n [navigationInfo]=\"navigationInfo\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-container-layout{display:flex;height:98vh;overflow:auto;position:relative}.menu-panel{position:fixed;left:0;top:0;bottom:0;width:280px;background-color:#fff;overflow-y:auto;overflow-x:hidden
|
|
6949
|
+
args: [{ selector: 'lib-document-container', standalone: false, template: "<div class=\"document-container-layout\">\r\n <!-- Fixed Left Menu -->\r\n <div class=\"menu-panel\">\r\n <lib-documents-menu \r\n [catagories]=\"catagories\" \r\n [applicationNumber]=\"applicationNumber\" \r\n [contextId]=\"contextId\"\r\n (menuItemSelected)=\"onMenuItemSelected($event)\">\r\n </lib-documents-menu>\r\n </div>\r\n \r\n <!-- Scrollable Right Content -->\r\n <div class=\"content-panel\" #contentScrollContainer>\r\n <div class=\"card content-card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div>\r\n <lib-document-list \r\n [contextId]=\"contextId\" \r\n [documentListResponse]=\"documentListResponse\"\r\n [selectedMenuItemId]=\"selectedMenuItemId\"\r\n [navigationInfo]=\"navigationInfo\"\r\n (handleSelectedDocument)=\"onDocumentSelected($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-container-layout{display:flex;height:98vh;overflow:auto;position:relative}.menu-panel{position:fixed;left:0;top:0;bottom:0;width:280px;background-color:#fff;overflow-y:auto;overflow-x:hidden}.menu-panel::-webkit-scrollbar{width:6px}.menu-panel::-webkit-scrollbar-track{background:#f1f5f9}.menu-panel::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.menu-panel::-webkit-scrollbar-thumb:hover{background:#94a3b8}.content-panel{flex:1;margin-left:280px;display:flex;flex-direction:column;height:98vh;overflow-y:auto;overflow-x:hidden;padding:0;position:relative;z-index:10}.content-panel::-webkit-scrollbar{width:8px}.content-panel::-webkit-scrollbar-track{background:#f8fafc}.content-panel::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.content-panel::-webkit-scrollbar-thumb:hover{background:#94a3b8}@media (max-width: 1024px){.menu-panel{width:240px}.content-panel{margin-left:240px}}@media (max-width: 768px){.document-container-layout{flex-direction:column}.menu-panel{position:relative;width:100%;height:200px;border-right:none;border-bottom:1px solid #e5e7eb;z-index:auto}.content-panel{margin-left:0;flex:1}}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}*{scrollbar-width:thin}body,html{height:100%}::ng-deep .p-card{overflow:visible!important}::ng-deep .p-card-body{overflow:visible!important}::ng-deep .p-dialog{z-index:9999!important}::ng-deep .p-dialog-mask{z-index:9998!important}::ng-deep .content-panel .p-card{overflow:visible!important}\n"] }]
|
|
6935
6950
|
}], ctorParameters: () => [{ type: DocumentHttpService }, { type: DocumentHelperService }, { type: DocumentQuery }, { type: DocumentStore }], propDecorators: { contentScrollContainer: [{
|
|
6936
6951
|
type: ViewChild,
|
|
6937
6952
|
args: ['contentScrollContainer', { static: false }]
|