@competer/primeng-table 19.1.8 → 19.2.0

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.
@@ -6,6 +6,7 @@ import { ECSPrimengTableService } from './ecs-primeng-table.service';
6
6
  import { DeviceType, CellOverflowBehaviour, DataAlignHorizontal, DataAlignVertical, DataType, FrozenColumnAlign, TableViewSaveMode } from '../../enums';
7
7
  import { IColumnMetadata, IPredefinedFilter, ITablePagedResponse, ITableView, ITableOptions } from '../../interfaces';
8
8
  import { ECSPrimengTableNotificationService } from '../../services';
9
+ import { TreeRow, TreeTableState } from '../../utils/tree-table-state';
9
10
  import * as i0 from "@angular/core";
10
11
  export declare class ECSPrimengTable implements OnInit, AfterViewInit, OnDestroy {
11
12
  private tableService;
@@ -18,6 +19,9 @@ export declare class ECSPrimengTable implements OnInit, AfterViewInit, OnDestroy
18
19
  private destroyed;
19
20
  constructor(tableService: ECSPrimengTableService, notification: ECSPrimengTableNotificationService);
20
21
  tableOptions: ITableOptions;
22
+ treeState?: TreeTableState;
23
+ private treeQuery?;
24
+ private treeStateRestored;
21
25
  onRowCheckboxChange: EventEmitter<{
22
26
  rowID: any;
23
27
  selected: boolean;
@@ -38,8 +42,21 @@ export declare class ECSPrimengTable implements OnInit, AfterViewInit, OnDestroy
38
42
  showExportModal: boolean;
39
43
  showColumnSelector: boolean;
40
44
  selectedRowsCheckbox: any[];
45
+ selectAllLoading: boolean;
46
+ private selectionQuery?;
47
+ private selectionQueryKey;
48
+ private matchingSelectionKeys?;
41
49
  dt: Table;
42
50
  globalSearchText: string | null;
51
+ private appliedGlobalSearchText;
52
+ private globalSearchManaged;
53
+ private globalSearchTimer?;
54
+ /** The applied query stays separate from text being typed during the debounce. */
55
+ get effectiveGlobalSearchText(): string | null;
56
+ private cancelGlobalSearch;
57
+ private restoreGlobalSearch;
58
+ private globalSearchOption;
59
+ onGlobalSearchInput(value: string): void;
43
60
  tableViewsList: ITableView[];
44
61
  tableViews_menuItems: any[];
45
62
  DataType: typeof DataType;
@@ -87,6 +104,12 @@ export declare class ECSPrimengTable implements OnInit, AfterViewInit, OnDestroy
87
104
  get compactHeader(): boolean;
88
105
  get compactRows(): boolean;
89
106
  get actionColumnWidth(): number;
107
+ getColumnHeaderGroups(columns: IColumnMetadata[]): {
108
+ field: string;
109
+ label: string;
110
+ colspan: number;
111
+ frozenColumnAlign: FrozenColumnAlign;
112
+ }[];
90
113
  private isInitiallyVisible;
91
114
  private updateResponsiveViewport;
92
115
  private buttonVisible;
@@ -143,6 +166,16 @@ export declare class ECSPrimengTable implements OnInit, AfterViewInit, OnDestroy
143
166
  private selectorRowFilterBuilder;
144
167
  revertDateTimeZoneFilters(inputFilter: any): any;
145
168
  handleTableDataResponse(body: ITablePagedResponse): void;
169
+ private generateViewData;
170
+ private treeFetcher;
171
+ private syncTreeRows;
172
+ toggleTreeRow(event: Event, row: TreeRow): Promise<void>;
173
+ loadMoreTreeRows(event: Event, row: TreeRow): Promise<void>;
174
+ get treeColumn(): string | undefined;
175
+ treePageChange(event: {
176
+ first?: number;
177
+ rows?: number;
178
+ }): void;
146
179
  clearFilters(dt: Table, force?: boolean, onlyGlobalFilter?: boolean): void;
147
180
  clearSorts(dt: Table, force?: boolean): void;
148
181
  hasToClearSorts(dt: Table, force?: boolean): boolean;
@@ -184,6 +217,9 @@ export declare class ECSPrimengTable implements OnInit, AfterViewInit, OnDestroy
184
217
  getDataAlignHorizontalAsText(dataAlignHorizontal: DataAlignHorizontal): string;
185
218
  getDataAlignVerticalAsText(dataAlignVertical: DataAlignVertical): string;
186
219
  isRowCheckboxSelected(rowID: any): boolean;
220
+ get allMatchingRowsSelected(): boolean;
221
+ get matchingRowsPartiallySelected(): boolean;
222
+ toggleAllMatchingRows(checked: boolean): Promise<void>;
187
223
  onRowChekboxChange(event: any, rowID: any): void;
188
224
  rowSelect(event: TableRowSelectEvent<any>): void;
189
225
  rowUnselect(event: TableRowUnSelectEvent<any>): void;
@@ -43,6 +43,7 @@ export declare class ECSPrimengTableService {
43
43
  sortViews(tableSaveViewList: ITableView[]): void;
44
44
  updateViewsMenuItems(tableSaveViewList: ITableView[]): MenuItem[];
45
45
  viewsSaveToDatabase(tableSaveViewList: ITableView[], setListEndpoint: string, tableViewSaveKey: string): Observable<HttpResponse<any>>;
46
+ fetchSelectionKeys(endpoint: string, request: ITableQueryRequest): Observable<HttpResponse<any[]>>;
46
47
  viewGenerateData(dt: Table, globalSearchText: string | null, currentPage: number, currentRowsPerPage: number, modifyFiltersFn: (filters: any) => any): ITableViewData;
47
48
  computeColumnWidths(dt: Table): any;
48
49
  computeTableWidth(dt: Table): any;
@@ -10,6 +10,7 @@ export interface IColumnMetadata {
10
10
  field: string;
11
11
  /** Display name or ngx-translate key. Translated only for display; field and metadata are preserved. */
12
12
  header: string;
13
+ headerGroup?: string | null;
13
14
  /** The type of data contained in the column. */
14
15
  dataType: DataType;
15
16
  /** Optional presentation; ProgressBar renders numeric values on a 0–100 scale. */
@@ -1,7 +1,9 @@
1
1
  import { DataAlignHorizontal, DataAlignVertical, TableViewSaveMode } from "../enums";
2
2
  import { IColumnMetadata, IPredefinedFilter, ITableButton } from "../interfaces";
3
+ import { ITreeTableOptions } from '../utils/tree-table-state';
3
4
  /** Configuration options for ECS Primeng table */
4
5
  export interface ITableOptions {
6
+ tree?: ITreeTableOptions;
5
7
  /** Optional responsive behavior. Existing applications keep their current buttons by default. */
6
8
  responsive?: {
7
9
  /** CSS viewport width where Tablet starts. Default: 768. */
@@ -308,6 +310,13 @@ export interface ITableOptions {
308
310
  * Configurations related to the row checkbox selector.
309
311
  */
310
312
  checkboxSelector?: {
313
+ /** Show a header checkbox selecting all filtered rows across every page. Default: false. Requires urlSelectAll. */
314
+ selectAllEnabled?: boolean;
315
+ /** POST endpoint receiving ITableQueryRequest and returning an array of selectable rowID values.
316
+ * Must apply the same filters and authorization as the data endpoint, without pagination.
317
+ * If enabledCondition is used, enforce equivalent eligibility here for unloaded rows.
318
+ */
319
+ urlSelectAll?: string;
311
320
  /**
312
321
  * If `true`, a new column with checkboxes will be displayed. Users can select or unselect rows using these checkboxes. Additionally an option to filter by this column will be enabled.
313
322
  *
@@ -423,6 +432,10 @@ export interface ITableOptions {
423
432
  };
424
433
  /** Configurations related to the global filter functionality of the table. */
425
434
  globalFilter?: {
435
+ /** Minimum trimmed input length before searching. Optional; default: 0. */
436
+ minLength?: number;
437
+ /** Milliseconds without typing before searching. Optional; default: 0 (existing behavior). */
438
+ debounceTime?: number;
426
439
  /**
427
440
  * Enables or disables the global filter input.
428
441
  *
@@ -7,6 +7,8 @@ import { IColumnMetadata } from "./columns-metadata.interface";
7
7
  * Includes information about displayed columns, widths, sorting, filtering, and pagination.
8
8
  */
9
9
  export interface ITableViewData {
10
+ treeExpandedKeys?: (string | number)[];
11
+ treeChildPages?: Record<string, number>;
10
12
  /** Array of columns currently visible in the table. */
11
13
  columnsShown: IColumnMetadata[];
12
14
  /** The total width of the table in pixels. */
@@ -10,6 +10,9 @@ export interface ITableNavigationState {
10
10
  globalSearchText: string | null;
11
11
  currentPage: number;
12
12
  currentRowsPerPage: number;
13
+ treeMode?: 'all' | 'onDemand' | 'pagedChildren';
14
+ treeExpandedKeys?: (string | number)[];
15
+ treeChildPages?: Record<string, number>;
13
16
  }
14
17
  /**
15
18
  * Provide on the parent COMPONENT containing the list and detail router outlet.
@@ -0,0 +1,66 @@
1
+ export type TreeKey = string | number;
2
+ export type TreeRow = Record<string, unknown>;
3
+ export type TreeLoadMode = 'all' | 'onDemand' | 'pagedChildren';
4
+ export interface ITreeTableOptions {
5
+ keyExpr: string;
6
+ parentIdExpr: string;
7
+ rootValue?: TreeKey | null;
8
+ hasItemsExpr?: string;
9
+ column: string;
10
+ loadMode?: TreeLoadMode;
11
+ }
12
+ export interface ITreeResponse {
13
+ data: TreeRow[];
14
+ page: number;
15
+ totalRecords: number;
16
+ totalRecordsNotFiltered: number;
17
+ ancestorKeys?: TreeKey[];
18
+ }
19
+ export interface ITreeRequest {
20
+ roots: boolean;
21
+ parentId: TreeKey | null;
22
+ loadMode: TreeLoadMode;
23
+ page: number;
24
+ pageSize: number;
25
+ }
26
+ export declare class TreeTableState {
27
+ readonly options: ITreeTableOptions;
28
+ readonly expanded: Set<TreeKey>;
29
+ private readonly nodes;
30
+ private readonly children;
31
+ private readonly totals;
32
+ private readonly pages;
33
+ private entries;
34
+ private roots;
35
+ private allRoots;
36
+ private version;
37
+ private readonly pending;
38
+ private restoredPages;
39
+ visible: TreeRow[];
40
+ loading: boolean;
41
+ page: number;
42
+ pageSize: number;
43
+ totalRecords: number;
44
+ totalRecordsNotFiltered: number;
45
+ constructor(options: ITreeTableOptions);
46
+ get mode(): TreeLoadMode;
47
+ get rootValue(): TreeKey | null;
48
+ key(row: TreeRow): TreeKey;
49
+ restore(keys?: TreeKey[], pages?: Record<string, number>): void;
50
+ snapshotPages(): Record<string, number>;
51
+ depth(row: TreeRow): number;
52
+ isMore(row: TreeRow): boolean;
53
+ moreParent(row: TreeRow): TreeKey | undefined;
54
+ isExpanded(row: TreeRow): boolean;
55
+ isLoading(row: TreeRow): boolean;
56
+ hasChildren(row: TreeRow): boolean;
57
+ cancel(): void;
58
+ load(page: number, pageSize: number, fetch: (request: ITreeRequest) => Promise<ITreeResponse>): Promise<boolean>;
59
+ toggle(row: TreeRow, fetch: (request: ITreeRequest) => Promise<ITreeResponse>): Promise<void>;
60
+ loadMore(row: TreeRow, fetch: (request: ITreeRequest) => Promise<ITreeResponse>): Promise<void>;
61
+ private insert;
62
+ private buildAll;
63
+ private fetchChildren;
64
+ private hasMore;
65
+ private rebuild;
66
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@competer/primeng-table",
3
- "version": "19.1.8",
3
+ "version": "19.2.0",
4
4
  "description": "Community-maintained fork of ECS. Reusable Angular PrimeNG table component with advanced server-side filters. Designed to offload filtering logic to any backend API.",
5
5
  "author": "ECS (Eternal CODE Studio); ComPeter",
6
6
  "license": "MIT",
package/public-api.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from './lib/interfaces/predefined-filter.interface';
4
4
  export * from './lib/interfaces/table-button.interface';
5
5
  export * from './lib/interfaces/table-options.interface';
6
6
  export * from "./lib/utils/create-table-options";
7
+ export * from './lib/utils/tree-table-state';
7
8
  export * from './lib/services';
8
9
  export * from './lib/components/ecs-primeng-table/ecs-primeng-table';
9
10
  export * from './lib/components/ecs-primeng-table/ecs-primeng-table.service';