@esfaenza/es-table 11.2.22-beta6 → 11.2.23

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 (67) hide show
  1. package/bundles/esfaenza-es-table.umd.js +3204 -2999
  2. package/bundles/esfaenza-es-table.umd.js.map +1 -1
  3. package/bundles/esfaenza-es-table.umd.min.js +1 -15
  4. package/bundles/esfaenza-es-table.umd.min.js.map +1 -1
  5. package/esfaenza-es-table.d.ts +6 -5
  6. package/esfaenza-es-table.metadata.json +1 -1
  7. package/esm2015/esfaenza-es-table.js +7 -6
  8. package/esm2015/lib/components/es-table/es_table.component.js +1316 -0
  9. package/esm2015/lib/components/es-table/es_table.component.loc.js +36 -0
  10. package/esm2015/lib/components/es-td/es_td.component.js +106 -0
  11. package/esm2015/lib/components/es-th/es_th.component.js +160 -0
  12. package/esm2015/lib/components/pager/table_pager.component.js +106 -0
  13. package/esm2015/lib/components/pager/table_pager.component.loc.js +22 -0
  14. package/esm2015/lib/core/handlers/classes/ColumnMetadataHandler.js +679 -0
  15. package/esm2015/lib/core/handlers/classes/DynamicModeHandler.js +64 -0
  16. package/esm2015/lib/core/handlers/classes/ExportHandler.js +43 -0
  17. package/esm2015/lib/core/handlers/classes/HierarchyModeHandler.js +136 -0
  18. package/esm2015/lib/core/handlers/classes/ItemsHandler.js +130 -0
  19. package/esm2015/lib/core/handlers/classes/ReportModeHandler.js +70 -0
  20. package/esm2015/lib/core/handlers/classes/RowGroupingHandler.js +475 -0
  21. package/esm2015/lib/core/handlers/classes/SelectionHandler.js +527 -0
  22. package/esm2015/lib/core/handlers/classes/UtilitiesHandler.js +169 -0
  23. package/esm2015/lib/core/handlers/index.js +10 -0
  24. package/esm2015/lib/domain/configuration/EsTableDefaultable.js +4 -0
  25. package/esm2015/lib/domain/configuration/EsTableModuleConfig.js +4 -0
  26. package/esm2015/lib/domain/internals/classes/EsTableColumn.js +1 -1
  27. package/esm2015/lib/domain/internals/classes/ThElement.js +2 -0
  28. package/esm2015/lib/domain/internals/index.js +2 -1
  29. package/esm2015/lib/es-table.module.js +6 -6
  30. package/esm2015/lib/tokens.js +1 -1
  31. package/esm2015/public-api.js +6 -6
  32. package/fesm2015/esfaenza-es-table.js +2876 -2694
  33. package/fesm2015/esfaenza-es-table.js.map +1 -1
  34. package/lib/components/es-table/es_table.component.d.ts +632 -0
  35. package/lib/{es_table.component.loc.d.ts → components/es-table/es_table.component.loc.d.ts} +0 -0
  36. package/lib/{es_td.component.d.ts → components/es-td/es_td.component.d.ts} +0 -0
  37. package/lib/{es_th.component.d.ts → components/es-th/es_th.component.d.ts} +6 -0
  38. package/lib/{pager → components/pager}/table_pager.component.d.ts +8 -1
  39. package/lib/{pager → components/pager}/table_pager.component.loc.d.ts +0 -0
  40. package/lib/core/handlers/classes/ColumnMetadataHandler.d.ts +159 -0
  41. package/lib/core/handlers/classes/DynamicModeHandler.d.ts +32 -0
  42. package/lib/core/handlers/classes/ExportHandler.d.ts +22 -0
  43. package/lib/core/handlers/classes/HierarchyModeHandler.d.ts +40 -0
  44. package/lib/core/handlers/classes/ItemsHandler.d.ts +41 -0
  45. package/lib/core/handlers/classes/ReportModeHandler.d.ts +21 -0
  46. package/lib/core/handlers/classes/RowGroupingHandler.d.ts +114 -0
  47. package/lib/core/handlers/classes/SelectionHandler.d.ts +149 -0
  48. package/lib/core/handlers/classes/UtilitiesHandler.d.ts +67 -0
  49. package/lib/core/handlers/index.d.ts +9 -0
  50. package/lib/{models → domain/configuration}/EsTableDefaultable.d.ts +0 -0
  51. package/lib/{models → domain/configuration}/EsTableModuleConfig.d.ts +0 -0
  52. package/lib/domain/internals/classes/EsTableColumn.d.ts +2 -0
  53. package/lib/domain/internals/classes/ThElement.d.ts +13 -0
  54. package/lib/domain/internals/index.d.ts +1 -0
  55. package/lib/es-table.module.d.ts +1 -1
  56. package/lib/tokens.d.ts +1 -1
  57. package/package.json +1 -1
  58. package/public-api.d.ts +5 -5
  59. package/esm2015/lib/es_table.component.js +0 -3444
  60. package/esm2015/lib/es_table.component.loc.js +0 -35
  61. package/esm2015/lib/es_td.component.js +0 -106
  62. package/esm2015/lib/es_th.component.js +0 -150
  63. package/esm2015/lib/models/EsTableDefaultable.js +0 -4
  64. package/esm2015/lib/models/EsTableModuleConfig.js +0 -4
  65. package/esm2015/lib/pager/table_pager.component.js +0 -92
  66. package/esm2015/lib/pager/table_pager.component.loc.js +0 -22
  67. package/lib/es_table.component.d.ts +0 -1186
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, EventEmitter } from "@angular/core";
1
+ import { ChangeDetectorRef, EventEmitter, SimpleChanges } from "@angular/core";
2
2
  import { LocalizationService } from "@esfaenza/localizations";
3
3
  import { MessageService } from "@esfaenza/extensions";
4
4
  /** Componente che si occupa della paginazione di una tabella */
@@ -21,8 +21,12 @@ export declare class TablePagerComponent {
21
21
  GroupMode: boolean;
22
22
  /** Indica se utilizzare il conteggio dei gruppi o degli oggetti */
23
23
  GroupCount: boolean;
24
+ /** Indica il testo che va a sostituire "Oggetti Visualizzati" in caso si stia facendo qualcosa di custom, Ignorato in caso di gruppi */
25
+ CountLabel: string;
24
26
  /** Indica se visualizzare il numero totale di oggeti presenti */
25
27
  ShowCount: boolean;
28
+ /** Indica se visualizzare il numero totale di oggeti presenti */
29
+ ShowPaging: boolean;
26
30
  /** Indica il numero totale di oggeti presenti */
27
31
  PagerCount: number;
28
32
  /** Indica se mostrare o meno il contenuto @deprecated usata solo da MatrixValuesComponent nella lib relativa */
@@ -35,7 +39,10 @@ export declare class TablePagerComponent {
35
39
  Model: number;
36
40
  /** Opzioni di paginazione */
37
41
  PagingOptions: number[];
42
+ /** @ignore */
38
43
  ngOnInit(): void;
44
+ /** @ignore */
45
+ ngOnChanges(changes: SimpleChanges): void;
39
46
  /**
40
47
  * Funzione richiamata dal template quando un utente clicca su un numero di paginazione.
41
48
  *
@@ -0,0 +1,159 @@
1
+ import { UtilityService } from "@esfaenza/extensions";
2
+ import { PreferencesService } from "@esfaenza/preferences";
3
+ import { EsTd } from "../../../components/es-td/es_td.component";
4
+ import { EsTh } from "../../../components/es-th/es_th.component";
5
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
6
+ import { EsTdDirective } from "../../../directives/es_td.directive";
7
+ import { EsThDirective } from "../../../directives/es_th.directive";
8
+ import { UtilitiesHandler, RowGroupingHandler } from "..";
9
+ import { AppSearch, EsTableColumn } from "../../../domain";
10
+ /** Classe che gestisce tutte le informaizoni relative alle colonne: visibilità, posizione, stato di pin/unpin, ecc ecc... */
11
+ export declare class ColumnMetadataHandler {
12
+ private est;
13
+ private utilities;
14
+ private utiExts;
15
+ private prefService;
16
+ private rgH;
17
+ /** @ignore Costruttore*/
18
+ constructor(est: EsTableComponent, utilities: UtilitiesHandler, utiExts: UtilityService, prefService: PreferencesService, rgH: RowGroupingHandler);
19
+ /**
20
+ * Metodo che gestisce il cambio di Ordinamento di una colonna
21
+ *
22
+ * @param {string} id ID della colonna il cui oridnamento è cambiato
23
+ * @param {'DESC' | 'ASC'} order Nuovo ordine selezionato per la colonna
24
+ */
25
+ handleTHOrderChange(id: string, order: 'DESC' | 'ASC'): void;
26
+ /**
27
+ * Partendo dagli **EsThs** estrappolo la lista di **EsTableColumn** che questa tabella dovrà eventualmente gestire per Visibilità e Ordine
28
+ *
29
+ * Costo: 1 scan EsThs
30
+ *
31
+ * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella
32
+ */
33
+ reviewColumnsList(ths: EsTh[] | EsThDirective[]): void;
34
+ /**
35
+ * Prende i th e i td in modalità diretive e li ordina in base a se ci sono colonne fixed o meno
36
+ */
37
+ moveFixedColumnsAtTheBeginning(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[]): void;
38
+ /** In base alla configurazione delle colonne calcola le dimenioni delle colonne pinnate */
39
+ evaluatePinnedColumnsWidth(): void;
40
+ /**
41
+ * Terminato il binding delle colonne da **reviewColumnsList** e della **View** dal **writeValue** questo metodo si occupa
42
+ * dell'allineamento delle informazioni fra le colonne calcolate internamente e le informazioni sulle colonne che arrivano dall'AppSearch
43
+ *
44
+ * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione
45
+ */
46
+ alignColumnsIfLoadedView(view: AppSearch<any>): void;
47
+ /**
48
+ * In base alla visibilità registrata nelle **ColumnsList** questo metodo si occupa di prendere tutti i **EsThs** ed **EsTds** relativi e nasonderli/mostrarli
49
+ *
50
+ * Costo: 1 scan ColumnsList, 1 scan EsThs, 1 scan EsTds
51
+ *
52
+ * @param {EsTh[] | EsThDirective[]} ths Header della tabella
53
+ * @param {EsTd[] | EsTdDirective[]} tds Celle della tabella
54
+ * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione
55
+ */
56
+ refreshColumnsVisibility(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[], view: AppSearch<any>): void;
57
+ /**
58
+ * Allinea gli ordinamenti dati fra le **EsThs** e le informazioni all'interno della View bindata
59
+ *
60
+ * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione
61
+ * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella
62
+ */
63
+ alignHeadersOrdering(ths: EsTh[] | EsThDirective[], view: AppSearch<any>): void;
64
+ /**
65
+ * Genera tutte le informazioni che servono per gestire il raggruppamento degli header
66
+ *
67
+ * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella
68
+ *
69
+ * @returns {{ leafs: EsTh[] | EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} Oggetto contenente la lista delle foglie (header base), il livello
70
+ * massimo di raggruppamento raggiunto, una cache in cui vengono indicati tutti i gruppi che sono "parent" (quindi che raggruppano almeno 1 header) e la cache degli header
71
+ */
72
+ evaluateHeadersGroupingInfos(ths: EsTh[] | EsThDirective[]): {
73
+ leafs: EsTh[] | EsThDirective[];
74
+ groupingLevel: number;
75
+ parentsCache: any;
76
+ thsCache: any;
77
+ };
78
+ /**
79
+ * Genera gli header groups da una lista di info sui th all'interno della variabile **TMPRowThGroups**
80
+ *
81
+ * @param {{ leafs: EsTh[] | EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} infos Informazioni di raggruppamento valutate precedentemente
82
+ */
83
+ evaluateHeaderGroups(infos: {
84
+ leafs: EsTh[] | EsThDirective[];
85
+ groupingLevel: number;
86
+ parentsCache: any;
87
+ thsCache: any;
88
+ }): void;
89
+ /**
90
+ * Calcola il numero di salti da un header foglia all'ultimo parent della catena
91
+ *
92
+ * @param {EsThDirective} th Header da cui scorrere i padri per capire quanti livelli ci sono sopra
93
+ * @param {{ [index: string]: EsThDirective }} thsCache Cache degli header
94
+ */
95
+ private jumpsToFinalParent;
96
+ /**
97
+ * Metodo che genera l'ordine di default delle colonne
98
+ *
99
+ * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione
100
+ */
101
+ generateDefaultOrder(ths: EsTh[] | EsThDirective[], view: AppSearch<any>): void;
102
+ /**
103
+ * Applica l'ordine specificato alle varie colonne
104
+ *
105
+ * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione
106
+ * @param {boolean} finalize Se **true** significa che non mi aspetto di dover effettuare altre operazioni e posso renderizzare la situazione in base ai RowContext
107
+ * Senza finalize significa che mi aspetto altre operazioni che prima o poi richiameranno questa funzione col finalize.
108
+ *
109
+ * Ad esempio, una volta selezionato ordinamento fisico/logico delle colonne so che parte un altra ricerca che mi rivalorizzerà da "writeValue", che già chiama questa funzione.
110
+ * Mettendo solo la chiamata da "writeValue" come "finalizzante" mi assicuro che smanattamenti a frontend non causino flickering fino a quando non servono
111
+ */
112
+ applyOrdering(view: AppSearch<any>, finalize: boolean): void;
113
+ /**
114
+ * All'interno della dialog "Ordinamento e Visibilità Colonne" mette la colonna specificata prima della colonna precedente
115
+ *
116
+ * @param {EsTableColumn} columnItem Colonna da spostare
117
+ */
118
+ sendUp(columnItem: EsTableColumn): void;
119
+ /**
120
+ * All'interno della dialog "Ordinamento e Visibilità Colonne" mette la colonna specificata dopo la colonna successiva
121
+ *
122
+ * @param {EsTableColumn} columnItem Colonna da spostare
123
+ */
124
+ sendDown(columnItem: EsTableColumn): void;
125
+ /**
126
+ * All'interno della dialog "Ordinamento e Visibilità Colonne" pinna la colonna specificata
127
+ *
128
+ * @param {EsTableColumn} columnItem Colonna da spostare
129
+ */
130
+ pinOrUnpinColumn(columnItem: EsTableColumn): void;
131
+ /**
132
+ * All'interno della dialog "Ordinamento e Visibilità Colonne" inverte le impostazioni di visibilità della colonna
133
+ *
134
+ * @param {EsTableColumn} columnItem Colonna da spostare
135
+ */
136
+ columnClicked(item: EsTableColumn): void;
137
+ /** All'apertura della dialog "Ordinamento e Visibilità Colonne" ricarica le informazioni attuali per permettere la modifica */
138
+ resetColumnVisSelection(): void;
139
+ /** Riaggiorna le **OrderDirectives** con le informazioni in **ColumnsList** */
140
+ private refreshColumnOrdering;
141
+ /** Effettua la selezione o meno del check globale (**globalColVisCheck**) di visibilità in base a se tutte le **TMPColumnsList** sono visibili o no */
142
+ updateGlobalColVisCheck(): void;
143
+ /**
144
+ * Funzione che effettua la conferma della visibilità e dell'ordine delle colonne.
145
+ *
146
+ * Questa selezione viene inoltre salvata nelle preferenze (**@esfaenza/preferences**), qualora l'Input **SavePreferences** fosse valorizzato
147
+ *
148
+ * @returns {boolean} **true** se non ci sono problemi, **false** altrimenti
149
+ */
150
+ confirmColumnVisibilitySelection(): boolean;
151
+ /**
152
+ * Effettuo l'unpinning di una colonna in maniera programmatica semplicemente eseguendo una per una le operazioni che verrebbero eseguite altrimenti
153
+ *
154
+ * @param {string} id Codice della colonna da spinnare
155
+ */
156
+ unpinColumn(id: string): void;
157
+ /** Sul click nella checkbox di selezione globale si scorrono tutte le colonne e si impostano al valore della check globale */
158
+ globalColVisCheckChanged(): void;
159
+ }
@@ -0,0 +1,32 @@
1
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
2
+ import { GenericItem } from "../../../domain";
3
+ /** Classe contenente le gestioni particolari della modalità dinamica dell'es-table */
4
+ export declare class DynamicModeHandler {
5
+ private est;
6
+ /** @ignore Costruttore*/
7
+ constructor(est: EsTableComponent);
8
+ /**
9
+ * Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica
10
+ *
11
+ * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
12
+ * @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
13
+ * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
14
+ * @param {GenericItem} item Oggetto generico collegato a questo contesto
15
+ *
16
+ * @returns {any} Router link generato in base al parametri
17
+ */
18
+ generateRouterLink(path: string, parameterProps: string[], item: GenericItem): any;
19
+ /**
20
+ * Crea un router link
21
+ *
22
+ * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
23
+ * @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
24
+ * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
25
+ * @param {GenericItem} item Oggetto generico collegato a questo contesto
26
+ *
27
+ * @returns {any} Router link generato in base al parametri
28
+ */
29
+ private getRouterLink;
30
+ /** Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna */
31
+ eventuallyReviewDynamicColumns(): void;
32
+ }
@@ -0,0 +1,22 @@
1
+ import { ExportService, MessageService } from "@esfaenza/extensions";
2
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
3
+ /** Classe contenente la gestione delle importazioni */
4
+ export declare class ExportHandler {
5
+ private est;
6
+ private expExts;
7
+ private msgExts;
8
+ /** @ignore Costruttore*/
9
+ constructor(est: EsTableComponent, expExts: ExportService, msgExts: MessageService);
10
+ /**
11
+ * Effettua l'esportazione dei dati
12
+ *
13
+ * @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella
14
+ */
15
+ tryExport(format?: string): void;
16
+ /**
17
+ * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**
18
+ *
19
+ * @param {any[]} items Oggetti da esportare
20
+ */
21
+ private setupExport;
22
+ }
@@ -0,0 +1,40 @@
1
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
2
+ /** Classe contenente la gestione della modalità gerarchica */
3
+ export declare class HierarchyModeHandler {
4
+ private est;
5
+ /** @ignore Costruttore*/
6
+ constructor(est: EsTableComponent);
7
+ /**
8
+ * Data una lista di oggetti assegno il livello gerarchico rispetto alla lista di oggetti passata
9
+ *
10
+ * @param {any[]} objs Lista di oggetti a cui aggiungere l'informazione del livello gerarchico
11
+ */
12
+ assignHierarchyLevels(objs: any[]): void;
13
+ /**
14
+ * Per ognuno degli oggetti passati gli assegna un livello di gerarchia in base a **ParentKey** e **OwnKey**
15
+ *
16
+ * @param {any[]} objs Oggetti a cui assegnare il livello di gerarchia
17
+ * @param {number} levelToAssign Livello che sta assegnando attualmente questa iterazione (dato che è ricorsiva)
18
+ *
19
+ * @returns {number} Numero di oggetti a cui è stato assegnato un livello gerarchico
20
+ */
21
+ private assignLevel;
22
+ /**
23
+ * Funzione che permette di effettuare l'espansione di un parent quando la tabella funziona in modalità gerarchica
24
+ *
25
+ * @param {string} key Chiave del parent da espandere
26
+ */
27
+ expandParent(key: string): void;
28
+ /**
29
+ * Funzione che permette di effettuare il collapse di un parent quando la tabella funziona in modalità gerarchica
30
+ *
31
+ * @param {string} key Chiave del parent da collassare
32
+ */
33
+ collapseParent(key: string): void;
34
+ /**
35
+ * Collassa ricorsivamente tutti i figli di un parent identificato dalla **parentKey**
36
+ *
37
+ * @param {string} parentKey Chiave del parent di cui collassare i figli
38
+ */
39
+ private collapseChildOfParent;
40
+ }
@@ -0,0 +1,41 @@
1
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
2
+ import { UtilitiesHandler } from "./UtilitiesHandler";
3
+ /** Classe che si occupa della gestione del recupero degli oggetti, paginazione e tutto ciò in cui gli elementi caricati vengono manipolati direttamente */
4
+ export declare class ItemsHandler {
5
+ private est;
6
+ private utilities;
7
+ /** @ignore Costruttore */
8
+ constructor(est: EsTableComponent, utilities: UtilitiesHandler);
9
+ /**
10
+ * In base alla modalità specificata (ArrayMode, ViewMode, ecc...) questo metodo recupera l'array di oggetti da bindare ad interfaccia
11
+ *
12
+ * @param {boolean} onlyselected [false] Indica di prendere solo gli oggetti selezionati
13
+ * @param {boolean} refreshPaging [false] Indica se aggiornare le informazioni di paginazione o meno
14
+ * @param {boolean} allIfPossible [false] Indica se prendere tutti gli oggetti quaora possibile, usato solo in ArrayMode
15
+ *
16
+ * @returns {any[]} Lista degli oggetti su cui effettuare il bind lato interfaccia
17
+ */
18
+ getItemsByMode(onlyselected?: boolean, refreshPaging?: boolean, allIfPossible?: boolean): any[];
19
+ /**
20
+ * Metodo per effettuare il refresh della paginazione sul cambiamento degli oggetti da visualizzare in una singola pagina.
21
+ *
22
+ * Vale solo per la modalità Array
23
+ *
24
+ * @param {number} pageSize Dimensione della pagina
25
+ */
26
+ refreshPaging(pageSize: number): void;
27
+ /**
28
+ * Ottiene gli oggetti in base alla sorgente
29
+ */
30
+ private getViewItemsBySource;
31
+ /** Genera le informazioni di paginazione e taglia la View in modalità array per mostrare solo gli oggetti della pagina specificata */
32
+ private adaptViewToPaging;
33
+ /**
34
+ * Metodo che prende tutti gli oggetti di cui dispone divisi in bucket da 100 elementi
35
+ *
36
+ * @returns {any[][]} Matrice di array Nx100
37
+ */
38
+ getItemSlices(): any[][];
39
+ /** Se in modalità array applica gli ordinamenti ASC-DESC delle colonne */
40
+ arrayModeReviewOrderings(): void;
41
+ }
@@ -0,0 +1,21 @@
1
+ import { UtilitiesHandler } from "./UtilitiesHandler";
2
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
3
+ import { ReportColumn } from "../../../domain";
4
+ /** Classe che gestisce la modalità Report dell'es-table utilizzata nel Metering */
5
+ export declare class ReportModeHandler {
6
+ private est;
7
+ private utilities;
8
+ /** @ignore Costruttore */
9
+ constructor(est: EsTableComponent, utilities: UtilitiesHandler);
10
+ /**
11
+ * Sul click dell'Header di una colonna questo metodo si occupa di applicare l'ordinamento successivo e di notificare con **emitSearchRequest**
12
+ * il bisogno di aggiornare i dati da parte del componente che utilizza la tabella
13
+ *
14
+ * Utilizzato solo in modalità REport
15
+ *
16
+ * @param {ReportColumn} clm Colonna del report per cui ordinare
17
+ */
18
+ setupNextOrderAndSearch(clm: ReportColumn): void;
19
+ /** Metodo che si occupa di gestire la grafica della tabella in base alle informazioni di ordinamento colonne e paginazione contenuti nel modello */
20
+ reviewReportBindings(): void;
21
+ }
@@ -0,0 +1,114 @@
1
+ import { DateService } from "@esfaenza/extensions";
2
+ import { EsTh } from "../../../components/es-th/es_th.component";
3
+ import { EsThDirective } from "../../../directives/es_th.directive";
4
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
5
+ import { AppOrdering, AppSearch, Group, GroupOrAggregation, GroupPager, GroupRouteFragment } from "../../../domain";
6
+ import { UtilitiesHandler } from "./UtilitiesHandler";
7
+ /** Classe che gestisce la modalità Row Grouping dell'es-table */
8
+ export declare class RowGroupingHandler {
9
+ private est;
10
+ private utilities;
11
+ private dateExts;
12
+ /** Cache per salvare per ogni chiave di ogni gruppo chi è il gruppo rappresentato */
13
+ rgGroupCache: Map<string, Group>;
14
+ /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */
15
+ rgItemCache: Map<string, any[]>;
16
+ /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */
17
+ rgChildGroupsCache: Map<string, Group[]>;
18
+ /** @ignore Costruttore */
19
+ constructor(est: EsTableComponent, utilities: UtilitiesHandler, dateExts: DateService);
20
+ /**
21
+ * In modalità rowgrouping quando mi arriva un nuovo blocco di oggetti devo aggiungerlo alla vista attuale:
22
+ *
23
+ * 1) Se non viene richiesto il dettaglio di alcun gruppo significa che devo considerare mi siano arrivati tutti i gruppi principali
24
+ * 2) Se viene richiesto il dettaglio di un gruppo diverso dall'ultimo devo aggiungere dopo al gruppo cliccato la lista dei sottogruppi
25
+ * 2) Se viene richiesto il dettaglio dell'ultimo gruppo devo aggiungere dopo al gruppo cliccato la lista degli oggetti
26
+ *
27
+ * @param {any} view AppSearch<T> da cui sono arrivati gli oggetti
28
+ * @param {number} groupingKeys Livelli di raggruppamento da aspettarsi sui dati
29
+ */
30
+ handleNewDataOnRowGrouping(view: AppSearch<any>, groupingKeys: number): void;
31
+ /**
32
+ * Se in modalità array applica i raggruppamenti definiti lato row-grouping
33
+ *
34
+ * @param {ths: EsTh[] | EsThDirective[]} ths Header
35
+ */
36
+ arrayModeReviewGroupings(ths: EsTh[] | EsThDirective[]): void;
37
+ /**
38
+ * Data una direttiva EsTh restituisce la lista delle aggregazioni richiesta per questa colonna o il gruppo che rappresenta
39
+ *
40
+ * @param {EsThDirective} th Direttiva
41
+ *
42
+ * @returns {GroupOrAggregation[]} Lista dei gruppi o aggregazioni relativi alla Direttiva passata
43
+ */
44
+ getGroupAggregations(th: EsThDirective): GroupOrAggregation[];
45
+ /**
46
+ * Data una direttiva con un formato restituisce tutte le coppie Funzione di Aggregazione - Formato
47
+ *
48
+ * @param {EsThDirective} th Direttiva EsTh di cui calcolare le funzioni di aggregazione usate
49
+ *
50
+ * @returns {{ func: string, format: string }[]} Lista delle funzioni di aggregazione rilevate
51
+ */
52
+ private getEsThDirectiveListOfAggregations;
53
+ /**
54
+ * Data la definizione dei gruppi da generare da una lista di oggetti, suddivide gli oggetti passati in gruppi e sottogruppi
55
+ *
56
+ * @param {Group[]} grps Definizione dei gruppi
57
+ * @param {number} currentIndex Indice di elaborazione. Al livello 0 ho tutti gli oggetti e devo generare i primi gruppi, a livello 1 ho tutti i gruppi principali e devo
58
+ * elaborare i sottogruppi, e così via ricorsivamente...
59
+ * @param {any[]} items Oggetti da raggruppare
60
+ * @param {GroupOrAggregation[]} aggregations Info di aggregazione
61
+ * @param {any} parent Riferimento al gruppo padre
62
+ */
63
+ private getGroupsRecursive;
64
+ /**
65
+ * Data una lista di oggetti genera le aggregazioni specificate. Si considera di avere tutti gli oggetti
66
+ *
67
+ * @param {any[]} items Oggetti di cui calcolare le aggregazione
68
+ * @param {GroupOrAggregation[]} aggregations Aggergazioni da generare
69
+ */
70
+ private generateAggregations;
71
+ /**
72
+ * Ottiene un elemento di separazione fra Gruppi che serve per paginare le ricerche all'interno di ogni singolo gruppo
73
+ *
74
+ * @param {AppSearch<any>} view View utilizzata per la ricerca. Me ne salvo i parametri nel separatore attuale dato che ne ho bisogno per caricare altri elementi
75
+ * facenti riferimento allo stesso contesto
76
+ * @param {string} parent Parent path che rappresenta a quale gruppo è affibbiato questo separatore
77
+ * @param {GroupRouteFragment[]} route Route path che rappresenta a quale gruppo è affibbiato questo separatore
78
+ * @param {number} level Livello del gruppo di cui questo elemento è separatore, viene usato per applicare la classe "est-lvl-{{level}}"
79
+ *
80
+ * @returns {any} Elemento di separazione contenente tutti i bind per presentare una paginazione sotto questo gruppo lato interfaccia
81
+ */
82
+ getGroupSeparator(view: AppSearch<any>, parent: string, route: GroupRouteFragment[], level: number, searches: 'groups' | 'items'): GroupPager;
83
+ /**
84
+ * Data una colonna effettua la riemissione di tutte le ricerche relative.
85
+ *
86
+ * Es. Ho 2 campi di gruppo e ho espanso fino a vedere i valori fino ad un livello qualsiasi.
87
+ * Clicco l'ordinamento sul secondo gruppo.
88
+ * Tutte le ricerche relative ai primi gruppi devono essere rieseguite. Quando i risultati arriveranno ci penserà il metodo **bindDisplayToLoadedItemsOrGroups**
89
+ * a tagliare via gli oggetti non più visualizzati
90
+ *
91
+ * @param {string} column Colonna su cui si è effettuata un'operazione di ordinamento
92
+ * @param {AppOrdering[]} orderings Direttive di ordinamento da applicare alle varie sottoricerche
93
+ */
94
+ emitRowGroupingSearches(column: string, orderings: AppOrdering[]): void;
95
+ /**
96
+ * Helper che calcola il contenuto di una cella relativa a un gruppo riga, tenendo conto del formato delle eventuali aggregazioni
97
+ *
98
+ * @param {Group} grp Gruppo di cui mostrare le celle
99
+ * @param {string} cell Cella attuale di cui calcolare il testo
100
+ * @param {EsThDirective} header Header relativo alla cella attuale, utilizzata per identificare le informazioni di aggregazione
101
+ *
102
+ * @returns {string} Testo finale calcolato per la **cell** corrente, in base alle aggregazioni di **header**
103
+ */
104
+ getGroupCellDisplay(grp: Group, cell: string, header: EsThDirective): string;
105
+ /**
106
+ * Funzione che dato un valore lo formatta in base al tipo
107
+ *
108
+ * @param {string} value Valore che generalemnte può essere una data o un numero
109
+ * @param {string} fromat Formato su cui formattare il valore. Può essere ad esempio "small", "long" "verylong" per le date o F{0-9} per i numeri decimali
110
+ *
111
+ * @returns {string} Valore dell'aggregazione formattato come si deve
112
+ */
113
+ private formatAggregationValue;
114
+ }
@@ -0,0 +1,149 @@
1
+ import { ItemsSelection } from "../../../domain";
2
+ import { EsTableComponent } from "../../../components/es-table/es_table.component";
3
+ import { RowGroupingHandler } from "../";
4
+ /** Classe che gestisce le selezioni degli oggetti */
5
+ export declare class SelectionHandler {
6
+ private est;
7
+ private rgHandler;
8
+ /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via hash*/
9
+ private itemsCache;
10
+ /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via hash */
11
+ private groupsCache;
12
+ /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */
13
+ private exclusionsCache;
14
+ /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */
15
+ private group_exclusionsCache;
16
+ /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via indice*/
17
+ private i_itemsCache;
18
+ /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via indice */
19
+ private i_groupsCache;
20
+ /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */
21
+ private i_exclusionsCache;
22
+ /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */
23
+ private i_group_exclusionsCache;
24
+ /** @ignore Costruttore */
25
+ constructor(est: EsTableComponent, rgHandler: RowGroupingHandler);
26
+ /** Ripulisce le cache di selezione */
27
+ clearSelectionCaches(): void;
28
+ /**
29
+ * Valuta quali elementi devono essere marcati come selezionati nella vista attuale. Si basa sull'oggetto **selection** interno all'AppSearch
30
+ *
31
+ * @param {any[]} items Oggetti di cui valutare la selezione
32
+ * @param {ItemsSelection<any>} selectionItem Oggetti di selezione derivante dalla view o dall'oggetto per Array
33
+ */
34
+ evaluateSelection(items: any[], selectionItem: ItemsSelection<any>): void;
35
+ /**
36
+ * Implementazione agnostica della valutazione delle selezioni degli oggetti. Richiede gli oggetti della vista attuale e l'itemSelector
37
+ *
38
+ * @param {any[]} items Oggetti di cui aggiornare lo stato di selezione
39
+ * @param {ItemsSelection<any>} selectionItem Oggetto contenente lo stato attuale di selezione
40
+ */
41
+ private handleSelectionEvaluation;
42
+ /**
43
+ * Dato un oggetto trova la cella di cache in cui è registrato e aggiorna il contenuto
44
+ *
45
+ * @param {any} item Oggetto da aggiornare
46
+ */
47
+ private rehidrateCache;
48
+ /**
49
+ * Dato un gruppo controlla ricorsivamente l'albero di cui fa parte se c'è stata una inclusione o esclusione diretta
50
+ *
51
+ * @param {any} grp Gruppo da controllare
52
+ *
53
+ * @returns {'none' | 'excluded' | 'included'}
54
+ * 'none' se non ci sono informazioni su inclusioni o esclusioni
55
+ * 'included' se il gruppo controllato è stato incluso in maniera esplicita dall'albero dei gruppi padri
56
+ * 'excluded' se il gruppo controllato è stato escluso in maniera esplicita dall'albero dei gruppi padri
57
+ */
58
+ private parentTreeStatus;
59
+ /**
60
+ * Helper per gestire la selezione di N elementi utilizzando la Cache di selezione ed eventualmente aggiornando il concetto di "all selection"
61
+ *
62
+ * Vunziona sia in modalità Array che in modalità View Semplice o View Avanzata (con le Custom Cells)
63
+ *
64
+ * @param {any[]} items Oggetti da selezionare o deselezionare
65
+ * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti
66
+ * @param {boolean} globalCheck Valore del check globale
67
+ *
68
+ * @returns {ItemsSelection<any>} Oggetto di selezione aggiornato con le informazioni sull'ultima operazione effettuata
69
+ */
70
+ handleItemsSelection(items: any[], forcedVal?: boolean, globalCheck?: boolean): ItemsSelection<any>;
71
+ /**
72
+ * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.
73
+ *
74
+ * Logica semplificata rispetto all'originale **performSelectionOperations** per lavorare in una modalità in cui tutti gli elementi sono caricati (**ArrayGrouping** = true)
75
+ */
76
+ private performSimpleSelectionOperations;
77
+ /**
78
+ * Helper per selezionare un gruppo e, ricorsivamente, se tutti i gruppi sottostanti al parent sono selezionati, selezionare i gruppi padri
79
+ *
80
+ * @param {any} group Gruppo da selezionare
81
+ */
82
+ private selectGroup;
83
+ /**
84
+ * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.
85
+ *
86
+ * La logica di questa funzione è nata essenzialmente da spam di trial & error ed è stata testata solo fino a due livelli di raggruppamento,
87
+ * qualsiasi cosa vada oltre non è 100% detto che funzioni...
88
+ */
89
+ private performSelectionOperations;
90
+ /** Helper per evitare di riscrivere ogni santa volta array.splice(array.indexof(item), 1); */
91
+ private removeItem;
92
+ /** Helper per evitare di riscrivere ogni santa volta array.push(item); e la gestione della */
93
+ private addItem;
94
+ /**
95
+ * Ottiene il trittico di selezione, cioè l'array degli oggetti che si vuole manipolare e le due cache collegate ad esso
96
+ *
97
+ * @param {'group' | 'item' | 'group_exclusion' | 'exclusion'} subject Oggetto logico desiderato su cui effettuare le operazioni successive
98
+ * @param {ItemsSelection<any>} base Selettore di base
99
+ *
100
+ * @returns {CacheTriptic} Trittico di selezione
101
+ */
102
+ private getTriptic;
103
+ /**
104
+ * Dato un oggetto restituisce il gruppo di cui fa parte, se esiste
105
+ *
106
+ * @param {any} item Oggetto di cui trovare il gruppo
107
+ */
108
+ private getItemGroup;
109
+ /**
110
+ * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave
111
+ *
112
+ * @param {any} group Chiave da cercare
113
+ * @param {'selected' | 'unselected'} status Stato degli elementi, selezionati o no
114
+ * @param {boolean} recursive Indica se cercare solo gli elementi direttamente collegati o se prendere anche quelli dei gruppi figli
115
+ *
116
+ * @returns {any[]} Oggetti di tipo **_item** facenti capo alla chiave **groupKey**
117
+ */
118
+ private getGroupItems;
119
+ /**
120
+ * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave
121
+ *
122
+ * @param {any} group Gruppo di cui cercare il parent
123
+ *
124
+ * @returns {any} Oggetto di tipo **_group** rappresentante il parent del **group** attuale
125
+ */
126
+ private getGroupParent;
127
+ /**
128
+ * Data la chiave di un gruppo restituisce tutti i gruppi figli
129
+ *
130
+ * @param {string} group Gruppo che rappresenta il padre di cui cercare i figli
131
+ * @param {'selected' | 'unselected'} status Stato dei gruppi, selezionati o no
132
+ * @param {boolean} recursive Indica se cercare solo i gruppi direttamente collegati o se prendere anche quelli dei gruppi figli
133
+ *
134
+ * @returns {any[]} Oggetti di tipo **_group** facenti capo alla chiave **groupKey**
135
+ */
136
+ private getGroupChildGroups;
137
+ /** Finalizza le informazioni di selezione del **ItemsSelection** corrente */
138
+ private finalizeSelectionInformations;
139
+ /** Compatta una cache di indici */
140
+ private compactIndexMap;
141
+ /**
142
+ * Valuta la quantità di oggetti che sono stati selezionati al termine di un evento di selezione
143
+ *
144
+ * @returns {number} Numero di oggetti selezionati
145
+ */
146
+ private evaluateSelected;
147
+ /** Gestisce il comando di "Seleziona tutto in tutte le pagine" o il suo contrario, cioè "Reimposta selezione" */
148
+ selectAllOrResetSelection(): void;
149
+ }