@oneteme/jquery-table 0.0.1 → 0.0.3

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 (29) hide show
  1. package/README.md +439 -122
  2. package/esm2022/lib/component/export.manager.mjs +45 -0
  3. package/esm2022/lib/component/group-by.manager.mjs +99 -0
  4. package/esm2022/lib/component/lazy-column-manager.mjs +99 -0
  5. package/esm2022/lib/component/slice-panel/slice-panel.component.mjs +43 -37
  6. package/esm2022/lib/component/slice-panel/slice-panel.model.mjs +1 -1
  7. package/esm2022/lib/component/table-preferences.manager.mjs +38 -0
  8. package/esm2022/lib/component/table.component.mjs +732 -370
  9. package/esm2022/lib/component/table.constants.mjs +31 -0
  10. package/esm2022/lib/component/table.utils.mjs +2 -2
  11. package/esm2022/lib/component/view/view.facade.mjs +304 -0
  12. package/esm2022/lib/jqt-i18n.token.mjs +41 -0
  13. package/esm2022/lib/jquery-table.model.mjs +14 -2
  14. package/esm2022/public-api.mjs +2 -1
  15. package/fesm2022/oneteme-jquery-table.mjs +1434 -408
  16. package/fesm2022/oneteme-jquery-table.mjs.map +1 -1
  17. package/lib/component/export.manager.d.ts +16 -0
  18. package/lib/component/group-by.manager.d.ts +44 -0
  19. package/lib/component/lazy-column-manager.d.ts +26 -0
  20. package/lib/component/slice-panel/slice-panel.component.d.ts +11 -3
  21. package/lib/component/slice-panel/slice-panel.model.d.ts +11 -1
  22. package/lib/component/table-preferences.manager.d.ts +17 -0
  23. package/lib/component/table.component.d.ts +165 -27
  24. package/lib/component/table.constants.d.ts +30 -0
  25. package/lib/component/view/view.facade.d.ts +95 -0
  26. package/lib/jqt-i18n.token.d.ts +87 -0
  27. package/lib/jquery-table.model.d.ts +82 -0
  28. package/package.json +2 -2
  29. package/public-api.d.ts +1 -0
@@ -0,0 +1,87 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * Labels de l'interface utilisateur de jquery-table.
4
+ *
5
+ * Fournir ce token au niveau du module ou du composant racine pour localiser
6
+ * ou personnaliser tous les textes de la bibliothèque en un seul endroit :
7
+ *
8
+ * ```ts
9
+ * providers: [
10
+ * { provide: JQT_I18N, useValue: { searchPlaceholder: 'Search…', emptyState: 'No data' } }
11
+ * ]
12
+ * ```
13
+ *
14
+ * Tous les champs sont optionnels : seul ce que vous fournissez écrase les
15
+ * valeurs par défaut françaises.
16
+ */
17
+ export interface JqtI18n {
18
+ /** Placeholder de la barre de recherche. */
19
+ searchPlaceholder: string;
20
+ /** Titre du bouton pour déplier le panneau de filtres. */
21
+ expandFilterTitle: string;
22
+ /** Titre du bouton pour replier le panneau de filtres. */
23
+ collapseFilterTitle: string;
24
+ /** Label du sous-menu "Champs" dans View. */
25
+ viewMenuFields: string;
26
+ /** Label du sous-menu "Group by" dans View. */
27
+ viewMenuGroupBy: string;
28
+ /** Label du sous-menu "Slice by" dans View. */
29
+ viewMenuSliceBy: string;
30
+ /** Label affiché quand aucune option n'est sélectionnée (groupe, slice). */
31
+ viewNoneSelected: string;
32
+ /** Bouton "Retirer le groupe" dans la barre de groupe. */
33
+ groupRemove: string;
34
+ /** Label "Trier :" dans la barre de groupe. */
35
+ groupSortLabel: string;
36
+ /** Tooltip tri ascendant. */
37
+ groupSortAsc: string;
38
+ /** Tooltip tri descendant. */
39
+ groupSortDesc: string;
40
+ /** Label "Lignes par groupe" dans le sélecteur de taille de groupe. */
41
+ groupRowsPerGroup: string;
42
+ /** Option "Toutes" (afficher toutes les lignes sans pagination de groupe). */
43
+ groupShowAll: string;
44
+ /** Message quand le groupe dépasse le nombre maximal autorisé. Reçoit le nombre de groupes. */
45
+ groupTooMany: (count: number) => string;
46
+ /** Label du bouton de réessai pour une colonne lazy en erreur. */
47
+ lazyRetry: string;
48
+ /** Tooltip du bouton de réessai. */
49
+ lazyErrorTitle: string;
50
+ /** Tooltip de l'icône d'erreur dans le menu View > Champs. */
51
+ lazyErrorMenuTitle: string;
52
+ /** Valeur affichée dans une cellule vide (null / undefined / ''). */
53
+ cellEmpty: string;
54
+ /** Message quand le tableau est vide. */
55
+ emptyState: string;
56
+ /** Message pendant le chargement (`[isLoading]="true"`). */
57
+ loadingState: string;
58
+ /** Titre du panneau de filtres latéral. Reçoit le nombre de blocs de filtres actifs. */
59
+ filterPanelTitle: (count: number) => string;
60
+ /** Titre par défaut d'un bloc de filtre sans `title` configuré. */
61
+ filterBlockDefaultTitle: string;
62
+ /** Message dans un bloc de filtre sans catégories correspondantes. */
63
+ filterEmptyState: string;
64
+ /** Label du bouton d'export CSV. */
65
+ exportButtonLabel: string;
66
+ /** Label du menu Préférences dans View. */
67
+ preferencesMenuLabel: string;
68
+ /** Sous-item : activer le mode édition. */
69
+ preferencesEdit: string;
70
+ /** Sous-item : enregistrer la config. */
71
+ preferencesSave: string;
72
+ /** Sous-item : effacer la config. */
73
+ preferencesClear: string;
74
+ /** Message de confirmation après enregistrement. */
75
+ preferencesSavedMessage: string;
76
+ /** Message de confirmation après effacement. */
77
+ preferencesClearedMessage: string;
78
+ /** Tooltip du bouton de validation du mode édition. */
79
+ preferencesConfirmEdit: string;
80
+ }
81
+ /** Valeurs par défaut (français). Toutes les propriétés sont garanties non nulles. */
82
+ export declare const JQT_I18N_DEFAULTS: JqtI18n;
83
+ /**
84
+ * Token d'injection pour surcharger tout ou partie des labels de jquery-table.
85
+ * Accepte un `Partial<JqtI18n>` — seules les clés fournies écrasent les défauts.
86
+ */
87
+ export declare const JQT_I18N: InjectionToken<Partial<JqtI18n>>;
@@ -10,6 +10,13 @@ export interface TableColumnProvider<T = any> {
10
10
  value?: DataProvider<any>;
11
11
  /** Valeur utilisée pour le tri si différente de `value`. Utile quand `value` retourne une chaîne formatée (date, durée...). */
12
12
  sortValue?: DataProvider<any>;
13
+ /**
14
+ * Valeur utilisée pour la recherche plein-texte.
15
+ * À définir quand la colonne utilise un `jqt-cell-def` template personnalisé et qu'aucun `value` provider n'est déclaré.
16
+ * Si absent, la recherche utilise `value` en priorité, puis la valeur brute de la ligne.
17
+ * Exemple : `searchValue: (row) => durationPipe.transform((today - row.start) / 1000)`
18
+ */
19
+ searchValue?: DataProvider<string>;
13
20
  sortable?: boolean;
14
21
  removable?: boolean;
15
22
  optional?: boolean;
@@ -27,6 +34,8 @@ export interface TableSearchConfig {
27
34
  enabled?: boolean;
28
35
  /** Valeur initiale au chargement. */
29
36
  initialQuery?: string;
37
+ /** Restreint la recherche texte aux colonnes dont la `key` est dans ce tableau. Si absent, toutes les colonnes sont cherchées. */
38
+ searchColumns?: string[];
30
39
  }
31
40
  /** Configuration de la pagination. */
32
41
  export interface TablePaginationConfig {
@@ -52,6 +61,72 @@ export interface TableLabelsConfig {
52
61
  /** Affiché pendant le chargement. Par défaut : `'Chargement des données...'`. */
53
62
  loading?: string;
54
63
  }
64
+ /**
65
+ * Raccourci pour déclarer une colonne de base.
66
+ *
67
+ * ```ts
68
+ * columns: [
69
+ * col('name', 'Nom'),
70
+ * col('status', 'Statut', { sortable: false }),
71
+ * ]
72
+ * ```
73
+ */
74
+ export declare function col<T = any>(key: string, header: string, overrides?: Partial<TableColumnProvider<T>>): TableColumnProvider<T>;
75
+ /** Configuration de l’export CSV déclenché depuis la toolbar. */
76
+ export interface TableExportConfig<T = any> {
77
+ /** Affiche le bouton Export dans la toolbar. Par défaut : `true`. */
78
+ enabled?: boolean;
79
+ /** Nom du fichier généré. Par défaut : `'export.csv'`. */
80
+ filename?: string;
81
+ /**
82
+ * Transforme chaque ligne avant export.
83
+ * Si absent, les valeurs affichées (après `normalizeCellValue`) sont utilisées.
84
+ * Seules les colonnes visibles sont exportées.
85
+ */
86
+ transform?: (row: T) => Record<string, string>;
87
+ }
88
+ /**
89
+ * Configuration de la fonctionnalité Préférences.
90
+ *
91
+ * Ajoute un menu "Préférences" dans View qui permet :
92
+ * - Le **mode édition** (redimensionner / réordonner les colonnes à la souris)
93
+ * - L'**enregistrement** de la configuration courante dans le localStorage
94
+ * - L'**effacement** de la configuration sauvegardée
95
+ *
96
+ * Chaque tableau est identifié par `tableId` (clé localStorage unique).
97
+ */
98
+ export interface TablePreferencesConfig {
99
+ /** Active la fonctionnalité. Par défaut : `true`. */
100
+ enabled?: boolean;
101
+ /**
102
+ * Identifiant unique du tableau, utilisé comme clé localStorage.
103
+ * Doit être stable entre les rechargements de page.
104
+ * Si absent, un identifiant est dérivé automatiquement des clés de colonnes.
105
+ * Exemple : `'user-table'`, `'invoice-list'`.
106
+ */
107
+ tableId?: string;
108
+ }
109
+ /** Snapshot de configuration persisté dans le localStorage. */
110
+ export interface SavedTableConfig {
111
+ /** Valeur de la searchbar. */
112
+ search?: string;
113
+ /** Clé de la colonne utilisée pour le group by. `null` = aucun. */
114
+ groupBy?: string | null;
115
+ /** Ordre des clés de colonnes (position). */
116
+ columnOrder?: string[];
117
+ /** Clés des colonnes visibles. */
118
+ visibleColumns?: string[];
119
+ /** Largeurs de colonnes en pixels, indexées par clé. */
120
+ columnWidths?: Record<string, number>;
121
+ /** Panneau slice replié ou non. */
122
+ slicePanelCollapsed?: boolean;
123
+ /** Clés des slices statiques cachées par l'utilisateur (via toggle dans le menu View). */
124
+ hiddenSliceKeys?: string[];
125
+ /** Clés des colonnes utilisées comme slices dynamiques. */
126
+ dynamicSliceKeys?: string[];
127
+ /** Filtres actifs du slice panel : map sliceIndex → tableau de clés actives. */
128
+ sliceFilters?: Record<number, string[]>;
129
+ }
55
130
  export interface TableProvider<T = any> {
56
131
  columns?: TableColumnProvider<T>[];
57
132
  title?: string;
@@ -67,6 +142,13 @@ export interface TableProvider<T = any> {
67
142
  active: string;
68
143
  direction: 'asc' | 'desc';
69
144
  };
145
+ /** Clé de colonne à utiliser comme group-by par défaut au chargement. N'est pas écrasé par les changements de données ni par un reset explicite de l'utilisateur. */
146
+ defaultGroupBy?: string | null;
70
147
  rowClass?: (row: T, index: number) => string | string[] | Record<string, boolean>;
148
+ /** Callback déclenché quand l'utilisateur clique sur une ligne. Alternative au `(rowSelected)` Output. */
71
149
  onRowSelected?: (row: T, event: MouseEvent | null) => void;
150
+ /** Configuration de l'export CSV. */
151
+ export?: TableExportConfig<T>;
152
+ /** Configuration de la fonctionnalité Préférences (édition + persistance localStorage). */
153
+ preferences?: TablePreferencesConfig;
72
154
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneteme/jquery-table",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
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,7 +13,7 @@
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.27"
16
+ "@oneteme/jquery-core": "^0.0.28"
17
17
  },
18
18
  "dependencies": {
19
19
  "tslib": "^2.3.0"
package/public-api.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './lib/jquery-table.model';
2
+ export * from './lib/jqt-i18n.token';
2
3
  export * from './lib/component/table.component';
3
4
  export * from './lib/component/slice-panel/slice-panel.model';
4
5
  export * from './lib/component/slice-panel/slice-panel.component';