@oneteme/jquery-table 0.0.13 → 0.0.14
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/README.md +69 -6
- package/esm2022/lib/component/export.manager.mjs +3 -3
- package/esm2022/lib/component/table.component.mjs +161 -57
- package/esm2022/lib/jquery-table.model.mjs +1 -1
- package/fesm2022/oneteme-jquery-table.mjs +162 -58
- package/fesm2022/oneteme-jquery-table.mjs.map +1 -1
- package/lib/component/table.component.d.ts +36 -14
- package/lib/jquery-table.model.d.ts +18 -1
- package/package.json +3 -3
|
@@ -8,6 +8,10 @@ import { JqtCellDefDirective } from '../directive/jqt-cell-def.directive';
|
|
|
8
8
|
import { SlicePanelComponent, OrganizerFacade, GroupByManager, OrganizerConfig, OrganizerButtonEvent, OrganizerState } from '@oneteme/jquery-organizer';
|
|
9
9
|
import { VisualCopyFeedbackConfig, VisualSnapshot, VisualSnapshotApplyResult, VisualSnapshotDraft } from '@oneteme/jquery-core';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
|
+
interface TableSortState {
|
|
12
|
+
active: string;
|
|
13
|
+
direction: 'asc' | 'desc' | '';
|
|
14
|
+
}
|
|
11
15
|
export declare class TableComponent<T = any> implements OnChanges, AfterContentInit, AfterViewInit, OnDestroy {
|
|
12
16
|
_isFullscreen: boolean;
|
|
13
17
|
config?: TableProvider<T>;
|
|
@@ -28,33 +32,31 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
28
32
|
copyFeedback: VisualCopyFeedbackConfig;
|
|
29
33
|
/** Paramètre de contrôle pour réinitialiser barre de recherche. */
|
|
30
34
|
set clearSearchInput(value: boolean | null | undefined);
|
|
31
|
-
addRequested: EventEmitter<void>;
|
|
32
|
-
columnAdded: EventEmitter<TableColumnProvider<T>>;
|
|
33
|
-
columnRemoved: EventEmitter<TableColumnProvider<T>>;
|
|
34
|
-
categorySelected: EventEmitter<string>;
|
|
35
|
-
rowSelected: EventEmitter<T>;
|
|
35
|
+
readonly addRequested: EventEmitter<void>;
|
|
36
|
+
readonly columnAdded: EventEmitter<TableColumnProvider<T>>;
|
|
37
|
+
readonly columnRemoved: EventEmitter<TableColumnProvider<T>>;
|
|
38
|
+
readonly categorySelected: EventEmitter<string>;
|
|
39
|
+
readonly rowSelected: EventEmitter<T>;
|
|
36
40
|
/** Émis à chaque changement de tri (y compris le tri initial). */
|
|
37
|
-
sortChange: EventEmitter<
|
|
38
|
-
active: string;
|
|
39
|
-
direction: 'asc' | 'desc' | '';
|
|
40
|
-
}>;
|
|
41
|
+
readonly sortChange: EventEmitter<TableSortState>;
|
|
41
42
|
/** Émis à chaque changement de page ou de taille de page. */
|
|
42
|
-
pageChange: EventEmitter<{
|
|
43
|
+
readonly pageChange: EventEmitter<{
|
|
43
44
|
pageIndex: number;
|
|
44
45
|
pageSize: number;
|
|
45
46
|
}>;
|
|
46
47
|
/** Émis à chaque changement de la recherche texte. */
|
|
47
|
-
searchChange: EventEmitter<string>;
|
|
48
|
+
readonly searchChange: EventEmitter<string>;
|
|
48
49
|
/** Émis quand le Group by change (clé de colonne, ou `null` si désactivé). */
|
|
49
|
-
groupByChange: EventEmitter<string>;
|
|
50
|
+
readonly groupByChange: EventEmitter<string>;
|
|
50
51
|
/** Émis quand la liste des colonnes visibles change (clés dans l’ordre d’affichage). */
|
|
51
|
-
columnsChange: EventEmitter<string[]>;
|
|
52
|
-
visualCopied: EventEmitter<VisualSnapshot>;
|
|
52
|
+
readonly columnsChange: EventEmitter<string[]>;
|
|
53
|
+
readonly visualCopied: EventEmitter<VisualSnapshot>;
|
|
53
54
|
set paginator(value: MatPaginator | undefined);
|
|
54
55
|
get paginator(): MatPaginator | undefined;
|
|
55
56
|
private _paginator?;
|
|
56
57
|
sort?: MatSort;
|
|
57
58
|
tableBodyScrollRef?: ElementRef<HTMLElement>;
|
|
59
|
+
tableShellRef?: ElementRef<HTMLElement>;
|
|
58
60
|
slicePanelRef?: SlicePanelComponent<T>;
|
|
59
61
|
_cellDefs: QueryList<JqtCellDefDirective>;
|
|
60
62
|
/** Map clé→TemplateRef pré-calculée depuis _cellDefs. Mise à jour dans ngAfterContentInit et sur _cellDefs.changes. */
|
|
@@ -86,6 +88,7 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
86
88
|
_showSlicePanel: boolean;
|
|
87
89
|
/** Snapshot stable de l'état collapsed du panneau slice, mis à jour via (collapsedChange) */
|
|
88
90
|
_slicePanelCollapsed: boolean;
|
|
91
|
+
private _initialSlicePanelCollapsedApplied;
|
|
89
92
|
get _staticSlicesForMenu(): Array<{
|
|
90
93
|
key: string;
|
|
91
94
|
title: string;
|
|
@@ -126,7 +129,10 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
126
129
|
private _cdr;
|
|
127
130
|
private _el;
|
|
128
131
|
private _ngZone;
|
|
132
|
+
private _paginatorIntl;
|
|
129
133
|
private _i18nRaw;
|
|
134
|
+
private _tableShellResizeObserver?;
|
|
135
|
+
private readonly _fullItemsPerPageLabel;
|
|
130
136
|
copyFeedbackMessage: string;
|
|
131
137
|
private _copyFeedbackTimer?;
|
|
132
138
|
/** Labels de l’interface. Fusionnés depuis JQT_I18N_DEFAULTS et le token JQT_I18N injecté. */
|
|
@@ -174,19 +180,27 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
174
180
|
/** Cache groupBy — invalidé dès que rows/key/tri changent. */
|
|
175
181
|
private _groupCache;
|
|
176
182
|
private _pendingRender;
|
|
183
|
+
private readonly _deferredTimers;
|
|
184
|
+
private _headerMeasureFrame;
|
|
185
|
+
private _destroyed;
|
|
177
186
|
private _staticSliceHiddenKeys;
|
|
178
187
|
private _configHiddenKeys;
|
|
179
188
|
/** Clés des colonnes visibles du dernier émission columnsChange (pour éviter les émissions dupliquement). */
|
|
180
189
|
private _prevColumnKeys;
|
|
190
|
+
private emitColumnsChangeIfNeeded;
|
|
181
191
|
ngOnChanges(changes: SimpleChanges): void;
|
|
182
192
|
ngAfterContentInit(): void;
|
|
183
193
|
ngAfterViewInit(): void;
|
|
194
|
+
private _observeTableShellWidth;
|
|
184
195
|
private _applyPendingDynamicSliceKeys;
|
|
185
196
|
ngOnDestroy(): void;
|
|
186
197
|
private _measureHeaderHeight;
|
|
198
|
+
private _scheduleHeaderMeasure;
|
|
199
|
+
private _scheduleDeferred;
|
|
187
200
|
private _organizerConfigCache;
|
|
188
201
|
private _invalidateOrganizerConfig;
|
|
189
202
|
get organizerConfig(): OrganizerConfig;
|
|
203
|
+
get organizerHideMenuValues(): boolean;
|
|
190
204
|
get organizerState(): OrganizerState;
|
|
191
205
|
onOrganizerViewChange(event: OrganizerButtonEvent): void;
|
|
192
206
|
get title(): string;
|
|
@@ -222,6 +236,7 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
222
236
|
header?: string;
|
|
223
237
|
}): string;
|
|
224
238
|
onSearchChange(): void;
|
|
239
|
+
private setGroupByAndEmit;
|
|
225
240
|
onGroupByChange(key: string | null): void;
|
|
226
241
|
onGroupPageSizeChange(size: number | string): void;
|
|
227
242
|
onGroupSortToggle(dir: 'asc' | 'desc'): void;
|
|
@@ -278,6 +293,7 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
278
293
|
}> | null;
|
|
279
294
|
get hasCustomCellDefs(): boolean;
|
|
280
295
|
get hasRowClickHandler(): boolean;
|
|
296
|
+
rowActionLabel(row: any): string;
|
|
281
297
|
/** Largeur minimale du tableau en px, calculée depuis les largeurs explicites des colonnes actives.
|
|
282
298
|
* Retourne null si aucune colonne n'a de largeur définie (le tableau remplit alors 100% du conteneur).
|
|
283
299
|
* Seules les valeurs explicitement en `px` sont sommables ; les pourcentages ou autres unités sont ignorés. */
|
|
@@ -286,6 +302,7 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
286
302
|
getRowClass(row: any): string | string[] | Record<string, boolean>;
|
|
287
303
|
onRowClick(row: any, event: MouseEvent | null): void;
|
|
288
304
|
onHeaderDragStart(columnKey: string, event: DragEvent): void;
|
|
305
|
+
onHeaderKeyDown(columnKey: string, event: KeyboardEvent): void;
|
|
289
306
|
onHeaderDragOver(columnKey: string, event: DragEvent): void;
|
|
290
307
|
onHeaderDrop(targetColumnKey: string, event: DragEvent): void;
|
|
291
308
|
onHeaderDragEnd(): void;
|
|
@@ -343,6 +360,10 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
343
360
|
private getCategoryFilteredData;
|
|
344
361
|
private projectRows;
|
|
345
362
|
private _buildSortComparator;
|
|
363
|
+
private _buildCachedSortComparator;
|
|
364
|
+
private _compareSortValues;
|
|
365
|
+
private _normalizeSortValue;
|
|
366
|
+
private _applySortDirection;
|
|
346
367
|
/**
|
|
347
368
|
* Retourne la valeur telle qu'elle est affichée dans la cellule, en suivant exactement
|
|
348
369
|
* le même chemin que resolveCellValue — utilisée pour la recherche plein-texte.
|
|
@@ -361,3 +382,4 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
|
|
|
361
382
|
static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
|
|
362
383
|
static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "jquery-table", never, { "config": { "alias": "config"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "data": { "alias": "data"; "required": false; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; }; "columnsConfig": { "alias": "columnsConfig"; "required": false; }; "view": { "alias": "view"; "required": false; }; "columnLabels": { "alias": "columnLabels"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "copyFeedback": { "alias": "copyFeedback"; "required": false; }; "clearSearchInput": { "alias": "clearSearchInput"; "required": false; }; }, { "addRequested": "addRequested"; "columnAdded": "columnAdded"; "columnRemoved": "columnRemoved"; "categorySelected": "categorySelected"; "rowSelected": "rowSelected"; "sortChange": "sortChange"; "pageChange": "pageChange"; "searchChange": "searchChange"; "groupByChange": "groupByChange"; "columnsChange": "columnsChange"; "visualCopied": "visualCopied"; }, ["_cellDefs"], never, true, never>;
|
|
363
384
|
}
|
|
385
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataProvider } from '@oneteme/jquery-core';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { SliceConfig } from '@oneteme/jquery-organizer';
|
|
3
|
+
import { OrganizerConfig, SliceConfig } from '@oneteme/jquery-organizer';
|
|
4
4
|
export { SliceConfig } from '@oneteme/jquery-organizer';
|
|
5
5
|
export interface TableColumnProvider<T = any> {
|
|
6
6
|
key: string;
|
|
@@ -17,11 +17,14 @@ export interface TableColumnProvider<T = any> {
|
|
|
17
17
|
* Exemple : `searchValue: (row) => durationPipe.transform((today - row.start) / 1000)`
|
|
18
18
|
*/
|
|
19
19
|
searchValue?: DataProvider<string>;
|
|
20
|
+
/** Active le tri ; `true` par défaut. */
|
|
20
21
|
sortable?: boolean;
|
|
21
22
|
removable?: boolean;
|
|
22
23
|
optional?: boolean;
|
|
23
24
|
width?: string;
|
|
25
|
+
/** Rend la colonne disponible dans Group by ; `true` par défaut si `header` est défini. */
|
|
24
26
|
groupable?: boolean;
|
|
27
|
+
/** Rend la colonne disponible comme Slice by dynamique ; `true` par défaut si `header` est défini. */
|
|
25
28
|
sliceable?: boolean;
|
|
26
29
|
/** Chargement différé : la présence de cet objet active le mode lazy. */
|
|
27
30
|
lazy?: {
|
|
@@ -62,6 +65,17 @@ export interface TableLabelsConfig {
|
|
|
62
65
|
/** Affiché pendant le chargement. Par défaut : `'Chargement des données...'`. */
|
|
63
66
|
loading?: string;
|
|
64
67
|
}
|
|
68
|
+
/** Options publiques du bouton Organizer intégré à la toolbar. */
|
|
69
|
+
export interface TableOrganizerConfig {
|
|
70
|
+
/** Libellé optionnel affiché à côté de l'icône. */
|
|
71
|
+
buttonLabel?: OrganizerConfig['buttonLabel'];
|
|
72
|
+
/** Icône Material affichée dans le bouton. */
|
|
73
|
+
buttonIcon?: OrganizerConfig['buttonIcon'];
|
|
74
|
+
/** Masque l'icône lorsque le bouton utilise un libellé seul. */
|
|
75
|
+
showButtonIcon?: OrganizerConfig['showButtonIcon'];
|
|
76
|
+
/** Masque les valeurs récapitulatives dans les sous-menus. */
|
|
77
|
+
hideMenuValues?: boolean;
|
|
78
|
+
}
|
|
65
79
|
/**
|
|
66
80
|
* Raccourci pour déclarer une colonne de base.
|
|
67
81
|
*
|
|
@@ -135,6 +149,8 @@ export interface TableProvider<T = any> {
|
|
|
135
149
|
onCopyVisual?: () => void;
|
|
136
150
|
onToggleFullscreen?: () => void;
|
|
137
151
|
slices?: SliceConfig<T>[];
|
|
152
|
+
/** État initial du panneau de slices. Une préférence sauvegardée reste prioritaire. */
|
|
153
|
+
slicePanelCollapsed?: boolean;
|
|
138
154
|
/** Affiche le bouton toggle pour replier/déplier le panneau de slices. Par défaut : `true`. */
|
|
139
155
|
enableSliceToggle?: boolean;
|
|
140
156
|
/**
|
|
@@ -145,6 +161,7 @@ export interface TableProvider<T = any> {
|
|
|
145
161
|
search?: TableSearchConfig;
|
|
146
162
|
pagination?: TablePaginationConfig;
|
|
147
163
|
view?: TableViewConfig;
|
|
164
|
+
organizer?: TableOrganizerConfig;
|
|
148
165
|
labels?: TableLabelsConfig;
|
|
149
166
|
/** Tri initial appliqué au chargement. N'est pas écrasé par les changements de données. */
|
|
150
167
|
defaultSort?: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneteme/jquery-table",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"description": "jquery table lib",
|
|
5
5
|
"homepage": "https://github.com/oneteme/jquery-charts",
|
|
6
6
|
"bugs": "https://github.com/oneteme/jquery-charts/issues",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"@angular/core": ">=16.1.0",
|
|
14
14
|
"@angular/material": "^16.1.0",
|
|
15
15
|
"@angular/cdk": "^16.1.0",
|
|
16
|
-
"@oneteme/jquery-core": "^0.0.
|
|
17
|
-
"@oneteme/jquery-organizer": "^0.0.
|
|
16
|
+
"@oneteme/jquery-core": "^0.0.37",
|
|
17
|
+
"@oneteme/jquery-organizer": "^0.0.6"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"tslib": "^2.3.0"
|