@one-paragon/angular-utilities 2.8.4 → 2.8.5
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/one-paragon-angular-utilities.mjs +7350 -0
- package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -0
- package/package.json +27 -15
- package/types/one-paragon-angular-utilities.d.ts +2211 -0
- package/karma.conf.js +0 -43
- package/ng-package.json +0 -7
- package/src/action-state/action-state-spinner/action-state-spinner.component.css +0 -16
- package/src/action-state/action-state-spinner/action-state-spinner.component.html +0 -7
- package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +0 -25
- package/src/action-state/action-state-spinner/action-state-spinner.component.ts +0 -26
- package/src/action-state/action-state-ui/action-state-ui.module.ts +0 -13
- package/src/action-state/index.ts +0 -8
- package/src/action-state/ngrx-ext/ngrx-ext.module.ts +0 -14
- package/src/action-state/ngrx.ts +0 -69
- package/src/http-request-state/RequestStateFactory.ts +0 -56
- package/src/http-request-state/RequestStateStore.ts +0 -360
- package/src/http-request-state/deprecated.ts +0 -20
- package/src/http-request-state/directives/HttpStateDirectiveBase.ts +0 -29
- package/src/http-request-state/directives/http-error-state-directive.ts +0 -21
- package/src/http-request-state/directives/http-inProgress-state-directive.ts +0 -19
- package/src/http-request-state/directives/http-notStarted-state-directive.ts +0 -19
- package/src/http-request-state/directives/http-success-state-directive.ts +0 -29
- package/src/http-request-state/directives/index.ts +0 -5
- package/src/http-request-state/directives/request-state-directive.spec.ts +0 -73
- package/src/http-request-state/directives/request-state-directive.ts +0 -78
- package/src/http-request-state/documentation/CREATE-REQUESTOR.md +0 -667
- package/src/http-request-state/documentation/README.md +0 -191
- package/src/http-request-state/documentation/REQUEST-STATE-STORE-CONFIG.md +0 -648
- package/src/http-request-state/documentation/REQUESTOR.md +0 -616
- package/src/http-request-state/helpers.ts +0 -30
- package/src/http-request-state/http-state-module.ts +0 -23
- package/src/http-request-state/index.ts +0 -7
- package/src/http-request-state/models/view-context.ts +0 -18
- package/src/http-request-state/observable.spec.ts +0 -43
- package/src/http-request-state/request-state.ts +0 -66
- package/src/http-request-state/rxjs/getRequestorBody.ts +0 -10
- package/src/http-request-state/rxjs/getRequestorState.ts +0 -8
- package/src/http-request-state/rxjs/index.ts +0 -4
- package/src/http-request-state/rxjs/tapError.ts +0 -16
- package/src/http-request-state/rxjs/tapSuccess.ts +0 -16
- package/src/http-request-state/strategies.spec.ts +0 -42
- package/src/http-request-state/types.ts +0 -54
- package/src/ngrx/actionable-selector.ts +0 -189
- package/src/ngrx/index.ts +0 -1
- package/src/public-api.ts +0 -40
- package/src/rxjs/defaultShareReplay.ts +0 -8
- package/src/rxjs/index.ts +0 -5
- package/src/rxjs/mapError.ts +0 -8
- package/src/rxjs/rxjs-operators.ts +0 -130
- package/src/rxjs/subjectifier.ts +0 -17
- package/src/rxjs/subscriber.directive.ts +0 -57
- package/src/specs/clickSubject.spec.ts +0 -99
- package/src/specs/dialog.spec.ts +0 -101
- package/src/specs/toggleGroupDirective.spec.ts +0 -229
- package/src/table-builder/classes/DefaultSettings.ts +0 -11
- package/src/table-builder/classes/MatTableObservableDataSource.ts +0 -23
- package/src/table-builder/classes/TableBuilderConfig.ts +0 -49
- package/src/table-builder/classes/TableBuilderDataSource.ts +0 -64
- package/src/table-builder/classes/TableState.ts +0 -96
- package/src/table-builder/classes/data-store.ts +0 -10
- package/src/table-builder/classes/display-col.ts +0 -5
- package/src/table-builder/classes/filter-info.ts +0 -129
- package/src/table-builder/classes/table-builder-general-settings.ts +0 -233
- package/src/table-builder/classes/table-builder.ts +0 -105
- package/src/table-builder/classes/table-store.helpers.ts +0 -109
- package/src/table-builder/classes/table-store.ts +0 -540
- package/src/table-builder/components/array-column.component.ts +0 -34
- package/src/table-builder/components/column-builder/column-builder.component.html +0 -109
- package/src/table-builder/components/column-builder/column-builder.component.scss +0 -43
- package/src/table-builder/components/column-builder/column-builder.component.spec.ts +0 -49
- package/src/table-builder/components/column-builder/column-builder.component.ts +0 -130
- package/src/table-builder/components/column-builder/column-helpers.ts +0 -54
- package/src/table-builder/components/column-header-menu/column-header-menu.component.html +0 -128
- package/src/table-builder/components/column-header-menu/column-header-menu.component.scss +0 -97
- package/src/table-builder/components/column-header-menu/column-header-menu.component.ts +0 -113
- package/src/table-builder/components/date-filter/date-filter.component.html +0 -39
- package/src/table-builder/components/date-filter/date-filter.component.ts +0 -33
- package/src/table-builder/components/date-time-filter/date-time-filter.component.html +0 -25
- package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +0 -33
- package/src/table-builder/components/filter/filter.component.html +0 -120
- package/src/table-builder/components/filter/filter.component.scss +0 -60
- package/src/table-builder/components/filter/filter.component.spec.ts +0 -86
- package/src/table-builder/components/filter/filter.component.ts +0 -73
- package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +0 -171
- package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +0 -60
- package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +0 -57
- package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +0 -44
- package/src/table-builder/components/generic-table/generic-table.component.html +0 -140
- package/src/table-builder/components/generic-table/generic-table.component.scss +0 -45
- package/src/table-builder/components/generic-table/generic-table.component.ts +0 -531
- package/src/table-builder/components/generic-table/paginator.component.ts +0 -125
- package/src/table-builder/components/group-by-list/group-by-list.component.css +0 -24
- package/src/table-builder/components/group-by-list/group-by-list.component.html +0 -21
- package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +0 -23
- package/src/table-builder/components/group-by-list/group-by-list.component.ts +0 -26
- package/src/table-builder/components/in-filter/in-filter.component.css +0 -22
- package/src/table-builder/components/in-filter/in-filter.component.html +0 -38
- package/src/table-builder/components/in-filter/in-filter.component.ts +0 -66
- package/src/table-builder/components/index.ts +0 -9
- package/src/table-builder/components/initialization-component/initialization.component.html +0 -78
- package/src/table-builder/components/initialization-component/initialization.component.ts +0 -28
- package/src/table-builder/components/link-column.component.ts +0 -42
- package/src/table-builder/components/number-filter/number-filter.component.css +0 -10
- package/src/table-builder/components/number-filter/number-filter.component.html +0 -32
- package/src/table-builder/components/number-filter/number-filter.component.spec.ts +0 -30
- package/src/table-builder/components/number-filter/number-filter.component.ts +0 -34
- package/src/table-builder/components/profiles-menu/profiles-menu.component.html +0 -77
- package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +0 -126
- package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +0 -23
- package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +0 -64
- package/src/table-builder/components/reset-menu/reset-menu.component.css +0 -3
- package/src/table-builder/components/reset-menu/reset-menu.component.html +0 -10
- package/src/table-builder/components/reset-menu/reset-menu.component.ts +0 -87
- package/src/table-builder/components/scroll-strategy.ts +0 -139
- package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +0 -57
- package/src/table-builder/components/sort-menu/sort-menu.component.html +0 -115
- package/src/table-builder/components/sort-menu/sort-menu.component.scss +0 -119
- package/src/table-builder/components/sort-menu/sort-menu.component.ts +0 -88
- package/src/table-builder/components/table-container/table-container.component.html +0 -94
- package/src/table-builder/components/table-container/table-container.component.scss +0 -60
- package/src/table-builder/components/table-container/table-container.component.ts +0 -467
- package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +0 -113
- package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +0 -125
- package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +0 -172
- package/src/table-builder/components/table-container/table-container.helpers/meta-data.helpers.ts +0 -19
- package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +0 -47
- package/src/table-builder/components/table-container/tableProps.ts +0 -21
- package/src/table-builder/components/table-container/virtual-scroll-container.ts +0 -216
- package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +0 -42
- package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +0 -47
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +0 -40
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +0 -11
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +0 -85
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +0 -35
- package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +0 -13
- package/src/table-builder/components/table-header-menu/table-header-menu.component.css +0 -21
- package/src/table-builder/components/table-header-menu/table-header-menu.component.html +0 -48
- package/src/table-builder/components/table-header-menu/table-header-menu.component.ts +0 -36
- package/src/table-builder/directives/custom-cell-directive.ts +0 -63
- package/src/table-builder/directives/custom-header-directive.ts +0 -16
- package/src/table-builder/directives/group-row-directive.ts +0 -91
- package/src/table-builder/directives/index.ts +0 -8
- package/src/table-builder/directives/multi-sort.directive.spec.ts +0 -124
- package/src/table-builder/directives/multi-sort.directive.ts +0 -58
- package/src/table-builder/directives/resize-column.directive.ts +0 -107
- package/src/table-builder/directives/table-wrapper.directive.ts +0 -13
- package/src/table-builder/directives/tb-filter.directive.ts +0 -376
- package/src/table-builder/documentation/table-builder/CUSTOM-CELL.md +0 -568
- package/src/table-builder/documentation/table-builder/CUSTOM-GROUP-ROW.md +0 -356
- package/src/table-builder/documentation/table-builder/METADATA-DOCUMENTATION.md +0 -517
- package/src/table-builder/documentation/table-builder/STYLER-STYLE.md +0 -228
- package/src/table-builder/documentation/table-builder/TABLE-BUILDER-CONFIG.md +0 -325
- package/src/table-builder/documentation/table-builder/TABLE-BUILDER-SETTINGS.md +0 -515
- package/src/table-builder/documentation/table-builder/TABLE-BUILDER.md +0 -430
- package/src/table-builder/documentation/table-builder/TABLE-CONTAINER.md +0 -628
- package/src/table-builder/enums/filterTypes.ts +0 -39
- package/src/table-builder/functions/boolean-filter-function.ts +0 -12
- package/src/table-builder/functions/date-filter-function.ts +0 -85
- package/src/table-builder/functions/download-data.ts +0 -11
- package/src/table-builder/functions/null-filter-function.ts +0 -9
- package/src/table-builder/functions/number-filter-function.ts +0 -47
- package/src/table-builder/functions/sort-data-function.ts +0 -80
- package/src/table-builder/functions/string-filter-function.ts +0 -59
- package/src/table-builder/interfaces/ColumnInfo.ts +0 -9
- package/src/table-builder/interfaces/dictionary.ts +0 -3
- package/src/table-builder/interfaces/meta-data.ts +0 -279
- package/src/table-builder/ngrx/tableBuilderStateStore.ts +0 -203
- package/src/table-builder/pipes/column-total.pipe.ts +0 -16
- package/src/table-builder/pipes/format-filter-type.pipe.ts +0 -12
- package/src/table-builder/pipes/format-filter-value.pipe.ts +0 -71
- package/src/table-builder/pipes/key-display.ts +0 -13
- package/src/table-builder/services/all-values-filter-creator.service.ts +0 -92
- package/src/table-builder/services/export-to-csv.service.ts +0 -117
- package/src/table-builder/services/link-creator.service.ts +0 -98
- package/src/table-builder/services/table-template-service.ts +0 -47
- package/src/table-builder/services/transform-creator.ts +0 -90
- package/src/table-builder/specs/table-custom-filters.spec.ts +0 -262
- package/src/table-builder/styles/collapser.styles.scss +0 -16
- package/src/table-builder/table-builder.module.ts +0 -42
- package/src/table-builder/types/group-types.ts +0 -42
- package/src/table-builder/types/index.ts +0 -1
- package/src/test.ts +0 -17
- package/src/utilities/array-helpers.ts +0 -13
- package/src/utilities/directives/auto-focus.directive.ts +0 -20
- package/src/utilities/directives/clickEmitterDirective.ts +0 -15
- package/src/utilities/directives/clickSubject.ts +0 -19
- package/src/utilities/directives/conditional-classes.directive.ts +0 -36
- package/src/utilities/directives/dialog-service.ts +0 -19
- package/src/utilities/directives/dialog.ts +0 -174
- package/src/utilities/directives/mat-toggle-group-directive.ts +0 -60
- package/src/utilities/directives/prevent-enter.directive.ts +0 -12
- package/src/utilities/directives/stop-propagation.directive.ts +0 -19
- package/src/utilities/directives/styler.ts +0 -45
- package/src/utilities/directives/trim-whitespace.directive.ts +0 -20
- package/src/utilities/index.ts +0 -22
- package/src/utilities/module.ts +0 -53
- package/src/utilities/pipes/function.pipe.ts +0 -21
- package/src/utilities/pipes/phone.pipe.ts +0 -20
- package/src/utilities/pipes/space-case.pipes.spec.ts +0 -47
- package/src/utilities/pipes/space-case.pipes.ts +0 -29
- package/tsconfig.lib.json +0 -20
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
|
@@ -1,430 +0,0 @@
|
|
|
1
|
-
# TableBuilder Class Documentation
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
`TableBuilder` is the core class that configures and manages data for the Table Builder component. It accepts data, metadata (column definitions), and settings to create a fully-configured table that can be passed to the `tb-table-container` component.
|
|
6
|
-
|
|
7
|
-
## Basic Usage
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
import { TableBuilder, FieldType } from 'angular-utilities';
|
|
11
|
-
|
|
12
|
-
interface User {
|
|
13
|
-
id: number;
|
|
14
|
-
name: string;
|
|
15
|
-
email: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const data: User[] = [
|
|
19
|
-
{ id: 1, name: 'John Doe', email: 'john@example.com' },
|
|
20
|
-
{ id: 2, name: 'Jane Smith', email: 'jane@example.com' }
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
// Simple usage with just data (auto-generates metadata)
|
|
24
|
-
const tableBuilder = new TableBuilder(data);
|
|
25
|
-
|
|
26
|
-
// With metadata
|
|
27
|
-
const metaData = [
|
|
28
|
-
{ key: 'id', fieldType: FieldType.Number, displayName: 'ID' },
|
|
29
|
-
{ key: 'name', fieldType: FieldType.String, displayName: 'Name' },
|
|
30
|
-
{ key: 'email', fieldType: FieldType.String, displayName: 'Email' }
|
|
31
|
-
];
|
|
32
|
-
const tableBuilder = new TableBuilder(data, metaData);
|
|
33
|
-
|
|
34
|
-
// With settings
|
|
35
|
-
const settings = {
|
|
36
|
-
tableSettings: {
|
|
37
|
-
tableId: 'users-table',
|
|
38
|
-
trackBy: 'id',
|
|
39
|
-
usePaginator: true
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
const tableBuilder = new TableBuilder(data, metaData, settings);
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Constructor
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
constructor(
|
|
49
|
-
data: T[] | Observable<T[]> | Signal<T[]>,
|
|
50
|
-
metaData?: MetaData<T>[] | Observable<MetaData<T>[]> | Signal<MetaData<T>[]>,
|
|
51
|
-
settings?: TableBuilderSettings<T> | Observable<TableBuilderSettings<T>> | Signal<TableBuilderSettings<T>>
|
|
52
|
-
)
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Parameters
|
|
56
|
-
|
|
57
|
-
#### `data` (required)
|
|
58
|
-
- **Type**: `T[]` | `Observable<T[]>` | `Signal<T[]>`
|
|
59
|
-
- **Description**: The data to display in the table. Can be provided as:
|
|
60
|
-
- **Array**: Static data
|
|
61
|
-
- **Observable**: Reactive data that updates automatically
|
|
62
|
-
- **Signal**: Angular signal for reactive data
|
|
63
|
-
|
|
64
|
-
**Examples:**
|
|
65
|
-
```typescript
|
|
66
|
-
// Static array
|
|
67
|
-
const data = [{ id: 1, name: 'John' }];
|
|
68
|
-
const tableBuilder = new TableBuilder(data);
|
|
69
|
-
|
|
70
|
-
// Observable
|
|
71
|
-
const data$ = this.userService.getUsers();
|
|
72
|
-
const tableBuilder = new TableBuilder(data$);
|
|
73
|
-
|
|
74
|
-
// Signal
|
|
75
|
-
const data = signal([{ id: 1, name: 'John' }]);
|
|
76
|
-
const tableBuilder = new TableBuilder(data);
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
#### `metaData` (optional)
|
|
80
|
-
- **Type**: `MetaData<T>[]` | `Observable<MetaData<T>[]>` | `Signal<MetaData<T>[]>` | `undefined`
|
|
81
|
-
- **Default**: Auto-generated from first data item
|
|
82
|
-
- **Description**: Column definitions that specify how each property should be displayed, sorted, and filtered. If not provided, metadata is automatically generated from the keys of the first data item with `FieldType.Unknown`.
|
|
83
|
-
- **Related Documentation**: See [MetaData Documentation](METADATA-DOCUMENTATION.md) for detailed column configuration options.
|
|
84
|
-
|
|
85
|
-
**Examples:**
|
|
86
|
-
```typescript
|
|
87
|
-
// Static metadata
|
|
88
|
-
const metaData = [
|
|
89
|
-
{ key: 'id', fieldType: FieldType.Number, displayName: 'ID', width: '80px' },
|
|
90
|
-
{ key: 'name', fieldType: FieldType.String, displayName: 'Name' },
|
|
91
|
-
{ key: 'createdAt', fieldType: FieldType.Date, displayName: 'Created' }
|
|
92
|
-
];
|
|
93
|
-
|
|
94
|
-
// Observable metadata (useful for dynamic columns)
|
|
95
|
-
const metaData$ = this.configService.getColumnConfig();
|
|
96
|
-
|
|
97
|
-
// Signal metadata
|
|
98
|
-
const metaData = signal([...]);
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
#### `settings` (optional)
|
|
102
|
-
- **Type**: `TableBuilderSettings<T>` | `Observable<TableBuilderSettings<T>>` | `Signal<TableBuilderSettings<T>>`
|
|
103
|
-
- **Default**: `new GeneralTableSettings()`
|
|
104
|
-
- **Description**: Configuration object that controls table appearance and behavior including headers, footers, pagination, virtual scrolling, and more.
|
|
105
|
-
- **Related Documentation**: See [TableBuilder Settings](TABLE-BUILDER-SETTINGS.md) for all available settings.
|
|
106
|
-
|
|
107
|
-
**Examples:**
|
|
108
|
-
```typescript
|
|
109
|
-
// Static settings
|
|
110
|
-
const settings = {
|
|
111
|
-
headerSettings: {
|
|
112
|
-
hideExport: false,
|
|
113
|
-
title: { text: 'Users Table', level: 2 }
|
|
114
|
-
},
|
|
115
|
-
tableSettings: {
|
|
116
|
-
tableId: 'users-table',
|
|
117
|
-
trackBy: 'id',
|
|
118
|
-
usePaginator: true,
|
|
119
|
-
paginatorSettings: {
|
|
120
|
-
pageSize: 25
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
// Observable settings
|
|
126
|
-
const settings$ = this.configService.getTableSettings();
|
|
127
|
-
|
|
128
|
-
// Signal settings
|
|
129
|
-
const settings = signal({ ... });
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## Properties
|
|
133
|
-
|
|
134
|
-
### `container` (readonly)
|
|
135
|
-
- **Type**: `Signal<TableContainerComponent | undefined>`
|
|
136
|
-
- **Description**: Provides access to the `TableContainerComponent` instance once the TableBuilder is bound to a table. This is set automatically when the TableBuilder is passed to a `tb-table-container` component. Use this to programmatically control the table.
|
|
137
|
-
|
|
138
|
-
**Example:**
|
|
139
|
-
```typescript
|
|
140
|
-
@Component({
|
|
141
|
-
selector: 'app-users',
|
|
142
|
-
template: `
|
|
143
|
-
<tb-table-container [tableBuilder]="tableBuilder" />
|
|
144
|
-
<button (click)="exportData()">Export</button>
|
|
145
|
-
`
|
|
146
|
-
})
|
|
147
|
-
export class UsersComponent {
|
|
148
|
-
tableBuilder = new TableBuilder(this.data, this.metaData);
|
|
149
|
-
|
|
150
|
-
exportData() {
|
|
151
|
-
const container = this.tableBuilder.container();
|
|
152
|
-
if (container) {
|
|
153
|
-
container.exportToCsv();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
expandAllGroups() {
|
|
158
|
-
this.tableBuilder.container()?.expandAllGroups();
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
clearSelections() {
|
|
162
|
-
this.tableBuilder.container()?.clearSelections();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## Reactive Data Patterns
|
|
168
|
-
|
|
169
|
-
The TableBuilder supports reactive data patterns through Observables and Signals:
|
|
170
|
-
|
|
171
|
-
### Observable Pattern
|
|
172
|
-
|
|
173
|
-
```typescript
|
|
174
|
-
import { Observable } from 'rxjs';
|
|
175
|
-
|
|
176
|
-
@Component({
|
|
177
|
-
selector: 'app-users',
|
|
178
|
-
template: `<tb-table-container [tableBuilder]="tableBuilder" />`
|
|
179
|
-
})
|
|
180
|
-
export class UsersComponent {
|
|
181
|
-
// Data from HTTP service
|
|
182
|
-
users$ = this.userService.getUsers();
|
|
183
|
-
|
|
184
|
-
// Metadata from config service
|
|
185
|
-
metaData$ = this.configService.getColumnConfig();
|
|
186
|
-
|
|
187
|
-
tableBuilder = new TableBuilder(this.users$, this.metaData$);
|
|
188
|
-
|
|
189
|
-
constructor(
|
|
190
|
-
private userService: UserService,
|
|
191
|
-
private configService: ConfigService
|
|
192
|
-
) {}
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Signal Pattern
|
|
197
|
-
|
|
198
|
-
```typescript
|
|
199
|
-
import { signal, computed } from '@angular/core';
|
|
200
|
-
|
|
201
|
-
@Component({
|
|
202
|
-
selector: 'app-users',
|
|
203
|
-
template: `<tb-table-container [tableBuilder]="tableBuilder" />`
|
|
204
|
-
})
|
|
205
|
-
export class UsersComponent {
|
|
206
|
-
users = signal<User[]>([]);
|
|
207
|
-
|
|
208
|
-
metaData = signal([
|
|
209
|
-
{ key: 'id', fieldType: FieldType.Number, displayName: 'ID' },
|
|
210
|
-
{ key: 'name', fieldType: FieldType.String, displayName: 'Name' }
|
|
211
|
-
]);
|
|
212
|
-
|
|
213
|
-
tableBuilder = new TableBuilder(this.users, this.metaData);
|
|
214
|
-
|
|
215
|
-
ngOnInit() {
|
|
216
|
-
// Update data dynamically
|
|
217
|
-
this.userService.getUsers().subscribe(users => {
|
|
218
|
-
this.users.set(users);
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Computed Signal Pattern
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
@Component({
|
|
228
|
-
selector: 'app-filtered-users',
|
|
229
|
-
template: `<tb-table-container [tableBuilder]="tableBuilder" />`
|
|
230
|
-
})
|
|
231
|
-
export class FilteredUsersComponent {
|
|
232
|
-
allUsers = signal<User[]>([]);
|
|
233
|
-
activeFilter = signal<boolean>(true);
|
|
234
|
-
|
|
235
|
-
// Computed data based on filter
|
|
236
|
-
filteredUsers = computed(() =>
|
|
237
|
-
this.allUsers().filter(user =>
|
|
238
|
-
!this.activeFilter() || user.isActive
|
|
239
|
-
)
|
|
240
|
-
);
|
|
241
|
-
|
|
242
|
-
tableBuilder = new TableBuilder(this.filteredUsers);
|
|
243
|
-
}
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
## Auto-Generated Metadata
|
|
247
|
-
|
|
248
|
-
When metadata is not provided, TableBuilder automatically generates basic metadata from the first data item:
|
|
249
|
-
|
|
250
|
-
```typescript
|
|
251
|
-
const data = [
|
|
252
|
-
{ id: 1, name: 'John', age: 30 }
|
|
253
|
-
];
|
|
254
|
-
|
|
255
|
-
const tableBuilder = new TableBuilder(data);
|
|
256
|
-
|
|
257
|
-
// Internally generates:
|
|
258
|
-
// [
|
|
259
|
-
// { key: 'id', fieldType: FieldType.Unknown, order: -1 },
|
|
260
|
-
// { key: 'name', fieldType: FieldType.Unknown, order: -1 },
|
|
261
|
-
// { key: 'age', fieldType: FieldType.Unknown, order: -1 }
|
|
262
|
-
// ]
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
**Note**: While auto-generation is convenient for quick prototyping, it's recommended to provide explicit metadata for production use to ensure proper typing, sorting, and filtering behavior.
|
|
266
|
-
|
|
267
|
-
## Complete Example
|
|
268
|
-
|
|
269
|
-
```typescript
|
|
270
|
-
import { Component, signal } from '@angular/core';
|
|
271
|
-
import { TableBuilder, FieldType } from 'angular-utilities';
|
|
272
|
-
import { TableContainerComponent } from 'angular-utilities';
|
|
273
|
-
|
|
274
|
-
interface User {
|
|
275
|
-
id: number;
|
|
276
|
-
name: string;
|
|
277
|
-
email: string;
|
|
278
|
-
department: string;
|
|
279
|
-
salary: number;
|
|
280
|
-
hireDate: Date;
|
|
281
|
-
isActive: boolean;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
@Component({
|
|
285
|
-
selector: 'app-users-table',
|
|
286
|
-
standalone: true,
|
|
287
|
-
imports: [TableContainerComponent],
|
|
288
|
-
template: `
|
|
289
|
-
<div class="controls">
|
|
290
|
-
<button (click)="exportData()">Export to CSV</button>
|
|
291
|
-
<button (click)="expandGroups()">Expand All Groups</button>
|
|
292
|
-
<button (click)="collapseGroups()">Collapse All Groups</button>
|
|
293
|
-
</div>
|
|
294
|
-
|
|
295
|
-
<tb-table-container [tableBuilder]="tableBuilder" />
|
|
296
|
-
`
|
|
297
|
-
})
|
|
298
|
-
export class UsersTableComponent {
|
|
299
|
-
users = signal<User[]>([
|
|
300
|
-
{
|
|
301
|
-
id: 1,
|
|
302
|
-
name: 'John Doe',
|
|
303
|
-
email: 'john@example.com',
|
|
304
|
-
department: 'Engineering',
|
|
305
|
-
salary: 95000,
|
|
306
|
-
hireDate: new Date('2020-01-15'),
|
|
307
|
-
isActive: true
|
|
308
|
-
},
|
|
309
|
-
{
|
|
310
|
-
id: 2,
|
|
311
|
-
name: 'Jane Smith',
|
|
312
|
-
email: 'jane@example.com',
|
|
313
|
-
department: 'Marketing',
|
|
314
|
-
salary: 85000,
|
|
315
|
-
hireDate: new Date('2021-03-20'),
|
|
316
|
-
isActive: true
|
|
317
|
-
}
|
|
318
|
-
]);
|
|
319
|
-
|
|
320
|
-
metaData = [
|
|
321
|
-
{
|
|
322
|
-
key: 'id',
|
|
323
|
-
fieldType: FieldType.Number,
|
|
324
|
-
displayName: 'ID',
|
|
325
|
-
width: '80px'
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
key: 'name',
|
|
329
|
-
fieldType: FieldType.String,
|
|
330
|
-
displayName: 'Full Name',
|
|
331
|
-
width: '200px'
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
key: 'email',
|
|
335
|
-
fieldType: FieldType.String,
|
|
336
|
-
displayName: 'Email Address'
|
|
337
|
-
},
|
|
338
|
-
{
|
|
339
|
-
key: 'department',
|
|
340
|
-
fieldType: FieldType.String,
|
|
341
|
-
displayName: 'Department',
|
|
342
|
-
width: '150px'
|
|
343
|
-
},
|
|
344
|
-
{
|
|
345
|
-
key: 'salary',
|
|
346
|
-
fieldType: FieldType.Currency,
|
|
347
|
-
displayName: 'Annual Salary',
|
|
348
|
-
width: '120px'
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
key: 'hireDate',
|
|
352
|
-
fieldType: FieldType.Date,
|
|
353
|
-
displayName: 'Hire Date',
|
|
354
|
-
width: '120px'
|
|
355
|
-
},
|
|
356
|
-
{
|
|
357
|
-
key: 'isActive',
|
|
358
|
-
fieldType: FieldType.Boolean,
|
|
359
|
-
displayName: 'Active',
|
|
360
|
-
width: '100px'
|
|
361
|
-
}
|
|
362
|
-
];
|
|
363
|
-
|
|
364
|
-
settings = {
|
|
365
|
-
headerSettings: {
|
|
366
|
-
title: { text: 'Employee Directory', level: 2 },
|
|
367
|
-
hideExport: false
|
|
368
|
-
},
|
|
369
|
-
tableSettings: {
|
|
370
|
-
tableId: 'users-table',
|
|
371
|
-
trackBy: 'id',
|
|
372
|
-
usePaginator: true,
|
|
373
|
-
includeIndexColumn: true,
|
|
374
|
-
includeSelectionColumn: true,
|
|
375
|
-
paginatorSettings: {
|
|
376
|
-
pageSize: 25,
|
|
377
|
-
includeAllInOptions: true
|
|
378
|
-
},
|
|
379
|
-
groupBySettings: [
|
|
380
|
-
{ key: 'department', expanded: true }
|
|
381
|
-
]
|
|
382
|
-
},
|
|
383
|
-
columnHeaderSettings: {
|
|
384
|
-
stickyHeaderRow: true
|
|
385
|
-
}
|
|
386
|
-
};
|
|
387
|
-
|
|
388
|
-
tableBuilder = new TableBuilder(this.users, this.metaData, this.settings);
|
|
389
|
-
|
|
390
|
-
exportData() {
|
|
391
|
-
this.tableBuilder.container()?.exportToCsv();
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
expandGroups() {
|
|
395
|
-
this.tableBuilder.container()?.expandAllGroups();
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
collapseGroups() {
|
|
399
|
-
this.tableBuilder.container()?.collapseAllGroups();
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
## Helper Function: CreateTableBuilder
|
|
405
|
-
|
|
406
|
-
For working with observables that emit `ReportDef` objects (which contain both data and metadata):
|
|
407
|
-
|
|
408
|
-
```typescript
|
|
409
|
-
import { Observable } from 'rxjs';
|
|
410
|
-
import { CreateTableBuilder } from 'angular-utilities';
|
|
411
|
-
|
|
412
|
-
interface ReportDef {
|
|
413
|
-
data: any[];
|
|
414
|
-
metaData: MetaData[];
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
const reportDef$: Observable<ReportDef> = this.reportService.getReport();
|
|
418
|
-
const tableBuilder = CreateTableBuilder(reportDef$);
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
This helper automatically splits the observable into separate data and metadata streams.
|
|
422
|
-
|
|
423
|
-
## Related Documentation
|
|
424
|
-
|
|
425
|
-
- [Table Container Component](TABLE-CONTAINER.md) - How to use TableBuilder with the table component
|
|
426
|
-
- [MetaData Documentation](METADATA-DOCUMENTATION.md) - Column configuration
|
|
427
|
-
- [TableBuilder Settings](TABLE-BUILDER-SETTINGS.md) - Table behavior and appearance
|
|
428
|
-
- [TableBuilder Config](TABLE-BUILDER-CONFIG.md) - Global configuration
|
|
429
|
-
- [CustomCell Directive](CUSTOM-CELL.md) - Custom cell templates
|
|
430
|
-
- [CustomGroupRow Directive](CUSTOM-GROUP-ROW.md) - Custom group row templates
|