cat-qw-lib 2.6.2 → 2.6.6

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.
Files changed (25) hide show
  1. package/README.md +63 -63
  2. package/fesm2022/cat-qw-lib.mjs +986 -237
  3. package/fesm2022/cat-qw-lib.mjs.map +1 -1
  4. package/lib/admin/widget-admin/components/widget-admin-form/widget-admin-form.component.d.ts +4 -0
  5. package/lib/admin/widget-admin/models/widget.model.d.ts +9 -0
  6. package/lib/queue/components/queue-container/queue-container.component.d.ts +3 -0
  7. package/lib/queue/components/queue-filter-dropdown/queue-filter-dropdown.component.d.ts +8 -2
  8. package/lib/queue/components/queue-record-table/queue-record-table.component.d.ts +2 -1
  9. package/lib/queue/queue.module.d.ts +2 -1
  10. package/lib/queue/services/queue-filter-dropdown.service.d.ts +32 -1
  11. package/lib/queue/services/queue-record-table-builder.service.d.ts +16 -1
  12. package/lib/queue/state/queue.service.d.ts +1 -0
  13. package/lib/shared/components/skeleton/skeleton.component.d.ts +13 -0
  14. package/lib/shared/constant/ROUTES.d.ts +1 -0
  15. package/lib/shared/constant/SHARED.d.ts +15 -0
  16. package/lib/shared/services/app-config.service.d.ts +1 -0
  17. package/lib/shared/table-secondary/components/table-secondary.component.d.ts +25 -13
  18. package/lib/widget/components/widget-container/widget-container.component.d.ts +2 -1
  19. package/lib/widget/components/widget-header/widget-header.component.d.ts +15 -1
  20. package/lib/widget/components/widget-item/widget-item.component.d.ts +18 -0
  21. package/lib/widget/components/widget-main/widget-main.component.d.ts +2 -1
  22. package/lib/widget/components/widget-row-tile/widget-row-tile.component.d.ts +21 -3
  23. package/lib/widget/models/widget.model.d.ts +42 -0
  24. package/package.json +1 -1
  25. package/src/assets/icons/confirm-icon.svg +4 -4
@@ -26,6 +26,7 @@ export declare class WidgetAdminFormComponent extends BaseFormComponent<WidgetMo
26
26
  headerDictionaryItems: any[];
27
27
  subHeaderDictionaryItems: any[];
28
28
  dictionaryItemArray: any[][];
29
+ badgeDictionaryItemArray: any[][];
29
30
  widgetOptionsArray: SelectItem[];
30
31
  widgetLayoutTypeList: WidgetLayoutTypeModel[];
31
32
  constructor(service: WidgetAdminService, validatorService: ValidatorService, widgetStore: WidgetAdminStore, query: WidgetAdminQuery, router: Router, activatedRoute: ActivatedRoute, baseStore: BaseStore<WidgetModel>, baseQuery: BaseQuery<WidgetModel>);
@@ -35,6 +36,9 @@ export declare class WidgetAdminFormComponent extends BaseFormComponent<WidgetMo
35
36
  handleHeaderDictionarySelect(dictionaryId: string): void;
36
37
  handleSubHeaderDictionarySelect(dictionaryId: any): void;
37
38
  handleWidgetItemDictionarySelect(dictionaryId: any, index: number): void;
39
+ handleBadgeAddBtnClick(): void;
40
+ handleBadgeDictionarySelect(dictionaryId: any, index: number): void;
41
+ handleDeleteBadge(index: number): void;
38
42
  handleDeleteRecord(index: number): void;
39
43
  handleSubmit(): void;
40
44
  ngOnDestroy(): void;
@@ -6,6 +6,7 @@ export declare class WidgetModel extends BaseModel {
6
6
  name: string;
7
7
  apiConfigId: string;
8
8
  dataItems: WidgetItemModel[];
9
+ badges: BadgeModel[];
9
10
  order?: number;
10
11
  headerDictionaryID: string;
11
12
  subHeaderDictionaryID: string;
@@ -25,6 +26,14 @@ export declare class WidgetItemModel extends BaseModel {
25
26
  style?: any;
26
27
  isActive: boolean;
27
28
  }
29
+ /**
30
+ * BadgeModel class represents the model of a badge.
31
+ */
32
+ export declare class BadgeModel {
33
+ dictionaryItemID: string;
34
+ dictionaryID: string;
35
+ style?: any;
36
+ }
28
37
  export interface WidgetLayoutTypeModel {
29
38
  name: string;
30
39
  value: string;
@@ -44,6 +44,7 @@ export declare class QueueContainerComponent extends BaseContainerComponent<Queu
44
44
  searchText: string;
45
45
  sortBy: string;
46
46
  sortOrder: number;
47
+ isShowSkeleton: boolean;
47
48
  resetSort: boolean;
48
49
  appliedFilters: any;
49
50
  placeholder: string;
@@ -102,6 +103,8 @@ export declare class QueueContainerComponent extends BaseContainerComponent<Queu
102
103
  private resetPage;
103
104
  private clearSelection;
104
105
  private clearFilters;
106
+ private isReferredQueue;
107
+ private getDefaultSortOrder;
105
108
  onSearchTermChanged(searchTerm: string): void;
106
109
  onSelectionChange(selection: any[]): void;
107
110
  onAssignmentComplete(event: {
@@ -1,10 +1,10 @@
1
- import { ElementRef, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
1
+ import { ElementRef, EventEmitter, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';
2
2
  import { QueueFilterDropdownService, RiskRating, ApplicationType, PurchaseType, TaskStatus, QueueFilter, EPC } from '../../services/queue-filter-dropdown.service';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  *
6
6
  */
7
- export declare class QueueFilterDropdownComponent implements OnChanges {
7
+ export declare class QueueFilterDropdownComponent implements OnChanges, OnDestroy {
8
8
  filterService: QueueFilterDropdownService;
9
9
  showDropdown: boolean;
10
10
  dropdownPanel: ElementRef;
@@ -15,14 +15,19 @@ export declare class QueueFilterDropdownComponent implements OnChanges {
15
15
  id: string;
16
16
  name: string;
17
17
  }>;
18
+ loadingUnderwriters: boolean;
18
19
  filters: QueueFilter;
20
+ private searchSubscription?;
19
21
  appliedFilters: any;
20
22
  filterApplied: EventEmitter<any>;
21
23
  filtersCleared: EventEmitter<void>;
22
24
  constructor(filterService: QueueFilterDropdownService);
23
25
  ngOnChanges(changes: SimpleChanges): void;
26
+ private setupSearchSubscription;
27
+ onUnderwriterFilter(event: any): void;
24
28
  get filterCount(): number;
25
29
  onFilterBtnClick(): void;
30
+ private loadUnderwriterOptions;
26
31
  setRiskRating(rating: RiskRating): void;
27
32
  setApplicationType(type: ApplicationType): void;
28
33
  setPurchaseType(type: PurchaseType): void;
@@ -39,6 +44,7 @@ export declare class QueueFilterDropdownComponent implements OnChanges {
39
44
  syncWithAppliedFilters(appliedFilters: any): void;
40
45
  private restoreOriginalFilters;
41
46
  onDocumentClick(event: MouseEvent): void;
47
+ ngOnDestroy(): void;
42
48
  static ɵfac: i0.ɵɵFactoryDeclaration<QueueFilterDropdownComponent, never>;
43
49
  static ɵcmp: i0.ɵɵComponentDeclaration<QueueFilterDropdownComponent, "lib-queue-filter-dropdown", never, { "appliedFilters": { "alias": "appliedFilters"; "required": false; }; }, { "filterApplied": "filterApplied"; "filtersCleared": "filtersCleared"; }, never, never, false, never>;
44
50
  }
@@ -11,6 +11,7 @@ export declare class QueueRecordTableComponent implements OnChanges {
11
11
  loading: boolean;
12
12
  selectedRows: any[];
13
13
  resetSort: boolean;
14
+ isShowSkeleton: boolean;
14
15
  selectedQueue: any;
15
16
  selectionChange: EventEmitter<any[]>;
16
17
  selectedRowsData: EventEmitter<any[]>;
@@ -31,5 +32,5 @@ export declare class QueueRecordTableComponent implements OnChanges {
31
32
  get hasData(): boolean;
32
33
  get selectedCount(): number;
33
34
  static ɵfac: i0.ɵɵFactoryDeclaration<QueueRecordTableComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<QueueRecordTableComponent, "app-queue-record-table", never, { "table": { "alias": "table"; "required": false; }; "metaData": { "alias": "metaData"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "selectedRows": { "alias": "selectedRows"; "required": false; }; "resetSort": { "alias": "resetSort"; "required": false; }; "selectedQueue": { "alias": "selectedQueue"; "required": false; }; }, { "selectionChange": "selectionChange"; "selectedRowsData": "selectedRowsData"; "assignmentDataReady": "assignmentDataReady"; "rowClick": "rowClick"; "paginationChanged": "paginationChanged"; "filterApplied": "filterApplied"; "sortApplied": "sortApplied"; }, never, never, false, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<QueueRecordTableComponent, "app-queue-record-table", never, { "table": { "alias": "table"; "required": false; }; "metaData": { "alias": "metaData"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "selectedRows": { "alias": "selectedRows"; "required": false; }; "resetSort": { "alias": "resetSort"; "required": false; }; "isShowSkeleton": { "alias": "isShowSkeleton"; "required": false; }; "selectedQueue": { "alias": "selectedQueue"; "required": false; }; }, { "selectionChange": "selectionChange"; "selectedRowsData": "selectedRowsData"; "assignmentDataReady": "assignmentDataReady"; "rowClick": "rowClick"; "paginationChanged": "paginationChanged"; "filterApplied": "filterApplied"; "sortApplied": "sortApplied"; }, never, never, false, never>;
35
36
  }
@@ -18,8 +18,9 @@ import * as i16 from "primeng/paginator";
18
18
  import * as i17 from "../shared/shared.module";
19
19
  import * as i18 from "primeng/tag";
20
20
  import * as i19 from "../shared/table-secondary/components/table-secondary.component";
21
+ import * as i20 from "../shared/components/skeleton/skeleton.component";
21
22
  export declare class QueueModule {
22
23
  static ɵfac: i0.ɵɵFactoryDeclaration<QueueModule, never>;
23
- static ɵmod: i0.ɵɵNgModuleDeclaration<QueueModule, [typeof i1.QueueContainerComponent, typeof i2.QueueSearchComponent, typeof i3.QueueItemComponent, typeof i4.QueueListComponent, typeof i5.QueueRecordTableComponent, typeof i6.QueueFilterDropdownComponent], [typeof i7.CommonModule, typeof i8.QueueRoutingModule, typeof i9.FormsModule, typeof i10.DropdownModule, typeof i11.MultiSelectModule, typeof i12.RippleModule, typeof i13.ButtonModule, typeof i14.RouterModule, typeof i15.BadgeModule, typeof i16.PaginatorModule, typeof i17.SharedModule, typeof i18.TagModule, typeof i19.TableSecondaryComponent], [typeof i1.QueueContainerComponent]>;
24
+ static ɵmod: i0.ɵɵNgModuleDeclaration<QueueModule, [typeof i1.QueueContainerComponent, typeof i2.QueueSearchComponent, typeof i3.QueueItemComponent, typeof i4.QueueListComponent, typeof i5.QueueRecordTableComponent, typeof i6.QueueFilterDropdownComponent], [typeof i7.CommonModule, typeof i8.QueueRoutingModule, typeof i9.FormsModule, typeof i10.DropdownModule, typeof i11.MultiSelectModule, typeof i12.RippleModule, typeof i13.ButtonModule, typeof i14.RouterModule, typeof i15.BadgeModule, typeof i16.PaginatorModule, typeof i17.SharedModule, typeof i18.TagModule, typeof i19.TableSecondaryComponent, typeof i20.SkeletonComponent], [typeof i1.QueueContainerComponent]>;
24
25
  static ɵinj: i0.ɵɵInjectorDeclaration<QueueModule>;
25
26
  }
@@ -1,3 +1,7 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { BaseService, AppConfigService, BaseStore } from '../../shared';
4
+ import { ListService } from '../../shared/services/list.service';
1
5
  import * as i0 from "@angular/core";
2
6
  export type RiskRating = 'Low' | 'Medium' | 'High';
3
7
  export type ApplicationType = 'BTL' | 'HPP';
@@ -18,10 +22,21 @@ export interface QueueFilter {
18
22
  pendingDays: number | null;
19
23
  assignedUnderwriter: string[];
20
24
  }
25
+ export interface UnderwriterOption {
26
+ id: string;
27
+ name: string;
28
+ }
21
29
  /**
22
30
  *
23
31
  */
24
- export declare class QueueFilterDropdownService {
32
+ export declare class QueueFilterDropdownService extends BaseService<any> {
33
+ private configService;
34
+ private searchSubject;
35
+ constructor(http: HttpClient, configService: AppConfigService, store: BaseStore<any>, listService: ListService);
36
+ /**
37
+ * Override apiUrl to use the main API URL instead of catQwUrl
38
+ */
39
+ get apiUrl(): string;
25
40
  private filter;
26
41
  setRiskRating(rating: RiskRating): void;
27
42
  setApplicationType(type: ApplicationType): void;
@@ -44,6 +59,22 @@ export declare class QueueFilterDropdownService {
44
59
  * Maps UI filter values to API parameters.
45
60
  */
46
61
  buildFilterQueryString(filters: QueueFilter): string;
62
+ /**
63
+ * Fetches underwriter options from the API based on search key
64
+ * @param {string} searchKey - The search term to filter underwriters
65
+ * @returns {Observable<UnderwriterOption[]>} Observable of underwriter options array
66
+ */
67
+ getUnderwritersList(searchKey?: string): Observable<UnderwriterOption[]>;
68
+ /**
69
+ * Triggers a search for underwriters with debounce
70
+ * @param {string} searchKey - The search term to filter underwriters
71
+ */
72
+ searchUnderwriters(searchKey?: string): void;
73
+ /**
74
+ * Returns an Observable that emits underwriter options with debounce and distinctUntilChanged
75
+ * @returns {Observable<UnderwriterOption[]>} Observable of underwriter options array
76
+ */
77
+ getUnderwritersSearchObservable(): Observable<UnderwriterOption[]>;
47
78
  static ɵfac: i0.ɵɵFactoryDeclaration<QueueFilterDropdownService, never>;
48
79
  static ɵprov: i0.ɵɵInjectableDeclaration<QueueFilterDropdownService>;
49
80
  }
@@ -6,9 +6,24 @@ import * as i0 from "@angular/core";
6
6
  */
7
7
  export declare class QueueRecordTableBuilderService extends TableBuilder {
8
8
  private columnStyles;
9
+ private deriveChipVariantFromDays;
10
+ /**
11
+ * Maps valuation status to icon and color configuration
12
+ */
13
+ private getValuationStatusConfig;
14
+ /**
15
+ * Truncates text to specified length with ellipsis
16
+ * @param {string} text - Text to truncate
17
+ * @param {number} maxLength - Maximum length before truncation
18
+ * @returns {string} Truncated text
19
+ */
20
+ private truncateText;
21
+ private getColumnOrder;
9
22
  buildSecondaryTable(records: any[], headerWidths?: {
10
23
  [key: string]: string;
11
- }, editPermission?: string, deletePermission?: string): TableSecondaryModel;
24
+ }, editPermission?: string, deletePermission?: string, options?: {
25
+ isReferredQueue?: boolean;
26
+ }): TableSecondaryModel;
12
27
  static ɵfac: i0.ɵɵFactoryDeclaration<QueueRecordTableBuilderService, never>;
13
28
  static ɵprov: i0.ɵɵInjectableDeclaration<QueueRecordTableBuilderService>;
14
29
  }
@@ -30,6 +30,7 @@ export declare class QueueService extends BaseService<QueueModel> {
30
30
  /**
31
31
  * Fetches paginated queue records using the provided apiConfig URL with search and pagination support.
32
32
  * This is the unified method used for both initial data loading and search functionality.
33
+ * Uses POST method with underwriterIds and unassigned in body, other params in query string.
33
34
  * @param {string} apiConfig - The full API endpoint to fetch records for the selected queue
34
35
  * @param {string} [searchKey] - Optional search term
35
36
  * @param {number} [page] - Page number (default: 1)
@@ -0,0 +1,13 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class SkeletonComponent implements OnInit {
4
+ products: any[];
5
+ count: number;
6
+ columns: any;
7
+ width: string;
8
+ height: string;
9
+ isAllowCard: boolean;
10
+ ngOnInit(): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkeletonComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkeletonComponent, "lib-skeleton", never, { "count": { "alias": "count"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "isAllowCard": { "alias": "isAllowCard"; "required": false; }; }, {}, never, never, true, never>;
13
+ }
@@ -13,4 +13,5 @@ export declare class ROUTES {
13
13
  static DOCUMENTALERT: string;
14
14
  static VALIDATE_ACTIONS: string;
15
15
  static EVALUATE_BY_WIDGETNAME: string;
16
+ static GET_ALL_UNDERWRITER_TEAMLEAD: string;
16
17
  }
@@ -11,6 +11,8 @@ export declare class SHARED {
11
11
  static SUCCESS: string;
12
12
  static WARNING: string;
13
13
  static ERROR: string;
14
+ static DEFAULT: string;
15
+ static VULNERABLE: string;
14
16
  static ERROR_MESSAGE: string;
15
17
  static SUCCESS_MESSAGE: string;
16
18
  static DICTIONARY: string;
@@ -107,6 +109,9 @@ export declare class SHARED {
107
109
  static PRODUCT_ID: string;
108
110
  static EXPENDITURE: string;
109
111
  static INCOME: string;
112
+ static VALUATION: string;
113
+ static VALUATIONID: string;
114
+ static BROKERCOMPANY_NAME: string;
110
115
  static WIDGET_NAME: string;
111
116
  static IS_MENU: string;
112
117
  static ON_WIDGET_UPDATE: string;
@@ -114,6 +119,11 @@ export declare class SHARED {
114
119
  static APPLICANTS: string;
115
120
  static BROKER_NAME: string;
116
121
  static SECURITY_ADDRESS: string;
122
+ static SLA: string;
123
+ static REFERRED_DATE: string;
124
+ static REFERRED: string;
125
+ static FINANCE: string;
126
+ static VALUATION_STATUS: string;
117
127
  static TASKS: string;
118
128
  static TASK_BROKER_LABEL: string;
119
129
  static TASK_UNDERWRITER_LABEL: string;
@@ -124,6 +134,7 @@ export declare class SHARED {
124
134
  static TASK_COMPLETION_PERCENT: string;
125
135
  static RISK_RATING: string;
126
136
  static LENDING: string;
137
+ static UNASSIGNED_UNDERWRITER_ID: string;
127
138
  }
128
139
  export declare const widgetLayoutTypeList: {
129
140
  name: string;
@@ -279,9 +290,13 @@ export declare const QUEUE_RECORD_TABLE_COLUMN_WIDTH_LIST: {
279
290
  securityAddress: string;
280
291
  applicants: string;
281
292
  finance: string;
293
+ valuationStatus: string;
294
+ sla: string;
295
+ referredDate: string;
282
296
  appId: string;
283
297
  tasks: string;
284
298
  };
285
299
  export declare const FIELD_DISPLAY_NAMES: {
286
300
  [key: string]: string;
287
301
  };
302
+ export declare const QUEUE_RECORD_TABLE_COLUMN_ORDER: string[];
@@ -11,6 +11,7 @@ export declare class AppConfigService {
11
11
  loadAppConfig(): Promise<void>;
12
12
  private ensureConfigLoaded;
13
13
  get apiBaseUrl(): any;
14
+ get apiUrl(): any;
14
15
  get interactBaseApi(): any;
15
16
  get visibilityOptions(): any;
16
17
  get swaggerUrl(): any;
@@ -31,6 +31,7 @@ export declare class TableSecondaryComponent implements OnInit, OnChanges, OnDes
31
31
  showSearchBar: boolean;
32
32
  showNewRecordButton: boolean;
33
33
  showRefreshButton: boolean;
34
+ isShowSkeleton: boolean;
34
35
  isSelectAll: boolean;
35
36
  pathName: string;
36
37
  selectionMode: 'single' | 'multiple' | undefined;
@@ -63,6 +64,7 @@ export declare class TableSecondaryComponent implements OnInit, OnChanges, OnDes
63
64
  allQueueList: any;
64
65
  selectedQueueName: string;
65
66
  columnStyles: any;
67
+ private expressionCache;
66
68
  constructor(_router: Router, service: BaseService<any>, sessionService: SessionService, baseQuery: BaseQuery<any>, baseStore: BaseStore<any>, queueBusinessService: QueueBusinessService, queueQuery: QueueQuery);
67
69
  /**
68
70
  * Lifecycle hook that is called after data-bound properties are initialized.
@@ -97,22 +99,12 @@ export declare class TableSecondaryComponent implements OnInit, OnChanges, OnDes
97
99
  handleEditClick(id: number): void;
98
100
  get isAllCurrentPageSelected(): boolean;
99
101
  handleSelectAllRowData(checked: boolean): void;
100
- /**
101
- * Logs row data intended for editing.
102
- * @param {any} rowData - The data of the row to edit.
103
- */
104
- editRow(rowData: any): void;
105
102
  /**
106
103
  * Handles the deletion of a row by emitting the row data and preventing event propagation.
107
104
  * @param {Event} event - The DOM event triggered by the delete action.
108
105
  * @param {any} rowData - The data object of the row to be deleted.
109
106
  */
110
107
  deleteRow(event: Event, rowData: any): void;
111
- /**
112
- * Logs row data intended for viewing.
113
- * @param {any} rowData - The data of the row to view.
114
- */
115
- viewRow(rowData: any): void;
116
108
  /**
117
109
  * Returns CSS class for a table cell based on its content.
118
110
  * @param {any} col - The column definition.
@@ -167,19 +159,39 @@ export declare class TableSecondaryComponent implements OnInit, OnChanges, OnDes
167
159
  isTaskItemsArray(val: any): boolean;
168
160
  shouldShowValue(col: any, rowData: any): boolean;
169
161
  /**
170
- * Evaluates ngClass expression for dynamic styling
162
+ * Memoized expression evaluator - compiles and caches Function objects
163
+ * @param {string} expression - The expression to evaluate
164
+ * @param {any} rowData - The row data to use in evaluation
165
+ * @returns {any} The evaluated result
166
+ */
167
+ private evaluateExpression;
168
+ /**
169
+ * Evaluates ngClass expression for dynamic styling with memoization
171
170
  * @param {string} expression - The ngClass expression to evaluate
172
171
  * @param {any} rowData - The row data to use in evaluation
173
172
  * @returns {string} The evaluated CSS classes
174
173
  */
175
174
  evaluateNgClass(expression: string, rowData: any): string;
176
175
  /**
177
- * Evaluates ngStyle expression for dynamic inline styles
176
+ * Evaluates ngStyle expression for dynamic inline styles with memoization
178
177
  * @param {string} expression - The ngStyle expression to evaluate
179
178
  * @param {any} rowData - The row data to use in evaluation
180
179
  * @returns {any} The evaluated style object
181
180
  */
182
181
  evaluateNgStyle(expression: string, rowData: any): any;
182
+ getLine1DisplayClasses(col: any, rowData: any): string;
183
+ private shouldRenderChip;
184
+ private getChipVariantClass;
185
+ private resolveChipVariant;
186
+ private evaluateGenericExpression;
187
+ /**
188
+ * Generic method to get column class (container or text) from config
189
+ * @param {string} columnName - The column name (e.g., 'lending', 'riskRating')
190
+ * @param {string} value - The value to evaluate
191
+ * @param {'container' | 'text'} type - The type of class to retrieve
192
+ * @returns {string} The evaluated CSS class
193
+ */
194
+ getColumnClass(columnName: string, value: string, type: 'container' | 'text'): string;
183
195
  getTypeContainerClass(typeValue: string): string;
184
196
  getTypeTextClass(typeValue: string): string;
185
197
  getRiskContainerClass(riskValue: string): string;
@@ -187,5 +199,5 @@ export declare class TableSecondaryComponent implements OnInit, OnChanges, OnDes
187
199
  getColumnAlignment(columnName: string): string;
188
200
  getSwitchCase(rowData: any, col: any): string;
189
201
  static ɵfac: i0.ɵɵFactoryDeclaration<TableSecondaryComponent, never>;
190
- static ɵcmp: i0.ɵɵComponentDeclaration<TableSecondaryComponent, "lib-table-secondary", never, { "table": { "alias": "table"; "required": false; }; "metaData": { "alias": "metaData"; "required": false; }; "title": { "alias": "title"; "required": false; }; "builder": { "alias": "builder"; "required": false; }; "showStatus": { "alias": "showStatus"; "required": false; }; "showActions": { "alias": "showActions"; "required": false; }; "showSearchBar": { "alias": "showSearchBar"; "required": false; }; "showNewRecordButton": { "alias": "showNewRecordButton"; "required": false; }; "showRefreshButton": { "alias": "showRefreshButton"; "required": false; }; "pathName": { "alias": "pathName"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "usePagination": { "alias": "usePagination"; "required": false; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; }; "rowSelection": { "alias": "rowSelection"; "required": false; }; "enableSelection": { "alias": "enableSelection"; "required": false; }; "noRecordsMessage": { "alias": "noRecordsMessage"; "required": false; }; "sortField": { "alias": "sortField"; "required": false; }; "sortOrder": { "alias": "sortOrder"; "required": false; }; "searchTerm": { "alias": "searchTerm"; "required": false; }; "filterQuery": { "alias": "filterQuery"; "required": false; }; }, { "selectionChange": "selectionChange"; "rowSelectionChange": "rowSelectionChange"; "sortChanged": "sortChanged"; "onDeleteRow": "onDeleteRow"; "onPage": "onPage"; }, never, never, true, never>;
202
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableSecondaryComponent, "lib-table-secondary", never, { "table": { "alias": "table"; "required": false; }; "metaData": { "alias": "metaData"; "required": false; }; "title": { "alias": "title"; "required": false; }; "builder": { "alias": "builder"; "required": false; }; "showStatus": { "alias": "showStatus"; "required": false; }; "showActions": { "alias": "showActions"; "required": false; }; "showSearchBar": { "alias": "showSearchBar"; "required": false; }; "showNewRecordButton": { "alias": "showNewRecordButton"; "required": false; }; "showRefreshButton": { "alias": "showRefreshButton"; "required": false; }; "isShowSkeleton": { "alias": "isShowSkeleton"; "required": false; }; "pathName": { "alias": "pathName"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "usePagination": { "alias": "usePagination"; "required": false; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; }; "rowSelection": { "alias": "rowSelection"; "required": false; }; "enableSelection": { "alias": "enableSelection"; "required": false; }; "noRecordsMessage": { "alias": "noRecordsMessage"; "required": false; }; "sortField": { "alias": "sortField"; "required": false; }; "sortOrder": { "alias": "sortOrder"; "required": false; }; "searchTerm": { "alias": "searchTerm"; "required": false; }; "filterQuery": { "alias": "filterQuery"; "required": false; }; }, { "selectionChange": "selectionChange"; "rowSelectionChange": "rowSelectionChange"; "sortChanged": "sortChanged"; "onDeleteRow": "onDeleteRow"; "onPage": "onPage"; }, never, never, true, never>;
191
203
  }
@@ -16,6 +16,7 @@ export declare class WidgetContainerComponent implements OnInit, OnChanges, OnDe
16
16
  widgetName: string;
17
17
  recordId: string;
18
18
  onWidgetUpdate: any;
19
+ isFullHeight: boolean;
19
20
  onViewAllDetails: EventEmitter<any>;
20
21
  onWidgetEventClick: EventEmitter<any>;
21
22
  onWidgetItemClick: EventEmitter<any>;
@@ -28,5 +29,5 @@ export declare class WidgetContainerComponent implements OnInit, OnChanges, OnDe
28
29
  handleWidgetItemClick(event: any): void;
29
30
  ngOnDestroy(): void;
30
31
  static ɵfac: i0.ɵɵFactoryDeclaration<WidgetContainerComponent, never>;
31
- static ɵcmp: i0.ɵɵComponentDeclaration<WidgetContainerComponent, "lib-widget-container", never, { "isMenu": { "alias": "isMenu"; "required": false; }; "offerWidgetData": { "alias": "offerWidgetData"; "required": false; }; "valuationWidgetData": { "alias": "valuationWidgetData"; "required": false; }; "widgetName": { "alias": "widgetName"; "required": false; }; "recordId": { "alias": "recordId"; "required": false; }; "onWidgetUpdate": { "alias": "onWidgetUpdate"; "required": false; }; }, { "onViewAllDetails": "onViewAllDetails"; "onWidgetEventClick": "onWidgetEventClick"; "onWidgetItemClick": "onWidgetItemClick"; "onUpdatedWidgetList": "onUpdatedWidgetList"; }, never, never, false, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<WidgetContainerComponent, "lib-widget-container", never, { "isMenu": { "alias": "isMenu"; "required": false; }; "offerWidgetData": { "alias": "offerWidgetData"; "required": false; }; "valuationWidgetData": { "alias": "valuationWidgetData"; "required": false; }; "widgetName": { "alias": "widgetName"; "required": false; }; "recordId": { "alias": "recordId"; "required": false; }; "onWidgetUpdate": { "alias": "onWidgetUpdate"; "required": false; }; "isFullHeight": { "alias": "isFullHeight"; "required": false; }; }, { "onViewAllDetails": "onViewAllDetails"; "onWidgetEventClick": "onWidgetEventClick"; "onWidgetItemClick": "onWidgetItemClick"; "onUpdatedWidgetList": "onUpdatedWidgetList"; }, never, never, false, never>;
32
33
  }
@@ -1,5 +1,5 @@
1
1
  import { OnChanges, SimpleChanges } from '@angular/core';
2
- import { WidgetModel } from '../../models/widget.model';
2
+ import { WidgetModel, ProcessedBadgeConfig } from '../../models/widget.model';
3
3
  import { StyleBuilderService } from '../../../shared/services/style-builder.service';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class WidgetHeaderComponent implements OnChanges {
@@ -15,8 +15,22 @@ export declare class WidgetHeaderComponent implements OnChanges {
15
15
  [key: string]: any;
16
16
  };
17
17
  headerIconClass: string;
18
+ processedBadges: ProcessedBadgeConfig[];
19
+ widgetStatusIconClass: string;
20
+ widgetStatusIconClassExpression: string;
21
+ widgetStatusIconStyle: {
22
+ [key: string]: any;
23
+ };
24
+ widgetStatusIconStyleExpression: {
25
+ [key: string]: any;
26
+ };
27
+ mergedWidgetStatusIconStyle: {
28
+ [key: string]: any;
29
+ };
18
30
  constructor(styleBulderService: StyleBuilderService);
19
31
  ngOnChanges(changes: SimpleChanges): void;
32
+ private processWidgetStatusIcon;
33
+ private processBadges;
20
34
  static ɵfac: i0.ɵɵFactoryDeclaration<WidgetHeaderComponent, never>;
21
35
  static ɵcmp: i0.ɵɵComponentDeclaration<WidgetHeaderComponent, "lib-widget-header", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, false, never>;
22
36
  }
@@ -12,6 +12,7 @@ export declare class WidgetItemComponent implements OnInit, OnChanges, OnDestroy
12
12
  widget: WidgetModel;
13
13
  application: any;
14
14
  widgetKey: string;
15
+ isEmptyValueHidden: boolean;
15
16
  keyClass: string;
16
17
  valueClass: string;
17
18
  fieldKeyStyle: {
@@ -46,10 +47,20 @@ export declare class WidgetItemComponent implements OnInit, OnChanges, OnDestroy
46
47
  isMenu: boolean;
47
48
  valueIconClassExpression: string;
48
49
  private destroy$;
50
+ shouldShowItem: boolean;
51
+ hasContent: boolean;
52
+ isDateValue: boolean;
53
+ formattedDateValue: string;
54
+ hasHtmlContentValue: boolean;
49
55
  constructor(styleBulderService: StyleBuilderService, widgetStore: WidgetStore, widgetQuery: WidgetQuery);
50
56
  ngOnInit(): void;
51
57
  ngOnChanges(): void;
58
+ /**
59
+ * Computes all value-related properties once to avoid function calls in template
60
+ */
61
+ private computeValueProperties;
52
62
  handleIsMenu(): void;
63
+ handleIsEmptyValueHidden(): void;
53
64
  handleDynamicEvent(recordId: string): void;
54
65
  ngOnDestroy(): void;
55
66
  isDate(value: any): boolean;
@@ -60,6 +71,13 @@ export declare class WidgetItemComponent implements OnInit, OnChanges, OnDestroy
60
71
  * @returns true if there's meaningful content, false otherwise
61
72
  */
62
73
  hasHtmlContent(value: string): boolean;
74
+ /**
75
+ * Checks if the value has meaningful content (for both HTML and non-HTML values)
76
+ * @param value - The value to check
77
+ * @param isHtml - Whether the value is HTML content
78
+ * @returns true if there's meaningful content, false otherwise
79
+ */
80
+ hasValueContent(value: string, isHtml: boolean): boolean;
63
81
  formatDate(value: string): string;
64
82
  static ɵfac: i0.ɵɵFactoryDeclaration<WidgetItemComponent, never>;
65
83
  static ɵcmp: i0.ɵɵComponentDeclaration<WidgetItemComponent, "lib-widget-item", never, { "widgetItem": { "alias": "widgetItem"; "required": false; }; "widget": { "alias": "widget"; "required": false; }; "application": { "alias": "application"; "required": false; }; }, {}, never, never, false, never>;
@@ -7,6 +7,7 @@ export declare class WidgetMainComponent implements OnChanges {
7
7
  constructor(styleBulderService: StyleBuilderService);
8
8
  widget: WidgetModel;
9
9
  index: number;
10
+ isFullHeight: boolean;
10
11
  widgetStyle: {
11
12
  [key: string]: any;
12
13
  };
@@ -18,5 +19,5 @@ export declare class WidgetMainComponent implements OnChanges {
18
19
  };
19
20
  ngOnChanges(): void;
20
21
  static ɵfac: i0.ɵɵFactoryDeclaration<WidgetMainComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<WidgetMainComponent, "lib-widget-main", never, { "widget": { "alias": "widget"; "required": false; }; "index": { "alias": "index"; "required": false; }; }, {}, never, never, false, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<WidgetMainComponent, "lib-widget-main", never, { "widget": { "alias": "widget"; "required": false; }; "index": { "alias": "index"; "required": false; }; "isFullHeight": { "alias": "isFullHeight"; "required": false; }; }, {}, never, never, false, never>;
22
23
  }
@@ -1,7 +1,9 @@
1
- import { OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
1
+ import { EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, ChangeDetectorRef } from '@angular/core';
2
2
  import { WidgetModel } from '../../models/widget.model';
3
3
  import { WidgetService } from '../../state/widget.service';
4
4
  import { WidgetStore } from '../../state/widget.store';
5
+ import { WidgetQuery } from '../../state/widget.query';
6
+ import { StyleBuilderService } from '../../../shared/services/style-builder.service';
5
7
  import * as i0 from "@angular/core";
6
8
  /**
7
9
  * WidgetRowTileComponent is a component that displays a row of widgets in a tile format.
@@ -10,17 +12,33 @@ import * as i0 from "@angular/core";
10
12
  export declare class WidgetRowTileComponent implements OnInit, OnChanges, OnDestroy {
11
13
  private widgetService;
12
14
  private widgetStore;
15
+ private styleBulderService;
16
+ private cdr;
17
+ private widgetQuery;
13
18
  private destroy$;
14
19
  widgets: WidgetModel[];
15
20
  isLoading: boolean;
16
21
  recordId: string;
17
22
  widgetName: string;
18
23
  onWidgetUpdate: any;
19
- constructor(widgetService: WidgetService, widgetStore: WidgetStore);
24
+ isFullHeight: boolean;
25
+ onWidgetItemClick: EventEmitter<any>;
26
+ widgetCardStyle: {
27
+ [key: string]: any;
28
+ };
29
+ widgetCardStyleExpression: {
30
+ [key: string]: any;
31
+ };
32
+ widgetCombinedStyle: {
33
+ [key: string]: any;
34
+ };
35
+ constructor(widgetService: WidgetService, widgetStore: WidgetStore, styleBulderService: StyleBuilderService, cdr: ChangeDetectorRef, widgetQuery: WidgetQuery);
20
36
  ngOnInit(): void;
21
37
  ngOnChanges(changes: SimpleChanges): void;
22
38
  getWidgetItemList(): void;
39
+ handleWidgetItemClick(): void;
40
+ private updateWidgetStyles;
23
41
  ngOnDestroy(): void;
24
42
  static ɵfac: i0.ɵɵFactoryDeclaration<WidgetRowTileComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<WidgetRowTileComponent, "lib-widget-row-tile", never, { "recordId": { "alias": "recordId"; "required": false; }; "widgetName": { "alias": "widgetName"; "required": false; }; "onWidgetUpdate": { "alias": "onWidgetUpdate"; "required": false; }; }, {}, never, never, false, never>;
43
+ static ɵcmp: i0.ɵɵComponentDeclaration<WidgetRowTileComponent, "lib-widget-row-tile", never, { "recordId": { "alias": "recordId"; "required": false; }; "widgetName": { "alias": "widgetName"; "required": false; }; "onWidgetUpdate": { "alias": "onWidgetUpdate"; "required": false; }; "isFullHeight": { "alias": "isFullHeight"; "required": false; }; }, { "onWidgetItemClick": "onWidgetItemClick"; }, never, never, false, never>;
26
44
  }
@@ -1,6 +1,13 @@
1
1
  import { BaseModel } from "../../shared";
2
+ export interface WidgetBadge {
3
+ dictionaryItemID?: string;
4
+ dictionaryID?: string;
5
+ value?: string;
6
+ style?: BadgeStyleConfig;
7
+ }
2
8
  export interface WidgetModel extends BaseModel {
3
9
  dataItems: WidgetItem[];
10
+ badges?: WidgetBadge[];
4
11
  header: string;
5
12
  order: number;
6
13
  predefinedName: string | null;
@@ -10,6 +17,11 @@ export interface WidgetModel extends BaseModel {
10
17
  style: WidgetStyleConfig;
11
18
  isFormEnabled: boolean;
12
19
  recordId: string;
20
+ isEmptyLabelHidden?: boolean;
21
+ widgetStatusIconClass?: string;
22
+ widgetStatusIconStyle?: string;
23
+ widgetStatusIconClassExpression?: string;
24
+ widgetStatusIconStyleExpression?: string;
13
25
  }
14
26
  export interface WidgetItem {
15
27
  key: string;
@@ -47,3 +59,33 @@ export interface StyleConfig {
47
59
  valueIconClassExpression?: string;
48
60
  valueIconStyleExpression?: string;
49
61
  }
62
+ export interface BadgeStyleConfig {
63
+ valueClass?: string;
64
+ value?: string;
65
+ valueIconClass?: string;
66
+ valueIconClassExpression?: string;
67
+ valueIconStyleExpression?: string;
68
+ valueIconStyle?: string;
69
+ hasSeparator?: boolean;
70
+ isConfirmed?: string;
71
+ itemStyle?: string;
72
+ styleExpression?: string;
73
+ }
74
+ export interface ProcessedBadgeConfig {
75
+ value: string;
76
+ valueClass: string;
77
+ badgeStyle: {
78
+ [key: string]: any;
79
+ };
80
+ valueIconClass?: string;
81
+ valueIconStyle: {
82
+ [key: string]: any;
83
+ };
84
+ valueIconClassExpression?: string;
85
+ valueIconStyleExpression: {
86
+ [key: string]: any;
87
+ };
88
+ mergedValueIconStyle: {
89
+ [key: string]: any;
90
+ };
91
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cat-qw-lib",
3
- "version": "2.6.2",
3
+ "version": "2.6.6",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.0.0",
6
6
  "@angular/core": "^19.0.0"
@@ -1,4 +1,4 @@
1
- <svg width="15" height="16" viewBox="0 0 15 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M0.959961 7.91992C0.959961 4.05393 4.09397 0.919922 7.95996 0.919922C11.826 0.919922 14.96 4.05393 14.96 7.91992C14.96 11.7859 11.826 14.9199 7.95996 14.9199C4.09397 14.9199 0.959961 11.7859 0.959961 7.91992Z" fill="#22C55E"/>
3
- <path d="M7.12625 9.31121L11.1512 5.28621L11.7638 5.90746L7.12625 10.5537L4.34375 7.76246L4.95625 7.14996L7.12625 9.31121Z" fill="white"/>
4
- </svg>
1
+ <svg width="15" height="16" viewBox="0 0 15 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M0.959961 7.91992C0.959961 4.05393 4.09397 0.919922 7.95996 0.919922C11.826 0.919922 14.96 4.05393 14.96 7.91992C14.96 11.7859 11.826 14.9199 7.95996 14.9199C4.09397 14.9199 0.959961 11.7859 0.959961 7.91992Z" fill="#22C55E"/>
3
+ <path d="M7.12625 9.31121L11.1512 5.28621L11.7638 5.90746L7.12625 10.5537L4.34375 7.76246L4.95625 7.14996L7.12625 9.31121Z" fill="white"/>
4
+ </svg>