cat-qw-lib 1.0.8 → 1.0.10

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.
@@ -2446,11 +2446,11 @@ class TableSecondaryComponent {
2446
2446
  this.sortChanged.emit(event);
2447
2447
  }
2448
2448
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TableSecondaryComponent, deps: [{ token: i3$4.Router }, { token: BaseService }, { token: i3$4.ActivatedRoute }, { token: BaseQuery }, { token: BaseStore }], target: i0.ɵɵFactoryTarget.Component });
2449
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: TableSecondaryComponent, isStandalone: true, selector: "lib-table-secondary", inputs: { table: "table", metaData: "metaData", title: "title", builder: "builder", showStatus: "showStatus", showActions: "showActions", showSearchBar: "showSearchBar", showNewRecordButton: "showNewRecordButton", showRefreshButton: "showRefreshButton", pathName: "pathName", selectionMode: "selectionMode", selection: "selection", usePagination: "usePagination", scrollHeight: "scrollHeight", rowSelection: "rowSelection", enableSelection: "enableSelection", noRecordsMessage: "noRecordsMessage", searchTerm: "searchTerm", filterQuery: "filterQuery" }, outputs: { selectionChange: "selectionChange", rowSelectionChange: "rowSelectionChange", sortChanged: "sortChanged", onDeleteRow: "onDeleteRow", onPage: "onPage" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-container\">\r\n <p-table\r\n *ngIf=\"table && table.headers\"\r\n #dt2\r\n [lazy]=\"true\"\r\n (onSort)=\"onSort($event)\"\r\n [paginator]=\"false\"\r\n [scrollable]=\"!!scrollHeight\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [columns]=\"table.headers\"\r\n class=\"table-secondary-container\"\r\n [value]=\"table.records\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [dataKey]=\"table.dataKey\"\r\n [selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selection\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <!-- Header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr *ngIf=\"table.headers.length > 0\">\r\n <th\r\n *ngFor=\"let col of table.headers; let i = index\"\r\n class=\"table-header-wrapper\"\r\n [pSortableColumn]=\"col.name\"\r\n [ngClass]=\"[col.width ? col.width : 'w-full', (!showActions && selectionMode !== 'multiple' && (i === table.headers.length - 1)) ? 'table-action-title' : '']\"\r\n style=\"min-width: 100px\"\r\n > \r\n <h4\r\n [ngClass]=\"[\r\n col.class || '', \r\n col.headerAlign === 'center' ? 'justify-content-center' : \r\n (col.headerAlign === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n class=\"flex align-items-center table-header-title capitalize font-semibold m-0\">\r\n {{ col.name }}\r\n @if(table.isSortingAllow){\r\n <p-sortIcon [field]=\"col.name\" />\r\n }\r\n </h4>\r\n </th>\r\n \r\n \r\n <th *ngIf=\"selectionMode === 'multiple'\" class=\"table-header-wrapper text-center table-action-title\" style=\"width: 6rem;\">\r\n <h4 class=\"flex align-items-center justify-content-center gap-2 table-header-title capitalize font-semibold m-0\">\r\n Select <span *ngIf=\"selection?.length\">\r\n ({{ selection.length }})\r\n </span>\r\n </h4>\r\n </th>\r\n \r\n <th\r\n *ngIf=\"showActions\"\r\n class=\"table-action-title table-header-wrapper\"\r\n [ngClass]=\"table.headers[0]?.width ? 'w-2' : 'w-2'\"\r\n >\r\n </th>\r\n \r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Body -->\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr *ngIf=\"table.headers.length > 0\" class=\"table-row-wrapper relative table-group-wrapper\" \r\n (click)=\"handleRowClick(rowData)\" [ngClass]=\"{ 'row-selected': isRowSelected(rowData) }\" [ngClass]=\"{\r\n 'row-selected': isRowSelected(rowData),'green-highlight': selection?.includes(rowData)}\">\r\n <td\r\n class=\"table-body-wrapper\"\r\n [ngClass]=\"(j === table.headers.length - 1 && selectionMode !== 'multiple' && !showActions) ? 'header-text-wrapper' : ''\"\r\n *ngFor=\"let col of table.headers; let j = index\"\r\n >\r\n <div class=\"row-wrapprt flex align-items-center justify-content-center\">\r\n <ng-container [ngSwitch]=\"col.customClass\">\r\n \r\n <!-- Required badge -->\r\n <ng-container *ngSwitchCase=\"'required-badge'\">\r\n <span\r\n [ngClass]=\"{\r\n 'px-3 py-1 rounded-2xl text-sm': true,\r\n 'bg-red-100 text-red-800': rowData[col.name] === 'Required',\r\n 'bg-gray-100 text-gray-500': rowData[col.name] !== 'Required'\r\n }\"\r\n >\r\n {{ rowData[col.name] }}\r\n </span>\r\n </ng-container>\r\n \r\n <!-- Default cell rendering -->\r\n <ng-container *ngSwitchDefault>\r\n <div\r\n class=\"table-text-wrapper p-0 flex align-items-center\"\r\n [ngClass]=\"[\r\n getRowClass(col, rowData),\r\n col.align === 'center' ? 'justify-content-center' : \r\n (col.align === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n [ngStyle]=\"{ 'font-weight': col.name === table.showDecriptionFor ? 'bold' : 'normal' }\"\r\n [style.white-space]=\"col.isHtml ? 'normal' : 'nowrap'\"\r\n style=\"\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n width:100%\r\n \"\r\n >\r\n <i\r\n *ngIf=\"rowData[col.name]?.icon\"\r\n class=\"pi pr-2\"\r\n [ngClass]=\"[rowData[col.name].icon, rowData[col.name].iconClass]\"\r\n ></i>\r\n <p class=\"mb-0\" *ngIf=\"!col.isHtml\"> {{ rowData[col.name]?.value ?? rowData[col.name] }} </p>\r\n <div *ngIf=\"col.isHtml\" [innerHTML]=\"rowData[col.name]?.value ?? rowData[col.name]\"></div>\r\n </div>\r\n <div\r\n *ngIf=\"col.name === table.showDecriptionFor && rowData[table.descriptionColumnName]\"\r\n class=\"text-black-500 text-sm mt-1\"\r\n style=\"font-weight: 600;\"\r\n >\r\n {{ rowData[table.descriptionColumnName] }}\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n </div>\r\n </td>\r\n \r\n <!-- Checkbox at end -->\r\n <td *ngIf=\"selectionMode === 'multiple'\" class=\"text-center table-body-wrapper action-data-wrapper\" style=\"width: 4rem\" (click)=\"$event.stopPropagation()\">\r\n <p-tableCheckbox [value]=\"rowData\" [disabled]=\"!enableSelection\"></p-tableCheckbox>\r\n </td>\r\n \r\n <!-- Actions -->\r\n <td *ngIf=\"showActions\" class=\"action-data-wrapper text-left table-body-wrapper\">\r\n <div *ngIf=\"(rowData.isRowDelete !== null || rowData.canDelete !== undefined) ? (showActions && rowData.isRowDelete) : showActions\" class=\"flex align-items-center justify-content-center\">\r\n <p-button\r\n icon=\"pi pi-trash\"\r\n (click)=\"deleteRow($event, rowData)\" \r\n class=\"delete-icon-wrapper mr-3\"\r\n [disabled]=\"!enableSelection\"\r\n ></p-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Empty Message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"table.headers.length + (showActions ? 1 : 0) + (selectionMode === 'multiple' ? 1 : 0)\"\r\n class=\"text-center text-color font-semibold p-4\"\r\n >\r\n {{ noRecordsMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n\r\n<!-- Paginator -->\r\n<div class=\"paginator-container flex align-items-center justify-content-center table-pagination-wrapper\" *ngIf=\"usePagination\">\r\n <div class=\"pagination-text text-color\">\r\n Showing {{ metaData.totalItems > 0 ? ((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10) + 1 : 0 }} to {{ recordNumber }} of {{ metaData?.totalItems ?? 0 }} entries\r\n </div>\r\n\r\n <p-paginator\r\n #paginator\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n (onPageChange)=\"handleLoadRecords($event)\"\r\n ></p-paginator>\r\n</div> ", styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.table-container{flex:1;min-height:0}.table-header-container{padding:20px 20px 20px 8px}.table-header-title{font-size:12px;font-weight:600;color:var(--text-color-tertiary)!important}.table-header-wrapper{padding:12px 14px}.table-body-wrapper{padding:14px}.table-text-wrapper{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;max-width:400%;padding:.5rem;box-sizing:border-box}.record_username{color:#0f8bfd}.table-title-wrapper{font-size:20px;font-weight:700}.table-action-title,.header-text-wrapper,.action-data-wrapper{border-right:1px solid rgba(68,72,109,.1)!important}.enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}.verified-status{background-color:var(--green-500)}.disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}.search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}.Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}.DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}.Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}.Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Applicant,.ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}.OnBoarding,.PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}.Pending{background-color:var(--orange-300);padding:.3rem!important;border-radius:5px;color:#fff}.table-row-wrapper{position:relative;transition:all .3s ease-in-out}.icon-position-wrapper{position:absolute;top:50%;left:16%;transform:translate(-50%,-50%);opacity:0;visibility:hidden;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}.table-row-wrapper:hover .icon-position-wrapper{opacity:1;visibility:visible}.table-group-wrapper:hover .icon-position-wrapper{visibility:visible;opacity:1}.table-pagination-wrapper{border-radius:0 0 10px 10px}.paginator-container{flex-shrink:0;background:#fff;padding:1rem}::ng-deep .edit-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .edit-icon-wrapper .p-button .pi-pencil{color:var(--primary-color)}::ng-deep .delete-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .delete-icon-wrapper .p-button .pi-trash{color:var(--red-500)}::ng-deep .record_username{color:var(--primary-color)}::ng-deep .table-title-wrapper{font-size:20px;font-weight:700}::ng-deep .table-action-title,::ng-deep .header-text-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .table-action-title{border-radius:0 10px 0 0}::ng-deep .action-data-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .verified-status{background-color:var(--green-500)}::ng-deep .disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}::ng-deep .Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}::ng-deep .Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}::ng-deep .Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Applicant{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .OnBoarding{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .setting-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:24px;height:50px}::ng-deep .setting-icon-wrapper .p-button .pi-cog{color:var(--primary-color)}::ng-deep .view-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.3);background:var(--surface-0);padding:20px;height:40px;box-shadow:none}::ng-deep .view-icon-wrapper .p-button .pi-eye{color:#44486d}::ng-deep .table-secondary-container .p-datatable-table{background-color:#fff;table-layout:fixed}::ng-deep .table-secondary-container .p-datatable-table .p-datatable-thead{background-color:var(--color-surface)}::ng-deep .table-secondary-container .p-datatable-header{padding:20px 20px 0;border-radius:10px 10px 0 0!important;border:none!important}::ng-deep .table-secondary-container .p-datatable-thead th{border:1px solid rgba(68,72,109,.1);border-left:none;border-right:none;background:#f9f9fa}::ng-deep .table-secondary-container .p-datatable-thead th:first-child{border-radius:10px 0 0;border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td{border-bottom:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td:first-child{border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr:last-child td:first-child{border-radius:0 0 0 10px}::ng-deep .table-secondary-container tr:last-child td:last-child{border-radius:0 0 10px}:host ::ng-deep .p-checkbox-box.p-highlight{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}.green-highlight{background-color:var(--color-green-10)!important}:host ::ng-deep .p-checkbox-box.p-highlight .p-checkbox-icon{color:var(--color-surface-light)}:host ::ng-deep .p-checkbox-box:hover{background-color:var(--color-surface-light)!important;border:1px solid var(--text-black)!important}:host ::ng-deep .p-checkbox-box.p-highlight:hover{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}@media screen and (min-width: 1200px) and (max-width: 1500px){.table-header-wrapper{padding:12px 8px}.table-body-wrapper{padding:8px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i6$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6$1.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i6$1.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i6$1.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToggleButtonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: InputSwitchModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i12.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }] });
2449
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: TableSecondaryComponent, isStandalone: true, selector: "lib-table-secondary", inputs: { table: "table", metaData: "metaData", title: "title", builder: "builder", showStatus: "showStatus", showActions: "showActions", showSearchBar: "showSearchBar", showNewRecordButton: "showNewRecordButton", showRefreshButton: "showRefreshButton", pathName: "pathName", selectionMode: "selectionMode", selection: "selection", usePagination: "usePagination", scrollHeight: "scrollHeight", rowSelection: "rowSelection", enableSelection: "enableSelection", noRecordsMessage: "noRecordsMessage", searchTerm: "searchTerm", filterQuery: "filterQuery" }, outputs: { selectionChange: "selectionChange", rowSelectionChange: "rowSelectionChange", sortChanged: "sortChanged", onDeleteRow: "onDeleteRow", onPage: "onPage" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: " <p-table\r\n *ngIf=\"table && table.headers\"\r\n #dt2\r\n [lazy]=\"true\"\r\n (onSort)=\"onSort($event)\"\r\n [paginator]=\"false\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [columns]=\"table.headers\"\r\n class=\"table-secondary-container\"\r\n [value]=\"table.records\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [dataKey]=\"table.dataKey\"\r\n [selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selection\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <!-- Header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr *ngIf=\"table.headers.length > 0\">\r\n <th\r\n *ngFor=\"let col of table.headers; let i = index\"\r\n class=\"table-header-wrapper\"\r\n [pSortableColumn]=\"col.name\"\r\n [ngClass]=\"[col.width ? col.width : 'w-full', (!showActions && selectionMode !== 'multiple' && (i === table.headers.length - 1)) ? 'table-action-title' : '']\"\r\n style=\"min-width: 100px\"\r\n > \r\n <h4\r\n [ngClass]=\"[\r\n col.class || '', \r\n col.headerAlign === 'center' ? 'justify-content-center' : \r\n (col.headerAlign === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n class=\"flex align-items-center table-header-title capitalize font-semibold m-0\">\r\n {{ col.name }}\r\n @if(table.isSortingAllow){\r\n <p-sortIcon [field]=\"col.name\" />\r\n }\r\n </h4>\r\n </th>\r\n \r\n \r\n <th *ngIf=\"selectionMode === 'multiple'\" class=\"table-header-wrapper text-center table-action-title\" style=\"width: 6rem;\">\r\n <h4 class=\"flex align-items-center justify-content-center gap-2 table-header-title capitalize font-semibold m-0\">\r\n Select <span *ngIf=\"selection?.length\">\r\n ({{ selection.length }})\r\n </span>\r\n </h4>\r\n </th>\r\n \r\n <th\r\n *ngIf=\"showActions\"\r\n class=\"table-action-title table-header-wrapper\"\r\n [ngClass]=\"table.headers[0]?.width ? 'w-2' : 'w-2'\"\r\n >\r\n </th>\r\n \r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Body -->\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr *ngIf=\"table.headers.length > 0\" class=\"table-row-wrapper relative table-group-wrapper\" \r\n (click)=\"handleRowClick(rowData)\" [ngClass]=\"{ 'row-selected': isRowSelected(rowData) }\" [ngClass]=\"{\r\n 'row-selected': isRowSelected(rowData),'green-highlight': selection?.includes(rowData)}\">\r\n <td\r\n class=\"table-body-wrapper\"\r\n [ngClass]=\"(j === table.headers.length - 1 && selectionMode !== 'multiple' && !showActions) ? 'header-text-wrapper' : ''\"\r\n *ngFor=\"let col of table.headers; let j = index\"\r\n >\r\n <div class=\"row-wrapprt flex align-items-center justify-content-center\">\r\n <ng-container [ngSwitch]=\"col.customClass\">\r\n \r\n <!-- Required badge -->\r\n <ng-container *ngSwitchCase=\"'required-badge'\">\r\n <span\r\n [ngClass]=\"{\r\n 'px-3 py-1 rounded-2xl text-sm': true,\r\n 'bg-red-100 text-red-800': rowData[col.name] === 'Required',\r\n 'bg-gray-100 text-gray-500': rowData[col.name] !== 'Required'\r\n }\"\r\n >\r\n {{ rowData[col.name] }}\r\n </span>\r\n </ng-container>\r\n \r\n <!-- Default cell rendering -->\r\n <ng-container *ngSwitchDefault>\r\n <div\r\n class=\"table-text-wrapper p-0 flex align-items-center\"\r\n [ngClass]=\"[\r\n getRowClass(col, rowData),\r\n col.align === 'center' ? 'justify-content-center' : \r\n (col.align === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n [ngStyle]=\"{ 'font-weight': col.name === table.showDecriptionFor ? 'bold' : 'normal' }\"\r\n [style.white-space]=\"col.isHtml ? 'normal' : 'nowrap'\"\r\n style=\"\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n width:100%\r\n \"\r\n >\r\n <i\r\n *ngIf=\"rowData[col.name]?.icon\"\r\n class=\"pi pr-2\"\r\n [ngClass]=\"[rowData[col.name].icon, rowData[col.name].iconClass]\"\r\n ></i>\r\n <p class=\"mb-0\" *ngIf=\"!col.isHtml\"> {{ rowData[col.name]?.value ?? rowData[col.name] }} </p>\r\n <div *ngIf=\"col.isHtml\" [innerHTML]=\"rowData[col.name]?.value ?? rowData[col.name]\"></div>\r\n </div>\r\n <div\r\n *ngIf=\"col.name === table.showDecriptionFor && rowData[table.descriptionColumnName]\"\r\n class=\"text-black-500 text-sm mt-1\"\r\n style=\"font-weight: 600;\"\r\n >\r\n {{ rowData[table.descriptionColumnName] }}\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n </div>\r\n </td>\r\n \r\n <!-- Checkbox at end -->\r\n <td *ngIf=\"selectionMode === 'multiple'\" class=\"text-center table-body-wrapper action-data-wrapper\" style=\"width: 4rem\" (click)=\"$event.stopPropagation()\">\r\n <p-tableCheckbox [value]=\"rowData\" [disabled]=\"!enableSelection\"></p-tableCheckbox>\r\n </td>\r\n \r\n <!-- Actions -->\r\n <td *ngIf=\"showActions\" class=\"action-data-wrapper text-left table-body-wrapper\">\r\n <div *ngIf=\"(rowData.isRowDelete !== null || rowData.canDelete !== undefined) ? (showActions && rowData.isRowDelete) : showActions\" class=\"flex align-items-center justify-content-center\">\r\n <p-button\r\n icon=\"pi pi-trash\"\r\n (click)=\"deleteRow($event, rowData)\" \r\n class=\"delete-icon-wrapper mr-3\"\r\n [disabled]=\"!enableSelection\"\r\n ></p-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Empty Message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"table.headers.length + (showActions ? 1 : 0) + (selectionMode === 'multiple' ? 1 : 0)\"\r\n class=\"text-center text-color font-semibold p-4\"\r\n >\r\n {{ noRecordsMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n<!-- Paginator -->\r\n<div class=\"paginator-container flex align-items-center justify-content-center table-pagination-wrapper\" *ngIf=\"usePagination\">\r\n <div class=\"pagination-text text-color\">\r\n Showing {{ metaData.totalItems > 0 ? ((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10) + 1 : 0 }} to {{ recordNumber }} of {{ metaData?.totalItems ?? 0 }} entries\r\n </div>\r\n\r\n <p-paginator\r\n #paginator\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n (onPageChange)=\"handleLoadRecords($event)\"\r\n ></p-paginator>\r\n</div> ", styles: [".table-header-container{padding:20px 20px 20px 8px}.table-header-title{font-size:12px;font-weight:600;color:var(--text-color-tertiary)!important}.table-header-wrapper{padding:12px 14px}.table-body-wrapper{padding:14px}.table-text-wrapper{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;max-width:400%;padding:.5rem;box-sizing:border-box}.record_username{color:#0f8bfd}.table-title-wrapper{font-size:20px;font-weight:700}.table-action-title,.header-text-wrapper,.action-data-wrapper{border-right:1px solid rgba(68,72,109,.1)!important}.enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}.verified-status{background-color:var(--green-500)}.disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}.search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}.Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}.DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}.Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}.Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Applicant,.ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}.OnBoarding,.PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}.Pending{background-color:var(--orange-300);padding:.3rem!important;border-radius:5px;color:#fff}.table-row-wrapper{position:relative;transition:all .3s ease-in-out}.icon-position-wrapper{position:absolute;top:50%;left:16%;transform:translate(-50%,-50%);opacity:0;visibility:hidden;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}.table-row-wrapper:hover .icon-position-wrapper{opacity:1;visibility:visible}.table-group-wrapper:hover .icon-position-wrapper{visibility:visible;opacity:1}.table-pagination-wrapper{border-radius:0 0 10px 10px}::ng-deep .edit-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .edit-icon-wrapper .p-button .pi-pencil{color:var(--primary-color)}::ng-deep .delete-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .delete-icon-wrapper .p-button .pi-trash{color:var(--red-500)}::ng-deep .record_username{color:var(--primary-color)}::ng-deep .table-title-wrapper{font-size:20px;font-weight:700}::ng-deep .table-action-title,::ng-deep .header-text-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .table-action-title{border-radius:0 10px 0 0}::ng-deep .action-data-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .verified-status{background-color:var(--green-500)}::ng-deep .disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}::ng-deep .Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}::ng-deep .Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}::ng-deep .Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Applicant{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .OnBoarding{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .setting-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:24px;height:50px}::ng-deep .setting-icon-wrapper .p-button .pi-cog{color:var(--primary-color)}::ng-deep .view-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.3);background:var(--surface-0);padding:20px;height:40px;box-shadow:none}::ng-deep .view-icon-wrapper .p-button .pi-eye{color:#44486d}::ng-deep .table-secondary-container .p-datatable-table{background-color:#fff;table-layout:fixed}::ng-deep .table-secondary-container .p-datatable-table .p-datatable-thead{background-color:var(--color-surface)}::ng-deep .table-secondary-container .p-datatable-header{padding:20px 20px 0;border-radius:10px 10px 0 0!important;border:none!important}::ng-deep .table-secondary-container .p-datatable-thead th{border:1px solid rgba(68,72,109,.1);border-left:none;border-right:none;background:#f9f9fa}::ng-deep .table-secondary-container .p-datatable-thead th:first-child{border-radius:10px 0 0;border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td{border-bottom:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td:first-child{border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr:last-child td:first-child{border-radius:0 0 0 10px}::ng-deep .table-secondary-container tr:last-child td:last-child{border-radius:0 0 10px}:host ::ng-deep .p-checkbox-box.p-highlight{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}.green-highlight{background-color:var(--color-green-10)!important}:host ::ng-deep .p-checkbox-box.p-highlight .p-checkbox-icon{color:var(--color-surface-light)}:host ::ng-deep .p-checkbox-box:hover{background-color:var(--color-surface-light)!important;border:1px solid var(--text-black)!important}:host ::ng-deep .p-checkbox-box.p-highlight:hover{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}@media screen and (min-width: 1200px) and (max-width: 1500px){.table-header-wrapper{padding:12px 8px}.table-body-wrapper{padding:8px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i6$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6$1.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i6$1.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i6$1.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToggleButtonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: InputSwitchModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i12.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }] });
2450
2450
  }
2451
2451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TableSecondaryComponent, decorators: [{
2452
2452
  type: Component,
2453
- args: [{ selector: 'lib-table-secondary', standalone: true, imports: [CommonModule, TableModule, ButtonModule, ToggleButtonModule, FormsModule, InputSwitchModule, InputTextModule, TooltipModule, PaginatorModule], template: "<div class=\"table-container\">\r\n <p-table\r\n *ngIf=\"table && table.headers\"\r\n #dt2\r\n [lazy]=\"true\"\r\n (onSort)=\"onSort($event)\"\r\n [paginator]=\"false\"\r\n [scrollable]=\"!!scrollHeight\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [columns]=\"table.headers\"\r\n class=\"table-secondary-container\"\r\n [value]=\"table.records\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [dataKey]=\"table.dataKey\"\r\n [selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selection\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <!-- Header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr *ngIf=\"table.headers.length > 0\">\r\n <th\r\n *ngFor=\"let col of table.headers; let i = index\"\r\n class=\"table-header-wrapper\"\r\n [pSortableColumn]=\"col.name\"\r\n [ngClass]=\"[col.width ? col.width : 'w-full', (!showActions && selectionMode !== 'multiple' && (i === table.headers.length - 1)) ? 'table-action-title' : '']\"\r\n style=\"min-width: 100px\"\r\n > \r\n <h4\r\n [ngClass]=\"[\r\n col.class || '', \r\n col.headerAlign === 'center' ? 'justify-content-center' : \r\n (col.headerAlign === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n class=\"flex align-items-center table-header-title capitalize font-semibold m-0\">\r\n {{ col.name }}\r\n @if(table.isSortingAllow){\r\n <p-sortIcon [field]=\"col.name\" />\r\n }\r\n </h4>\r\n </th>\r\n \r\n \r\n <th *ngIf=\"selectionMode === 'multiple'\" class=\"table-header-wrapper text-center table-action-title\" style=\"width: 6rem;\">\r\n <h4 class=\"flex align-items-center justify-content-center gap-2 table-header-title capitalize font-semibold m-0\">\r\n Select <span *ngIf=\"selection?.length\">\r\n ({{ selection.length }})\r\n </span>\r\n </h4>\r\n </th>\r\n \r\n <th\r\n *ngIf=\"showActions\"\r\n class=\"table-action-title table-header-wrapper\"\r\n [ngClass]=\"table.headers[0]?.width ? 'w-2' : 'w-2'\"\r\n >\r\n </th>\r\n \r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Body -->\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr *ngIf=\"table.headers.length > 0\" class=\"table-row-wrapper relative table-group-wrapper\" \r\n (click)=\"handleRowClick(rowData)\" [ngClass]=\"{ 'row-selected': isRowSelected(rowData) }\" [ngClass]=\"{\r\n 'row-selected': isRowSelected(rowData),'green-highlight': selection?.includes(rowData)}\">\r\n <td\r\n class=\"table-body-wrapper\"\r\n [ngClass]=\"(j === table.headers.length - 1 && selectionMode !== 'multiple' && !showActions) ? 'header-text-wrapper' : ''\"\r\n *ngFor=\"let col of table.headers; let j = index\"\r\n >\r\n <div class=\"row-wrapprt flex align-items-center justify-content-center\">\r\n <ng-container [ngSwitch]=\"col.customClass\">\r\n \r\n <!-- Required badge -->\r\n <ng-container *ngSwitchCase=\"'required-badge'\">\r\n <span\r\n [ngClass]=\"{\r\n 'px-3 py-1 rounded-2xl text-sm': true,\r\n 'bg-red-100 text-red-800': rowData[col.name] === 'Required',\r\n 'bg-gray-100 text-gray-500': rowData[col.name] !== 'Required'\r\n }\"\r\n >\r\n {{ rowData[col.name] }}\r\n </span>\r\n </ng-container>\r\n \r\n <!-- Default cell rendering -->\r\n <ng-container *ngSwitchDefault>\r\n <div\r\n class=\"table-text-wrapper p-0 flex align-items-center\"\r\n [ngClass]=\"[\r\n getRowClass(col, rowData),\r\n col.align === 'center' ? 'justify-content-center' : \r\n (col.align === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n [ngStyle]=\"{ 'font-weight': col.name === table.showDecriptionFor ? 'bold' : 'normal' }\"\r\n [style.white-space]=\"col.isHtml ? 'normal' : 'nowrap'\"\r\n style=\"\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n width:100%\r\n \"\r\n >\r\n <i\r\n *ngIf=\"rowData[col.name]?.icon\"\r\n class=\"pi pr-2\"\r\n [ngClass]=\"[rowData[col.name].icon, rowData[col.name].iconClass]\"\r\n ></i>\r\n <p class=\"mb-0\" *ngIf=\"!col.isHtml\"> {{ rowData[col.name]?.value ?? rowData[col.name] }} </p>\r\n <div *ngIf=\"col.isHtml\" [innerHTML]=\"rowData[col.name]?.value ?? rowData[col.name]\"></div>\r\n </div>\r\n <div\r\n *ngIf=\"col.name === table.showDecriptionFor && rowData[table.descriptionColumnName]\"\r\n class=\"text-black-500 text-sm mt-1\"\r\n style=\"font-weight: 600;\"\r\n >\r\n {{ rowData[table.descriptionColumnName] }}\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n </div>\r\n </td>\r\n \r\n <!-- Checkbox at end -->\r\n <td *ngIf=\"selectionMode === 'multiple'\" class=\"text-center table-body-wrapper action-data-wrapper\" style=\"width: 4rem\" (click)=\"$event.stopPropagation()\">\r\n <p-tableCheckbox [value]=\"rowData\" [disabled]=\"!enableSelection\"></p-tableCheckbox>\r\n </td>\r\n \r\n <!-- Actions -->\r\n <td *ngIf=\"showActions\" class=\"action-data-wrapper text-left table-body-wrapper\">\r\n <div *ngIf=\"(rowData.isRowDelete !== null || rowData.canDelete !== undefined) ? (showActions && rowData.isRowDelete) : showActions\" class=\"flex align-items-center justify-content-center\">\r\n <p-button\r\n icon=\"pi pi-trash\"\r\n (click)=\"deleteRow($event, rowData)\" \r\n class=\"delete-icon-wrapper mr-3\"\r\n [disabled]=\"!enableSelection\"\r\n ></p-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Empty Message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"table.headers.length + (showActions ? 1 : 0) + (selectionMode === 'multiple' ? 1 : 0)\"\r\n class=\"text-center text-color font-semibold p-4\"\r\n >\r\n {{ noRecordsMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n\r\n<!-- Paginator -->\r\n<div class=\"paginator-container flex align-items-center justify-content-center table-pagination-wrapper\" *ngIf=\"usePagination\">\r\n <div class=\"pagination-text text-color\">\r\n Showing {{ metaData.totalItems > 0 ? ((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10) + 1 : 0 }} to {{ recordNumber }} of {{ metaData?.totalItems ?? 0 }} entries\r\n </div>\r\n\r\n <p-paginator\r\n #paginator\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n (onPageChange)=\"handleLoadRecords($event)\"\r\n ></p-paginator>\r\n</div> ", styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.table-container{flex:1;min-height:0}.table-header-container{padding:20px 20px 20px 8px}.table-header-title{font-size:12px;font-weight:600;color:var(--text-color-tertiary)!important}.table-header-wrapper{padding:12px 14px}.table-body-wrapper{padding:14px}.table-text-wrapper{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;max-width:400%;padding:.5rem;box-sizing:border-box}.record_username{color:#0f8bfd}.table-title-wrapper{font-size:20px;font-weight:700}.table-action-title,.header-text-wrapper,.action-data-wrapper{border-right:1px solid rgba(68,72,109,.1)!important}.enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}.verified-status{background-color:var(--green-500)}.disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}.search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}.Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}.DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}.Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}.Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Applicant,.ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}.OnBoarding,.PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}.Pending{background-color:var(--orange-300);padding:.3rem!important;border-radius:5px;color:#fff}.table-row-wrapper{position:relative;transition:all .3s ease-in-out}.icon-position-wrapper{position:absolute;top:50%;left:16%;transform:translate(-50%,-50%);opacity:0;visibility:hidden;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}.table-row-wrapper:hover .icon-position-wrapper{opacity:1;visibility:visible}.table-group-wrapper:hover .icon-position-wrapper{visibility:visible;opacity:1}.table-pagination-wrapper{border-radius:0 0 10px 10px}.paginator-container{flex-shrink:0;background:#fff;padding:1rem}::ng-deep .edit-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .edit-icon-wrapper .p-button .pi-pencil{color:var(--primary-color)}::ng-deep .delete-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .delete-icon-wrapper .p-button .pi-trash{color:var(--red-500)}::ng-deep .record_username{color:var(--primary-color)}::ng-deep .table-title-wrapper{font-size:20px;font-weight:700}::ng-deep .table-action-title,::ng-deep .header-text-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .table-action-title{border-radius:0 10px 0 0}::ng-deep .action-data-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .verified-status{background-color:var(--green-500)}::ng-deep .disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}::ng-deep .Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}::ng-deep .Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}::ng-deep .Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Applicant{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .OnBoarding{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .setting-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:24px;height:50px}::ng-deep .setting-icon-wrapper .p-button .pi-cog{color:var(--primary-color)}::ng-deep .view-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.3);background:var(--surface-0);padding:20px;height:40px;box-shadow:none}::ng-deep .view-icon-wrapper .p-button .pi-eye{color:#44486d}::ng-deep .table-secondary-container .p-datatable-table{background-color:#fff;table-layout:fixed}::ng-deep .table-secondary-container .p-datatable-table .p-datatable-thead{background-color:var(--color-surface)}::ng-deep .table-secondary-container .p-datatable-header{padding:20px 20px 0;border-radius:10px 10px 0 0!important;border:none!important}::ng-deep .table-secondary-container .p-datatable-thead th{border:1px solid rgba(68,72,109,.1);border-left:none;border-right:none;background:#f9f9fa}::ng-deep .table-secondary-container .p-datatable-thead th:first-child{border-radius:10px 0 0;border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td{border-bottom:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td:first-child{border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr:last-child td:first-child{border-radius:0 0 0 10px}::ng-deep .table-secondary-container tr:last-child td:last-child{border-radius:0 0 10px}:host ::ng-deep .p-checkbox-box.p-highlight{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}.green-highlight{background-color:var(--color-green-10)!important}:host ::ng-deep .p-checkbox-box.p-highlight .p-checkbox-icon{color:var(--color-surface-light)}:host ::ng-deep .p-checkbox-box:hover{background-color:var(--color-surface-light)!important;border:1px solid var(--text-black)!important}:host ::ng-deep .p-checkbox-box.p-highlight:hover{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}@media screen and (min-width: 1200px) and (max-width: 1500px){.table-header-wrapper{padding:12px 8px}.table-body-wrapper{padding:8px}}\n"] }]
2453
+ args: [{ selector: 'lib-table-secondary', standalone: true, imports: [CommonModule, TableModule, ButtonModule, ToggleButtonModule, FormsModule, InputSwitchModule, InputTextModule, TooltipModule, PaginatorModule], template: " <p-table\r\n *ngIf=\"table && table.headers\"\r\n #dt2\r\n [lazy]=\"true\"\r\n (onSort)=\"onSort($event)\"\r\n [paginator]=\"false\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [columns]=\"table.headers\"\r\n class=\"table-secondary-container\"\r\n [value]=\"table.records\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [dataKey]=\"table.dataKey\"\r\n [selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selection\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <!-- Header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr *ngIf=\"table.headers.length > 0\">\r\n <th\r\n *ngFor=\"let col of table.headers; let i = index\"\r\n class=\"table-header-wrapper\"\r\n [pSortableColumn]=\"col.name\"\r\n [ngClass]=\"[col.width ? col.width : 'w-full', (!showActions && selectionMode !== 'multiple' && (i === table.headers.length - 1)) ? 'table-action-title' : '']\"\r\n style=\"min-width: 100px\"\r\n > \r\n <h4\r\n [ngClass]=\"[\r\n col.class || '', \r\n col.headerAlign === 'center' ? 'justify-content-center' : \r\n (col.headerAlign === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n class=\"flex align-items-center table-header-title capitalize font-semibold m-0\">\r\n {{ col.name }}\r\n @if(table.isSortingAllow){\r\n <p-sortIcon [field]=\"col.name\" />\r\n }\r\n </h4>\r\n </th>\r\n \r\n \r\n <th *ngIf=\"selectionMode === 'multiple'\" class=\"table-header-wrapper text-center table-action-title\" style=\"width: 6rem;\">\r\n <h4 class=\"flex align-items-center justify-content-center gap-2 table-header-title capitalize font-semibold m-0\">\r\n Select <span *ngIf=\"selection?.length\">\r\n ({{ selection.length }})\r\n </span>\r\n </h4>\r\n </th>\r\n \r\n <th\r\n *ngIf=\"showActions\"\r\n class=\"table-action-title table-header-wrapper\"\r\n [ngClass]=\"table.headers[0]?.width ? 'w-2' : 'w-2'\"\r\n >\r\n </th>\r\n \r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Body -->\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr *ngIf=\"table.headers.length > 0\" class=\"table-row-wrapper relative table-group-wrapper\" \r\n (click)=\"handleRowClick(rowData)\" [ngClass]=\"{ 'row-selected': isRowSelected(rowData) }\" [ngClass]=\"{\r\n 'row-selected': isRowSelected(rowData),'green-highlight': selection?.includes(rowData)}\">\r\n <td\r\n class=\"table-body-wrapper\"\r\n [ngClass]=\"(j === table.headers.length - 1 && selectionMode !== 'multiple' && !showActions) ? 'header-text-wrapper' : ''\"\r\n *ngFor=\"let col of table.headers; let j = index\"\r\n >\r\n <div class=\"row-wrapprt flex align-items-center justify-content-center\">\r\n <ng-container [ngSwitch]=\"col.customClass\">\r\n \r\n <!-- Required badge -->\r\n <ng-container *ngSwitchCase=\"'required-badge'\">\r\n <span\r\n [ngClass]=\"{\r\n 'px-3 py-1 rounded-2xl text-sm': true,\r\n 'bg-red-100 text-red-800': rowData[col.name] === 'Required',\r\n 'bg-gray-100 text-gray-500': rowData[col.name] !== 'Required'\r\n }\"\r\n >\r\n {{ rowData[col.name] }}\r\n </span>\r\n </ng-container>\r\n \r\n <!-- Default cell rendering -->\r\n <ng-container *ngSwitchDefault>\r\n <div\r\n class=\"table-text-wrapper p-0 flex align-items-center\"\r\n [ngClass]=\"[\r\n getRowClass(col, rowData),\r\n col.align === 'center' ? 'justify-content-center' : \r\n (col.align === 'right' ? 'justify-content-end' : 'justify-content-start')\r\n ]\"\r\n [ngStyle]=\"{ 'font-weight': col.name === table.showDecriptionFor ? 'bold' : 'normal' }\"\r\n [style.white-space]=\"col.isHtml ? 'normal' : 'nowrap'\"\r\n style=\"\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n width:100%\r\n \"\r\n >\r\n <i\r\n *ngIf=\"rowData[col.name]?.icon\"\r\n class=\"pi pr-2\"\r\n [ngClass]=\"[rowData[col.name].icon, rowData[col.name].iconClass]\"\r\n ></i>\r\n <p class=\"mb-0\" *ngIf=\"!col.isHtml\"> {{ rowData[col.name]?.value ?? rowData[col.name] }} </p>\r\n <div *ngIf=\"col.isHtml\" [innerHTML]=\"rowData[col.name]?.value ?? rowData[col.name]\"></div>\r\n </div>\r\n <div\r\n *ngIf=\"col.name === table.showDecriptionFor && rowData[table.descriptionColumnName]\"\r\n class=\"text-black-500 text-sm mt-1\"\r\n style=\"font-weight: 600;\"\r\n >\r\n {{ rowData[table.descriptionColumnName] }}\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n </div>\r\n </td>\r\n \r\n <!-- Checkbox at end -->\r\n <td *ngIf=\"selectionMode === 'multiple'\" class=\"text-center table-body-wrapper action-data-wrapper\" style=\"width: 4rem\" (click)=\"$event.stopPropagation()\">\r\n <p-tableCheckbox [value]=\"rowData\" [disabled]=\"!enableSelection\"></p-tableCheckbox>\r\n </td>\r\n \r\n <!-- Actions -->\r\n <td *ngIf=\"showActions\" class=\"action-data-wrapper text-left table-body-wrapper\">\r\n <div *ngIf=\"(rowData.isRowDelete !== null || rowData.canDelete !== undefined) ? (showActions && rowData.isRowDelete) : showActions\" class=\"flex align-items-center justify-content-center\">\r\n <p-button\r\n icon=\"pi pi-trash\"\r\n (click)=\"deleteRow($event, rowData)\" \r\n class=\"delete-icon-wrapper mr-3\"\r\n [disabled]=\"!enableSelection\"\r\n ></p-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- Empty Message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"table.headers.length + (showActions ? 1 : 0) + (selectionMode === 'multiple' ? 1 : 0)\"\r\n class=\"text-center text-color font-semibold p-4\"\r\n >\r\n {{ noRecordsMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n<!-- Paginator -->\r\n<div class=\"paginator-container flex align-items-center justify-content-center table-pagination-wrapper\" *ngIf=\"usePagination\">\r\n <div class=\"pagination-text text-color\">\r\n Showing {{ metaData.totalItems > 0 ? ((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10) + 1 : 0 }} to {{ recordNumber }} of {{ metaData?.totalItems ?? 0 }} entries\r\n </div>\r\n\r\n <p-paginator\r\n #paginator\r\n [first]=\"((metaData?.currentPage ?? 1) - 1) * (metaData?.itemsPerPage ?? 10)\"\r\n [rows]=\"metaData?.itemsPerPage ?? 10\"\r\n [totalRecords]=\"metaData?.totalItems ?? 0\"\r\n [rowsPerPageOptions]=\"[10, 20, 30, 40, 50]\"\r\n (onPageChange)=\"handleLoadRecords($event)\"\r\n ></p-paginator>\r\n</div> ", styles: [".table-header-container{padding:20px 20px 20px 8px}.table-header-title{font-size:12px;font-weight:600;color:var(--text-color-tertiary)!important}.table-header-wrapper{padding:12px 14px}.table-body-wrapper{padding:14px}.table-text-wrapper{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;max-width:400%;padding:.5rem;box-sizing:border-box}.record_username{color:#0f8bfd}.table-title-wrapper{font-size:20px;font-weight:700}.table-action-title,.header-text-wrapper,.action-data-wrapper{border-right:1px solid rgba(68,72,109,.1)!important}.enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}.verified-status{background-color:var(--green-500)}.disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}.search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}.Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}.DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}.Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}.Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Applicant,.ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}.OnBoarding,.PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}.Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}.Pending{background-color:var(--orange-300);padding:.3rem!important;border-radius:5px;color:#fff}.table-row-wrapper{position:relative;transition:all .3s ease-in-out}.icon-position-wrapper{position:absolute;top:50%;left:16%;transform:translate(-50%,-50%);opacity:0;visibility:hidden;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}.table-row-wrapper:hover .icon-position-wrapper{opacity:1;visibility:visible}.table-group-wrapper:hover .icon-position-wrapper{visibility:visible;opacity:1}.table-pagination-wrapper{border-radius:0 0 10px 10px}::ng-deep .edit-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .edit-icon-wrapper .p-button .pi-pencil{color:var(--primary-color)}::ng-deep .delete-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:12px 20px}::ng-deep .delete-icon-wrapper .p-button .pi-trash{color:var(--red-500)}::ng-deep .record_username{color:var(--primary-color)}::ng-deep .table-title-wrapper{font-size:20px;font-weight:700}::ng-deep .table-action-title,::ng-deep .header-text-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .table-action-title{border-radius:0 10px 0 0}::ng-deep .action-data-wrapper{border-right:1px solid var(--primary-border-color)!important}::ng-deep .enable-badge-wrapper{border-radius:4px;background:var(--green-500);color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .verified-status{background-color:var(--green-500)}::ng-deep .disable-badge-wrapper{border-radius:4px;background:#44486d;color:var(--surface-0);text-align:center;padding:5px!important}::ng-deep .search-input-wrapper{height:50px;border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#4c62920a}::ng-deep .Verified{background-color:var(--green-400);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .DirectDebitDetails{background-color:#b2eaf2;padding:.3rem!important;border-radius:5px;color:#00bcd4}::ng-deep .Application{background-color:#4caf501a;padding:.3rem!important;border-radius:5px;color:#4caf50}::ng-deep .Property{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Applicant{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .ApplicationNote{background-color:#f6a5c0;padding:.3rem!important;border-radius:5px;color:#e91e63}::ng-deep .OnBoarding{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .PropertyDetails{background-color:#d8dcf0;padding:.3rem!important;border-radius:5px;color:#3f51b5}::ng-deep .Alert{background-color:var(--red-500);padding:.3rem!important;border-radius:5px;color:#fff}::ng-deep .setting-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.1);background:#eef0f5;padding:24px;height:50px}::ng-deep .setting-icon-wrapper .p-button .pi-cog{color:var(--primary-color)}::ng-deep .view-icon-wrapper .p-button{border-radius:10px;border:1px solid rgba(76,98,146,.3);background:var(--surface-0);padding:20px;height:40px;box-shadow:none}::ng-deep .view-icon-wrapper .p-button .pi-eye{color:#44486d}::ng-deep .table-secondary-container .p-datatable-table{background-color:#fff;table-layout:fixed}::ng-deep .table-secondary-container .p-datatable-table .p-datatable-thead{background-color:var(--color-surface)}::ng-deep .table-secondary-container .p-datatable-header{padding:20px 20px 0;border-radius:10px 10px 0 0!important;border:none!important}::ng-deep .table-secondary-container .p-datatable-thead th{border:1px solid rgba(68,72,109,.1);border-left:none;border-right:none;background:#f9f9fa}::ng-deep .table-secondary-container .p-datatable-thead th:first-child{border-radius:10px 0 0;border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td{border-bottom:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr td:first-child{border-left:1px solid rgba(68,72,109,.1)}::ng-deep .table-secondary-container tr:last-child td:first-child{border-radius:0 0 0 10px}::ng-deep .table-secondary-container tr:last-child td:last-child{border-radius:0 0 10px}:host ::ng-deep .p-checkbox-box.p-highlight{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}.green-highlight{background-color:var(--color-green-10)!important}:host ::ng-deep .p-checkbox-box.p-highlight .p-checkbox-icon{color:var(--color-surface-light)}:host ::ng-deep .p-checkbox-box:hover{background-color:var(--color-surface-light)!important;border:1px solid var(--text-black)!important}:host ::ng-deep .p-checkbox-box.p-highlight:hover{background-color:var(--color-green-500)!important;border-color:var(--color-green-500)!important}@media screen and (min-width: 1200px) and (max-width: 1500px){.table-header-wrapper{padding:12px 8px}.table-body-wrapper{padding:8px}}\n"] }]
2454
2454
  }], ctorParameters: () => [{ type: i3$4.Router }, { type: BaseService }, { type: i3$4.ActivatedRoute }, { type: BaseQuery }, { type: BaseStore }], propDecorators: { table: [{
2455
2455
  type: Input
2456
2456
  }], metaData: [{
@@ -5559,6 +5559,35 @@ class QueueBusinessService {
5559
5559
  const filteredQueryParams = Object.fromEntries(Object.entries(queryParams).filter(([_, value]) => value));
5560
5560
  return new URLSearchParams(filteredQueryParams).toString();
5561
5561
  }
5562
+ buildFilterQueryString(filters) {
5563
+ if (!filters || Object.keys(filters).length === 0) {
5564
+ return '';
5565
+ }
5566
+ const filterParams = {};
5567
+ // Map filter properties to API parameters
5568
+ if (filters['riskRating']) {
5569
+ filterParams['risk'] = filters['riskRating']; // risk=Low/Medium/High
5570
+ }
5571
+ if (filters['applicationType']) {
5572
+ filterParams['lendingType'] = filters['applicationType']; // lendingType=HPP/BTL
5573
+ }
5574
+ if (filters['purchaseType']) {
5575
+ filterParams['purchaseType'] = filters['purchaseType']; // purchaseType=Purchase/Refinance
5576
+ }
5577
+ if (filters['taskStatus']) {
5578
+ filterParams['taskStatus'] = filters['taskStatus'];
5579
+ }
5580
+ if (filters['financeMin']) {
5581
+ filterParams['minFinanace'] = filters['financeMin'].toString(); // minFinanace=50000
5582
+ }
5583
+ if (filters['financeMax']) {
5584
+ filterParams['maxFinanace'] = filters['financeMax'].toString(); // maxFinanace=50000
5585
+ }
5586
+ if (filters['pendingDays']) {
5587
+ filterParams['pendingDays'] = filters['pendingDays'].toString(); // pendingDays=120
5588
+ }
5589
+ return new URLSearchParams(filterParams).toString();
5590
+ }
5562
5591
  calculatePagination(event) {
5563
5592
  return {
5564
5593
  page: (event.first / event.rows) + 1,
@@ -5677,7 +5706,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
5677
5706
  */
5678
5707
  class QueueSearchComponent {
5679
5708
  searchText = '';
5680
- placeholder = 'Search with Application no. or Name';
5709
+ placeholder = '';
5681
5710
  debounceTime = 400;
5682
5711
  searchInputChanged = new EventEmitter();
5683
5712
  searchRequested = new EventEmitter();
@@ -5851,11 +5880,11 @@ class QueueRecordTableComponent {
5851
5880
  return this.selectedRows?.length || 0;
5852
5881
  }
5853
5882
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueRecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5854
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: QueueRecordTableComponent, isStandalone: false, selector: "app-queue-record-table", inputs: { table: "table", metaData: "metaData", loading: "loading", selectedRows: "selectedRows", tableHeight: "tableHeight" }, outputs: { selectionChange: "selectionChange", selectedRowsData: "selectedRowsData", assignmentDataReady: "assignmentDataReady", rowClick: "rowClick", paginationChanged: "paginationChanged", filterApplied: "filterApplied", sortApplied: "sortApplied" }, ngImport: i0, template: "<div class=\"queue-record-table-wrapper\">\r\n <lib-table-secondary \r\n *ngIf=\"table && table.headers && table.headers.length > 0\"\r\n [table]=\"table\" \r\n [metaData]=\"metaData\"\r\n [enableSelection]=\"true\"\r\n [selectionMode]=\"'multiple'\"\r\n [selection]=\"selectedRows\"\r\n [showActions]=\"false\"\r\n [noRecordsMessage]=\"'No Records Found'\"\r\n [scrollHeight]=\"tableHeight\"\r\n (onPage)=\"onPaginationChange($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n (rowSelectionChange)=\"onRowClick($event)\"\r\n (sortChanged)=\"onSort($event)\"\r\n >\r\n </lib-table-secondary>\r\n</div>\r\n", styles: [".queue-record-table-wrapper{display:flex;flex-direction:column;height:85vh}.queue-record-table-wrapper lib-table-secondary{flex:1;min-height:0}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}@media screen and (max-width: 768px){.queue-record-table-wrapper{height:auto}.queue-record-table-wrapper .table-container .paginator-container{flex-direction:column;gap:.5rem}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TableSecondaryComponent, selector: "lib-table-secondary", inputs: ["table", "metaData", "title", "builder", "showStatus", "showActions", "showSearchBar", "showNewRecordButton", "showRefreshButton", "pathName", "selectionMode", "selection", "usePagination", "scrollHeight", "rowSelection", "enableSelection", "noRecordsMessage", "searchTerm", "filterQuery"], outputs: ["selectionChange", "rowSelectionChange", "sortChanged", "onDeleteRow", "onPage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5883
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: QueueRecordTableComponent, isStandalone: false, selector: "app-queue-record-table", inputs: { table: "table", metaData: "metaData", loading: "loading", selectedRows: "selectedRows", tableHeight: "tableHeight" }, outputs: { selectionChange: "selectionChange", selectedRowsData: "selectedRowsData", assignmentDataReady: "assignmentDataReady", rowClick: "rowClick", paginationChanged: "paginationChanged", filterApplied: "filterApplied", sortApplied: "sortApplied" }, ngImport: i0, template: "<lib-table-secondary \r\n *ngIf=\"table && table.headers && table.headers.length > 0\"\r\n [table]=\"table\" \r\n [metaData]=\"metaData\"\r\n [enableSelection]=\"true\"\r\n [selectionMode]=\"'multiple'\"\r\n [selection]=\"selectedRows\"\r\n [showActions]=\"false\"\r\n [noRecordsMessage]=\"'No Records Found'\"\r\n (onPage)=\"onPaginationChange($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n (rowSelectionChange)=\"onRowClick($event)\"\r\n (sortChanged)=\"onSort($event)\"\r\n>\r\n</lib-table-secondary>\r\n", styles: [".queue-record-table-wrapper{height:100%;display:flex;flex-direction:column}.queue-record-table-wrapper .table-container{flex:1;overflow:hidden}.queue-record-table-wrapper .pagination-container{margin-top:1rem;padding:.5rem}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}@media screen and (max-width: 768px){.queue-record-table-wrapper .pagination-container{flex-direction:column;gap:.5rem}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TableSecondaryComponent, selector: "lib-table-secondary", inputs: ["table", "metaData", "title", "builder", "showStatus", "showActions", "showSearchBar", "showNewRecordButton", "showRefreshButton", "pathName", "selectionMode", "selection", "usePagination", "scrollHeight", "rowSelection", "enableSelection", "noRecordsMessage", "searchTerm", "filterQuery"], outputs: ["selectionChange", "rowSelectionChange", "sortChanged", "onDeleteRow", "onPage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5855
5884
  }
5856
5885
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueRecordTableComponent, decorators: [{
5857
5886
  type: Component,
5858
- args: [{ selector: 'app-queue-record-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"queue-record-table-wrapper\">\r\n <lib-table-secondary \r\n *ngIf=\"table && table.headers && table.headers.length > 0\"\r\n [table]=\"table\" \r\n [metaData]=\"metaData\"\r\n [enableSelection]=\"true\"\r\n [selectionMode]=\"'multiple'\"\r\n [selection]=\"selectedRows\"\r\n [showActions]=\"false\"\r\n [noRecordsMessage]=\"'No Records Found'\"\r\n [scrollHeight]=\"tableHeight\"\r\n (onPage)=\"onPaginationChange($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n (rowSelectionChange)=\"onRowClick($event)\"\r\n (sortChanged)=\"onSort($event)\"\r\n >\r\n </lib-table-secondary>\r\n</div>\r\n", styles: [".queue-record-table-wrapper{display:flex;flex-direction:column;height:85vh}.queue-record-table-wrapper lib-table-secondary{flex:1;min-height:0}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}@media screen and (max-width: 768px){.queue-record-table-wrapper{height:auto}.queue-record-table-wrapper .table-container .paginator-container{flex-direction:column;gap:.5rem}}\n"] }]
5887
+ args: [{ selector: 'app-queue-record-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<lib-table-secondary \r\n *ngIf=\"table && table.headers && table.headers.length > 0\"\r\n [table]=\"table\" \r\n [metaData]=\"metaData\"\r\n [enableSelection]=\"true\"\r\n [selectionMode]=\"'multiple'\"\r\n [selection]=\"selectedRows\"\r\n [showActions]=\"false\"\r\n [noRecordsMessage]=\"'No Records Found'\"\r\n (onPage)=\"onPaginationChange($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n (rowSelectionChange)=\"onRowClick($event)\"\r\n (sortChanged)=\"onSort($event)\"\r\n>\r\n</lib-table-secondary>\r\n", styles: [".queue-record-table-wrapper{height:100%;display:flex;flex-direction:column}.queue-record-table-wrapper .table-container{flex:1;overflow:hidden}.queue-record-table-wrapper .pagination-container{margin-top:1rem;padding:.5rem}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}@media screen and (max-width: 768px){.queue-record-table-wrapper .pagination-container{flex-direction:column;gap:.5rem}}\n"] }]
5859
5888
  }], propDecorators: { table: [{
5860
5889
  type: Input
5861
5890
  }], metaData: [{
@@ -5882,6 +5911,192 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
5882
5911
  type: Output
5883
5912
  }] } });
5884
5913
 
5914
+ class QueueFilterDropdownService {
5915
+ filter = {
5916
+ riskRating: null,
5917
+ applicationType: null,
5918
+ purchaseType: null,
5919
+ taskStatus: null,
5920
+ financeMin: null,
5921
+ financeMax: null,
5922
+ pendingDays: null
5923
+ };
5924
+ setRiskRating(rating) {
5925
+ this.filter.riskRating = this.filter.riskRating === rating ? null : rating;
5926
+ }
5927
+ setApplicationType(type) {
5928
+ this.filter.applicationType = this.filter.applicationType === type ? null : type;
5929
+ }
5930
+ setPurchaseType(type) {
5931
+ this.filter.purchaseType = this.filter.purchaseType === type ? null : type;
5932
+ }
5933
+ setTaskStatus(status) {
5934
+ this.filter.taskStatus = this.filter.taskStatus === status ? null : status;
5935
+ }
5936
+ setFinanceMin(min) {
5937
+ this.filter.financeMin = min;
5938
+ }
5939
+ setFinanceMax(max) {
5940
+ this.filter.financeMax = max;
5941
+ }
5942
+ setPendingDays(days) {
5943
+ this.filter.pendingDays = days;
5944
+ }
5945
+ setAllFilters(filters) {
5946
+ this.filter = { ...filters };
5947
+ }
5948
+ getFilters() {
5949
+ return { ...this.filter };
5950
+ }
5951
+ hasFilters() {
5952
+ return Object.values(this.filter).some(value => value !== null);
5953
+ }
5954
+ getFilterCount() {
5955
+ return Object.values(this.filter).filter(value => value !== null).length;
5956
+ }
5957
+ clearAll() {
5958
+ this.filter = {
5959
+ riskRating: null,
5960
+ applicationType: null,
5961
+ purchaseType: null,
5962
+ taskStatus: null,
5963
+ financeMin: null,
5964
+ financeMax: null,
5965
+ pendingDays: null
5966
+ };
5967
+ }
5968
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueFilterDropdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5969
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueFilterDropdownService, providedIn: 'root' });
5970
+ }
5971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueFilterDropdownService, decorators: [{
5972
+ type: Injectable,
5973
+ args: [{ providedIn: 'root' }]
5974
+ }] });
5975
+
5976
+ class QueueFilterDropdownComponent {
5977
+ filterService;
5978
+ showDropdown = false;
5979
+ dropdownPanel;
5980
+ skipNextDocumentClick = false;
5981
+ originalFilters = null;
5982
+ filtersApplied = false; // Track if filters have been applied
5983
+ appliedFilters = {}; // Input to sync with container's applied filters
5984
+ filterApplied = new EventEmitter();
5985
+ filtersCleared = new EventEmitter();
5986
+ constructor(filterService) {
5987
+ this.filterService = filterService;
5988
+ }
5989
+ ngOnChanges(changes) {
5990
+ if (changes['appliedFilters'] && !changes['appliedFilters'].firstChange) {
5991
+ this.syncWithAppliedFilters(this.appliedFilters);
5992
+ }
5993
+ }
5994
+ get filterCount() {
5995
+ return this.filterService.getFilterCount();
5996
+ }
5997
+ onFilterBtnClick() {
5998
+ if (!this.showDropdown) {
5999
+ // Store current state when opening dropdown (this will be the applied filters)
6000
+ this.originalFilters = this.filterService.getFilters();
6001
+ }
6002
+ this.showDropdown = !this.showDropdown;
6003
+ this.skipNextDocumentClick = true;
6004
+ }
6005
+ setRiskRating(rating) {
6006
+ this.filterService.setRiskRating(rating);
6007
+ }
6008
+ setApplicationType(type) {
6009
+ this.filterService.setApplicationType(type);
6010
+ }
6011
+ setPurchaseType(type) {
6012
+ this.filterService.setPurchaseType(type);
6013
+ }
6014
+ setTaskStatus(status) {
6015
+ this.filterService.setTaskStatus(status);
6016
+ }
6017
+ setFinanceMin(min) {
6018
+ this.filterService.setFinanceMin(min);
6019
+ }
6020
+ setFinanceMax(max) {
6021
+ this.filterService.setFinanceMax(max);
6022
+ }
6023
+ setPendingDays(days) {
6024
+ this.filterService.setPendingDays(days);
6025
+ }
6026
+ applyFilters() {
6027
+ const filterData = this.filterService.getFilters();
6028
+ if (this.filterService.hasFilters()) {
6029
+ this.filterApplied.emit(filterData);
6030
+ this.filtersApplied = true; // Mark that filters have been applied
6031
+ }
6032
+ this.showDropdown = false;
6033
+ this.originalFilters = null; // Clear stored state after applying
6034
+ }
6035
+ clearAll() {
6036
+ this.filterService.clearAll();
6037
+ this.filtersCleared.emit();
6038
+ this.filtersApplied = false; // Reset the applied flag when clearing all
6039
+ }
6040
+ // Method to sync with container's applied filters
6041
+ syncWithAppliedFilters(appliedFilters) {
6042
+ if (appliedFilters && Object.keys(appliedFilters).length > 0) {
6043
+ const filters = {
6044
+ riskRating: appliedFilters.riskRating || null,
6045
+ applicationType: appliedFilters.applicationType || null,
6046
+ purchaseType: appliedFilters.purchaseType || null,
6047
+ taskStatus: appliedFilters.taskStatus || null,
6048
+ financeMin: appliedFilters.financeMin || null,
6049
+ financeMax: appliedFilters.financeMax || null,
6050
+ pendingDays: appliedFilters.pendingDays || null
6051
+ };
6052
+ this.filterService.setAllFilters(filters);
6053
+ this.filtersApplied = true;
6054
+ }
6055
+ else {
6056
+ this.filterService.clearAll();
6057
+ this.filtersApplied = false;
6058
+ }
6059
+ }
6060
+ restoreOriginalFilters() {
6061
+ if (this.originalFilters && !this.filtersApplied) {
6062
+ // Only restore original filters if no filters have been applied yet
6063
+ this.filterService.setAllFilters(this.originalFilters);
6064
+ }
6065
+ this.originalFilters = null;
6066
+ }
6067
+ onDocumentClick(event) {
6068
+ if (this.skipNextDocumentClick) {
6069
+ this.skipNextDocumentClick = false;
6070
+ return;
6071
+ }
6072
+ if (this.showDropdown) {
6073
+ const clickedInside = this.dropdownPanel && this.dropdownPanel.nativeElement.contains(event.target);
6074
+ if (!clickedInside) {
6075
+ this.restoreOriginalFilters(); // Restore original state when closing without applying
6076
+ this.showDropdown = false;
6077
+ }
6078
+ }
6079
+ }
6080
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueFilterDropdownComponent, deps: [{ token: QueueFilterDropdownService }], target: i0.ɵɵFactoryTarget.Component });
6081
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: QueueFilterDropdownComponent, isStandalone: false, selector: "lib-queue-filter-dropdown", inputs: { appliedFilters: "appliedFilters" }, outputs: { filterApplied: "filterApplied", filtersCleared: "filtersCleared" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "dropdownPanel", first: true, predicate: ["dropdownPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"queue-filter-dropdown-wrapper\">\n <button class=\"filter-btn\" (click)=\"onFilterBtnClick()\">\n <span class=\"pi pi-filter\"></span>\n <span class=\"filter-count\">{{ filterCount }}</span>\n Filter(s) Applied \n <span class=\"pi pi-angle-down ml-2\"></span>\n </button>\n <div class=\"filter-dropdown-panel\" *ngIf=\"showDropdown\" #dropdownPanel>\n <div class=\"filter-title\">Queue Filters</div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Risk Rating</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().riskRating === 'Low'\" (click)=\"setRiskRating('Low')\">Low</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().riskRating === 'Medium'\" (click)=\"setRiskRating('Medium')\">Medium</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().riskRating === 'High'\" (click)=\"setRiskRating('High')\">High</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Application Type</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().applicationType === 'BTL'\" (click)=\"setApplicationType('BTL')\">BTL</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().applicationType === 'HPP'\" (click)=\"setApplicationType('HPP')\">HPP</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Purchase Type</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().purchaseType === 'Purchase'\" (click)=\"setPurchaseType('Purchase')\">Purchase</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().purchaseType === 'Refinance'\" (click)=\"setPurchaseType('Refinance')\">Refinance</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Task Status</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().taskStatus === 'Not Started'\" (click)=\"setTaskStatus('Not Started')\">Not Started</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().taskStatus === 'In-progress'\" (click)=\"setTaskStatus('In-progress')\">In-progress</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().taskStatus === 'Completed'\" (click)=\"setTaskStatus('Completed')\">Completed</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Finance Amount</div>\n <div class=\"filter-options two-inputs\">\n <input type=\"number\" placeholder=\"Min\" [ngModel]=\"filterService.getFilters().financeMin\" (ngModelChange)=\"setFinanceMin($event)\" min=\"0\" />\n <input type=\"number\" placeholder=\"Max\" [ngModel]=\"filterService.getFilters().financeMax\" (ngModelChange)=\"setFinanceMax($event)\" min=\"0\" />\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Pending Days</div>\n <div class=\"filter-options one-input\">\n <input type=\"number\" placeholder=\"No. of days\" [ngModel]=\"filterService.getFilters().pendingDays\" (ngModelChange)=\"setPendingDays($event)\" min=\"0\" />\n </div>\n </div>\n <div class=\"filter-actions\">\n <button type=\"button\" class=\"clear-btn\" (click)=\"clearAll()\">Clear all</button>\n <button type=\"button\" class=\"apply-btn\" (click)=\"applyFilters()\">Apply Filters</button>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.filter-btn{display:flex;align-items:center;background:#fff;border:1px solid #e0e4ea;border-radius:8px;padding:.5rem 1.1rem;font-size:1rem;color:#3b4256;box-shadow:0 1px 2px #101e360a;cursor:pointer;transition:border .2s,box-shadow .2s;position:relative;height:44px}.filter-btn .pi{font-size:1rem;color:#3b82f6}.filter-btn .filter-count{color:#242424;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:1rem}.filter-btn:hover{border:1px solid #b6c2e2;box-shadow:0 2px 8px #101e3614;background:#f7fafd}.queue-filter-dropdown-wrapper{position:relative;display:inline-block}.filter-dropdown-panel{position:absolute;top:100%;left:50%;transform:translate(-50%);min-width:390px;background:#fff;border:1.5px solid #d1d5db;border-radius:16px;box-shadow:0 8px 32px #101e362e;padding:1.5rem 1.25rem 1rem;z-index:1000}.filter-title{font-weight:600;font-size:1.15rem;margin-bottom:1.25rem;color:#23272e}.filter-section{margin-bottom:1.2rem}.filter-label{font-size:1rem;font-weight:500;margin-bottom:.5rem;color:#3b4256}.filter-options{display:flex;gap:.7rem;flex-wrap:wrap}.filter-options button{background:#f7fafd;border:1.5px solid #e0e4ea;border-radius:8px;padding:.45rem 1.3rem;font-size:1rem;color:#3b4256;cursor:pointer;transition:background .2s,border .2s,color .2s,box-shadow .2s;box-shadow:none}.filter-options button.selected{background:#e8f0fe;color:#2563eb;border:1.5px solid #2563eb;box-shadow:0 2px 8px #2563eb14}.filter-options input[type=number],.filter-options input[type=text],.filter-options input[type=date]{width:110px;padding:.45rem .8rem;border:1.5px solid #e0e4ea;border-radius:8px;font-size:1rem;color:#3b4256;background:#fff;transition:border .2s}.filter-options input[type=number]:focus,.filter-options input[type=text]:focus,.filter-options input[type=date]:focus{border:1.5px solid #2563eb;outline:none}.filter-actions{display:flex;justify-content:space-between;align-items:center;margin-top:1.7rem}.clear-btn{background:none;border:none;color:#2563eb;font-size:1rem;cursor:pointer;padding:0;display:flex;align-items:center;gap:.3rem}.clear-btn:after{content:\"\\2715\";color:#2563eb;font-size:1.1em;margin-left:.2em}.apply-btn{background:#2563eb;color:#fff;border:none;border-radius:12px;padding:.7rem 0;font-size:1.1rem;font-weight:500;cursor:pointer;transition:background .2s;min-width:160px}.filter-options input[type=date]{font-family:inherit;color:#3b4256}.filter-options.two-inputs input[type=number]{width:48.5%}.filter-options.one-input input[type=number]{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
6082
+ }
6083
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueFilterDropdownComponent, decorators: [{
6084
+ type: Component,
6085
+ args: [{ selector: 'lib-queue-filter-dropdown', standalone: false, template: "<div class=\"queue-filter-dropdown-wrapper\">\n <button class=\"filter-btn\" (click)=\"onFilterBtnClick()\">\n <span class=\"pi pi-filter\"></span>\n <span class=\"filter-count\">{{ filterCount }}</span>\n Filter(s) Applied \n <span class=\"pi pi-angle-down ml-2\"></span>\n </button>\n <div class=\"filter-dropdown-panel\" *ngIf=\"showDropdown\" #dropdownPanel>\n <div class=\"filter-title\">Queue Filters</div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Risk Rating</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().riskRating === 'Low'\" (click)=\"setRiskRating('Low')\">Low</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().riskRating === 'Medium'\" (click)=\"setRiskRating('Medium')\">Medium</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().riskRating === 'High'\" (click)=\"setRiskRating('High')\">High</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Application Type</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().applicationType === 'BTL'\" (click)=\"setApplicationType('BTL')\">BTL</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().applicationType === 'HPP'\" (click)=\"setApplicationType('HPP')\">HPP</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Purchase Type</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().purchaseType === 'Purchase'\" (click)=\"setPurchaseType('Purchase')\">Purchase</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().purchaseType === 'Refinance'\" (click)=\"setPurchaseType('Refinance')\">Refinance</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Task Status</div>\n <div class=\"filter-options\">\n <button type=\"button\" [class.selected]=\"filterService.getFilters().taskStatus === 'Not Started'\" (click)=\"setTaskStatus('Not Started')\">Not Started</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().taskStatus === 'In-progress'\" (click)=\"setTaskStatus('In-progress')\">In-progress</button>\n <button type=\"button\" [class.selected]=\"filterService.getFilters().taskStatus === 'Completed'\" (click)=\"setTaskStatus('Completed')\">Completed</button>\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Finance Amount</div>\n <div class=\"filter-options two-inputs\">\n <input type=\"number\" placeholder=\"Min\" [ngModel]=\"filterService.getFilters().financeMin\" (ngModelChange)=\"setFinanceMin($event)\" min=\"0\" />\n <input type=\"number\" placeholder=\"Max\" [ngModel]=\"filterService.getFilters().financeMax\" (ngModelChange)=\"setFinanceMax($event)\" min=\"0\" />\n </div>\n </div>\n <div class=\"filter-section\">\n <div class=\"filter-label\">Pending Days</div>\n <div class=\"filter-options one-input\">\n <input type=\"number\" placeholder=\"No. of days\" [ngModel]=\"filterService.getFilters().pendingDays\" (ngModelChange)=\"setPendingDays($event)\" min=\"0\" />\n </div>\n </div>\n <div class=\"filter-actions\">\n <button type=\"button\" class=\"clear-btn\" (click)=\"clearAll()\">Clear all</button>\n <button type=\"button\" class=\"apply-btn\" (click)=\"applyFilters()\">Apply Filters</button>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.filter-btn{display:flex;align-items:center;background:#fff;border:1px solid #e0e4ea;border-radius:8px;padding:.5rem 1.1rem;font-size:1rem;color:#3b4256;box-shadow:0 1px 2px #101e360a;cursor:pointer;transition:border .2s,box-shadow .2s;position:relative;height:44px}.filter-btn .pi{font-size:1rem;color:#3b82f6}.filter-btn .filter-count{color:#242424;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:1rem}.filter-btn:hover{border:1px solid #b6c2e2;box-shadow:0 2px 8px #101e3614;background:#f7fafd}.queue-filter-dropdown-wrapper{position:relative;display:inline-block}.filter-dropdown-panel{position:absolute;top:100%;left:50%;transform:translate(-50%);min-width:390px;background:#fff;border:1.5px solid #d1d5db;border-radius:16px;box-shadow:0 8px 32px #101e362e;padding:1.5rem 1.25rem 1rem;z-index:1000}.filter-title{font-weight:600;font-size:1.15rem;margin-bottom:1.25rem;color:#23272e}.filter-section{margin-bottom:1.2rem}.filter-label{font-size:1rem;font-weight:500;margin-bottom:.5rem;color:#3b4256}.filter-options{display:flex;gap:.7rem;flex-wrap:wrap}.filter-options button{background:#f7fafd;border:1.5px solid #e0e4ea;border-radius:8px;padding:.45rem 1.3rem;font-size:1rem;color:#3b4256;cursor:pointer;transition:background .2s,border .2s,color .2s,box-shadow .2s;box-shadow:none}.filter-options button.selected{background:#e8f0fe;color:#2563eb;border:1.5px solid #2563eb;box-shadow:0 2px 8px #2563eb14}.filter-options input[type=number],.filter-options input[type=text],.filter-options input[type=date]{width:110px;padding:.45rem .8rem;border:1.5px solid #e0e4ea;border-radius:8px;font-size:1rem;color:#3b4256;background:#fff;transition:border .2s}.filter-options input[type=number]:focus,.filter-options input[type=text]:focus,.filter-options input[type=date]:focus{border:1.5px solid #2563eb;outline:none}.filter-actions{display:flex;justify-content:space-between;align-items:center;margin-top:1.7rem}.clear-btn{background:none;border:none;color:#2563eb;font-size:1rem;cursor:pointer;padding:0;display:flex;align-items:center;gap:.3rem}.clear-btn:after{content:\"\\2715\";color:#2563eb;font-size:1.1em;margin-left:.2em}.apply-btn{background:#2563eb;color:#fff;border:none;border-radius:12px;padding:.7rem 0;font-size:1.1rem;font-weight:500;cursor:pointer;transition:background .2s;min-width:160px}.filter-options input[type=date]{font-family:inherit;color:#3b4256}.filter-options.two-inputs input[type=number]{width:48.5%}.filter-options.one-input input[type=number]{width:100%}\n"] }]
6086
+ }], ctorParameters: () => [{ type: QueueFilterDropdownService }], propDecorators: { dropdownPanel: [{
6087
+ type: ViewChild,
6088
+ args: ['dropdownPanel', { static: false }]
6089
+ }], appliedFilters: [{
6090
+ type: Input
6091
+ }], filterApplied: [{
6092
+ type: Output
6093
+ }], filtersCleared: [{
6094
+ type: Output
6095
+ }], onDocumentClick: [{
6096
+ type: HostListener,
6097
+ args: ['document:click', ['$event']]
6098
+ }] } });
6099
+
5885
6100
  /**
5886
6101
  * Container component for managing queue-related data and interactions.
5887
6102
  * Extends the BaseContainerComponent with a generic type of QueueModel.
@@ -5912,7 +6127,10 @@ class QueueContainerComponent extends BaseContainerComponent {
5912
6127
  searchText = SHARED.EMPTY;
5913
6128
  sortBy = SHARED.EMPTY;
5914
6129
  sortOrder = SHARED.EMPTY;
6130
+ appliedFilters = {};
5915
6131
  tableHeight = 'flex';
6132
+ placeholder = '';
6133
+ filterDropdown;
5916
6134
  // Input properties for content projection
5917
6135
  set selectedRowsInput(rows) {
5918
6136
  this.selectedRows = rows || [];
@@ -5938,6 +6156,10 @@ class QueueContainerComponent extends BaseContainerComponent {
5938
6156
  ngOnInit() {
5939
6157
  this.initializeComponent();
5940
6158
  this.setupSearchDebounce();
6159
+ // Sync filter dropdown after initialization
6160
+ setTimeout(() => {
6161
+ this.syncFilterDropdown();
6162
+ }, 0);
5941
6163
  }
5942
6164
  ngOnDestroy() {
5943
6165
  this.destroy$.next();
@@ -5999,6 +6221,31 @@ class QueueContainerComponent extends BaseContainerComponent {
5999
6221
  this.sortOrder = event.order === 1 ? 'asc' : event.order === -1 ? 'desc' : '';
6000
6222
  this.getQueueRecordsData();
6001
6223
  }
6224
+ onFilterDropdownApplied(filterData) {
6225
+ this.appliedFilters = filterData;
6226
+ this.resetPage();
6227
+ this.getQueueRecordsData();
6228
+ this.clearSelection();
6229
+ this.syncFilterDropdown();
6230
+ }
6231
+ onFiltersCleared() {
6232
+ this.clearFilters();
6233
+ this.resetPage();
6234
+ this.getQueueRecordsData();
6235
+ this.clearSelection();
6236
+ this.syncFilterDropdown();
6237
+ }
6238
+ onClearAllFilters() {
6239
+ if (this.filterDropdown) {
6240
+ this.filterDropdown.clearAll();
6241
+ }
6242
+ this.onFiltersCleared();
6243
+ }
6244
+ syncFilterDropdown() {
6245
+ if (this.filterDropdown) {
6246
+ this.filterDropdown.syncWithAppliedFilters(this.appliedFilters);
6247
+ }
6248
+ }
6002
6249
  initializeComponent() {
6003
6250
  this.getAllQueueList();
6004
6251
  this.userRole = this.queueBusinessService.getUserRole();
@@ -6039,8 +6286,10 @@ class QueueContainerComponent extends BaseContainerComponent {
6039
6286
  this.queueBusinessService.storeSelectedQueue(queueId);
6040
6287
  sessionStorage.setItem(SHARED.selectedQueue, JSON.stringify(this.selectedQueue));
6041
6288
  this.clearSelection();
6289
+ this.clearFilters();
6042
6290
  this.resetPaginationState();
6043
6291
  this.getQueueRecordsData();
6292
+ this.syncFilterDropdown();
6044
6293
  }
6045
6294
  else {
6046
6295
  console.warn(ERROR.NO_QUEUE_FOUND_WITH_ID);
@@ -6062,7 +6311,19 @@ class QueueContainerComponent extends BaseContainerComponent {
6062
6311
  }
6063
6312
  const targetPage = page || this.currentPage;
6064
6313
  const targetLimit = limit || this.currentLimit;
6065
- this.queueService.getPaginatedQueueRecords(this.selectedQueue.apiConfig, this.currentSearchTerm, targetPage, targetLimit, this.queryString, this.sortBy, this.sortOrder).subscribe({
6314
+ // Build filter query string
6315
+ let filterQueryString = this.queryString;
6316
+ if (this.appliedFilters && Object.keys(this.appliedFilters).length > 0) {
6317
+ const filterQuery = this.queueBusinessService.buildFilterQueryString(this.appliedFilters);
6318
+ // Combine existing query string with filter parameters
6319
+ const existingParams = new URLSearchParams(filterQueryString);
6320
+ const filterParams = new URLSearchParams(filterQuery);
6321
+ filterParams.forEach((value, key) => {
6322
+ existingParams.set(key, value);
6323
+ });
6324
+ filterQueryString = existingParams.toString();
6325
+ }
6326
+ this.queueService.getPaginatedQueueRecords(this.selectedQueue.apiConfig, this.currentSearchTerm, targetPage, targetLimit, filterQueryString, this.sortBy, this.sortOrder).subscribe({
6066
6327
  next: (res) => {
6067
6328
  const apiData = res?.data || res?.paginatedResults || res || [];
6068
6329
  if (apiData && apiData.length > 0) {
@@ -6105,10 +6366,14 @@ class QueueContainerComponent extends BaseContainerComponent {
6105
6366
  resetSearchState() {
6106
6367
  this.currentSearchTerm = '';
6107
6368
  this.searchText = '';
6369
+ this.appliedFilters = {};
6108
6370
  }
6109
6371
  clearSelection() {
6110
6372
  this.selectedRows = [];
6111
6373
  }
6374
+ clearFilters() {
6375
+ this.appliedFilters = {};
6376
+ }
6112
6377
  onSearchTermChanged(searchTerm) {
6113
6378
  this.onSearchRequested(searchTerm);
6114
6379
  }
@@ -6128,13 +6393,18 @@ class QueueContainerComponent extends BaseContainerComponent {
6128
6393
  return this.selectedRows && this.selectedRows.length > 0;
6129
6394
  }
6130
6395
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueContainerComponent, deps: [{ token: QueueStore }, { token: QueueService }, { token: BaseStore }, { token: QueueBusinessService }, { token: QueueRecordTableBuilderService }], target: i0.ɵɵFactoryTarget.Component });
6131
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: QueueContainerComponent, isStandalone: false, selector: "lib-queue-container", inputs: { tableHeight: "tableHeight", selectedRowsInput: "selectedRowsInput" }, outputs: { assignmentComplete: "assignmentComplete", userAssigned: "userAssigned", selectedRowsData: "selectedRowsData", assignmentDataReady: "assignmentDataReady", rowClick: "rowClick", selectionChange: "selectionChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container grid m-0 h-full\">\n <div class=\"col-12 xl:col-2 md:col-12 py-0 h-full\">\n <app-queue-list\n [queueData]=\"filteredQueueData\"\n [selectedQueueId]=\"selectedQueueId\"\n [selectedStatus]=\"selectedStatus\"\n [userRole]=\"userRole\"\n [showQueueDataForm]=\"true\"\n (queueSelected)=\"onQueueSelected($event)\"\n (statusChanged)=\"onStatusChanged($event)\"\n (insertQueueRequested)=\"onInsertQueueRequested()\"\n ></app-queue-list>\n </div>\n <div class=\"col-12 xl:col-10 md:col-12 py-0 h-full\">\n \n @if(selectedQueue){\n <div class=\"flex justify-content-between align-items-center mb-3\">\n <div class=\"col-6 p-0\">\n <div class=\"searchbar-wrapper\">\n <queue-search \n [searchText]=\"searchText\"\n (searchInputChanged)=\"onSearchInputChanged($event)\"\n (searchRequested)=\"onSearchRequested($event)\"\n (searchCleared)=\"onSearchCleared()\">\n </queue-search>\n </div>\n </div>\n <div class=\"d-flex justify-content-end\">\n <ng-content select=\"[user-dropdown]\"></ng-content>\n </div>\n </div>\n\n <div class=\"animation-duration-500 associated-list h-full card mb-0 p-0\">\n <app-queue-record-table\n [table]=\"table\"\n [metaData]=\"metaData\"\n [loading]=\"loading\"\n [selectedRows]=\"selectedRows\"\n [tableHeight]=\"tableHeight\"\n (selectionChange)=\"onTableSelectionChange($event)\"\n (selectedRowsData)=\"onTableSelectionChange($event)\"\n (assignmentDataReady)=\"onAssignmentDataReady($event)\"\n (rowClick)=\"onTableRowClick($event)\"\n (paginationChanged)=\"onPaginationChanged($event)\"\n (filterApplied)=\"onFilterApplied($event)\"\n (sortApplied)=\"onSortApplied($event)\">\n </app-queue-record-table>\n </div>\n\n }\n </div>\n\n </div>", styles: [".custom-scroll{overflow-y:hidden}.custom-scroll:hover{overflow-y:auto}\n"], dependencies: [{ kind: "component", type: QueueSearchComponent, selector: "queue-search", inputs: ["searchText", "placeholder", "debounceTime"], outputs: ["searchInputChanged", "searchRequested", "searchCleared"] }, { kind: "component", type: QueueListComponent, selector: "app-queue-list", inputs: ["queueData", "selectedQueueId", "selectedStatus", "userRole", "showQueueDataForm"], outputs: ["queueSelected", "statusChanged", "insertQueueRequested"] }, { kind: "component", type: QueueRecordTableComponent, selector: "app-queue-record-table", inputs: ["table", "metaData", "loading", "selectedRows", "tableHeight"], outputs: ["selectionChange", "selectedRowsData", "assignmentDataReady", "rowClick", "paginationChanged", "filterApplied", "sortApplied"] }] });
6396
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: QueueContainerComponent, isStandalone: false, selector: "lib-queue-container", inputs: { tableHeight: "tableHeight", placeholder: "placeholder", selectedRowsInput: "selectedRowsInput" }, outputs: { assignmentComplete: "assignmentComplete", userAssigned: "userAssigned", selectedRowsData: "selectedRowsData", assignmentDataReady: "assignmentDataReady", rowClick: "rowClick", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "filterDropdown", first: true, predicate: ["filterDropdown"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container grid m-0 h-full\">\r\n <div class=\"col-12 xl:col-2 md:col-12 py-0 h-full\">\r\n <app-queue-list\r\n [queueData]=\"filteredQueueData\"\r\n [selectedQueueId]=\"selectedQueueId\"\r\n [selectedStatus]=\"selectedStatus\"\r\n [userRole]=\"userRole\"\r\n [showQueueDataForm]=\"true\"\r\n (queueSelected)=\"onQueueSelected($event)\"\r\n (statusChanged)=\"onStatusChanged($event)\"\r\n (insertQueueRequested)=\"onInsertQueueRequested()\"\r\n ></app-queue-list>\r\n </div>\r\n <div class=\"col-12 xl:col-10 md:col-12 py-0 h-full\">\r\n \r\n @if(selectedQueue){\r\n <div class=\"flex justify-content-between align-items-center mb-3\">\r\n <div class=\"col-8 p-0 flex align-items-center \" >\r\n <div class=\"col-7 searchbar-wrapper\">\r\n <queue-search \r\n [placeholder]=\"placeholder\"\r\n [searchText]=\"searchText\"\r\n (searchInputChanged)=\"onSearchInputChanged($event)\"\r\n (searchRequested)=\"onSearchRequested($event)\"\r\n (searchCleared)=\"onSearchCleared()\">\r\n </queue-search>\r\n </div>\r\n <div>\r\n <lib-queue-filter-dropdown \r\n #filterDropdown\r\n [appliedFilters]=\"appliedFilters\"\r\n (filterApplied)=\"onFilterDropdownApplied($event)\"\r\n (filtersCleared)=\"onFiltersCleared()\">\r\n </lib-queue-filter-dropdown>\r\n </div>\r\n <div>\r\n <button \r\n class=\"clear-filters-btn\"\r\n type=\"button\"\r\n (click)=\"onClearAllFilters()\">\r\n Clear <i class=\"pi pi-times ml-2\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"d-flex align-items-center gap-3 justify-content-end\">\r\n <ng-content select=\"[user-dropdown]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"animation-duration-500 associated-list h-full card mb-0 p-0\">\r\n <app-queue-record-table\r\n [table]=\"table\"\r\n [metaData]=\"metaData\"\r\n [loading]=\"loading\"\r\n [selectedRows]=\"selectedRows\"\r\n (selectionChange)=\"onTableSelectionChange($event)\"\r\n (selectedRowsData)=\"onTableSelectionChange($event)\"\r\n (assignmentDataReady)=\"onAssignmentDataReady($event)\"\r\n (rowClick)=\"onTableRowClick($event)\"\r\n (paginationChanged)=\"onPaginationChanged($event)\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (sortApplied)=\"onSortApplied($event)\">\r\n </app-queue-record-table>\r\n </div>\r\n\r\n }\r\n </div>\r\n\r\n </div>", styles: [".custom-scroll{overflow-y:hidden}.custom-scroll:hover{overflow-y:auto}.clear-filters-btn{background:none;border:none;color:#2196f3;font-size:1.1rem;cursor:pointer;margin-left:.5rem;display:inline-flex;align-items:center;padding:0}.clear-filters-btn .clear-x{font-size:1.2rem;margin-left:.2rem;line-height:1}\n"], dependencies: [{ kind: "component", type: QueueSearchComponent, selector: "queue-search", inputs: ["searchText", "placeholder", "debounceTime"], outputs: ["searchInputChanged", "searchRequested", "searchCleared"] }, { kind: "component", type: QueueListComponent, selector: "app-queue-list", inputs: ["queueData", "selectedQueueId", "selectedStatus", "userRole", "showQueueDataForm"], outputs: ["queueSelected", "statusChanged", "insertQueueRequested"] }, { kind: "component", type: QueueRecordTableComponent, selector: "app-queue-record-table", inputs: ["table", "metaData", "loading", "selectedRows", "tableHeight"], outputs: ["selectionChange", "selectedRowsData", "assignmentDataReady", "rowClick", "paginationChanged", "filterApplied", "sortApplied"] }, { kind: "component", type: QueueFilterDropdownComponent, selector: "lib-queue-filter-dropdown", inputs: ["appliedFilters"], outputs: ["filterApplied", "filtersCleared"] }] });
6132
6397
  }
6133
6398
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: QueueContainerComponent, decorators: [{
6134
6399
  type: Component,
6135
- args: [{ selector: 'lib-queue-container', standalone: false, template: "<div class=\"container grid m-0 h-full\">\n <div class=\"col-12 xl:col-2 md:col-12 py-0 h-full\">\n <app-queue-list\n [queueData]=\"filteredQueueData\"\n [selectedQueueId]=\"selectedQueueId\"\n [selectedStatus]=\"selectedStatus\"\n [userRole]=\"userRole\"\n [showQueueDataForm]=\"true\"\n (queueSelected)=\"onQueueSelected($event)\"\n (statusChanged)=\"onStatusChanged($event)\"\n (insertQueueRequested)=\"onInsertQueueRequested()\"\n ></app-queue-list>\n </div>\n <div class=\"col-12 xl:col-10 md:col-12 py-0 h-full\">\n \n @if(selectedQueue){\n <div class=\"flex justify-content-between align-items-center mb-3\">\n <div class=\"col-6 p-0\">\n <div class=\"searchbar-wrapper\">\n <queue-search \n [searchText]=\"searchText\"\n (searchInputChanged)=\"onSearchInputChanged($event)\"\n (searchRequested)=\"onSearchRequested($event)\"\n (searchCleared)=\"onSearchCleared()\">\n </queue-search>\n </div>\n </div>\n <div class=\"d-flex justify-content-end\">\n <ng-content select=\"[user-dropdown]\"></ng-content>\n </div>\n </div>\n\n <div class=\"animation-duration-500 associated-list h-full card mb-0 p-0\">\n <app-queue-record-table\n [table]=\"table\"\n [metaData]=\"metaData\"\n [loading]=\"loading\"\n [selectedRows]=\"selectedRows\"\n [tableHeight]=\"tableHeight\"\n (selectionChange)=\"onTableSelectionChange($event)\"\n (selectedRowsData)=\"onTableSelectionChange($event)\"\n (assignmentDataReady)=\"onAssignmentDataReady($event)\"\n (rowClick)=\"onTableRowClick($event)\"\n (paginationChanged)=\"onPaginationChanged($event)\"\n (filterApplied)=\"onFilterApplied($event)\"\n (sortApplied)=\"onSortApplied($event)\">\n </app-queue-record-table>\n </div>\n\n }\n </div>\n\n </div>", styles: [".custom-scroll{overflow-y:hidden}.custom-scroll:hover{overflow-y:auto}\n"] }]
6400
+ args: [{ selector: 'lib-queue-container', standalone: false, template: "<div class=\"container grid m-0 h-full\">\r\n <div class=\"col-12 xl:col-2 md:col-12 py-0 h-full\">\r\n <app-queue-list\r\n [queueData]=\"filteredQueueData\"\r\n [selectedQueueId]=\"selectedQueueId\"\r\n [selectedStatus]=\"selectedStatus\"\r\n [userRole]=\"userRole\"\r\n [showQueueDataForm]=\"true\"\r\n (queueSelected)=\"onQueueSelected($event)\"\r\n (statusChanged)=\"onStatusChanged($event)\"\r\n (insertQueueRequested)=\"onInsertQueueRequested()\"\r\n ></app-queue-list>\r\n </div>\r\n <div class=\"col-12 xl:col-10 md:col-12 py-0 h-full\">\r\n \r\n @if(selectedQueue){\r\n <div class=\"flex justify-content-between align-items-center mb-3\">\r\n <div class=\"col-8 p-0 flex align-items-center \" >\r\n <div class=\"col-7 searchbar-wrapper\">\r\n <queue-search \r\n [placeholder]=\"placeholder\"\r\n [searchText]=\"searchText\"\r\n (searchInputChanged)=\"onSearchInputChanged($event)\"\r\n (searchRequested)=\"onSearchRequested($event)\"\r\n (searchCleared)=\"onSearchCleared()\">\r\n </queue-search>\r\n </div>\r\n <div>\r\n <lib-queue-filter-dropdown \r\n #filterDropdown\r\n [appliedFilters]=\"appliedFilters\"\r\n (filterApplied)=\"onFilterDropdownApplied($event)\"\r\n (filtersCleared)=\"onFiltersCleared()\">\r\n </lib-queue-filter-dropdown>\r\n </div>\r\n <div>\r\n <button \r\n class=\"clear-filters-btn\"\r\n type=\"button\"\r\n (click)=\"onClearAllFilters()\">\r\n Clear <i class=\"pi pi-times ml-2\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"d-flex align-items-center gap-3 justify-content-end\">\r\n <ng-content select=\"[user-dropdown]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"animation-duration-500 associated-list h-full card mb-0 p-0\">\r\n <app-queue-record-table\r\n [table]=\"table\"\r\n [metaData]=\"metaData\"\r\n [loading]=\"loading\"\r\n [selectedRows]=\"selectedRows\"\r\n (selectionChange)=\"onTableSelectionChange($event)\"\r\n (selectedRowsData)=\"onTableSelectionChange($event)\"\r\n (assignmentDataReady)=\"onAssignmentDataReady($event)\"\r\n (rowClick)=\"onTableRowClick($event)\"\r\n (paginationChanged)=\"onPaginationChanged($event)\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (sortApplied)=\"onSortApplied($event)\">\r\n </app-queue-record-table>\r\n </div>\r\n\r\n }\r\n </div>\r\n\r\n </div>", styles: [".custom-scroll{overflow-y:hidden}.custom-scroll:hover{overflow-y:auto}.clear-filters-btn{background:none;border:none;color:#2196f3;font-size:1.1rem;cursor:pointer;margin-left:.5rem;display:inline-flex;align-items:center;padding:0}.clear-filters-btn .clear-x{font-size:1.2rem;margin-left:.2rem;line-height:1}\n"] }]
6136
6401
  }], ctorParameters: () => [{ type: QueueStore }, { type: QueueService }, { type: BaseStore }, { type: QueueBusinessService }, { type: QueueRecordTableBuilderService }], propDecorators: { tableHeight: [{
6137
6402
  type: Input
6403
+ }], placeholder: [{
6404
+ type: Input
6405
+ }], filterDropdown: [{
6406
+ type: ViewChild,
6407
+ args: ['filterDropdown']
6138
6408
  }], selectedRowsInput: [{
6139
6409
  type: Input
6140
6410
  }], assignmentComplete: [{
@@ -6178,7 +6448,8 @@ class QueueModule {
6178
6448
  QueueSearchComponent,
6179
6449
  QueueItemComponent,
6180
6450
  QueueListComponent,
6181
- QueueRecordTableComponent], imports: [CommonModule,
6451
+ QueueRecordTableComponent,
6452
+ QueueFilterDropdownComponent], imports: [CommonModule,
6182
6453
  QueueRoutingModule,
6183
6454
  FormsModule,
6184
6455
  DropdownModule,
@@ -6205,7 +6476,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
6205
6476
  QueueSearchComponent,
6206
6477
  QueueItemComponent,
6207
6478
  QueueListComponent,
6208
- QueueRecordTableComponent
6479
+ QueueRecordTableComponent,
6480
+ QueueFilterDropdownComponent
6209
6481
  ],
6210
6482
  imports: [
6211
6483
  CommonModule,