cat-documents-ng 0.5.16 → 0.5.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, EventEmitter, Output, ViewChild, Input, ViewEncapsulation, Component,
|
|
2
|
+
import { Injectable, EventEmitter, Output, ViewChild, Input, ViewEncapsulation, Component, ChangeDetectionStrategy, HostListener, Directive, NgModule, APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
3
3
|
import * as i5 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import { firstValueFrom, EMPTY, tap, catchError, throwError, of, combineLatest, Subject, Observable, takeUntil, Subscription, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, BehaviorSubject } from 'rxjs';
|
|
@@ -4119,10 +4119,12 @@ class RequestDocumentComponent {
|
|
|
4119
4119
|
: this.contextId;
|
|
4120
4120
|
const requesterId = this.sessionService.getUserSession()?.accountId;
|
|
4121
4121
|
const requestPayload = {
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4122
|
+
applicationId: this.contextId,
|
|
4123
|
+
requestedDocumentForId: requestedDocumentForId,
|
|
4124
|
+
requestedDocumentType: this.selectedDocumentType,
|
|
4125
|
+
requesterId: requesterId,
|
|
4126
|
+
selectedAssignmentType: this.selectedAssignmentType,
|
|
4127
|
+
description: this.description.trim()
|
|
4126
4128
|
};
|
|
4127
4129
|
this.isSaving = true;
|
|
4128
4130
|
this.documentHttpService.documentRequest(requestPayload).subscribe({
|
|
@@ -4241,334 +4243,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
4241
4243
|
type: Output
|
|
4242
4244
|
}] } });
|
|
4243
4245
|
|
|
4244
|
-
class ConfirmationDialogComponent {
|
|
4245
|
-
confirmationService;
|
|
4246
|
-
confirmationOptions = {
|
|
4247
|
-
message: 'Are you sure that you want to proceed?',
|
|
4248
|
-
header: '',
|
|
4249
|
-
icon: '',
|
|
4250
|
-
acceptLabel: 'Yes',
|
|
4251
|
-
rejectLabel: 'No',
|
|
4252
|
-
acceptIcon: 'pi pi-check',
|
|
4253
|
-
rejectIcon: 'pi pi-times',
|
|
4254
|
-
acceptButtonClass: 'btn-danger',
|
|
4255
|
-
rejectButtonClass: 'btn-secondary'
|
|
4256
|
-
};
|
|
4257
|
-
constructor(confirmationService) {
|
|
4258
|
-
this.confirmationService = confirmationService;
|
|
4259
|
-
}
|
|
4260
|
-
/**
|
|
4261
|
-
* Shows the confirmation dialog with the specified options
|
|
4262
|
-
* @param options - Configuration options for the confirmation dialog
|
|
4263
|
-
* @param acceptCallback - Function to execute when user accepts
|
|
4264
|
-
* @param rejectCallback - Function to execute when user rejects
|
|
4265
|
-
*/
|
|
4266
|
-
confirm(options, acceptCallback, rejectCallback) {
|
|
4267
|
-
const confirmation = {
|
|
4268
|
-
message: options.message || this.confirmationOptions.message,
|
|
4269
|
-
header: options.header || this.confirmationOptions.header,
|
|
4270
|
-
icon: options.icon || this.confirmationOptions.icon,
|
|
4271
|
-
acceptLabel: options.acceptLabel || this.confirmationOptions.acceptLabel,
|
|
4272
|
-
rejectLabel: options.rejectLabel || this.confirmationOptions.rejectLabel,
|
|
4273
|
-
acceptIcon: options.acceptIcon || this.confirmationOptions.acceptIcon,
|
|
4274
|
-
rejectIcon: options.rejectIcon || this.confirmationOptions.rejectIcon,
|
|
4275
|
-
accept: acceptCallback,
|
|
4276
|
-
reject: rejectCallback
|
|
4277
|
-
};
|
|
4278
|
-
this.confirmationService.confirm(confirmation);
|
|
4279
|
-
}
|
|
4280
|
-
/**
|
|
4281
|
-
* Static method to show a confirmation dialog (for components that don't want to inject this component)
|
|
4282
|
-
* @param confirmationService - The ConfirmationService instance
|
|
4283
|
-
* @param options - Configuration options for the confirmation dialog
|
|
4284
|
-
* @param acceptCallback - Function to execute when user accepts
|
|
4285
|
-
* @param rejectCallback - Function to execute when user rejects
|
|
4286
|
-
*/
|
|
4287
|
-
static confirm(confirmationService, options, acceptCallback, rejectCallback) {
|
|
4288
|
-
const defaultOptions = {
|
|
4289
|
-
message: 'Are you sure that you want to proceed?',
|
|
4290
|
-
header: '',
|
|
4291
|
-
icon: '',
|
|
4292
|
-
acceptLabel: 'Yes',
|
|
4293
|
-
rejectLabel: 'No',
|
|
4294
|
-
acceptIcon: 'pi pi-check',
|
|
4295
|
-
rejectIcon: 'pi pi-times',
|
|
4296
|
-
acceptButtonClass: 'btn-success',
|
|
4297
|
-
rejectButtonClass: 'btn-secondary'
|
|
4298
|
-
};
|
|
4299
|
-
const confirmation = {
|
|
4300
|
-
message: options.message || defaultOptions.message,
|
|
4301
|
-
header: options.header || defaultOptions.header,
|
|
4302
|
-
icon: options.icon || defaultOptions.icon,
|
|
4303
|
-
acceptLabel: options.acceptLabel || defaultOptions.acceptLabel,
|
|
4304
|
-
rejectLabel: options.rejectLabel || defaultOptions.rejectLabel,
|
|
4305
|
-
acceptIcon: options.acceptIcon || defaultOptions.acceptIcon,
|
|
4306
|
-
rejectIcon: options.rejectIcon || defaultOptions.rejectIcon,
|
|
4307
|
-
accept: acceptCallback,
|
|
4308
|
-
reject: rejectCallback
|
|
4309
|
-
};
|
|
4310
|
-
confirmationService.confirm(confirmation);
|
|
4311
|
-
}
|
|
4312
|
-
/**
|
|
4313
|
-
* Static method to show a delete confirmation dialog
|
|
4314
|
-
* @param confirmationService - The ConfirmationService instance
|
|
4315
|
-
* @param itemName - Name of the item to be deleted
|
|
4316
|
-
* @param acceptCallback - Function to execute when user accepts deletion
|
|
4317
|
-
* @param rejectCallback - Function to execute when user rejects deletion
|
|
4318
|
-
*/
|
|
4319
|
-
static confirmDelete(confirmationService, itemName, acceptCallback, rejectCallback) {
|
|
4320
|
-
ConfirmationDialogComponent.confirm(confirmationService, {
|
|
4321
|
-
message: `Are you sure you want to delete "${itemName}"?`,
|
|
4322
|
-
header: 'Delete Confirmation',
|
|
4323
|
-
acceptLabel: 'Delete',
|
|
4324
|
-
rejectLabel: 'Cancel',
|
|
4325
|
-
acceptButtonClass: 'btn-danger'
|
|
4326
|
-
}, acceptCallback, rejectCallback);
|
|
4327
|
-
}
|
|
4328
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ConfirmationDialogComponent, deps: [{ token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4329
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ConfirmationDialogComponent, isStandalone: false, selector: "app-confirmation-dialog", inputs: { confirmationOptions: "confirmationOptions" }, ngImport: i0, template: "<!-- This component no longer renders a p-confirmDialog element -->\r\n<!-- The p-confirmDialog should be placed only once in the main app component -->\r\n<!-- This component now only provides methods to trigger confirmations via ConfirmationService -->\r\n", styles: [".btn-danger{background-color:#ef4444;color:#fff;border-color:#e53e3e;max-width:100px}.btn-secondary{background-color:#f3f4f6;color:#000;max-width:100px}\n"] });
|
|
4330
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ConfirmationDialogComponent, providedIn: 'root' });
|
|
4331
|
-
}
|
|
4332
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
|
|
4333
|
-
type: Injectable,
|
|
4334
|
-
args: [{
|
|
4335
|
-
providedIn: 'root'
|
|
4336
|
-
}]
|
|
4337
|
-
}, {
|
|
4338
|
-
type: Component,
|
|
4339
|
-
args: [{ selector: 'app-confirmation-dialog', standalone: false, template: "<!-- This component no longer renders a p-confirmDialog element -->\r\n<!-- The p-confirmDialog should be placed only once in the main app component -->\r\n<!-- This component now only provides methods to trigger confirmations via ConfirmationService -->\r\n", styles: [".btn-danger{background-color:#ef4444;color:#fff;border-color:#e53e3e;max-width:100px}.btn-secondary{background-color:#f3f4f6;color:#000;max-width:100px}\n"] }]
|
|
4340
|
-
}], ctorParameters: () => [{ type: i3.ConfirmationService }], propDecorators: { confirmationOptions: [{
|
|
4341
|
-
type: Input
|
|
4342
|
-
}] } });
|
|
4343
|
-
|
|
4344
|
-
class SidebarComponent {
|
|
4345
|
-
confirmationService;
|
|
4346
|
-
// Flag to prevent multiple confirmations
|
|
4347
|
-
isShowingConfirmation = false;
|
|
4348
|
-
set visible(value) {
|
|
4349
|
-
this._visible = value;
|
|
4350
|
-
}
|
|
4351
|
-
get visible() {
|
|
4352
|
-
return this._visible;
|
|
4353
|
-
}
|
|
4354
|
-
_visible = false;
|
|
4355
|
-
position = 'right';
|
|
4356
|
-
width = SHARED.WIDTH;
|
|
4357
|
-
title = SHARED.EMPTY;
|
|
4358
|
-
showCloseButton = true;
|
|
4359
|
-
modal = true;
|
|
4360
|
-
dismissible = true;
|
|
4361
|
-
styleClass = SHARED.EMPTY;
|
|
4362
|
-
appendTo = 'body';
|
|
4363
|
-
blockScroll = true;
|
|
4364
|
-
closeIcon = SHARED.CLOSE_ICON;
|
|
4365
|
-
showSaveButton = false;
|
|
4366
|
-
saveButtonText = SHARED.SAVE;
|
|
4367
|
-
saveButtonDisabled = false;
|
|
4368
|
-
successMessage = SHARED.SUCCESS_MESSAGE;
|
|
4369
|
-
errorMessage = SHARED.EMPTY;
|
|
4370
|
-
hasUnsavedChanges = false;
|
|
4371
|
-
visibleChange = new EventEmitter();
|
|
4372
|
-
onShow = new EventEmitter();
|
|
4373
|
-
onHide = new EventEmitter();
|
|
4374
|
-
onSave = new EventEmitter();
|
|
4375
|
-
onClose = new EventEmitter();
|
|
4376
|
-
showSuccessMessage = false;
|
|
4377
|
-
showErrorMessage = false;
|
|
4378
|
-
destroy$ = new Subject();
|
|
4379
|
-
unsavedChangesConfirmationOptions = {
|
|
4380
|
-
message: SHARED.UNSAVED_CHANGES_MESSAGE,
|
|
4381
|
-
acceptLabel: SHARED.YES,
|
|
4382
|
-
rejectLabel: SHARED.NO,
|
|
4383
|
-
acceptIcon: SHARED.ACCEPT_ICON,
|
|
4384
|
-
rejectIcon: SHARED.REJECT_ICON,
|
|
4385
|
-
acceptButtonClass: SHARED.ACCEPT_BUTTON_STYLE_CLASS,
|
|
4386
|
-
rejectButtonClass: SHARED.REJECT_BUTTON_STYLE_CLASS
|
|
4387
|
-
};
|
|
4388
|
-
constructor(confirmationService) {
|
|
4389
|
-
this.confirmationService = confirmationService;
|
|
4390
|
-
}
|
|
4391
|
-
/**
|
|
4392
|
-
* Handles the onHide event from PrimeNG sidebar
|
|
4393
|
-
* Only emits when actually closing, not when showing confirmation
|
|
4394
|
-
*/
|
|
4395
|
-
onSidebarHide() {
|
|
4396
|
-
if (!this.isShowingConfirmation) {
|
|
4397
|
-
this.onHide.emit();
|
|
4398
|
-
}
|
|
4399
|
-
}
|
|
4400
|
-
/**
|
|
4401
|
-
* Handles the visibleChange event from PrimeNG sidebar
|
|
4402
|
-
* Intercepts automatic closing to show confirmation if needed
|
|
4403
|
-
*/
|
|
4404
|
-
onVisibleChange(value) {
|
|
4405
|
-
if (!value && this.hasUnsavedChanges && !this.isShowingConfirmation) {
|
|
4406
|
-
this._visible = true;
|
|
4407
|
-
this.showUnsavedChangesConfirmation();
|
|
4408
|
-
return;
|
|
4409
|
-
}
|
|
4410
|
-
this.visibleChange.emit(value);
|
|
4411
|
-
}
|
|
4412
|
-
/**
|
|
4413
|
-
* Opens the sidebar
|
|
4414
|
-
*/
|
|
4415
|
-
open() {
|
|
4416
|
-
this._visible = true;
|
|
4417
|
-
this.clearMessages();
|
|
4418
|
-
this.visibleChange.emit(this._visible);
|
|
4419
|
-
this.onShow.emit();
|
|
4420
|
-
}
|
|
4421
|
-
/**
|
|
4422
|
-
* Closes the sidebar
|
|
4423
|
-
*/
|
|
4424
|
-
close() {
|
|
4425
|
-
this._visible = false;
|
|
4426
|
-
this.clearMessages();
|
|
4427
|
-
this.visibleChange.emit(this._visible);
|
|
4428
|
-
this.onHide.emit();
|
|
4429
|
-
}
|
|
4430
|
-
/**
|
|
4431
|
-
* Handles escape key press
|
|
4432
|
-
* Shows confirmation if there are unsaved changes
|
|
4433
|
-
*/
|
|
4434
|
-
handleEscapeKey(event) {
|
|
4435
|
-
if (this.visible) {
|
|
4436
|
-
event.preventDefault();
|
|
4437
|
-
this.handleClose();
|
|
4438
|
-
}
|
|
4439
|
-
}
|
|
4440
|
-
/**
|
|
4441
|
-
* Handles backdrop click events
|
|
4442
|
-
* Prevents default PrimeNG behavior and shows confirmation if needed
|
|
4443
|
-
*/
|
|
4444
|
-
handleBackdropClick(event) {
|
|
4445
|
-
event.preventDefault();
|
|
4446
|
-
event.stopPropagation();
|
|
4447
|
-
this.handleClose();
|
|
4448
|
-
}
|
|
4449
|
-
/**
|
|
4450
|
-
* Handles all closing scenarios (backdrop click, escape key, close button, etc.)
|
|
4451
|
-
* This is the single entry point for all closing logic
|
|
4452
|
-
*/
|
|
4453
|
-
handleClose() {
|
|
4454
|
-
if (this.hasUnsavedChanges && !this.isShowingConfirmation) {
|
|
4455
|
-
this.showUnsavedChangesConfirmation();
|
|
4456
|
-
}
|
|
4457
|
-
else {
|
|
4458
|
-
this.close();
|
|
4459
|
-
}
|
|
4460
|
-
}
|
|
4461
|
-
/**
|
|
4462
|
-
* Shows confirmation dialog for unsaved changes
|
|
4463
|
-
*/
|
|
4464
|
-
showUnsavedChangesConfirmation() {
|
|
4465
|
-
if (this.isShowingConfirmation) {
|
|
4466
|
-
return;
|
|
4467
|
-
}
|
|
4468
|
-
this.isShowingConfirmation = true;
|
|
4469
|
-
ConfirmationDialogComponent.confirm(this.confirmationService, this.unsavedChangesConfirmationOptions, () => {
|
|
4470
|
-
this.isShowingConfirmation = false;
|
|
4471
|
-
this.close();
|
|
4472
|
-
this.onClose.emit();
|
|
4473
|
-
}, () => {
|
|
4474
|
-
this.isShowingConfirmation = false;
|
|
4475
|
-
});
|
|
4476
|
-
}
|
|
4477
|
-
/**
|
|
4478
|
-
* Shows success message and closes sidebar after delay
|
|
4479
|
-
*/
|
|
4480
|
-
showSuccess() {
|
|
4481
|
-
this.showSuccessMessage = true;
|
|
4482
|
-
this.showErrorMessage = false;
|
|
4483
|
-
setTimeout(() => {
|
|
4484
|
-
this.close();
|
|
4485
|
-
}, 2000);
|
|
4486
|
-
}
|
|
4487
|
-
/**
|
|
4488
|
-
* Shows error message
|
|
4489
|
-
*/
|
|
4490
|
-
showError(message) {
|
|
4491
|
-
this.showErrorMessage = true;
|
|
4492
|
-
this.showSuccessMessage = false;
|
|
4493
|
-
this.errorMessage = message || SHARED.EMPTY;
|
|
4494
|
-
}
|
|
4495
|
-
/**
|
|
4496
|
-
* Clears all messages
|
|
4497
|
-
*/
|
|
4498
|
-
clearMessages() {
|
|
4499
|
-
this.showSuccessMessage = false;
|
|
4500
|
-
this.showErrorMessage = false;
|
|
4501
|
-
}
|
|
4502
|
-
/**
|
|
4503
|
-
* Checks if there are unsaved changes
|
|
4504
|
-
* @returns True if there are unsaved changes, false otherwise
|
|
4505
|
-
*/
|
|
4506
|
-
checkForUnsavedChanges() {
|
|
4507
|
-
return this.hasUnsavedChanges;
|
|
4508
|
-
}
|
|
4509
|
-
/**
|
|
4510
|
-
* Lifecycle hook that is called when component is destroyed.
|
|
4511
|
-
* Cleans up subscriptions.
|
|
4512
|
-
*/
|
|
4513
|
-
ngOnDestroy() {
|
|
4514
|
-
this.destroy$.next();
|
|
4515
|
-
this.destroy$.complete();
|
|
4516
|
-
}
|
|
4517
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarComponent, deps: [{ token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4518
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: SidebarComponent, isStandalone: false, selector: "lib-sidebar", inputs: { visible: "visible", position: "position", width: "width", title: "title", showCloseButton: "showCloseButton", modal: "modal", dismissible: "dismissible", styleClass: "styleClass", appendTo: "appendTo", blockScroll: "blockScroll", closeIcon: "closeIcon", showSaveButton: "showSaveButton", saveButtonText: "saveButtonText", saveButtonDisabled: "saveButtonDisabled", successMessage: "successMessage", errorMessage: "errorMessage", hasUnsavedChanges: "hasUnsavedChanges" }, outputs: { visibleChange: "visibleChange", onShow: "onShow", onHide: "onHide", onSave: "onSave", onClose: "onClose" }, host: { listeners: { "document:keydown.escape": "handleEscapeKey($event)" } }, ngImport: i0, template: "<!-- PrimeNG Sidebar with proper backdrop handling -->\r\n<div *ngIf=\"visible\" class=\"backdrop-shadow\" (click)=\"handleClose()\"></div>\r\n\r\n<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [dismissible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [appendTo]=\"'body'\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onSidebarHide()\"\r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n \r\n <p-messages \r\n *ngIf=\"showSuccessMessage\"\r\n severity=\"success\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ successMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n \r\n <p-messages \r\n *ngIf=\"showErrorMessage\"\r\n severity=\"error\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ errorMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n\r\n <div class=\"header-actions mr-3\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n\r\n <button \r\n *ngIf=\"showCloseButton\"\r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-times\"\r\n class=\"p-button-text p-button-rounded\"\r\n (click)=\"handleClose()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n", styles: [":host{display:block}.backdrop-shadow{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:1000}.sidebar-header{display:flex;justify-content:flex-end;align-items:center;padding:0;width:100%;gap:1rem}.sidebar-header ::ng-deep .p-messages .p-message-success{margin-left:2rem;font-size:15px}.sidebar-header ::ng-deep .p-messages .p-message-wrapper{padding:1rem}.sidebar-title{margin:0;font-size:1.25rem;font-weight:600;color:#212529;flex:0 1 auto;white-space:nowrap;min-width:0}.header-content{display:flex;align-items:center;gap:1rem;justify-content:space-between;width:100%}.header-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto;margin-right:0}.close-button{background:none;border:none;color:#6c757d;cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease;display:flex;align-items:center;justify-content:center;min-width:2rem;min-height:2rem;margin-right:.5rem}.close-button:hover{background-color:#e9ecef;color:#495057}.close-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.close-button i{font-size:1rem}.sidebar-content{height:100%;overflow-y:auto;padding:0}.header-actions .p-button-text.p-button-rounded{width:2rem;height:2rem;border-radius:50%}.header-actions .p-button-text.p-button-rounded:hover{background-color:#0000001a}::ng-deep .p-sidebar .p-sidebar-header{border-bottom:1px solid #e9ecef;margin-bottom:1rem;background-color:#f8f9fa}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1.5rem 1.5rem;height:calc(100% - 80px);overflow-y:auto}::ng-deep .p-sidebar.p-sidebar-right .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}::ng-deep .p-sidebar.p-sidebar-left .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}@media (max-width: 768px){::ng-deep .p-sidebar{width:100%!important;max-width:100%!important}::ng-deep .p-sidebar .p-sidebar-header{padding:1rem 1rem 0}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1rem 1rem}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: i5$1.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }] });
|
|
4519
|
-
}
|
|
4520
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarComponent, decorators: [{
|
|
4521
|
-
type: Component,
|
|
4522
|
-
args: [{ selector: 'lib-sidebar', standalone: false, template: "<!-- PrimeNG Sidebar with proper backdrop handling -->\r\n<div *ngIf=\"visible\" class=\"backdrop-shadow\" (click)=\"handleClose()\"></div>\r\n\r\n<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [dismissible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [appendTo]=\"'body'\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onSidebarHide()\"\r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n \r\n <p-messages \r\n *ngIf=\"showSuccessMessage\"\r\n severity=\"success\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ successMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n \r\n <p-messages \r\n *ngIf=\"showErrorMessage\"\r\n severity=\"error\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ errorMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n\r\n <div class=\"header-actions mr-3\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n\r\n <button \r\n *ngIf=\"showCloseButton\"\r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-times\"\r\n class=\"p-button-text p-button-rounded\"\r\n (click)=\"handleClose()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n", styles: [":host{display:block}.backdrop-shadow{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:1000}.sidebar-header{display:flex;justify-content:flex-end;align-items:center;padding:0;width:100%;gap:1rem}.sidebar-header ::ng-deep .p-messages .p-message-success{margin-left:2rem;font-size:15px}.sidebar-header ::ng-deep .p-messages .p-message-wrapper{padding:1rem}.sidebar-title{margin:0;font-size:1.25rem;font-weight:600;color:#212529;flex:0 1 auto;white-space:nowrap;min-width:0}.header-content{display:flex;align-items:center;gap:1rem;justify-content:space-between;width:100%}.header-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto;margin-right:0}.close-button{background:none;border:none;color:#6c757d;cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease;display:flex;align-items:center;justify-content:center;min-width:2rem;min-height:2rem;margin-right:.5rem}.close-button:hover{background-color:#e9ecef;color:#495057}.close-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.close-button i{font-size:1rem}.sidebar-content{height:100%;overflow-y:auto;padding:0}.header-actions .p-button-text.p-button-rounded{width:2rem;height:2rem;border-radius:50%}.header-actions .p-button-text.p-button-rounded:hover{background-color:#0000001a}::ng-deep .p-sidebar .p-sidebar-header{border-bottom:1px solid #e9ecef;margin-bottom:1rem;background-color:#f8f9fa}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1.5rem 1.5rem;height:calc(100% - 80px);overflow-y:auto}::ng-deep .p-sidebar.p-sidebar-right .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}::ng-deep .p-sidebar.p-sidebar-left .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}@media (max-width: 768px){::ng-deep .p-sidebar{width:100%!important;max-width:100%!important}::ng-deep .p-sidebar .p-sidebar-header{padding:1rem 1rem 0}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1rem 1rem}}\n"] }]
|
|
4523
|
-
}], ctorParameters: () => [{ type: i3.ConfirmationService }], propDecorators: { visible: [{
|
|
4524
|
-
type: Input
|
|
4525
|
-
}], position: [{
|
|
4526
|
-
type: Input
|
|
4527
|
-
}], width: [{
|
|
4528
|
-
type: Input
|
|
4529
|
-
}], title: [{
|
|
4530
|
-
type: Input
|
|
4531
|
-
}], showCloseButton: [{
|
|
4532
|
-
type: Input
|
|
4533
|
-
}], modal: [{
|
|
4534
|
-
type: Input
|
|
4535
|
-
}], dismissible: [{
|
|
4536
|
-
type: Input
|
|
4537
|
-
}], styleClass: [{
|
|
4538
|
-
type: Input
|
|
4539
|
-
}], appendTo: [{
|
|
4540
|
-
type: Input
|
|
4541
|
-
}], blockScroll: [{
|
|
4542
|
-
type: Input
|
|
4543
|
-
}], closeIcon: [{
|
|
4544
|
-
type: Input
|
|
4545
|
-
}], showSaveButton: [{
|
|
4546
|
-
type: Input
|
|
4547
|
-
}], saveButtonText: [{
|
|
4548
|
-
type: Input
|
|
4549
|
-
}], saveButtonDisabled: [{
|
|
4550
|
-
type: Input
|
|
4551
|
-
}], successMessage: [{
|
|
4552
|
-
type: Input
|
|
4553
|
-
}], errorMessage: [{
|
|
4554
|
-
type: Input
|
|
4555
|
-
}], hasUnsavedChanges: [{
|
|
4556
|
-
type: Input
|
|
4557
|
-
}], visibleChange: [{
|
|
4558
|
-
type: Output
|
|
4559
|
-
}], onShow: [{
|
|
4560
|
-
type: Output
|
|
4561
|
-
}], onHide: [{
|
|
4562
|
-
type: Output
|
|
4563
|
-
}], onSave: [{
|
|
4564
|
-
type: Output
|
|
4565
|
-
}], onClose: [{
|
|
4566
|
-
type: Output
|
|
4567
|
-
}], handleEscapeKey: [{
|
|
4568
|
-
type: HostListener,
|
|
4569
|
-
args: ['document:keydown.escape', ['$event']]
|
|
4570
|
-
}] } });
|
|
4571
|
-
|
|
4572
4246
|
class UserListService {
|
|
4573
4247
|
documentStore;
|
|
4574
4248
|
documentQuery;
|
|
@@ -4746,267 +4420,595 @@ class UserListComponent {
|
|
|
4746
4420
|
this.userSelected.emit(username);
|
|
4747
4421
|
}
|
|
4748
4422
|
}
|
|
4749
|
-
getAvatarColor(color) {
|
|
4750
|
-
if (!color) {
|
|
4751
|
-
return SHARED.DEFAULT_COLOR;
|
|
4752
|
-
}
|
|
4753
|
-
return SHARED.COLOR_MAP[color] || SHARED.DEFAULT_COLOR;
|
|
4423
|
+
getAvatarColor(color) {
|
|
4424
|
+
if (!color) {
|
|
4425
|
+
return SHARED.DEFAULT_COLOR;
|
|
4426
|
+
}
|
|
4427
|
+
return SHARED.COLOR_MAP[color] || SHARED.DEFAULT_COLOR;
|
|
4428
|
+
}
|
|
4429
|
+
ngOnDestroy() {
|
|
4430
|
+
this.userListSubscription.unsubscribe();
|
|
4431
|
+
this.categoriesSubscription.unsubscribe();
|
|
4432
|
+
}
|
|
4433
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UserListComponent, deps: [{ token: DocumentHelperService }, { token: DocumentStore }, { token: DocumentQuery }, { token: UserListService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4434
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: UserListComponent, isStandalone: false, selector: "lib-user-list", inputs: { userList: "userList", categories: "categories" }, outputs: { userSelected: "userSelected" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"user-list-container\" [@slideInFromTop]>\r\n <div class=\"user-cards\">\r\n <div \r\n *ngFor=\"let user of filteredUserData\" \r\n class=\"user-card\"\r\n [class.selected]=\"selectedUser === user.name\"\r\n [style.border-color]=\"selectedUser === user.name ? getAvatarColor(user.color) : 'transparent'\"\r\n (click)=\"onUserSelect(user.name, user._id)\"\r\n >\r\n @if(user.name === \"Application Docs\"){\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\"><i class=\"pi pi-user\"></i></span>\r\n </div>\r\n }@else {\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\r\n }\r\n <div class=\"user-info\">\r\n <div class=\"username\">{{ user.name }}</div>\r\n <div class=\"document-counts\">\r\n <span style=\"color : #16A34A;\"> {{ user.approved }} approved </span><span>/ {{ user.pending }} outstanding</span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Show message when filtered list is empty -->\r\n <div *ngIf=\"filteredUserData.length === 0 && shouldShowContainer\" class=\"no-users-message\" [@slideInFromTop]>\r\n <p>No users available for this category.</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".user-list-container{padding:1rem 1rem .5rem}.user-cards{display:flex;flex-wrap:wrap;transition:all .3s ease-in-out}.user-card{display:flex;align-items:center;gap:.75rem;padding:1rem;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:all .2s ease;background:#fff;min-width:140px;max-width:240px;height:70px;position:relative;flex-shrink:0}.user-card:hover{box-shadow:0 4px 8px #00000026}.user-card.selected{background-color:#f8fafc;box-shadow:0 4px 8px #00000026;border-width:2px}.user-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;font-size:14px;flex-shrink:0;font-weight:400}.avatar-orange{background-color:#fef3c7;color:#b45309}.avatar-blue{background-color:#dbeafe;color:#1d4ed8}.avatar-green{background-color:#22c55e1a;color:#36aa86}.avatar-grey{background-color:#ebeced;color:#5b6676}.avatar-purple{background-color:#3b82f61a;color:#3b82f6}.user-info{flex:1;min-width:0;overflow:hidden}.username{font-weight:600;color:#1f2937;margin-bottom:.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.document-counts{font-size:.875rem;color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.selection-indicator{position:absolute;top:8px;right:8px;width:20px;height:20px;background-color:#10b981;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;flex-shrink:0}.no-users-message{display:flex;justify-content:center;align-items:center;padding:2rem;background:#f8fafc;border-radius:8px;border:2px dashed #d1d5db;margin:1rem 0}.no-users-message p{color:#6b7280;font-size:.875rem;font-weight:500;margin:0;text-align:center}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
|
|
4435
|
+
trigger('slideInFromTop', [
|
|
4436
|
+
state('void', style({
|
|
4437
|
+
opacity: 0,
|
|
4438
|
+
transform: 'translateY(-10px)'
|
|
4439
|
+
})),
|
|
4440
|
+
state('*', style({
|
|
4441
|
+
opacity: 1,
|
|
4442
|
+
transform: 'translateY(0)'
|
|
4443
|
+
})),
|
|
4444
|
+
transition('void => *', [
|
|
4445
|
+
animate('300ms ease-out')
|
|
4446
|
+
])
|
|
4447
|
+
]),
|
|
4448
|
+
trigger('fadeIn', [
|
|
4449
|
+
state('void', style({
|
|
4450
|
+
opacity: 0,
|
|
4451
|
+
transform: 'scale(0.8)'
|
|
4452
|
+
})),
|
|
4453
|
+
state('*', style({
|
|
4454
|
+
opacity: 1,
|
|
4455
|
+
transform: 'scale(1)'
|
|
4456
|
+
})),
|
|
4457
|
+
transition('void => *', [
|
|
4458
|
+
animate('200ms ease-in-out')
|
|
4459
|
+
])
|
|
4460
|
+
])
|
|
4461
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4462
|
+
}
|
|
4463
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UserListComponent, decorators: [{
|
|
4464
|
+
type: Component,
|
|
4465
|
+
args: [{ selector: 'lib-user-list', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
4466
|
+
trigger('slideInFromTop', [
|
|
4467
|
+
state('void', style({
|
|
4468
|
+
opacity: 0,
|
|
4469
|
+
transform: 'translateY(-10px)'
|
|
4470
|
+
})),
|
|
4471
|
+
state('*', style({
|
|
4472
|
+
opacity: 1,
|
|
4473
|
+
transform: 'translateY(0)'
|
|
4474
|
+
})),
|
|
4475
|
+
transition('void => *', [
|
|
4476
|
+
animate('300ms ease-out')
|
|
4477
|
+
])
|
|
4478
|
+
]),
|
|
4479
|
+
trigger('fadeIn', [
|
|
4480
|
+
state('void', style({
|
|
4481
|
+
opacity: 0,
|
|
4482
|
+
transform: 'scale(0.8)'
|
|
4483
|
+
})),
|
|
4484
|
+
state('*', style({
|
|
4485
|
+
opacity: 1,
|
|
4486
|
+
transform: 'scale(1)'
|
|
4487
|
+
})),
|
|
4488
|
+
transition('void => *', [
|
|
4489
|
+
animate('200ms ease-in-out')
|
|
4490
|
+
])
|
|
4491
|
+
])
|
|
4492
|
+
], template: "<div class=\"user-list-container\" [@slideInFromTop]>\r\n <div class=\"user-cards\">\r\n <div \r\n *ngFor=\"let user of filteredUserData\" \r\n class=\"user-card\"\r\n [class.selected]=\"selectedUser === user.name\"\r\n [style.border-color]=\"selectedUser === user.name ? getAvatarColor(user.color) : 'transparent'\"\r\n (click)=\"onUserSelect(user.name, user._id)\"\r\n >\r\n @if(user.name === \"Application Docs\"){\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\"><i class=\"pi pi-user\"></i></span>\r\n </div>\r\n }@else {\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\r\n }\r\n <div class=\"user-info\">\r\n <div class=\"username\">{{ user.name }}</div>\r\n <div class=\"document-counts\">\r\n <span style=\"color : #16A34A;\"> {{ user.approved }} approved </span><span>/ {{ user.pending }} outstanding</span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Show message when filtered list is empty -->\r\n <div *ngIf=\"filteredUserData.length === 0 && shouldShowContainer\" class=\"no-users-message\" [@slideInFromTop]>\r\n <p>No users available for this category.</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".user-list-container{padding:1rem 1rem .5rem}.user-cards{display:flex;flex-wrap:wrap;transition:all .3s ease-in-out}.user-card{display:flex;align-items:center;gap:.75rem;padding:1rem;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:all .2s ease;background:#fff;min-width:140px;max-width:240px;height:70px;position:relative;flex-shrink:0}.user-card:hover{box-shadow:0 4px 8px #00000026}.user-card.selected{background-color:#f8fafc;box-shadow:0 4px 8px #00000026;border-width:2px}.user-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;font-size:14px;flex-shrink:0;font-weight:400}.avatar-orange{background-color:#fef3c7;color:#b45309}.avatar-blue{background-color:#dbeafe;color:#1d4ed8}.avatar-green{background-color:#22c55e1a;color:#36aa86}.avatar-grey{background-color:#ebeced;color:#5b6676}.avatar-purple{background-color:#3b82f61a;color:#3b82f6}.user-info{flex:1;min-width:0;overflow:hidden}.username{font-weight:600;color:#1f2937;margin-bottom:.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.document-counts{font-size:.875rem;color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.selection-indicator{position:absolute;top:8px;right:8px;width:20px;height:20px;background-color:#10b981;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;flex-shrink:0}.no-users-message{display:flex;justify-content:center;align-items:center;padding:2rem;background:#f8fafc;border-radius:8px;border:2px dashed #d1d5db;margin:1rem 0}.no-users-message p{color:#6b7280;font-size:.875rem;font-weight:500;margin:0;text-align:center}\n"] }]
|
|
4493
|
+
}], ctorParameters: () => [{ type: DocumentHelperService }, { type: DocumentStore }, { type: DocumentQuery }, { type: UserListService }, { type: i0.ChangeDetectorRef }], propDecorators: { userList: [{
|
|
4494
|
+
type: Input
|
|
4495
|
+
}], categories: [{
|
|
4496
|
+
type: Input
|
|
4497
|
+
}], userSelected: [{
|
|
4498
|
+
type: Output
|
|
4499
|
+
}] } });
|
|
4500
|
+
|
|
4501
|
+
class StatusCalculatorService {
|
|
4502
|
+
calculateTotalCount(statusData) {
|
|
4503
|
+
return statusData?.reduce((total, status) => total + (status.count ?? 0), 0) || 0;
|
|
4504
|
+
}
|
|
4505
|
+
calculateStatusDataWithPercentages(statusData, selectedStatus) {
|
|
4506
|
+
if (!statusData)
|
|
4507
|
+
return [];
|
|
4508
|
+
const totalCount = this.calculateTotalCount(statusData);
|
|
4509
|
+
return statusData.map((status) => ({
|
|
4510
|
+
...status,
|
|
4511
|
+
percentage: totalCount > 0 ? (status.count ?? 0) / totalCount * 100 : 0,
|
|
4512
|
+
isSelected: selectedStatus === status.status,
|
|
4513
|
+
statusClass: status.status ? SHARED.STATUS_WITH_DASH + status.status.toLowerCase() : SHARED.EMPTY,
|
|
4514
|
+
iconClass: SHARED.ICON_WITH_DASH + (status?.status?.toLowerCase() || SHARED.EMPTY)
|
|
4515
|
+
}));
|
|
4516
|
+
}
|
|
4517
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: StatusCalculatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4518
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: StatusCalculatorService, providedIn: 'root' });
|
|
4519
|
+
}
|
|
4520
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: StatusCalculatorService, decorators: [{
|
|
4521
|
+
type: Injectable,
|
|
4522
|
+
args: [{
|
|
4523
|
+
providedIn: 'root'
|
|
4524
|
+
}]
|
|
4525
|
+
}] });
|
|
4526
|
+
|
|
4527
|
+
class DocumentStatusComponent {
|
|
4528
|
+
documentQuery;
|
|
4529
|
+
documentService;
|
|
4530
|
+
statusCalculatorService;
|
|
4531
|
+
contextId = SHARED.EMPTY;
|
|
4532
|
+
statusData;
|
|
4533
|
+
selectedStatus = null;
|
|
4534
|
+
statusDataWithPercentages = [];
|
|
4535
|
+
subscription = new Subscription();
|
|
4536
|
+
constructor(documentQuery, documentService, statusCalculatorService) {
|
|
4537
|
+
this.documentQuery = documentQuery;
|
|
4538
|
+
this.documentService = documentService;
|
|
4539
|
+
this.statusCalculatorService = statusCalculatorService;
|
|
4540
|
+
}
|
|
4541
|
+
ngOnChanges(changes) {
|
|
4542
|
+
if (changes['contextId'] && !changes['contextId'].firstChange) {
|
|
4543
|
+
// When contextId changes, refetch status data for the new context
|
|
4544
|
+
this.refetchStatusData();
|
|
4545
|
+
}
|
|
4546
|
+
}
|
|
4547
|
+
ngOnInit() {
|
|
4548
|
+
this.subscription.add(this.documentQuery.selectSelectedStatus().subscribe(status => {
|
|
4549
|
+
this.selectedStatus = status;
|
|
4550
|
+
this.updateCalculatedStatusData();
|
|
4551
|
+
}));
|
|
4552
|
+
this.subscription.add(this.documentQuery.selectStatusData().subscribe(statusData => {
|
|
4553
|
+
if (statusData && statusData.length > 0) {
|
|
4554
|
+
this.statusData = statusData;
|
|
4555
|
+
this.updateCalculatedStatusData();
|
|
4556
|
+
}
|
|
4557
|
+
}));
|
|
4558
|
+
if (this.contextId && this.contextId !== SHARED.EMPTY) {
|
|
4559
|
+
this.refetchStatusData();
|
|
4560
|
+
}
|
|
4561
|
+
}
|
|
4562
|
+
refetchStatusData() {
|
|
4563
|
+
if (this.contextId && this.contextId !== SHARED.EMPTY) {
|
|
4564
|
+
const currentState = this.documentQuery.getSelectionState();
|
|
4565
|
+
const statusContextId = currentState.userId || null;
|
|
4566
|
+
const categoryId = currentState.menuItem || null;
|
|
4567
|
+
// Use the document service to refresh status data for the new context
|
|
4568
|
+
this.documentService.refreshStatusData(this.contextId, statusContextId, categoryId);
|
|
4569
|
+
}
|
|
4570
|
+
}
|
|
4571
|
+
selectStatus(status) {
|
|
4572
|
+
const newStatus = this.selectedStatus === status ? null : status;
|
|
4573
|
+
this.documentService.setSelectedStatus(newStatus);
|
|
4574
|
+
}
|
|
4575
|
+
updateCalculatedStatusData() {
|
|
4576
|
+
this.statusDataWithPercentages = this.statusCalculatorService.calculateStatusDataWithPercentages(this.statusData, this.selectedStatus);
|
|
4577
|
+
}
|
|
4578
|
+
ngOnDestroy() {
|
|
4579
|
+
this.subscription.unsubscribe();
|
|
4580
|
+
}
|
|
4581
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentStatusComponent, deps: [{ token: DocumentQuery }, { token: DocumentHelperService }, { token: StatusCalculatorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4582
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentStatusComponent, isStandalone: false, selector: "lib-document-status", inputs: { contextId: "contextId", statusData: "statusData" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"status-summary-container\">\r\n <div class=\"status-cards\">\r\n \r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"status-card {{ status.statusClass }}\"\r\n [class.selected]=\"status.isSelected\"\r\n (click)=\"selectStatus(status.status || '')\"\r\n >\r\n <div class=\"status-icon {{ status.iconClass }}\">\r\n <i [class]=\"status.icon\"></i>\r\n </div>\r\n <div class=\"status-info\">\r\n <div class=\"status-count\">{{ status.count }}</div>\r\n <div class=\"status-name\">{{ status.status }}</div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\">\r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"progress-segment\"\r\n [style.width.%]=\"status.percentage\"\r\n [style.background-color]=\"status.color\"\r\n ></div>\r\n </div>\r\n </div>\r\n</div>", styles: [".status-summary-container{padding:1rem;padding-top:0}.status-cards{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:1.5rem}.status-card{display:flex;align-items:center;gap:.75rem;padding:.7rem;border-radius:8px;background:#fff;box-shadow:0 2px 4px #0000001a;min-width:150px;flex:1;cursor:pointer;transition:all .2s ease;border:2px solid transparent}.status-card:hover{transform:translateY(-2px);box-shadow:0 4px 8px #00000026}.status-card.selected{border-width:3px!important;border-style:solid!important;box-shadow:0 4px 12px #0003}.status-card.selected.status-approved,.status-card.selected.status-uploaded{border-color:#10b981!important;background:#ecfdf5!important}.status-card.selected.status-pending{border-color:#6b7280!important;background:#f8fafc!important}.status-card.selected.status-reviewing{border-color:#f59e0b!important;background:#fffbeb!important}.status-card.selected.status-rejected{border-color:#ef4444!important;background:#fff1f2!important}.status-card.selected.status-alert{border-color:#dc2626!important;background:#ef4444!important}.status-card.status-approved{background:#ecfdf5}.status-card.status-approved .status-name{color:#065f46}.status-card.status-approved .status-count{color:#047857}.status-card.status-uploaded{background:#ecfdf5}.status-card.status-uploaded .status-name{color:#065f46}.status-card.status-uploaded .status-count{color:#047857}.status-card.status-pending{background:#f8fafc}.status-card.status-pending .status-name{color:#475569}.status-card.status-pending .status-count{color:#334155}.status-card.status-reviewing{background:#fffbeb}.status-card.status-reviewing .status-name{color:#92400e}.status-card.status-reviewing .status-count{color:#a16207}.status-card.status-rejected{background:#fff1f2}.status-card.status-rejected .status-name{color:#be123c}.status-card.status-rejected .status-count{color:#e11d48}.status-card.status-alert{background:#ef4444}.status-card.status-alert .status-name,.status-card.status-alert .status-count{color:#fff}.status-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;color:#fff}.icon-approved,.icon-uploaded{background-color:#10b981}.icon-pending{background-color:#6b7280}.icon-reviewing{background-color:#f59e0b}.icon-rejected{background-color:#ef4444}.icon-alert{background-color:#dc2626}.status-info{flex:1}.status-name{font-weight:600;color:#1f2937;margin-bottom:.25rem}.status-count{font-size:1.2rem;font-weight:700;color:#374151}.progress-bar-container{margin-top:1rem}.progress-bar{height:8px;background-color:#e5e7eb;border-radius:4px;overflow:hidden;display:flex}.progress-segment{height:100%;transition:width .3s ease}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
4583
|
+
}
|
|
4584
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentStatusComponent, decorators: [{
|
|
4585
|
+
type: Component,
|
|
4586
|
+
args: [{ selector: 'lib-document-status', standalone: false, template: "<div class=\"status-summary-container\">\r\n <div class=\"status-cards\">\r\n \r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"status-card {{ status.statusClass }}\"\r\n [class.selected]=\"status.isSelected\"\r\n (click)=\"selectStatus(status.status || '')\"\r\n >\r\n <div class=\"status-icon {{ status.iconClass }}\">\r\n <i [class]=\"status.icon\"></i>\r\n </div>\r\n <div class=\"status-info\">\r\n <div class=\"status-count\">{{ status.count }}</div>\r\n <div class=\"status-name\">{{ status.status }}</div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\">\r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"progress-segment\"\r\n [style.width.%]=\"status.percentage\"\r\n [style.background-color]=\"status.color\"\r\n ></div>\r\n </div>\r\n </div>\r\n</div>", styles: [".status-summary-container{padding:1rem;padding-top:0}.status-cards{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:1.5rem}.status-card{display:flex;align-items:center;gap:.75rem;padding:.7rem;border-radius:8px;background:#fff;box-shadow:0 2px 4px #0000001a;min-width:150px;flex:1;cursor:pointer;transition:all .2s ease;border:2px solid transparent}.status-card:hover{transform:translateY(-2px);box-shadow:0 4px 8px #00000026}.status-card.selected{border-width:3px!important;border-style:solid!important;box-shadow:0 4px 12px #0003}.status-card.selected.status-approved,.status-card.selected.status-uploaded{border-color:#10b981!important;background:#ecfdf5!important}.status-card.selected.status-pending{border-color:#6b7280!important;background:#f8fafc!important}.status-card.selected.status-reviewing{border-color:#f59e0b!important;background:#fffbeb!important}.status-card.selected.status-rejected{border-color:#ef4444!important;background:#fff1f2!important}.status-card.selected.status-alert{border-color:#dc2626!important;background:#ef4444!important}.status-card.status-approved{background:#ecfdf5}.status-card.status-approved .status-name{color:#065f46}.status-card.status-approved .status-count{color:#047857}.status-card.status-uploaded{background:#ecfdf5}.status-card.status-uploaded .status-name{color:#065f46}.status-card.status-uploaded .status-count{color:#047857}.status-card.status-pending{background:#f8fafc}.status-card.status-pending .status-name{color:#475569}.status-card.status-pending .status-count{color:#334155}.status-card.status-reviewing{background:#fffbeb}.status-card.status-reviewing .status-name{color:#92400e}.status-card.status-reviewing .status-count{color:#a16207}.status-card.status-rejected{background:#fff1f2}.status-card.status-rejected .status-name{color:#be123c}.status-card.status-rejected .status-count{color:#e11d48}.status-card.status-alert{background:#ef4444}.status-card.status-alert .status-name,.status-card.status-alert .status-count{color:#fff}.status-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;color:#fff}.icon-approved,.icon-uploaded{background-color:#10b981}.icon-pending{background-color:#6b7280}.icon-reviewing{background-color:#f59e0b}.icon-rejected{background-color:#ef4444}.icon-alert{background-color:#dc2626}.status-info{flex:1}.status-name{font-weight:600;color:#1f2937;margin-bottom:.25rem}.status-count{font-size:1.2rem;font-weight:700;color:#374151}.progress-bar-container{margin-top:1rem}.progress-bar{height:8px;background-color:#e5e7eb;border-radius:4px;overflow:hidden;display:flex}.progress-segment{height:100%;transition:width .3s ease}\n"] }]
|
|
4587
|
+
}], ctorParameters: () => [{ type: DocumentQuery }, { type: DocumentHelperService }, { type: StatusCalculatorService }], propDecorators: { contextId: [{
|
|
4588
|
+
type: Input
|
|
4589
|
+
}], statusData: [{
|
|
4590
|
+
type: Input
|
|
4591
|
+
}] } });
|
|
4592
|
+
|
|
4593
|
+
class DocumentSearchComponent {
|
|
4594
|
+
documentHelperService;
|
|
4595
|
+
documentQuery;
|
|
4596
|
+
SHARED = SHARED;
|
|
4597
|
+
contextId = SHARED.EMPTY;
|
|
4598
|
+
onActionClick = new EventEmitter();
|
|
4599
|
+
onRequestClick = new EventEmitter();
|
|
4600
|
+
searchTerm = SHARED.EMPTY;
|
|
4601
|
+
destroy$ = new Subject();
|
|
4602
|
+
searchSubject = new Subject();
|
|
4603
|
+
hasActiveFilters = false;
|
|
4604
|
+
constructor(documentHelperService, documentQuery) {
|
|
4605
|
+
this.documentHelperService = documentHelperService;
|
|
4606
|
+
this.documentQuery = documentQuery;
|
|
4607
|
+
}
|
|
4608
|
+
ngOnInit() {
|
|
4609
|
+
this.setupSearchSubscription();
|
|
4610
|
+
this.setupFilterSubscription();
|
|
4611
|
+
}
|
|
4612
|
+
ngOnDestroy() {
|
|
4613
|
+
this.destroy$.next();
|
|
4614
|
+
this.destroy$.complete();
|
|
4615
|
+
}
|
|
4616
|
+
/**
|
|
4617
|
+
* Sets up the search input subscription with debouncing
|
|
4618
|
+
*/
|
|
4619
|
+
setupSearchSubscription() {
|
|
4620
|
+
const searchSubject = new Subject();
|
|
4621
|
+
searchSubject.pipe(takeUntil(this.destroy$), debounceTime$1(500), distinctUntilChanged$1()).subscribe(searchTerm => {
|
|
4622
|
+
this.onSearchChange(searchTerm);
|
|
4623
|
+
});
|
|
4624
|
+
this.searchSubject = searchSubject;
|
|
4625
|
+
}
|
|
4626
|
+
/**
|
|
4627
|
+
* Sets up subscription to monitor all filter states
|
|
4628
|
+
*/
|
|
4629
|
+
setupFilterSubscription() {
|
|
4630
|
+
this.documentQuery.selectSelectionState().pipe(takeUntil(this.destroy$)).subscribe(selectionState => {
|
|
4631
|
+
this.hasActiveFilters = Boolean(selectionState.searchKey ||
|
|
4632
|
+
selectionState.userId ||
|
|
4633
|
+
selectionState.status ||
|
|
4634
|
+
selectionState.menuItem);
|
|
4635
|
+
});
|
|
4636
|
+
}
|
|
4637
|
+
/**
|
|
4638
|
+
* Handles search term changes from ngModel
|
|
4639
|
+
* @param searchTerm - The search term entered by the user
|
|
4640
|
+
*/
|
|
4641
|
+
onSearchInputChange(searchTerm) {
|
|
4642
|
+
this.searchSubject.next(searchTerm);
|
|
4643
|
+
}
|
|
4644
|
+
/**
|
|
4645
|
+
* Handles search term changes
|
|
4646
|
+
* @param searchTerm - The search term entered by the user
|
|
4647
|
+
*/
|
|
4648
|
+
onSearchChange(searchTerm) {
|
|
4649
|
+
const normalizedSearchTerm = searchTerm?.trim() || null;
|
|
4650
|
+
this.documentHelperService.setSearchKey(normalizedSearchTerm);
|
|
4651
|
+
}
|
|
4652
|
+
/**
|
|
4653
|
+
* Clears the search input
|
|
4654
|
+
*/
|
|
4655
|
+
onClearSearch() {
|
|
4656
|
+
this.searchTerm = SHARED.EMPTY;
|
|
4657
|
+
this.documentHelperService.setSearchKey(null);
|
|
4754
4658
|
}
|
|
4755
|
-
|
|
4756
|
-
|
|
4757
|
-
|
|
4659
|
+
/**
|
|
4660
|
+
* Clears all filters including search, menu item, user, and status selections
|
|
4661
|
+
*/
|
|
4662
|
+
onClearAllFilters() {
|
|
4663
|
+
this.searchTerm = SHARED.EMPTY;
|
|
4664
|
+
this.documentHelperService.clearSelectionState();
|
|
4758
4665
|
}
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
4767
|
-
opacity: 1,
|
|
4768
|
-
transform: 'translateY(0)'
|
|
4769
|
-
})),
|
|
4770
|
-
transition('void => *', [
|
|
4771
|
-
animate('300ms ease-out')
|
|
4772
|
-
])
|
|
4773
|
-
]),
|
|
4774
|
-
trigger('fadeIn', [
|
|
4775
|
-
state('void', style({
|
|
4776
|
-
opacity: 0,
|
|
4777
|
-
transform: 'scale(0.8)'
|
|
4778
|
-
})),
|
|
4779
|
-
state('*', style({
|
|
4780
|
-
opacity: 1,
|
|
4781
|
-
transform: 'scale(1)'
|
|
4782
|
-
})),
|
|
4783
|
-
transition('void => *', [
|
|
4784
|
-
animate('200ms ease-in-out')
|
|
4785
|
-
])
|
|
4786
|
-
])
|
|
4787
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4666
|
+
/**
|
|
4667
|
+
* Determines if the Clear All button should be visible
|
|
4668
|
+
*/
|
|
4669
|
+
get shouldShowClearAll() {
|
|
4670
|
+
return this.hasActiveFilters;
|
|
4671
|
+
}
|
|
4672
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentSearchComponent, deps: [{ token: DocumentHelperService }, { token: DocumentQuery }], target: i0.ɵɵFactoryTarget.Component });
|
|
4673
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentSearchComponent, isStandalone: false, selector: "document-search", inputs: { contextId: "contextId" }, outputs: { onActionClick: "onActionClick", onRequestClick: "onRequestClick" }, ngImport: i0, template: "<div class=\"search-container\">\r\n <div class=\"search-header\">\r\n <h2 class=\"ml-3\">Documents</h2> \r\n </div>\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"pi pi-search search-icon\"></i>\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n *ngIf=\"shouldShowClearAll\"\r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <button \r\n type=\"button\"\r\n class=\"action-button\"\r\n (click)=\"onActionClick.emit()\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n >\r\n Upload Document\r\n </button>\r\n <button \r\n type=\"button\"\r\n class=\"action-button ml-2\"\r\n (click)=\"onRequestClick.emit()\"\r\n [attr.aria-label]=\"'Open request document sidebar'\"\r\n >\r\n Request Document\r\n </button>\r\n </div>\r\n</div> ", styles: [".search-container{display:flex;align-items:center;gap:1rem;width:100%;justify-content:flex-start;padding:10px}.search-input-wrapper{position:relative;flex:1;display:flex;align-items:center;max-width:50%;min-width:300px}.clear-all-filters-link{background:none;border:none;color:#0f8bfd;cursor:pointer;padding:8px 12px;border-radius:4px;font-size:16px;font-weight:500;text-decoration:none!important;transition:background-color .2s ease,color .2s ease;white-space:nowrap;flex-shrink:0;display:flex;justify-content:center;align-items:center;gap:4px}.filters-section{display:flex;align-items:center;gap:1rem;flex-shrink:0;margin-left:auto}.search-icon{position:absolute;left:12px;color:#6c757d;z-index:1}.search-input{width:100%;padding:12px 40px;border:1px solid #dee2e6;border-radius:8px;font-size:14px;outline:none;transition:border-color .2s ease,box-shadow .2s ease}.search-input:focus{border-color:#0f8bfd;box-shadow:0 0 0 3px #0f8bfd1a}.search-input::placeholder{color:#6c757d}.clear-button{position:absolute;right:12px;background:none;border:none;color:#6c757d;cursor:pointer;padding:4px;border-radius:4px;transition:background-color .2s ease,color .2s ease}.clear-button:hover{background-color:#f8f9fa;color:#495057}.action-button{background-color:#0f8bfd;color:#fff;border:none;padding:12px 24px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background-color .2s ease,transform .1s ease;white-space:nowrap}.action-button:hover{background-color:#0d7ae6;transform:translateY(-1px)}.action-button:active{transform:translateY(0)}.action-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}@media (max-width: 768px){.search-container{flex-direction:column;gap:.75rem}.search-input-wrapper{max-width:100%}.filters-section{width:100%;justify-content:center;gap:.5rem}.action-button{width:auto;justify-content:center}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9$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: i9$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
4788
4674
|
}
|
|
4789
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type:
|
|
4675
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentSearchComponent, decorators: [{
|
|
4790
4676
|
type: Component,
|
|
4791
|
-
args: [{ selector: '
|
|
4792
|
-
|
|
4793
|
-
state('void', style({
|
|
4794
|
-
opacity: 0,
|
|
4795
|
-
transform: 'translateY(-10px)'
|
|
4796
|
-
})),
|
|
4797
|
-
state('*', style({
|
|
4798
|
-
opacity: 1,
|
|
4799
|
-
transform: 'translateY(0)'
|
|
4800
|
-
})),
|
|
4801
|
-
transition('void => *', [
|
|
4802
|
-
animate('300ms ease-out')
|
|
4803
|
-
])
|
|
4804
|
-
]),
|
|
4805
|
-
trigger('fadeIn', [
|
|
4806
|
-
state('void', style({
|
|
4807
|
-
opacity: 0,
|
|
4808
|
-
transform: 'scale(0.8)'
|
|
4809
|
-
})),
|
|
4810
|
-
state('*', style({
|
|
4811
|
-
opacity: 1,
|
|
4812
|
-
transform: 'scale(1)'
|
|
4813
|
-
})),
|
|
4814
|
-
transition('void => *', [
|
|
4815
|
-
animate('200ms ease-in-out')
|
|
4816
|
-
])
|
|
4817
|
-
])
|
|
4818
|
-
], template: "<div class=\"user-list-container\" [@slideInFromTop]>\r\n <div class=\"user-cards\">\r\n <div \r\n *ngFor=\"let user of filteredUserData\" \r\n class=\"user-card\"\r\n [class.selected]=\"selectedUser === user.name\"\r\n [style.border-color]=\"selectedUser === user.name ? getAvatarColor(user.color) : 'transparent'\"\r\n (click)=\"onUserSelect(user.name, user._id)\"\r\n >\r\n @if(user.name === \"Application Docs\"){\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\"><i class=\"pi pi-user\"></i></span>\r\n </div>\r\n }@else {\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\r\n }\r\n <div class=\"user-info\">\r\n <div class=\"username\">{{ user.name }}</div>\r\n <div class=\"document-counts\">\r\n <span style=\"color : #16A34A;\"> {{ user.approved }} approved </span><span>/ {{ user.pending }} outstanding</span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Show message when filtered list is empty -->\r\n <div *ngIf=\"filteredUserData.length === 0 && shouldShowContainer\" class=\"no-users-message\" [@slideInFromTop]>\r\n <p>No users available for this category.</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".user-list-container{padding:1rem 1rem .5rem}.user-cards{display:flex;flex-wrap:wrap;transition:all .3s ease-in-out}.user-card{display:flex;align-items:center;gap:.75rem;padding:1rem;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:all .2s ease;background:#fff;min-width:140px;max-width:240px;height:70px;position:relative;flex-shrink:0}.user-card:hover{box-shadow:0 4px 8px #00000026}.user-card.selected{background-color:#f8fafc;box-shadow:0 4px 8px #00000026;border-width:2px}.user-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;font-size:14px;flex-shrink:0;font-weight:400}.avatar-orange{background-color:#fef3c7;color:#b45309}.avatar-blue{background-color:#dbeafe;color:#1d4ed8}.avatar-green{background-color:#22c55e1a;color:#36aa86}.avatar-grey{background-color:#ebeced;color:#5b6676}.avatar-purple{background-color:#3b82f61a;color:#3b82f6}.user-info{flex:1;min-width:0;overflow:hidden}.username{font-weight:600;color:#1f2937;margin-bottom:.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.document-counts{font-size:.875rem;color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.selection-indicator{position:absolute;top:8px;right:8px;width:20px;height:20px;background-color:#10b981;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;flex-shrink:0}.no-users-message{display:flex;justify-content:center;align-items:center;padding:2rem;background:#f8fafc;border-radius:8px;border:2px dashed #d1d5db;margin:1rem 0}.no-users-message p{color:#6b7280;font-size:.875rem;font-weight:500;margin:0;text-align:center}\n"] }]
|
|
4819
|
-
}], ctorParameters: () => [{ type: DocumentHelperService }, { type: DocumentStore }, { type: DocumentQuery }, { type: UserListService }, { type: i0.ChangeDetectorRef }], propDecorators: { userList: [{
|
|
4820
|
-
type: Input
|
|
4821
|
-
}], categories: [{
|
|
4677
|
+
args: [{ selector: 'document-search', standalone: false, template: "<div class=\"search-container\">\r\n <div class=\"search-header\">\r\n <h2 class=\"ml-3\">Documents</h2> \r\n </div>\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"pi pi-search search-icon\"></i>\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n *ngIf=\"shouldShowClearAll\"\r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <button \r\n type=\"button\"\r\n class=\"action-button\"\r\n (click)=\"onActionClick.emit()\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n >\r\n Upload Document\r\n </button>\r\n <button \r\n type=\"button\"\r\n class=\"action-button ml-2\"\r\n (click)=\"onRequestClick.emit()\"\r\n [attr.aria-label]=\"'Open request document sidebar'\"\r\n >\r\n Request Document\r\n </button>\r\n </div>\r\n</div> ", styles: [".search-container{display:flex;align-items:center;gap:1rem;width:100%;justify-content:flex-start;padding:10px}.search-input-wrapper{position:relative;flex:1;display:flex;align-items:center;max-width:50%;min-width:300px}.clear-all-filters-link{background:none;border:none;color:#0f8bfd;cursor:pointer;padding:8px 12px;border-radius:4px;font-size:16px;font-weight:500;text-decoration:none!important;transition:background-color .2s ease,color .2s ease;white-space:nowrap;flex-shrink:0;display:flex;justify-content:center;align-items:center;gap:4px}.filters-section{display:flex;align-items:center;gap:1rem;flex-shrink:0;margin-left:auto}.search-icon{position:absolute;left:12px;color:#6c757d;z-index:1}.search-input{width:100%;padding:12px 40px;border:1px solid #dee2e6;border-radius:8px;font-size:14px;outline:none;transition:border-color .2s ease,box-shadow .2s ease}.search-input:focus{border-color:#0f8bfd;box-shadow:0 0 0 3px #0f8bfd1a}.search-input::placeholder{color:#6c757d}.clear-button{position:absolute;right:12px;background:none;border:none;color:#6c757d;cursor:pointer;padding:4px;border-radius:4px;transition:background-color .2s ease,color .2s ease}.clear-button:hover{background-color:#f8f9fa;color:#495057}.action-button{background-color:#0f8bfd;color:#fff;border:none;padding:12px 24px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background-color .2s ease,transform .1s ease;white-space:nowrap}.action-button:hover{background-color:#0d7ae6;transform:translateY(-1px)}.action-button:active{transform:translateY(0)}.action-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}@media (max-width: 768px){.search-container{flex-direction:column;gap:.75rem}.search-input-wrapper{max-width:100%}.filters-section{width:100%;justify-content:center;gap:.5rem}.action-button{width:auto;justify-content:center}}\n"] }]
|
|
4678
|
+
}], ctorParameters: () => [{ type: DocumentHelperService }, { type: DocumentQuery }], propDecorators: { contextId: [{
|
|
4822
4679
|
type: Input
|
|
4823
|
-
}],
|
|
4680
|
+
}], onActionClick: [{
|
|
4681
|
+
type: Output
|
|
4682
|
+
}], onRequestClick: [{
|
|
4824
4683
|
type: Output
|
|
4825
4684
|
}] } });
|
|
4826
4685
|
|
|
4827
|
-
class
|
|
4828
|
-
|
|
4829
|
-
|
|
4686
|
+
class ConfirmationDialogComponent {
|
|
4687
|
+
confirmationService;
|
|
4688
|
+
confirmationOptions = {
|
|
4689
|
+
message: 'Are you sure that you want to proceed?',
|
|
4690
|
+
header: '',
|
|
4691
|
+
icon: '',
|
|
4692
|
+
acceptLabel: 'Yes',
|
|
4693
|
+
rejectLabel: 'No',
|
|
4694
|
+
acceptIcon: 'pi pi-check',
|
|
4695
|
+
rejectIcon: 'pi pi-times',
|
|
4696
|
+
acceptButtonClass: 'btn-danger',
|
|
4697
|
+
rejectButtonClass: 'btn-secondary'
|
|
4698
|
+
};
|
|
4699
|
+
constructor(confirmationService) {
|
|
4700
|
+
this.confirmationService = confirmationService;
|
|
4830
4701
|
}
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4702
|
+
/**
|
|
4703
|
+
* Shows the confirmation dialog with the specified options
|
|
4704
|
+
* @param options - Configuration options for the confirmation dialog
|
|
4705
|
+
* @param acceptCallback - Function to execute when user accepts
|
|
4706
|
+
* @param rejectCallback - Function to execute when user rejects
|
|
4707
|
+
*/
|
|
4708
|
+
confirm(options, acceptCallback, rejectCallback) {
|
|
4709
|
+
const confirmation = {
|
|
4710
|
+
message: options.message || this.confirmationOptions.message,
|
|
4711
|
+
header: options.header || this.confirmationOptions.header,
|
|
4712
|
+
icon: options.icon || this.confirmationOptions.icon,
|
|
4713
|
+
acceptLabel: options.acceptLabel || this.confirmationOptions.acceptLabel,
|
|
4714
|
+
rejectLabel: options.rejectLabel || this.confirmationOptions.rejectLabel,
|
|
4715
|
+
acceptIcon: options.acceptIcon || this.confirmationOptions.acceptIcon,
|
|
4716
|
+
rejectIcon: options.rejectIcon || this.confirmationOptions.rejectIcon,
|
|
4717
|
+
accept: acceptCallback,
|
|
4718
|
+
reject: rejectCallback
|
|
4719
|
+
};
|
|
4720
|
+
this.confirmationService.confirm(confirmation);
|
|
4842
4721
|
}
|
|
4843
|
-
|
|
4844
|
-
|
|
4722
|
+
/**
|
|
4723
|
+
* Static method to show a confirmation dialog (for components that don't want to inject this component)
|
|
4724
|
+
* @param confirmationService - The ConfirmationService instance
|
|
4725
|
+
* @param options - Configuration options for the confirmation dialog
|
|
4726
|
+
* @param acceptCallback - Function to execute when user accepts
|
|
4727
|
+
* @param rejectCallback - Function to execute when user rejects
|
|
4728
|
+
*/
|
|
4729
|
+
static confirm(confirmationService, options, acceptCallback, rejectCallback) {
|
|
4730
|
+
const defaultOptions = {
|
|
4731
|
+
message: 'Are you sure that you want to proceed?',
|
|
4732
|
+
header: '',
|
|
4733
|
+
icon: '',
|
|
4734
|
+
acceptLabel: 'Yes',
|
|
4735
|
+
rejectLabel: 'No',
|
|
4736
|
+
acceptIcon: 'pi pi-check',
|
|
4737
|
+
rejectIcon: 'pi pi-times',
|
|
4738
|
+
acceptButtonClass: 'btn-success',
|
|
4739
|
+
rejectButtonClass: 'btn-secondary'
|
|
4740
|
+
};
|
|
4741
|
+
const confirmation = {
|
|
4742
|
+
message: options.message || defaultOptions.message,
|
|
4743
|
+
header: options.header || defaultOptions.header,
|
|
4744
|
+
icon: options.icon || defaultOptions.icon,
|
|
4745
|
+
acceptLabel: options.acceptLabel || defaultOptions.acceptLabel,
|
|
4746
|
+
rejectLabel: options.rejectLabel || defaultOptions.rejectLabel,
|
|
4747
|
+
acceptIcon: options.acceptIcon || defaultOptions.acceptIcon,
|
|
4748
|
+
rejectIcon: options.rejectIcon || defaultOptions.rejectIcon,
|
|
4749
|
+
accept: acceptCallback,
|
|
4750
|
+
reject: rejectCallback
|
|
4751
|
+
};
|
|
4752
|
+
confirmationService.confirm(confirmation);
|
|
4753
|
+
}
|
|
4754
|
+
/**
|
|
4755
|
+
* Static method to show a delete confirmation dialog
|
|
4756
|
+
* @param confirmationService - The ConfirmationService instance
|
|
4757
|
+
* @param itemName - Name of the item to be deleted
|
|
4758
|
+
* @param acceptCallback - Function to execute when user accepts deletion
|
|
4759
|
+
* @param rejectCallback - Function to execute when user rejects deletion
|
|
4760
|
+
*/
|
|
4761
|
+
static confirmDelete(confirmationService, itemName, acceptCallback, rejectCallback) {
|
|
4762
|
+
ConfirmationDialogComponent.confirm(confirmationService, {
|
|
4763
|
+
message: `Are you sure you want to delete "${itemName}"?`,
|
|
4764
|
+
header: 'Delete Confirmation',
|
|
4765
|
+
acceptLabel: 'Delete',
|
|
4766
|
+
rejectLabel: 'Cancel',
|
|
4767
|
+
acceptButtonClass: 'btn-danger'
|
|
4768
|
+
}, acceptCallback, rejectCallback);
|
|
4769
|
+
}
|
|
4770
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ConfirmationDialogComponent, deps: [{ token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4771
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ConfirmationDialogComponent, isStandalone: false, selector: "app-confirmation-dialog", inputs: { confirmationOptions: "confirmationOptions" }, ngImport: i0, template: "<!-- This component no longer renders a p-confirmDialog element -->\r\n<!-- The p-confirmDialog should be placed only once in the main app component -->\r\n<!-- This component now only provides methods to trigger confirmations via ConfirmationService -->\r\n", styles: [".btn-danger{background-color:#ef4444;color:#fff;border-color:#e53e3e;max-width:100px}.btn-secondary{background-color:#f3f4f6;color:#000;max-width:100px}\n"] });
|
|
4772
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ConfirmationDialogComponent, providedIn: 'root' });
|
|
4845
4773
|
}
|
|
4846
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type:
|
|
4774
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
|
|
4847
4775
|
type: Injectable,
|
|
4848
4776
|
args: [{
|
|
4849
4777
|
providedIn: 'root'
|
|
4850
4778
|
}]
|
|
4851
|
-
}
|
|
4779
|
+
}, {
|
|
4780
|
+
type: Component,
|
|
4781
|
+
args: [{ selector: 'app-confirmation-dialog', standalone: false, template: "<!-- This component no longer renders a p-confirmDialog element -->\r\n<!-- The p-confirmDialog should be placed only once in the main app component -->\r\n<!-- This component now only provides methods to trigger confirmations via ConfirmationService -->\r\n", styles: [".btn-danger{background-color:#ef4444;color:#fff;border-color:#e53e3e;max-width:100px}.btn-secondary{background-color:#f3f4f6;color:#000;max-width:100px}\n"] }]
|
|
4782
|
+
}], ctorParameters: () => [{ type: i3.ConfirmationService }], propDecorators: { confirmationOptions: [{
|
|
4783
|
+
type: Input
|
|
4784
|
+
}] } });
|
|
4852
4785
|
|
|
4853
|
-
class
|
|
4854
|
-
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
|
|
4859
|
-
selectedStatus = null;
|
|
4860
|
-
statusDataWithPercentages = [];
|
|
4861
|
-
subscription = new Subscription();
|
|
4862
|
-
constructor(documentQuery, documentService, statusCalculatorService) {
|
|
4863
|
-
this.documentQuery = documentQuery;
|
|
4864
|
-
this.documentService = documentService;
|
|
4865
|
-
this.statusCalculatorService = statusCalculatorService;
|
|
4786
|
+
class SidebarComponent {
|
|
4787
|
+
confirmationService;
|
|
4788
|
+
// Flag to prevent multiple confirmations
|
|
4789
|
+
isShowingConfirmation = false;
|
|
4790
|
+
set visible(value) {
|
|
4791
|
+
this._visible = value;
|
|
4866
4792
|
}
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4793
|
+
get visible() {
|
|
4794
|
+
return this._visible;
|
|
4795
|
+
}
|
|
4796
|
+
_visible = false;
|
|
4797
|
+
position = 'right';
|
|
4798
|
+
width = SHARED.WIDTH;
|
|
4799
|
+
title = SHARED.EMPTY;
|
|
4800
|
+
showCloseButton = true;
|
|
4801
|
+
modal = true;
|
|
4802
|
+
dismissible = true;
|
|
4803
|
+
styleClass = SHARED.EMPTY;
|
|
4804
|
+
appendTo = 'body';
|
|
4805
|
+
blockScroll = true;
|
|
4806
|
+
closeIcon = SHARED.CLOSE_ICON;
|
|
4807
|
+
showSaveButton = false;
|
|
4808
|
+
saveButtonText = SHARED.SAVE;
|
|
4809
|
+
saveButtonDisabled = false;
|
|
4810
|
+
successMessage = SHARED.SUCCESS_MESSAGE;
|
|
4811
|
+
errorMessage = SHARED.EMPTY;
|
|
4812
|
+
hasUnsavedChanges = false;
|
|
4813
|
+
visibleChange = new EventEmitter();
|
|
4814
|
+
onShow = new EventEmitter();
|
|
4815
|
+
onHide = new EventEmitter();
|
|
4816
|
+
onSave = new EventEmitter();
|
|
4817
|
+
onClose = new EventEmitter();
|
|
4818
|
+
showSuccessMessage = false;
|
|
4819
|
+
showErrorMessage = false;
|
|
4820
|
+
destroy$ = new Subject();
|
|
4821
|
+
unsavedChangesConfirmationOptions = {
|
|
4822
|
+
message: SHARED.UNSAVED_CHANGES_MESSAGE,
|
|
4823
|
+
acceptLabel: SHARED.YES,
|
|
4824
|
+
rejectLabel: SHARED.NO,
|
|
4825
|
+
acceptIcon: SHARED.ACCEPT_ICON,
|
|
4826
|
+
rejectIcon: SHARED.REJECT_ICON,
|
|
4827
|
+
acceptButtonClass: SHARED.ACCEPT_BUTTON_STYLE_CLASS,
|
|
4828
|
+
rejectButtonClass: SHARED.REJECT_BUTTON_STYLE_CLASS
|
|
4829
|
+
};
|
|
4830
|
+
constructor(confirmationService) {
|
|
4831
|
+
this.confirmationService = confirmationService;
|
|
4872
4832
|
}
|
|
4873
|
-
|
|
4874
|
-
|
|
4875
|
-
|
|
4876
|
-
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
this.statusData = statusData;
|
|
4881
|
-
this.updateCalculatedStatusData();
|
|
4882
|
-
}
|
|
4883
|
-
}));
|
|
4884
|
-
if (this.contextId && this.contextId !== SHARED.EMPTY) {
|
|
4885
|
-
this.refetchStatusData();
|
|
4833
|
+
/**
|
|
4834
|
+
* Handles the onHide event from PrimeNG sidebar
|
|
4835
|
+
* Only emits when actually closing, not when showing confirmation
|
|
4836
|
+
*/
|
|
4837
|
+
onSidebarHide() {
|
|
4838
|
+
if (!this.isShowingConfirmation) {
|
|
4839
|
+
this.onHide.emit();
|
|
4886
4840
|
}
|
|
4887
4841
|
}
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
this.
|
|
4842
|
+
/**
|
|
4843
|
+
* Handles the visibleChange event from PrimeNG sidebar
|
|
4844
|
+
* Intercepts automatic closing to show confirmation if needed
|
|
4845
|
+
*/
|
|
4846
|
+
onVisibleChange(value) {
|
|
4847
|
+
if (!value && this.hasUnsavedChanges && !this.isShowingConfirmation) {
|
|
4848
|
+
this._visible = true;
|
|
4849
|
+
this.showUnsavedChangesConfirmation();
|
|
4850
|
+
return;
|
|
4895
4851
|
}
|
|
4852
|
+
this.visibleChange.emit(value);
|
|
4896
4853
|
}
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
this.
|
|
4903
|
-
|
|
4904
|
-
|
|
4905
|
-
this.subscription.unsubscribe();
|
|
4854
|
+
/**
|
|
4855
|
+
* Opens the sidebar
|
|
4856
|
+
*/
|
|
4857
|
+
open() {
|
|
4858
|
+
this._visible = true;
|
|
4859
|
+
this.clearMessages();
|
|
4860
|
+
this.visibleChange.emit(this._visible);
|
|
4861
|
+
this.onShow.emit();
|
|
4906
4862
|
}
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
|
|
4911
|
-
|
|
4912
|
-
|
|
4913
|
-
|
|
4914
|
-
|
|
4915
|
-
}], statusData: [{
|
|
4916
|
-
type: Input
|
|
4917
|
-
}] } });
|
|
4918
|
-
|
|
4919
|
-
class DocumentSearchComponent {
|
|
4920
|
-
documentHelperService;
|
|
4921
|
-
documentQuery;
|
|
4922
|
-
SHARED = SHARED;
|
|
4923
|
-
contextId = SHARED.EMPTY;
|
|
4924
|
-
onActionClick = new EventEmitter();
|
|
4925
|
-
onRequestClick = new EventEmitter();
|
|
4926
|
-
searchTerm = SHARED.EMPTY;
|
|
4927
|
-
destroy$ = new Subject();
|
|
4928
|
-
searchSubject = new Subject();
|
|
4929
|
-
hasActiveFilters = false;
|
|
4930
|
-
constructor(documentHelperService, documentQuery) {
|
|
4931
|
-
this.documentHelperService = documentHelperService;
|
|
4932
|
-
this.documentQuery = documentQuery;
|
|
4863
|
+
/**
|
|
4864
|
+
* Closes the sidebar
|
|
4865
|
+
*/
|
|
4866
|
+
close() {
|
|
4867
|
+
this._visible = false;
|
|
4868
|
+
this.clearMessages();
|
|
4869
|
+
this.visibleChange.emit(this._visible);
|
|
4870
|
+
this.onHide.emit();
|
|
4933
4871
|
}
|
|
4934
|
-
|
|
4935
|
-
|
|
4936
|
-
|
|
4872
|
+
/**
|
|
4873
|
+
* Handles escape key press
|
|
4874
|
+
* Shows confirmation if there are unsaved changes
|
|
4875
|
+
*/
|
|
4876
|
+
handleEscapeKey(event) {
|
|
4877
|
+
if (this.visible) {
|
|
4878
|
+
event.preventDefault();
|
|
4879
|
+
this.handleClose();
|
|
4880
|
+
}
|
|
4937
4881
|
}
|
|
4938
|
-
|
|
4939
|
-
|
|
4940
|
-
|
|
4882
|
+
/**
|
|
4883
|
+
* Handles backdrop click events
|
|
4884
|
+
* Prevents default PrimeNG behavior and shows confirmation if needed
|
|
4885
|
+
*/
|
|
4886
|
+
handleBackdropClick(event) {
|
|
4887
|
+
event.preventDefault();
|
|
4888
|
+
event.stopPropagation();
|
|
4889
|
+
this.handleClose();
|
|
4941
4890
|
}
|
|
4942
4891
|
/**
|
|
4943
|
-
*
|
|
4892
|
+
* Handles all closing scenarios (backdrop click, escape key, close button, etc.)
|
|
4893
|
+
* This is the single entry point for all closing logic
|
|
4944
4894
|
*/
|
|
4945
|
-
|
|
4946
|
-
|
|
4947
|
-
|
|
4948
|
-
|
|
4949
|
-
|
|
4950
|
-
|
|
4895
|
+
handleClose() {
|
|
4896
|
+
if (this.hasUnsavedChanges && !this.isShowingConfirmation) {
|
|
4897
|
+
this.showUnsavedChangesConfirmation();
|
|
4898
|
+
}
|
|
4899
|
+
else {
|
|
4900
|
+
this.close();
|
|
4901
|
+
}
|
|
4951
4902
|
}
|
|
4952
4903
|
/**
|
|
4953
|
-
*
|
|
4904
|
+
* Shows confirmation dialog for unsaved changes
|
|
4954
4905
|
*/
|
|
4955
|
-
|
|
4956
|
-
|
|
4957
|
-
|
|
4958
|
-
|
|
4959
|
-
|
|
4960
|
-
|
|
4906
|
+
showUnsavedChangesConfirmation() {
|
|
4907
|
+
if (this.isShowingConfirmation) {
|
|
4908
|
+
return;
|
|
4909
|
+
}
|
|
4910
|
+
this.isShowingConfirmation = true;
|
|
4911
|
+
ConfirmationDialogComponent.confirm(this.confirmationService, this.unsavedChangesConfirmationOptions, () => {
|
|
4912
|
+
this.isShowingConfirmation = false;
|
|
4913
|
+
this.close();
|
|
4914
|
+
this.onClose.emit();
|
|
4915
|
+
}, () => {
|
|
4916
|
+
this.isShowingConfirmation = false;
|
|
4961
4917
|
});
|
|
4962
4918
|
}
|
|
4963
4919
|
/**
|
|
4964
|
-
*
|
|
4965
|
-
* @param searchTerm - The search term entered by the user
|
|
4920
|
+
* Shows success message and closes sidebar after delay
|
|
4966
4921
|
*/
|
|
4967
|
-
|
|
4968
|
-
this.
|
|
4922
|
+
showSuccess() {
|
|
4923
|
+
this.showSuccessMessage = true;
|
|
4924
|
+
this.showErrorMessage = false;
|
|
4925
|
+
setTimeout(() => {
|
|
4926
|
+
this.close();
|
|
4927
|
+
}, 2000);
|
|
4969
4928
|
}
|
|
4970
4929
|
/**
|
|
4971
|
-
*
|
|
4972
|
-
* @param searchTerm - The search term entered by the user
|
|
4930
|
+
* Shows error message
|
|
4973
4931
|
*/
|
|
4974
|
-
|
|
4975
|
-
|
|
4976
|
-
this.
|
|
4932
|
+
showError(message) {
|
|
4933
|
+
this.showErrorMessage = true;
|
|
4934
|
+
this.showSuccessMessage = false;
|
|
4935
|
+
this.errorMessage = message || SHARED.EMPTY;
|
|
4977
4936
|
}
|
|
4978
4937
|
/**
|
|
4979
|
-
* Clears
|
|
4938
|
+
* Clears all messages
|
|
4980
4939
|
*/
|
|
4981
|
-
|
|
4982
|
-
this.
|
|
4983
|
-
this.
|
|
4940
|
+
clearMessages() {
|
|
4941
|
+
this.showSuccessMessage = false;
|
|
4942
|
+
this.showErrorMessage = false;
|
|
4984
4943
|
}
|
|
4985
4944
|
/**
|
|
4986
|
-
*
|
|
4945
|
+
* Checks if there are unsaved changes
|
|
4946
|
+
* @returns True if there are unsaved changes, false otherwise
|
|
4987
4947
|
*/
|
|
4988
|
-
|
|
4989
|
-
this.
|
|
4990
|
-
this.documentHelperService.clearSelectionState();
|
|
4948
|
+
checkForUnsavedChanges() {
|
|
4949
|
+
return this.hasUnsavedChanges;
|
|
4991
4950
|
}
|
|
4992
4951
|
/**
|
|
4993
|
-
*
|
|
4952
|
+
* Lifecycle hook that is called when component is destroyed.
|
|
4953
|
+
* Cleans up subscriptions.
|
|
4994
4954
|
*/
|
|
4995
|
-
|
|
4996
|
-
|
|
4955
|
+
ngOnDestroy() {
|
|
4956
|
+
this.destroy$.next();
|
|
4957
|
+
this.destroy$.complete();
|
|
4997
4958
|
}
|
|
4998
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type:
|
|
4999
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type:
|
|
4959
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarComponent, deps: [{ token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4960
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: SidebarComponent, isStandalone: false, selector: "lib-sidebar", inputs: { visible: "visible", position: "position", width: "width", title: "title", showCloseButton: "showCloseButton", modal: "modal", dismissible: "dismissible", styleClass: "styleClass", appendTo: "appendTo", blockScroll: "blockScroll", closeIcon: "closeIcon", showSaveButton: "showSaveButton", saveButtonText: "saveButtonText", saveButtonDisabled: "saveButtonDisabled", successMessage: "successMessage", errorMessage: "errorMessage", hasUnsavedChanges: "hasUnsavedChanges" }, outputs: { visibleChange: "visibleChange", onShow: "onShow", onHide: "onHide", onSave: "onSave", onClose: "onClose" }, host: { listeners: { "document:keydown.escape": "handleEscapeKey($event)" } }, ngImport: i0, template: "<!-- PrimeNG Sidebar with proper backdrop handling -->\r\n<div *ngIf=\"visible\" class=\"backdrop-shadow\" (click)=\"handleClose()\"></div>\r\n\r\n<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [dismissible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [appendTo]=\"'body'\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onSidebarHide()\"\r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n \r\n <p-messages \r\n *ngIf=\"showSuccessMessage\"\r\n severity=\"success\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ successMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n \r\n <p-messages \r\n *ngIf=\"showErrorMessage\"\r\n severity=\"error\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ errorMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n\r\n <div class=\"header-actions mr-3\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n\r\n <button \r\n *ngIf=\"showCloseButton\"\r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-times\"\r\n class=\"p-button-text p-button-rounded\"\r\n (click)=\"handleClose()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n", styles: [":host{display:block}.backdrop-shadow{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:1000}.sidebar-header{display:flex;justify-content:flex-end;align-items:center;padding:0;width:100%;gap:1rem}.sidebar-header ::ng-deep .p-messages .p-message-success{margin-left:2rem;font-size:15px}.sidebar-header ::ng-deep .p-messages .p-message-wrapper{padding:1rem}.sidebar-title{margin:0;font-size:1.25rem;font-weight:600;color:#212529;flex:0 1 auto;white-space:nowrap;min-width:0}.header-content{display:flex;align-items:center;gap:1rem;justify-content:space-between;width:100%}.header-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto;margin-right:0}.close-button{background:none;border:none;color:#6c757d;cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease;display:flex;align-items:center;justify-content:center;min-width:2rem;min-height:2rem;margin-right:.5rem}.close-button:hover{background-color:#e9ecef;color:#495057}.close-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.close-button i{font-size:1rem}.sidebar-content{height:100%;overflow-y:auto;padding:0}.header-actions .p-button-text.p-button-rounded{width:2rem;height:2rem;border-radius:50%}.header-actions .p-button-text.p-button-rounded:hover{background-color:#0000001a}::ng-deep .p-sidebar .p-sidebar-header{border-bottom:1px solid #e9ecef;margin-bottom:1rem;background-color:#f8f9fa}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1.5rem 1.5rem;height:calc(100% - 80px);overflow-y:auto}::ng-deep .p-sidebar.p-sidebar-right .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}::ng-deep .p-sidebar.p-sidebar-left .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}@media (max-width: 768px){::ng-deep .p-sidebar{width:100%!important;max-width:100%!important}::ng-deep .p-sidebar .p-sidebar-header{padding:1rem 1rem 0}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1rem 1rem}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: i5$1.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }] });
|
|
5000
4961
|
}
|
|
5001
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type:
|
|
4962
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarComponent, decorators: [{
|
|
5002
4963
|
type: Component,
|
|
5003
|
-
args: [{ selector: '
|
|
5004
|
-
}], ctorParameters: () => [{ type:
|
|
4964
|
+
args: [{ selector: 'lib-sidebar', standalone: false, template: "<!-- PrimeNG Sidebar with proper backdrop handling -->\r\n<div *ngIf=\"visible\" class=\"backdrop-shadow\" (click)=\"handleClose()\"></div>\r\n\r\n<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [dismissible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [appendTo]=\"'body'\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onSidebarHide()\"\r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n \r\n <p-messages \r\n *ngIf=\"showSuccessMessage\"\r\n severity=\"success\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ successMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n \r\n <p-messages \r\n *ngIf=\"showErrorMessage\"\r\n severity=\"error\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ errorMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n\r\n <div class=\"header-actions mr-3\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n\r\n <button \r\n *ngIf=\"showCloseButton\"\r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-times\"\r\n class=\"p-button-text p-button-rounded\"\r\n (click)=\"handleClose()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n", styles: [":host{display:block}.backdrop-shadow{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:1000}.sidebar-header{display:flex;justify-content:flex-end;align-items:center;padding:0;width:100%;gap:1rem}.sidebar-header ::ng-deep .p-messages .p-message-success{margin-left:2rem;font-size:15px}.sidebar-header ::ng-deep .p-messages .p-message-wrapper{padding:1rem}.sidebar-title{margin:0;font-size:1.25rem;font-weight:600;color:#212529;flex:0 1 auto;white-space:nowrap;min-width:0}.header-content{display:flex;align-items:center;gap:1rem;justify-content:space-between;width:100%}.header-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto;margin-right:0}.close-button{background:none;border:none;color:#6c757d;cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease;display:flex;align-items:center;justify-content:center;min-width:2rem;min-height:2rem;margin-right:.5rem}.close-button:hover{background-color:#e9ecef;color:#495057}.close-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.close-button i{font-size:1rem}.sidebar-content{height:100%;overflow-y:auto;padding:0}.header-actions .p-button-text.p-button-rounded{width:2rem;height:2rem;border-radius:50%}.header-actions .p-button-text.p-button-rounded:hover{background-color:#0000001a}::ng-deep .p-sidebar .p-sidebar-header{border-bottom:1px solid #e9ecef;margin-bottom:1rem;background-color:#f8f9fa}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1.5rem 1.5rem;height:calc(100% - 80px);overflow-y:auto}::ng-deep .p-sidebar.p-sidebar-right .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}::ng-deep .p-sidebar.p-sidebar-left .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}@media (max-width: 768px){::ng-deep .p-sidebar{width:100%!important;max-width:100%!important}::ng-deep .p-sidebar .p-sidebar-header{padding:1rem 1rem 0}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1rem 1rem}}\n"] }]
|
|
4965
|
+
}], ctorParameters: () => [{ type: i3.ConfirmationService }], propDecorators: { visible: [{
|
|
5005
4966
|
type: Input
|
|
5006
|
-
}],
|
|
4967
|
+
}], position: [{
|
|
4968
|
+
type: Input
|
|
4969
|
+
}], width: [{
|
|
4970
|
+
type: Input
|
|
4971
|
+
}], title: [{
|
|
4972
|
+
type: Input
|
|
4973
|
+
}], showCloseButton: [{
|
|
4974
|
+
type: Input
|
|
4975
|
+
}], modal: [{
|
|
4976
|
+
type: Input
|
|
4977
|
+
}], dismissible: [{
|
|
4978
|
+
type: Input
|
|
4979
|
+
}], styleClass: [{
|
|
4980
|
+
type: Input
|
|
4981
|
+
}], appendTo: [{
|
|
4982
|
+
type: Input
|
|
4983
|
+
}], blockScroll: [{
|
|
4984
|
+
type: Input
|
|
4985
|
+
}], closeIcon: [{
|
|
4986
|
+
type: Input
|
|
4987
|
+
}], showSaveButton: [{
|
|
4988
|
+
type: Input
|
|
4989
|
+
}], saveButtonText: [{
|
|
4990
|
+
type: Input
|
|
4991
|
+
}], saveButtonDisabled: [{
|
|
4992
|
+
type: Input
|
|
4993
|
+
}], successMessage: [{
|
|
4994
|
+
type: Input
|
|
4995
|
+
}], errorMessage: [{
|
|
4996
|
+
type: Input
|
|
4997
|
+
}], hasUnsavedChanges: [{
|
|
4998
|
+
type: Input
|
|
4999
|
+
}], visibleChange: [{
|
|
5007
5000
|
type: Output
|
|
5008
|
-
}],
|
|
5001
|
+
}], onShow: [{
|
|
5002
|
+
type: Output
|
|
5003
|
+
}], onHide: [{
|
|
5009
5004
|
type: Output
|
|
5005
|
+
}], onSave: [{
|
|
5006
|
+
type: Output
|
|
5007
|
+
}], onClose: [{
|
|
5008
|
+
type: Output
|
|
5009
|
+
}], handleEscapeKey: [{
|
|
5010
|
+
type: HostListener,
|
|
5011
|
+
args: ['document:keydown.escape', ['$event']]
|
|
5010
5012
|
}] } });
|
|
5011
5013
|
|
|
5012
5014
|
/**
|
|
@@ -5069,9 +5071,10 @@ class FolderContainerComponent {
|
|
|
5069
5071
|
*/
|
|
5070
5072
|
documentUploadComponent;
|
|
5071
5073
|
/**
|
|
5072
|
-
*
|
|
5074
|
+
* References to the sidebars
|
|
5073
5075
|
*/
|
|
5074
|
-
|
|
5076
|
+
uploadSidebarComponent;
|
|
5077
|
+
requestSidebarComponent;
|
|
5075
5078
|
requestDocumentComponent;
|
|
5076
5079
|
/**
|
|
5077
5080
|
* Tracks whether the save button should be disabled
|
|
@@ -5214,15 +5217,15 @@ class FolderContainerComponent {
|
|
|
5214
5217
|
/** Request success handler */
|
|
5215
5218
|
onRequestDocumentSuccess() {
|
|
5216
5219
|
this.documentHelperService.refreshAllDataWithCurrentFilters(this.contextId);
|
|
5217
|
-
if (this.
|
|
5218
|
-
this.
|
|
5220
|
+
if (this.requestSidebarComponent) {
|
|
5221
|
+
this.requestSidebarComponent.showSuccess();
|
|
5219
5222
|
}
|
|
5220
5223
|
}
|
|
5221
5224
|
/** Request error handler */
|
|
5222
5225
|
onRequestDocumentError(error) {
|
|
5223
|
-
if (this.
|
|
5226
|
+
if (this.requestSidebarComponent) {
|
|
5224
5227
|
const errorMessage = error?.message || SHARED.UPLOAD_FAILED;
|
|
5225
|
-
this.
|
|
5228
|
+
this.requestSidebarComponent.showError(errorMessage);
|
|
5226
5229
|
}
|
|
5227
5230
|
}
|
|
5228
5231
|
/** Handle unsaved changes state from request form */
|
|
@@ -5244,21 +5247,21 @@ class FolderContainerComponent {
|
|
|
5244
5247
|
onDocumentUploadSuccess() {
|
|
5245
5248
|
this.documentHelperService.refreshAllDataWithCurrentFilters(this.contextId);
|
|
5246
5249
|
this.hasUnsavedChanges = false; // Reset after successful upload
|
|
5247
|
-
if (this.
|
|
5248
|
-
this.
|
|
5250
|
+
if (this.uploadSidebarComponent) {
|
|
5251
|
+
this.uploadSidebarComponent.showSuccess();
|
|
5249
5252
|
}
|
|
5250
5253
|
}
|
|
5251
5254
|
/**
|
|
5252
5255
|
* Handles document upload error
|
|
5253
5256
|
*/
|
|
5254
5257
|
onDocumentUploadError(error) {
|
|
5255
|
-
if (this.
|
|
5258
|
+
if (this.uploadSidebarComponent) {
|
|
5256
5259
|
const errorMessage = error?.message || SHARED.UPLOAD_FAILED;
|
|
5257
|
-
this.
|
|
5260
|
+
this.uploadSidebarComponent.showError(errorMessage);
|
|
5258
5261
|
}
|
|
5259
5262
|
}
|
|
5260
5263
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FolderContainerComponent, deps: [{ token: DocumentQuery }, { token: DocumentHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5261
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FolderContainerComponent, isStandalone: false, selector: "lib-folder-container", inputs: { documentList: "documentList", folderList: "folderList", contextId: "contextId", userList: "userList", statusData: "statusData", categories: "categories" }, viewQueries: [{ propertyName: "documentUploadComponent", first: true, predicate: DocumentUploadComponent, descendants: true }, { propertyName: "
|
|
5264
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FolderContainerComponent, isStandalone: false, selector: "lib-folder-container", inputs: { documentList: "documentList", folderList: "folderList", contextId: "contextId", userList: "userList", statusData: "statusData", categories: "categories" }, viewQueries: [{ propertyName: "documentUploadComponent", first: true, predicate: DocumentUploadComponent, descendants: true }, { propertyName: "uploadSidebarComponent", first: true, predicate: ["uploadSidebar"], descendants: true }, { propertyName: "requestSidebarComponent", first: true, predicate: ["requestSidebar"], descendants: true }, { propertyName: "requestDocumentComponent", first: true, predicate: RequestDocumentComponent, descendants: true }], ngImport: i0, template: "\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\" (onRequestClick)=\"openRequestDocumentSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list>\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n #uploadSidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onClose)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>\r\n\r\n<lib-sidebar\r\n #requestSidebar\r\n [(visible)]=\"isRequestDocumentSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Request Document\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [successMessage]=\"'Document Requested'\"\r\n [saveButtonDisabled]=\"isRequestSaveButtonDisabled\"\r\n [hasUnsavedChanges]=\"requestHasUnsavedChanges\"\r\n (onHide)=\"onRequestDocumentSidebarHide()\"\r\n (onSave)=\"onRequestDocumentSave()\"\r\n (onClose)=\"onRequestDocumentSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-request-document\r\n [contextId]=\"contextId\"\r\n (onFormValidationChange)=\"onRequestFormValidationChange()\"\r\n (onRequestSuccess)=\"onRequestDocumentSuccess()\"\r\n (onRequestError)=\"onRequestDocumentError($event)\"\r\n (hasUnsavedChangesChange)=\"onRequestUnsavedChange($event)\"\r\n ></lib-request-document>\r\n</lib-sidebar>", styles: [".user-list-wrapper{overflow:hidden;margin-bottom:1rem}.user-list-wrapper ::ng-deep *{transition:opacity .2s ease-in-out}.user-list-wrapper.ng-animating{pointer-events:none}::ng-deep lib-user-list{display:block;width:100%}\n"], dependencies: [{ kind: "component", type: DocumentUploadComponent, selector: "lib-document-upload", inputs: ["contextId", "isDocumentSaveBtnClicked", "isDocumentSidebarClosed", "isFormHide", "isMultiAttachmentHidden"], outputs: ["onFormValidationChange", "onUploadSuccess", "onFilesUploaded", "hasUnsavedChangesChange", "onFileRemoved"] }, { kind: "component", type: UserListComponent, selector: "lib-user-list", inputs: ["userList", "categories"], outputs: ["userSelected"] }, { kind: "component", type: DocumentStatusComponent, selector: "lib-document-status", inputs: ["contextId", "statusData"] }, { kind: "component", type: DocumentSearchComponent, selector: "document-search", inputs: ["contextId"], outputs: ["onActionClick", "onRequestClick"] }, { kind: "component", type: SidebarComponent, selector: "lib-sidebar", inputs: ["visible", "position", "width", "title", "showCloseButton", "modal", "dismissible", "styleClass", "appendTo", "blockScroll", "closeIcon", "showSaveButton", "saveButtonText", "saveButtonDisabled", "successMessage", "errorMessage", "hasUnsavedChanges"], outputs: ["visibleChange", "onShow", "onHide", "onSave", "onClose"] }, { kind: "component", type: RequestDocumentComponent, selector: "lib-request-document", inputs: ["contextId", "isRequestSaveBtnClicked", "isRequestSidebarClosed"], outputs: ["onFormValidationChange", "onRequestSuccess", "onRequestError", "hasUnsavedChangesChange"] }], animations: [
|
|
5262
5265
|
trigger('slideInOut', [
|
|
5263
5266
|
state('visible', style({
|
|
5264
5267
|
height: '*',
|
|
@@ -5312,7 +5315,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
5312
5315
|
animate('300ms cubic-bezier(0.0, 0.0, 0.2, 1)')
|
|
5313
5316
|
])
|
|
5314
5317
|
])
|
|
5315
|
-
], template: "\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\" (onRequestClick)=\"openRequestDocumentSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list>\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onClose)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>\r\n\r\n<lib-sidebar\r\n [(visible)]=\"isRequestDocumentSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Request Document\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isRequestSaveButtonDisabled\"\r\n [hasUnsavedChanges]=\"requestHasUnsavedChanges\"\r\n (onHide)=\"onRequestDocumentSidebarHide()\"\r\n (onSave)=\"onRequestDocumentSave()\"\r\n (onClose)=\"onRequestDocumentSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-request-document\r\n [contextId]=\"contextId\"\r\n (onFormValidationChange)=\"onRequestFormValidationChange()\"\r\n (onRequestSuccess)=\"onRequestDocumentSuccess()\"\r\n (onRequestError)=\"onRequestDocumentError($event)\"\r\n (hasUnsavedChangesChange)=\"onRequestUnsavedChange($event)\"\r\n ></lib-request-document>\r\n</lib-sidebar>", styles: [".user-list-wrapper{overflow:hidden;margin-bottom:1rem}.user-list-wrapper ::ng-deep *{transition:opacity .2s ease-in-out}.user-list-wrapper.ng-animating{pointer-events:none}::ng-deep lib-user-list{display:block;width:100%}\n"] }]
|
|
5318
|
+
], template: "\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\" (onRequestClick)=\"openRequestDocumentSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list>\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n #uploadSidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onClose)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>\r\n\r\n<lib-sidebar\r\n #requestSidebar\r\n [(visible)]=\"isRequestDocumentSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Request Document\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [successMessage]=\"'Document Requested'\"\r\n [saveButtonDisabled]=\"isRequestSaveButtonDisabled\"\r\n [hasUnsavedChanges]=\"requestHasUnsavedChanges\"\r\n (onHide)=\"onRequestDocumentSidebarHide()\"\r\n (onSave)=\"onRequestDocumentSave()\"\r\n (onClose)=\"onRequestDocumentSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-request-document\r\n [contextId]=\"contextId\"\r\n (onFormValidationChange)=\"onRequestFormValidationChange()\"\r\n (onRequestSuccess)=\"onRequestDocumentSuccess()\"\r\n (onRequestError)=\"onRequestDocumentError($event)\"\r\n (hasUnsavedChangesChange)=\"onRequestUnsavedChange($event)\"\r\n ></lib-request-document>\r\n</lib-sidebar>", styles: [".user-list-wrapper{overflow:hidden;margin-bottom:1rem}.user-list-wrapper ::ng-deep *{transition:opacity .2s ease-in-out}.user-list-wrapper.ng-animating{pointer-events:none}::ng-deep lib-user-list{display:block;width:100%}\n"] }]
|
|
5316
5319
|
}], ctorParameters: () => [{ type: DocumentQuery }, { type: DocumentHelperService }], propDecorators: { documentList: [{
|
|
5317
5320
|
type: Input
|
|
5318
5321
|
}], folderList: [{
|
|
@@ -5328,9 +5331,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
5328
5331
|
}], documentUploadComponent: [{
|
|
5329
5332
|
type: ViewChild,
|
|
5330
5333
|
args: [DocumentUploadComponent]
|
|
5331
|
-
}],
|
|
5334
|
+
}], uploadSidebarComponent: [{
|
|
5335
|
+
type: ViewChild,
|
|
5336
|
+
args: ['uploadSidebar']
|
|
5337
|
+
}], requestSidebarComponent: [{
|
|
5332
5338
|
type: ViewChild,
|
|
5333
|
-
args: [
|
|
5339
|
+
args: ['requestSidebar']
|
|
5334
5340
|
}], requestDocumentComponent: [{
|
|
5335
5341
|
type: ViewChild,
|
|
5336
5342
|
args: [RequestDocumentComponent]
|
|
@@ -9941,11 +9947,11 @@ class DocumentsMenuComponent {
|
|
|
9941
9947
|
}
|
|
9942
9948
|
}
|
|
9943
9949
|
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 });
|
|
9944
|
-
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 [class.disabled-menu-item]=\"item.isSelectable === false\"\r\n [class.pointer-events-none]=\"item.isSelectable === false\"\r\n [style.opacity]=\"item.isSelectable === false ? '0.5' : '1'\"\r\n [style.cursor]=\"item.isSelectable === false ? 'not-allowed' : 'pointer'\"\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{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 .disabled-menu-item{opacity:.5!important;cursor:not-allowed!important;pointer-events:none!important}::ng-deep .disabled-menu-item .text-xl{color:#9ea0b3!important}::ng-deep .disabled-menu-item .ml-2{color:#9ea0b3!important}::ng-deep .disabled-menu-item .p-badge{opacity:.5!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{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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9$3.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$4.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }] });
|
|
9950
|
+
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\">\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 [class.disabled-menu-item]=\"item.isSelectable === false\"\r\n [class.pointer-events-none]=\"item.isSelectable === false\"\r\n [style.opacity]=\"item.isSelectable === false ? '0.5' : '1'\"\r\n [style.cursor]=\"item.isSelectable === false ? 'not-allowed' : 'pointer'\"\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{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 .disabled-menu-item{opacity:.5!important;cursor:not-allowed!important;pointer-events:none!important}::ng-deep .disabled-menu-item .text-xl{color:#9ea0b3!important}::ng-deep .disabled-menu-item .ml-2{color:#9ea0b3!important}::ng-deep .disabled-menu-item .p-badge{opacity:.5!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{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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9$3.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$4.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }] });
|
|
9945
9951
|
}
|
|
9946
9952
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentsMenuComponent, decorators: [{
|
|
9947
9953
|
type: Component,
|
|
9948
|
-
args: [{ selector: 'lib-documents-menu', standalone: false, template: "<div class=\"document-sidebar-container
|
|
9954
|
+
args: [{ selector: 'lib-documents-menu', standalone: false, template: "<div class=\"document-sidebar-container\">\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 [class.disabled-menu-item]=\"item.isSelectable === false\"\r\n [class.pointer-events-none]=\"item.isSelectable === false\"\r\n [style.opacity]=\"item.isSelectable === false ? '0.5' : '1'\"\r\n [style.cursor]=\"item.isSelectable === false ? 'not-allowed' : 'pointer'\"\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{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 .disabled-menu-item{opacity:.5!important;cursor:not-allowed!important;pointer-events:none!important}::ng-deep .disabled-menu-item .text-xl{color:#9ea0b3!important}::ng-deep .disabled-menu-item .ml-2{color:#9ea0b3!important}::ng-deep .disabled-menu-item .p-badge{opacity:.5!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{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"] }]
|
|
9949
9955
|
}], ctorParameters: () => [{ type: DocumentStore }, { type: DocumentQuery }, { type: DocumentMenuService }, { type: DocumentHelperService }], propDecorators: { catagories: [{
|
|
9950
9956
|
type: Input
|
|
9951
9957
|
}], applicationNumber: [{
|