@rangertechnologies/ngnxt 2.1.352 → 2.1.354
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/rangertechnologies-ngnxt.mjs +575 -224
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/datatable/datatable.component.d.ts +129 -1
- package/lib/components/nxt-dropdown/nxt-dropdown.component.d.ts +1 -0
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.354.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.352.tgz +0 -0
|
@@ -6,6 +6,43 @@ import { ChangeService } from '../../services/change/change.service';
|
|
|
6
6
|
import { StorageService } from '../../services/storage/storage.service';
|
|
7
7
|
import { CountryService } from '../../services/country/country.service';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
|
+
/** Configuration for a single advanced-filter control. */
|
|
10
|
+
export interface AdvancedFilterConfig {
|
|
11
|
+
/** Data field path (supports dot-notation, e.g. 'employee.name'). */
|
|
12
|
+
field: string;
|
|
13
|
+
/** Human-readable label shown above the control. */
|
|
14
|
+
label: string;
|
|
15
|
+
/** Control type determines which reusable control is rendered. */
|
|
16
|
+
type: 'text' | 'date' | 'dropdown' | 'list';
|
|
17
|
+
/** Options list for 'dropdown' and 'searchDropdown' types.
|
|
18
|
+
* Each option should have the shape: { id, name, value, label, ... }
|
|
19
|
+
* Use `labelField` to pick the display property and `valueField` for the match value. */
|
|
20
|
+
options?: any[];
|
|
21
|
+
/** Placeholder text shown inside the control. */
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
/** Property on an option object used as display label (default: 'label'). */
|
|
24
|
+
labelField?: string;
|
|
25
|
+
/** Property on an option object used as the filter/match value (default: 'value').
|
|
26
|
+
* For searchDropdown, the emitted object `{ id, name, value }` is read with this key. */
|
|
27
|
+
valueField?: string;
|
|
28
|
+
/** CSS width for the control, e.g. '180px'. Defaults to 160px for text, 190px for dropdowns. */
|
|
29
|
+
width?: string;
|
|
30
|
+
/** Evaluation priority. Lower number runs first. Default: index order. */
|
|
31
|
+
priority?: number;
|
|
32
|
+
/** Pre-populate this filter with a default value on init. */
|
|
33
|
+
defaultValue?: any;
|
|
34
|
+
/** If true, the control is rendered in read-only/disabled state. */
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
/** If true, the filter item is not rendered in the bar. */
|
|
37
|
+
hidden?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** SKS1JUL26 Represents a date-range filter value for type:'date' fields. */
|
|
40
|
+
export interface AdvancedDateRange {
|
|
41
|
+
startDate: string;
|
|
42
|
+
endDate: string;
|
|
43
|
+
}
|
|
44
|
+
/** SKS1JUL26 Map of field -> current filter value (scalar or date-range). */
|
|
45
|
+
export type AdvancedFilterValues = Record<string, string | AdvancedDateRange | null>;
|
|
9
46
|
export declare class NxtDatatable {
|
|
10
47
|
private countryService;
|
|
11
48
|
private storageService;
|
|
@@ -68,6 +105,8 @@ export declare class NxtDatatable {
|
|
|
68
105
|
onlyView: boolean;
|
|
69
106
|
tableHeight: any;
|
|
70
107
|
serialNumberColumn: boolean;
|
|
108
|
+
/** SKS1JUL26 SKS1JUL26: Configuration array for the advanced filter bar. Each entry produces one filter control. */
|
|
109
|
+
advancedFilters: AdvancedFilterConfig[];
|
|
71
110
|
tableRowClick: EventEmitter<any>;
|
|
72
111
|
onEditData: EventEmitter<any>;
|
|
73
112
|
onSaveData: EventEmitter<any>;
|
|
@@ -164,6 +203,15 @@ export declare class NxtDatatable {
|
|
|
164
203
|
selectedIsEmpty: boolean;
|
|
165
204
|
private destroy$;
|
|
166
205
|
private timers;
|
|
206
|
+
/** Current values for every advanced filter control. */
|
|
207
|
+
advancedFilterValues: AdvancedFilterValues;
|
|
208
|
+
/**
|
|
209
|
+
* SKS1JUL26: Emits a JSON-serialised snapshot of advancedFilterValues
|
|
210
|
+
* so that debounceTime(300) + distinctUntilChanged() both work correctly.
|
|
211
|
+
* Subject<void> makes distinctUntilChanged useless because every emission
|
|
212
|
+
* looks the same. Subject<string> compares serialised state.
|
|
213
|
+
*/
|
|
214
|
+
private advancedFilter$;
|
|
167
215
|
constructor(countryService: CountryService, storageService: StorageService, cdRef: ChangeDetectorRef, translationService: TranslationService, renderer: Renderer2, dataService: DataService, changeService: ChangeService);
|
|
168
216
|
ngOnChanges(changes: SimpleChanges): void;
|
|
169
217
|
ngOnInit(): void;
|
|
@@ -239,6 +287,86 @@ export declare class NxtDatatable {
|
|
|
239
287
|
groupFilterEmit(event: any, from?: any): void;
|
|
240
288
|
groupFilterRetain(filterkey: any, from?: any): void;
|
|
241
289
|
changeAnnounce(event: any): void;
|
|
290
|
+
/**
|
|
291
|
+
* THE SINGLE UNIFIED FILTER PIPELINE (client-side mode).
|
|
292
|
+
*
|
|
293
|
+
* Pipeline order matches the documented priority:
|
|
294
|
+
* originalData
|
|
295
|
+
* 1. List View → sFilterData (managed by listViewEmit / ngOnChanges)
|
|
296
|
+
* 2. Advanced Filter → applyAdvancedFilters(sFilterData)
|
|
297
|
+
* 3. Global Search → searchBoxValue contains match
|
|
298
|
+
* 4. Column Filter → filterDataArray exact match
|
|
299
|
+
* 5. Sort → currentSortColumn / currentSortDirection
|
|
300
|
+
* 6. Pagination → pageIndex / pageSize → dataSource.data
|
|
301
|
+
*
|
|
302
|
+
* For server-side (pagination=true), we skip client filtering and just emit
|
|
303
|
+
* the full params object (including advancedFilterData) to the parent.
|
|
304
|
+
*
|
|
305
|
+
* All event handlers (onAdvancedFilterChange, applyFilter, filterRetain,
|
|
306
|
+
* checkedData, closefilter, pageParams) ultimately call this method so
|
|
307
|
+
* there is exactly ONE place where filtering logic lives.
|
|
308
|
+
*/
|
|
309
|
+
refreshTableData(from?: string): void;
|
|
310
|
+
/**
|
|
311
|
+
* Builds the `advancedFilterValues` map from the current `advancedFilters` config.
|
|
312
|
+
* Existing values are preserved if their field still exists in the new config.
|
|
313
|
+
* Respects `defaultValue` from the config for initial population.
|
|
314
|
+
*/
|
|
315
|
+
initializeAdvancedFilters(): void;
|
|
316
|
+
/**
|
|
317
|
+
* Called from the template whenever any advanced filter control changes.
|
|
318
|
+
*
|
|
319
|
+
* @param field - The data field this filter maps to
|
|
320
|
+
* @param value - New value:
|
|
321
|
+
* - text/dropdown: plain string
|
|
322
|
+
* - searchDropdown: scalar extracted via config.valueField from
|
|
323
|
+
* the emitted object shape `{ id, name, value, label, ... }`
|
|
324
|
+
* - date: ISO 8601 string from app-nxt-datepicker
|
|
325
|
+
* @param subKey - For date filters only: 'startDate' | 'endDate'
|
|
326
|
+
*/
|
|
327
|
+
onAdvancedFilterChange(field: string, value: any, subKey?: 'startDate' | 'endDate'): void;
|
|
328
|
+
/**
|
|
329
|
+
* Applies current advancedFilterValues against a data array.
|
|
330
|
+
* Returns a new filtered array — never mutates the input.
|
|
331
|
+
*
|
|
332
|
+
* Reuses existing helpers:
|
|
333
|
+
* - getObjValue() for field access
|
|
334
|
+
* - formatDateForSearch() for display-safe date formatting (NxtDatePipe)
|
|
335
|
+
*
|
|
336
|
+
* Date comparison uses formatDateForSearch() on both cell and filter values
|
|
337
|
+
* so timezone handling is consistent with the rest of the table.
|
|
338
|
+
*
|
|
339
|
+
* Filter logic per type:
|
|
340
|
+
* text → case-insensitive contains
|
|
341
|
+
* dropdown → strict string equality
|
|
342
|
+
* searchDropdown → strict string equality on extracted valueField
|
|
343
|
+
* date → >= startDate and/or <= endDate (normalised via NxtDatePipe)
|
|
344
|
+
*/
|
|
345
|
+
applyAdvancedFilters(baseData: any[]): any[];
|
|
346
|
+
/**
|
|
347
|
+
* Resets all advanced filter values and re-runs the unified pipeline.
|
|
348
|
+
* pageIndex is reset to 1 so users don't get confused on high page numbers.
|
|
349
|
+
*/
|
|
350
|
+
clearAdvancedFilters(): void;
|
|
351
|
+
/**
|
|
352
|
+
* Returns true if at least one visible advanced filter field has a non-empty value.
|
|
353
|
+
* Used in the template to decide whether to show the clear-all button.
|
|
354
|
+
*/
|
|
355
|
+
hasAdvancedFilter(): boolean;
|
|
356
|
+
/**
|
|
357
|
+
* Returns a clean snapshot of the ACTIVE advanced filter values.
|
|
358
|
+
* Included in NxtTableParamsEmit so server-side implementations receive
|
|
359
|
+
* the filter state under the `advancedFilterData` key:
|
|
360
|
+
*
|
|
361
|
+
* tableParams = {
|
|
362
|
+
* pagination: { pageSize, pageIndex },
|
|
363
|
+
* tableSearch: { fields, value },
|
|
364
|
+
* searchFilterData: { [column]: [values] },
|
|
365
|
+
* advancedFilterData: { [field]: string | AdvancedDateRange }, ← NEW
|
|
366
|
+
* sort: { column, direction, listView },
|
|
367
|
+
* }
|
|
368
|
+
*/
|
|
369
|
+
buildAdvancedFilterObject(): AdvancedFilterValues;
|
|
242
370
|
static ɵfac: i0.ɵɵFactoryDeclaration<NxtDatatable, never>;
|
|
243
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NxtDatatable, "nxt-datatable", never, { "data": { "alias": "data"; "required": false; }; "summaryValues": { "alias": "summaryValues"; "required": false; }; "tableFilterData": { "alias": "tableFilterData"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "withCheckBox": { "alias": "withCheckBox"; "required": false; }; "searchBar": { "alias": "searchBar"; "required": false; }; "tableSaveButton": { "alias": "tableSaveButton"; "required": false; }; "hideSaveButton": { "alias": "hideSaveButton"; "required": false; }; "stickyColumn": { "alias": "stickyColumn"; "required": false; }; "tableWidth": { "alias": "tableWidth"; "required": false; }; "actionColumHeader": { "alias": "actionColumHeader"; "required": false; }; "actionButton": { "alias": "actionButton"; "required": false; }; "title": { "alias": "title"; "required": false; }; "isButtons": { "alias": "isButtons"; "required": false; }; "buttonArray": { "alias": "buttonArray"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "isEditRow": { "alias": "isEditRow"; "required": false; }; "isDeleteRow": { "alias": "isDeleteRow"; "required": false; }; "addInlineRecord": { "alias": "addInlineRecord"; "required": false; }; "searchConfigs": { "alias": "searchConfigs"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "actionButtonArray": { "alias": "actionButtonArray"; "required": false; }; "multipleFilter": { "alias": "multipleFilter"; "required": false; }; "isPagination": { "alias": "isPagination"; "required": false; }; "isListViews": { "alias": "isListViews"; "required": false; }; "id": { "alias": "id"; "required": false; }; "isNosIndicator": { "alias": "isNosIndicator"; "required": false; }; "isEditable": { "alias": "isEditable"; "required": false; }; "from": { "alias": "from"; "required": false; }; "question": { "alias": "question"; "required": false; }; "rowTextSize": { "alias": "rowTextSize"; "required": false; }; "rowTextColor": { "alias": "rowTextColor"; "required": false; }; "apiMeta": { "alias": "apiMeta"; "required": false; }; "summaryRows": { "alias": "summaryRows"; "required": false; }; "summaryColumns": { "alias": "summaryColumns"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "tableConfig": { "alias": "tableConfig"; "required": false; }; "tableParams": { "alias": "tableParams"; "required": false; }; "listViews": { "alias": "listViews"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "languageCode": { "alias": "languageCode"; "required": false; }; "selectedColumn": { "alias": "selectedColumn"; "required": false; }; "allIcons": { "alias": "allIcons"; "required": false; }; "isButtonLoading": { "alias": "isButtonLoading"; "required": false; }; "isPreview": { "alias": "isPreview"; "required": false; }; "groupFilter": { "alias": "groupFilter"; "required": false; }; "groupFilterConfig": { "alias": "groupFilterConfig"; "required": false; }; "groupFilterColumn": { "alias": "groupFilterColumn"; "required": false; }; "onlyView": { "alias": "onlyView"; "required": false; }; "tableHeight": { "alias": "tableHeight"; "required": false; }; "serialNumberColumn": { "alias": "serialNumberColumn"; "required": false; }; }, { "tableRowClick": "tableRowClick"; "onEditData": "onEditData"; "onSaveData": "onSaveData"; "saveButtonData": "saveButtonData"; "onDeleteData": "onDeleteData"; "buttonEmit": "buttonEmit"; "hyperLinkEmit": "hyperLinkEmit"; "sideNavEmit": "sideNavEmit"; "actionButtonEmit": "actionButtonEmit"; "columnSelected": "columnSelected"; "removeColumn": "removeColumn"; "valueChange": "valueChange"; "selectedValues": "selectedValues"; "fileEmit": "fileEmit"; "NxtTableFilterEmit": "NxtTableFilterEmit"; "hadleDropDownDependent": "hadleDropDownDependent"; "NxtTableParamsEmit": "NxtTableParamsEmit"; }, never, never, true, never>;
|
|
371
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NxtDatatable, "nxt-datatable", never, { "data": { "alias": "data"; "required": false; }; "summaryValues": { "alias": "summaryValues"; "required": false; }; "tableFilterData": { "alias": "tableFilterData"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "withCheckBox": { "alias": "withCheckBox"; "required": false; }; "searchBar": { "alias": "searchBar"; "required": false; }; "tableSaveButton": { "alias": "tableSaveButton"; "required": false; }; "hideSaveButton": { "alias": "hideSaveButton"; "required": false; }; "stickyColumn": { "alias": "stickyColumn"; "required": false; }; "tableWidth": { "alias": "tableWidth"; "required": false; }; "actionColumHeader": { "alias": "actionColumHeader"; "required": false; }; "actionButton": { "alias": "actionButton"; "required": false; }; "title": { "alias": "title"; "required": false; }; "isButtons": { "alias": "isButtons"; "required": false; }; "buttonArray": { "alias": "buttonArray"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "isEditRow": { "alias": "isEditRow"; "required": false; }; "isDeleteRow": { "alias": "isDeleteRow"; "required": false; }; "addInlineRecord": { "alias": "addInlineRecord"; "required": false; }; "searchConfigs": { "alias": "searchConfigs"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "actionButtonArray": { "alias": "actionButtonArray"; "required": false; }; "multipleFilter": { "alias": "multipleFilter"; "required": false; }; "isPagination": { "alias": "isPagination"; "required": false; }; "isListViews": { "alias": "isListViews"; "required": false; }; "id": { "alias": "id"; "required": false; }; "isNosIndicator": { "alias": "isNosIndicator"; "required": false; }; "isEditable": { "alias": "isEditable"; "required": false; }; "from": { "alias": "from"; "required": false; }; "question": { "alias": "question"; "required": false; }; "rowTextSize": { "alias": "rowTextSize"; "required": false; }; "rowTextColor": { "alias": "rowTextColor"; "required": false; }; "apiMeta": { "alias": "apiMeta"; "required": false; }; "summaryRows": { "alias": "summaryRows"; "required": false; }; "summaryColumns": { "alias": "summaryColumns"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "tableConfig": { "alias": "tableConfig"; "required": false; }; "tableParams": { "alias": "tableParams"; "required": false; }; "listViews": { "alias": "listViews"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "languageCode": { "alias": "languageCode"; "required": false; }; "selectedColumn": { "alias": "selectedColumn"; "required": false; }; "allIcons": { "alias": "allIcons"; "required": false; }; "isButtonLoading": { "alias": "isButtonLoading"; "required": false; }; "isPreview": { "alias": "isPreview"; "required": false; }; "groupFilter": { "alias": "groupFilter"; "required": false; }; "groupFilterConfig": { "alias": "groupFilterConfig"; "required": false; }; "groupFilterColumn": { "alias": "groupFilterColumn"; "required": false; }; "onlyView": { "alias": "onlyView"; "required": false; }; "tableHeight": { "alias": "tableHeight"; "required": false; }; "serialNumberColumn": { "alias": "serialNumberColumn"; "required": false; }; "advancedFilters": { "alias": "advancedFilters"; "required": false; }; }, { "tableRowClick": "tableRowClick"; "onEditData": "onEditData"; "onSaveData": "onSaveData"; "saveButtonData": "saveButtonData"; "onDeleteData": "onDeleteData"; "buttonEmit": "buttonEmit"; "hyperLinkEmit": "hyperLinkEmit"; "sideNavEmit": "sideNavEmit"; "actionButtonEmit": "actionButtonEmit"; "columnSelected": "columnSelected"; "removeColumn": "removeColumn"; "valueChange": "valueChange"; "selectedValues": "selectedValues"; "fileEmit": "fileEmit"; "NxtTableFilterEmit": "NxtTableFilterEmit"; "hadleDropDownDependent": "hadleDropDownDependent"; "NxtTableParamsEmit": "NxtTableParamsEmit"; }, never, never, true, never>;
|
|
244
372
|
}
|
|
@@ -57,6 +57,7 @@ export declare class nxtDropdown implements OnInit {
|
|
|
57
57
|
clearSelection(): void;
|
|
58
58
|
inputValue(event: any, ques: any): void;
|
|
59
59
|
filterOptions(searchValue: any): void;
|
|
60
|
+
arrayFilter(array?: any[]): any[];
|
|
60
61
|
static ɵfac: i0.ɵɵFactoryDeclaration<nxtDropdown, never>;
|
|
61
62
|
static ɵcmp: i0.ɵɵComponentDeclaration<nxtDropdown, "nxt-dropdown", never, { "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "apiMeta": { "alias": "apiMeta"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "progressBar": { "alias": "progressBar"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "error": { "alias": "error"; "required": false; }; "fromShengel": { "alias": "fromShengel"; "required": false; }; "question": { "alias": "question"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "from": { "alias": "from"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "onlyView": { "alias": "onlyView"; "required": false; }; "labelFont": { "alias": "labelFont"; "required": false; }; "label": { "alias": "label"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "inputTextColor": { "alias": "inputTextColor"; "required": false; }; "labelSize": { "alias": "labelSize"; "required": false; }; "inputValueSize": { "alias": "inputValueSize"; "required": false; }; "labelWeight": { "alias": "labelWeight"; "required": false; }; "inputWeight": { "alias": "inputWeight"; "required": false; }; "showLabel": { "alias": "showLabel"; "required": false; }; "inputBorder": { "alias": "inputBorder"; "required": false; }; "inputBgColor": { "alias": "inputBgColor"; "required": false; }; "inputIconLeftSrc": { "alias": "inputIconLeftSrc"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
62
63
|
}
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|