@esfaenza/es-table 11.2.19 → 11.2.22-beta2

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 (111) hide show
  1. package/bundles/esfaenza-es-table.umd.js +1883 -539
  2. package/bundles/esfaenza-es-table.umd.js.map +1 -1
  3. package/bundles/esfaenza-es-table.umd.min.js +2 -2
  4. package/bundles/esfaenza-es-table.umd.min.js.map +1 -1
  5. package/esfaenza-es-table.d.ts +5 -5
  6. package/esfaenza-es-table.metadata.json +1 -1
  7. package/esm2015/esfaenza-es-table.js +6 -6
  8. package/esm2015/lib/directives/es_td.directive.js +2 -4
  9. package/esm2015/lib/directives/es_th.directive.js +17 -8
  10. package/esm2015/lib/domain/externals/classes/CornerMenuOption.js +4 -0
  11. package/esm2015/lib/domain/externals/classes/EsTableColumnsDefinition.js +31 -0
  12. package/esm2015/lib/domain/externals/classes/EsTableOperationDefinition.js +22 -0
  13. package/esm2015/lib/domain/externals/classes/appsearch/AppOrdering.js +16 -0
  14. package/esm2015/lib/domain/externals/classes/appsearch/AppSearch.js +35 -0
  15. package/esm2015/lib/domain/externals/classes/appsearch/GenericItem.js +11 -0
  16. package/esm2015/lib/domain/externals/classes/appsearch/Group.js +17 -0
  17. package/esm2015/lib/domain/externals/classes/appsearch/GroupAggregation.js +16 -0
  18. package/esm2015/lib/domain/externals/classes/appsearch/GroupFilter.js +14 -0
  19. package/esm2015/lib/domain/externals/classes/appsearch/GroupOrAggregation.js +16 -0
  20. package/esm2015/lib/domain/externals/classes/appsearch/ItemsSelection.js +23 -0
  21. package/esm2015/lib/domain/externals/classes/report/ReportColumn.js +4 -0
  22. package/esm2015/lib/domain/externals/classes/report/ReportDefinition.js +4 -0
  23. package/esm2015/lib/domain/externals/classes/report/ReportOrder.js +4 -0
  24. package/esm2015/lib/domain/externals/classes/report/ReportParam.js +4 -0
  25. package/esm2015/lib/domain/externals/classes/report/ReportResult.js +4 -0
  26. package/esm2015/lib/domain/externals/classes/report/ReportRow.js +4 -0
  27. package/esm2015/lib/domain/externals/index.js +18 -0
  28. package/esm2015/lib/domain/index.js +3 -16
  29. package/esm2015/lib/domain/internals/classes/CacheTriptic.js +16 -0
  30. package/esm2015/lib/domain/internals/classes/EsTableColumn.js +24 -0
  31. package/esm2015/lib/domain/internals/classes/GroupPager.js +21 -0
  32. package/esm2015/lib/domain/internals/classes/GroupRouteFragment.js +17 -0
  33. package/esm2015/lib/domain/internals/classes/ThAggregation.js +16 -0
  34. package/esm2015/lib/domain/internals/index.js +6 -0
  35. package/esm2015/lib/es-table.module.js +9 -4
  36. package/esm2015/lib/es_table.component.js +1498 -323
  37. package/esm2015/lib/es_table.component.loc.js +4 -7
  38. package/esm2015/lib/es_td.component.js +9 -20
  39. package/esm2015/lib/es_th.component.js +16 -44
  40. package/esm2015/lib/models/EsTableDefaultable.js +4 -0
  41. package/esm2015/lib/models/EsTableModuleConfig.js +2 -4
  42. package/esm2015/lib/pager/table_pager.component.js +48 -26
  43. package/esm2015/lib/pager/table_pager.component.loc.js +5 -7
  44. package/esm2015/lib/tokens.js +6 -4
  45. package/esm2015/public-api.js +3 -2
  46. package/fesm2015/esfaenza-es-table.js +1764 -510
  47. package/fesm2015/esfaenza-es-table.js.map +1 -1
  48. package/lib/directives/es_td.directive.d.ts +1 -3
  49. package/lib/directives/es_th.directive.d.ts +14 -7
  50. package/lib/domain/externals/classes/CornerMenuOption.d.ts +7 -0
  51. package/lib/domain/{classes → externals/classes}/EsTableColumnsDefinition.d.ts +2 -6
  52. package/lib/domain/{classes → externals/classes}/EsTableOperationDefinition.d.ts +1 -3
  53. package/lib/domain/{classes → externals/classes/appsearch}/AppOrdering.d.ts +0 -0
  54. package/lib/domain/externals/classes/appsearch/AppSearch.d.ts +67 -0
  55. package/lib/domain/externals/classes/appsearch/GenericItem.d.ts +13 -0
  56. package/lib/domain/externals/classes/appsearch/Group.d.ts +17 -0
  57. package/lib/domain/externals/classes/appsearch/GroupAggregation.d.ts +14 -0
  58. package/lib/domain/externals/classes/appsearch/GroupFilter.d.ts +12 -0
  59. package/lib/domain/externals/classes/appsearch/GroupOrAggregation.d.ts +14 -0
  60. package/lib/domain/externals/classes/appsearch/ItemsSelection.d.ts +22 -0
  61. package/lib/domain/externals/classes/report/ReportColumn.d.ts +15 -0
  62. package/lib/domain/externals/classes/report/ReportDefinition.d.ts +24 -0
  63. package/lib/domain/externals/classes/report/ReportOrder.d.ts +7 -0
  64. package/lib/domain/externals/classes/report/ReportParam.d.ts +40 -0
  65. package/lib/domain/externals/classes/report/ReportResult.d.ts +12 -0
  66. package/lib/domain/externals/classes/report/ReportRow.d.ts +5 -0
  67. package/lib/domain/externals/index.d.ts +17 -0
  68. package/lib/domain/index.d.ts +2 -15
  69. package/lib/domain/internals/classes/CacheTriptic.d.ts +14 -0
  70. package/lib/domain/{classes → internals/classes}/EsTableColumn.d.ts +6 -4
  71. package/lib/domain/internals/classes/GroupPager.d.ts +22 -0
  72. package/lib/domain/internals/classes/GroupRouteFragment.d.ts +15 -0
  73. package/lib/domain/internals/classes/ThAggregation.d.ts +14 -0
  74. package/lib/domain/internals/index.d.ts +5 -0
  75. package/lib/es_table.component.d.ts +349 -52
  76. package/lib/es_table.component.loc.d.ts +2 -6
  77. package/lib/es_td.component.d.ts +13 -36
  78. package/lib/es_th.component.d.ts +21 -61
  79. package/lib/models/EsTableDefaultable.d.ts +19 -0
  80. package/lib/models/EsTableModuleConfig.d.ts +8 -7
  81. package/lib/pager/table_pager.component.d.ts +27 -30
  82. package/lib/pager/table_pager.component.loc.d.ts +2 -6
  83. package/lib/tokens.d.ts +6 -3
  84. package/package.json +2 -1
  85. package/public-api.d.ts +2 -1
  86. package/esm2015/lib/domain/classes/AppOrdering.js +0 -16
  87. package/esm2015/lib/domain/classes/AppSearch.js +0 -56
  88. package/esm2015/lib/domain/classes/CornerMenuOption.js +0 -6
  89. package/esm2015/lib/domain/classes/EsTableColumn.js +0 -22
  90. package/esm2015/lib/domain/classes/EsTableColumnsDefinition.js +0 -33
  91. package/esm2015/lib/domain/classes/EsTableOperationDefinition.js +0 -24
  92. package/esm2015/lib/domain/classes/GenericItem.js +0 -15
  93. package/esm2015/lib/domain/classes/IAppSearch.js +0 -2
  94. package/esm2015/lib/domain/classes/ItemsSelection.js +0 -25
  95. package/esm2015/lib/domain/classes/ReportColumn.js +0 -6
  96. package/esm2015/lib/domain/classes/ReportDefinition.js +0 -6
  97. package/esm2015/lib/domain/classes/ReportOrder.js +0 -6
  98. package/esm2015/lib/domain/classes/ReportParam.js +0 -6
  99. package/esm2015/lib/domain/classes/ReportResult.js +0 -6
  100. package/esm2015/lib/domain/classes/ReportRow.js +0 -6
  101. package/lib/domain/classes/AppSearch.d.ts +0 -110
  102. package/lib/domain/classes/CornerMenuOption.d.ts +0 -13
  103. package/lib/domain/classes/GenericItem.d.ts +0 -25
  104. package/lib/domain/classes/IAppSearch.d.ts +0 -67
  105. package/lib/domain/classes/ItemsSelection.d.ts +0 -27
  106. package/lib/domain/classes/ReportColumn.d.ts +0 -29
  107. package/lib/domain/classes/ReportDefinition.d.ts +0 -46
  108. package/lib/domain/classes/ReportOrder.d.ts +0 -13
  109. package/lib/domain/classes/ReportParam.d.ts +0 -76
  110. package/lib/domain/classes/ReportResult.d.ts +0 -22
  111. package/lib/domain/classes/ReportRow.d.ts +0 -9
@@ -4,16 +4,19 @@ import { HashingService, UtilityService, ExportService, MessageService, DateServ
4
4
  import { LocalizationService } from '@esfaenza/localizations';
5
5
  import { PreferencesService } from '@esfaenza/preferences';
6
6
  import { ContextMenuComponent } from '@esfaenza/ngx-contextmenu';
7
- import { IAppSearch, AppSearch, AppOrdering, GenericItem, EsTableColumnsDefinition, CornerMenuOption, ReportResult, ReportColumn, EsTableOperationDefinition, EsTableColumn } from './domain';
7
+ import { AppSearch, AppOrdering, GenericItem, EsTableColumnsDefinition, CornerMenuOption, ReportResult, ReportColumn, EsTableOperationDefinition, EsTableColumn, GroupPager } from './domain';
8
8
  import { EsTd } from './es_td.component';
9
9
  import { EsTdDirective } from './directives/es_td.directive';
10
10
  import { EsThDirective } from './directives/es_th.directive';
11
- import { ItemsSelection } from './domain/classes/ItemsSelection';
12
- import { Group } from './domain/classes/AppSearch';
11
+ import { ItemsSelection } from './domain/externals/classes/appsearch/ItemsSelection';
12
+ import { Group } from "./domain/externals/classes/appsearch/Group";
13
+ import { EsTableDefaultable } from './models/EsTableDefaultable';
13
14
  /** Componente che permette di rappresentare una griglia di valori */
14
15
  export declare class EsTableComponent implements ControlValueAccessor, OnChanges {
15
16
  ngControl: NgControl;
16
17
  private prefService;
18
+ private deafults;
19
+ locale: string;
17
20
  lc: LocalizationService;
18
21
  private cdr;
19
22
  private hashExts;
@@ -22,17 +25,14 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
22
25
  private dateExts;
23
26
  private msgExts;
24
27
  /** @ignore */
25
- constructor(ngControl: NgControl, prefService: PreferencesService, lc: LocalizationService, cdr: ChangeDetectorRef, hashExts: HashingService, utiExts: UtilityService, expExts: ExportService, dateExts: DateService, msgExts: MessageService);
28
+ constructor(ngControl: NgControl, prefService: PreferencesService, deafults: EsTableDefaultable, locale: string, lc: LocalizationService, cdr: ChangeDetectorRef, hashExts: HashingService, utiExts: UtilityService, expExts: ExportService, dateExts: DateService, msgExts: MessageService);
26
29
  /** View finale su cui bindarsi lato Frontend, il tipo può essere IAppSearch<any> (per la **viewMode**), any[] (per l'**arrayMode**) e ReportDefinition per la **reportMode** */
27
30
  View: any;
28
31
  /** Modello da cui l'es-table mostra i pulsanti di paginazione in basso a destra */
29
32
  arrayPulsanti: any;
30
33
  /** Indica se l'es-table deve mostrare il check globale nell'header per fare il "seleziona tutto" */
31
34
  globalCheck: boolean;
32
- /**
33
- * Tiene da conto l'ultimo elemento selezionato in modo da fare ragionamenti del tipo
34
- * "Ho selezionato questo, l'ultimo selezionato era **lastSelected**, devo selezionare tutti quelli in mezzo", ad esempio per la selezione multipla
35
- */
35
+ /** Tiene da conto l'ultimo elemento selezionato in modo da poter effettuare il SHIFT+CLICK */
36
36
  private lastSelected;
37
37
  /** Conteggio interno per il numero di elementi selezionati */
38
38
  selectedObjects: number;
@@ -81,6 +81,8 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
81
81
  };
82
82
  /** Modello rappresentante un singolo th della tabella, generato in base alle configurazioni e agli oggetti ricevuti */
83
83
  RowTHs: {
84
+ Pinned: boolean;
85
+ Fixed: boolean;
84
86
  ID: string;
85
87
  Visible: boolean;
86
88
  Class: string;
@@ -92,6 +94,7 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
92
94
  }[];
93
95
  /** Modello di appoggio temporaneo per i **RowTHs** */
94
96
  TMPRowTHs: {
97
+ Pinned: boolean;
95
98
  Fixed: boolean;
96
99
  ID: string;
97
100
  Visible: boolean;
@@ -102,6 +105,16 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
102
105
  Template: TemplateRef<any>;
103
106
  Wrap: boolean;
104
107
  }[];
108
+ /** Modello di appoggio temporaneo per i **RowThGroups** */
109
+ TMPRowThGroups: {
110
+ Span: number;
111
+ Template: TemplateRef<any>;
112
+ }[][];
113
+ /** Modello rappresentante un singolo header group della tabella. Questa lista è già ordinata e pronta per essere utilizzata in ngFor */
114
+ RowThGroups: {
115
+ Span: number;
116
+ Template: TemplateRef<any>;
117
+ }[][];
105
118
  /** Cache per i routerLink generati nelle tabelle dinamiche */
106
119
  DynamicTableRouterLinkCache: {};
107
120
  /**
@@ -132,13 +145,13 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
132
145
  EsTdsDirective: QueryList<EsTdDirective>;
133
146
  /** Query per recuperare tutti gli es-td assegnati a direttiva (Per la modalità dinamica dell'es-table) */
134
147
  EsThsDirective: QueryList<EsThDirective>;
135
- /** Query per recuperare tutti gli es-th */
148
+ /** @deprecated Query per recuperare tutti gli es-th */
136
149
  private EsThs;
137
- /** Query per recuperare tutti gli es-td */
150
+ /** @deprecated Query per recuperare tutti gli es-td */
138
151
  private EsTds;
139
- /** Query per recuperare le informazioni del body (punto della tabella dove vengono mostrate le righe) */
152
+ /** @deprecated Query per recuperare le informazioni del body (punto della tabella dove vengono mostrate le righe) */
140
153
  bodyRef: any;
141
- /** Query per recuperare le informazioni dell'header (punto della tabella dove vengono mostrate le intestazioni delle righe) */
154
+ /** @deprecated Query per recuperare le informazioni dell'header (punto della tabella dove vengono mostrate le intestazioni delle righe) */
142
155
  headerRef: any;
143
156
  /** Query per recuperare le informazioni sul raggruppamento degli header */
144
157
  headerGroupRef: any;
@@ -184,14 +197,14 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
184
197
  UseCustomCells: boolean;
185
198
  /** Permette di impostare l'altezza massima della tabella. Se null la dimensione si adatta al numero di elementi attualmente in visualizzazione */
186
199
  MaxHeight: number;
187
- /** Classi da applicare alla tabella oltre a quelle gestite autonomamente dalla libreria */
188
- Class: string;
200
+ /** Classi da applicare al contenitore della tabella */
201
+ ContainerClass: any;
189
202
  /** Permette o meno l'export in formato XLSX */
190
203
  XLSXExport: boolean;
191
204
  /** Permette o meno l'export in formato CSV */
192
205
  CSVExport: boolean;
193
206
  /** Permette di visualizzare o meno l'opzione di paginazione "Tutti" */
194
- AllSearch: boolean;
207
+ AllSearch: any;
195
208
  /** Diminuisce gli spazi fra una cella e l'altra, e internamente il padding del font in modo da presentare molti più dati in un'unica pagina */
196
209
  HighCellDensity: boolean;
197
210
  /** Abilita o meno la possibilità di selezionare oggetti */
@@ -210,8 +223,6 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
210
223
  Export: boolean;
211
224
  /** Indica se permettere la selezione multipla Windows-like cliccando un oggetto e facendo poi Shift + click su un oggetto successivo */
212
225
  ShiftClick: boolean;
213
- /** Mostra o nasconde le informazioni di paginazione, sia i pulsanti, sia il selettore degli oggetti per pagina */
214
- ShowPaging: boolean;
215
226
  /** Indica se nascondere o mostrare il componente di paginazione */
216
227
  HidePaging: boolean;
217
228
  /** Indica se nascondere o mostrare il conteggio degli elementi trovati */
@@ -223,18 +234,16 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
223
234
  /** Nome dell'esportazione generata da questa tabella */
224
235
  ExportFileName: string;
225
236
  /** Classe (HTML) di default della tabella */
226
- TableClass: string;
227
- /** Testo da visualizzare nel conteggio. Di default: "Oggetti selezionati" */
228
- CountLabel: string;
237
+ TableClass: any;
229
238
  /**
230
239
  * Funzione da utilizzare in esportazione. Nel formato "Report" avrà un unico parametro "Formato" e nessun valore di ritorno.
231
240
  *
232
241
  * Nel formato "View" ha come parametro una callback con i dati completi da esportare (dato che di default la ricerca è paginata)
233
242
  */
234
243
  ExportFunction: any;
235
- /** Indica la presenza di raggruppamenti a livello di header */
244
+ /** @deprecated Indica la presenza di raggruppamenti a livello di header */
236
245
  HasHeaderGroup: boolean;
237
- /** Indica la presenza di raggruppamenti a livello del raggruppamento precedentemente esistente, chiaramente è insensata senza **HasHeaderGroup** */
246
+ /** @deprecated Indica la presenza di raggruppamenti a livello del raggruppamento precedentemente esistente, chiaramente è insensata senza **HasHeaderGroup** */
238
247
  HasSecondaryHeaderGroup: boolean;
239
248
  /** Utilizzato per dividere la sorgente in modalità EndlessScroll */
240
249
  SliceSize: number;
@@ -266,12 +275,8 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
266
275
  HiddenColumns: boolean;
267
276
  /** Permette di riordinare le colonne in base alle impostazioni effettuate dal Menù contestuale in alto a destra */
268
277
  ColumnsOrdering: boolean;
269
- /**
270
- * Eventuale supporto alle ricerche applicate alla modalità Array
271
- *
272
- * @deprecated Utilizzato solo per un caso particolare del Metering
273
- */
274
- SearchView: IAppSearch<any>;
278
+ /** Eventuale supporto alle ricerche applicate alla modalità Array */
279
+ SearchView: AppSearch<any>;
275
280
  /** Abilita o disabilita il sistema che permette di selezionare tutti gli elementi nella vista */
276
281
  SelectAll: boolean;
277
282
  /** Simula la paginazione anche per le tabelle che funzionano in modalità Array */
@@ -290,6 +295,10 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
290
295
  StartsExpanded: boolean;
291
296
  /** Indica se effettuare il salvataggio delle preferenze di ricerca */
292
297
  SavePreferences: boolean;
298
+ /** Indica dove visualizzare le informazioni di paginazione, se sopra, sotto o in entrambi */
299
+ PagingStyle: 'both' | 'top' | 'bottom';
300
+ /** Indica dove visualizzare le informazioni di paginazione, se sopra, sotto o in entrambi */
301
+ RowGroupingPagingStyle: 'left' | 'right';
293
302
  /**
294
303
  * Sorgente dati secondaria
295
304
  *
@@ -303,7 +312,9 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
303
312
  */
304
313
  TertiarySource: boolean;
305
314
  /** Indica se utilizzare la cache di selezione che permette di mantenere gli stati di selezione dei vari oggetti navigando da una pagina all'altra */
306
- UseSelectionCache: boolean;
315
+ UseSelectionCache: any;
316
+ /** Permette di decidere se, in modalità raggruppamento, mostrare o meno il valore delle colonne di gruppo negli oggetti finali. Di default sono nascosti */
317
+ ShowItemGroupsColumns: any;
307
318
  /** Evento che viene richiamato al cambio di oridnamento di una colonna */
308
319
  onOrderChanged: EventEmitter<AppOrdering>;
309
320
  /**
@@ -312,8 +323,10 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
312
323
  *
313
324
  * Solo in caso venga utilizzata la modalità a raggruppamenti di righe può succedere che l'es-table passi un intero AppSearch come parametro di ricerca,
314
325
  * in quel caso l'applicazione ricevente dovrà onorare la richiesta spedendo al backand l'oggetto di ricerca AS-IS
326
+ *
327
+ * il tipo dell'Emitter invece di essere [boolean | AppSearch<any>] è stato impostato a "any" per evitare problemi di retrocompatibilità
315
328
  */
316
- onSearchRequest: EventEmitter<boolean | AppSearch<any>>;
329
+ onSearchRequest: EventEmitter<any>;
317
330
  /** Evento che parte ad ogni modifica di "checkaggio" in forma di comodo array. Espone l'oggetto con lo stato di check attuale */
318
331
  onSelectionChanged: EventEmitter<ItemsSelection<any>>;
319
332
  /** Evento richiamato all'eliminazione di un oggetto */
@@ -353,16 +366,20 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
353
366
  /** Numero di pagine (durante la paginazione in modalità Array) */
354
367
  arraymodePages: number;
355
368
  /** Oggetti per ogni pagina (durante la paginazione in modalità Array) */
356
- ArraymodeItemsPerPage: number;
369
+ ArraymodeItemsPerPage: any;
357
370
  /** Oggetto di selezione per la modalità Array, che deve comportarsi come la controparte in modalità View */
358
371
  arraymodeSelection: ItemsSelection<any>;
372
+ /** Colonne da visualizzare in modalità array */
373
+ arrayColumns: string[];
374
+ /** Ordine delle colonne da visualizzare in modalità array */
375
+ arrayColumnOrdering: string[];
376
+ /** Ordinamenti ASC-DESC sulle colonne in modalità array */
377
+ arrayOrders: AppOrdering[];
359
378
  /**
360
379
  * Variabile che serve a gestire il momento in cui l'es-table aggiorna la paginazione (pulsanti ecc).
361
380
  * Essendo operazioni comunque costose le effettuo solo su binding esterni, non su rewrite generati internamente
362
381
  */
363
382
  private internalWriteCall;
364
- /** Cache di selezione Hash - Oggetto */
365
- private selOrDeselCache;
366
383
  /**
367
384
  * Cache che conterrà tutte le ricerche effettuate su gruppi diversi dal primo e su elementi contenuti nei gruppi.
368
385
  * In caso di cambi di ordinamento delle colonne diverse dalla prima tutte le chiamate fatte dal secondo livello in poi devono essere rieseguite secondo la seguente logica:
@@ -370,35 +387,77 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
370
387
  *
371
388
  * **Cambio ordinamento sul primo gruppo**: reload completo, non mi occupo di ripulire gli elementi bindati in alcun modo
372
389
  *
373
- * **Cambio ordinamento sulla colonna relativa all'N-esimo gruppo**: reload completo del contenuto del gruppo precedente, per quelli aperti, devo precedentemente ripulire
390
+ * **Cambio ordinamento sulla colonna relativa all'N-esimo gruppo**: reload completo del contenuto dei gruppi precedenti, ripulendo precedentemente
374
391
  * tutti gli elementi con **_grouplevel** = N
375
392
  *
376
393
  * **Cambio ordinamento su una colonna non raggruppata**: reload completo per tutti i gruppi finali aperti, devo precedentemente ripulire tutti gli elementi con **_item** = true
377
394
  *
378
- *
379
395
  * Altri eventi non dovrebbero rappresentare problemi:
380
396
  * - Selezione: non cambia nulla
381
397
  * - Paginazione: cambia a livello root quindi viene ricaricato tutto comunque, stesso vale per le paginazioni interne
382
- *
383
398
  */
384
399
  private groupSearchRequestsCache;
385
- /**
386
- * Variabile d'appoggio per capire se c'è bisogno di ri-effettuare una ricerca o meno
387
- */
400
+ /** Variabile d'appoggio per capire se c'è bisogno di ri-effettuare una ricerca o meno */
388
401
  private ResearchNeeded;
389
- /**
390
- * Variabile da usare nei "colspan" quando si vuole dire "Tutte le colonne". 42 è un numero magico che mi serve per non calcolare questa variabile quando mi serve.
391
- *
392
- * Di base dovrebbe essere la somma dei RowTH con l'aggiunta di tutti gli Header extra in base alle situazioni. Dato che diventa una logica deficiente me la cavo così
393
- *
394
- * Se in una tabella ci sono meno di 42 colonne il colspan si ferma comunque alla fine, se invece ce ne sono di più... beh bisogna allungare sto numero
395
- *
396
- */
397
- allColumns: string;
402
+ /** Colonne visibili della vista attuale. Valorizzato di default al numero massimo di colonne supportate dalla tabella per le casistiche in assenza di custom cells */
403
+ Columns: {
404
+ Visibile: number;
405
+ VisibleUnpinned: number;
406
+ Global: number;
407
+ };
408
+ /** In caso di Row Grouping qui viene salvata la vista principale dei gruppi base */
409
+ MainGroupView: AppSearch<any>;
410
+ /** Conteggio base degli oggetti. In modalità normale viene resettato ad ogni nuova View inserita, in modalità RowGrouping viene resettato solo ad una nuova View di livello "0" */
411
+ private BaseItemsCount;
412
+ /** Cache per salvare per ogni chiave di ogni gruppo chi è il gruppo rappresentato */
413
+ private rgGroupCache;
414
+ /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */
415
+ private rgItemCache;
416
+ /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */
417
+ private rgChildGroupsCache;
418
+ /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via hash*/
419
+ private itemsCache;
420
+ /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via hash */
421
+ private groupsCache;
422
+ /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */
423
+ private exclusionsCache;
424
+ /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */
425
+ private group_exclusionsCache;
426
+ /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via indice*/
427
+ private i_itemsCache;
428
+ /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via indice */
429
+ private i_groupsCache;
430
+ /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */
431
+ private i_exclusionsCache;
432
+ /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */
433
+ private i_group_exclusionsCache;
434
+ /** Indica se ci sono delle colonne pinnate e visibili. Serve per poter settare tutte le colonne prima che arrivino dati a pinned*/
435
+ HasPinnedColumns: boolean;
436
+ /** Larghezza calcolata del container delle colonne pinnate */
437
+ PinnedContainerWidth: number;
438
+ /** Indica se nonostante siamo in modalità array sono stati individuati dei gruppi. In tal caso es-table si comporta da pseudo backend ed effettua le aggregazioni e raggruppamenti completamente lato client */
439
+ ArrayGrouping: boolean;
440
+ PagerOptions: {
441
+ PagerCount: number;
442
+ ShowCount: boolean;
443
+ ShowPaging: boolean;
444
+ UsesView: boolean;
445
+ View: any;
446
+ Ready: boolean;
447
+ Searches: 'items' | 'groups';
448
+ };
398
449
  /** @ignore */
399
450
  ngOnInit(): void;
400
451
  /** @ignore */
401
452
  ngAfterViewInit(): void;
453
+ /**
454
+ * Se l'Input è null (valore non settato) vede se c'è un default con cui valorizzarlo. Se non c'è utilizza il valore di fallback (qualora fornito)
455
+ *
456
+ * @param {T} inputValue Valore dell'Input
457
+ * @param {T} defaultValue Valore di default impostato da configurazione
458
+ * @param {T} fallbackValue Valore dell'Input per quando non è stato assegnato dal programmatore e non ha un default
459
+ */
460
+ private InputOrDefault;
402
461
  /** @ignore */
403
462
  ngOnDestroy(): void;
404
463
  /** @ignore */
@@ -413,6 +472,19 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
413
472
  propagateChange: (_: any) => void;
414
473
  /** @ignore */
415
474
  writeValue(obj: any): void;
475
+ /**
476
+ * Successivamente al bind del nuovo input questa funzione si occupa di finalizzare tutti i parametri di funzionamento dell'es-table
477
+ * in base a Input - Modello, e qualsiasi altra cosa possa servire
478
+ */
479
+ private finalizeContext;
480
+ /** Genera le informzioni di paginazione per la vista globale dell'es-table */
481
+ private setupPagingInformations;
482
+ /**
483
+ * Ripulisce le cache di selezione
484
+ *
485
+ * @todo: SELECTION
486
+ */
487
+ private clearSelectionCaches;
416
488
  /**
417
489
  * In base alla modalità specificata (ArrayMode, ViewMode, ecc...) questo metodo recupera l'array di oggetti da bindare ad interfaccia
418
490
  *
@@ -421,14 +493,28 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
421
493
  * @param {boolean} allIfPossible [false] Indica se prendere tutti gli oggetti quaora possibile, usato solo in ArrayMode
422
494
  *
423
495
  * @returns {any[]} Lista degli oggetti su cui effettuare il bind lato interfaccia
496
+ *
497
+ * @todo: ITEMS
424
498
  */
425
499
  private getItemsByMode;
426
- /** @ignore */
500
+ /**
501
+ * @ignore
502
+ *
503
+ * @todo: ITEMS
504
+ */
427
505
  private getViewItemsBySource;
506
+ /**
507
+ * Helper per effettuare il caching delle aggregazioni. Le sposta da una lista di **GroupAggregation** a una **<Map<string, Map<string, string>>**
508
+ *
509
+ * @todo: ROWGROUPING
510
+ */
511
+ private cacheAggregations;
428
512
  /**
429
513
  * Metodo che prende tutti gli oggetti di cui dispone divisi in bucket da 100 elementi
430
514
  *
431
515
  * @returns {any[][]} Matrice di array Nx100
516
+ *
517
+ * @todo: ITEMS
432
518
  */
433
519
  private getItemSlices;
434
520
  /**
@@ -442,11 +528,89 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
442
528
  * all'es-table per renderizzare i valori da mostrare
443
529
  */
444
530
  private postBoundSourceCalculation;
531
+ /**
532
+ * Per poter distinguere le chiamate a questo metodo: Dopo il setTimeout se uso gli EsTd/EsTh vecchi, senza il setTimeout se uso le nuove direttive
533
+ */
534
+ private internalPostBoundSource;
535
+ /**
536
+ * Se in modalità array applica gli ordinamenti ASC-DESC delle colonne
537
+ *
538
+ * @todo: INTERNALDB
539
+ */
540
+ private arrayModeReviewOrderings;
541
+ /**
542
+ * Se in modalità array applica i raggruppamenti definiti lato row-grouping
543
+ *
544
+ * @param {ths: EsTh[] | EsThDirective[]} ths Header
545
+ *
546
+ * @todo: ROW GROUPING
547
+ */
548
+ private arrayModeReviewGroupings;
549
+ /**
550
+ * Data la definizione dei gruppi da generare da una lista di oggetti, suddivide gli oggetti passati in gruppi e sottogruppi
551
+ *
552
+ * @param {Group[]} grps Definizione dei gruppi
553
+ * @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
554
+ * elaborare i sottogruppi, e così via ricorsivamente...
555
+ * @param {any[]} items Oggetti da raggruppare
556
+ * @param {GroupOrAggregation[]} aggregations Info di aggregazione
557
+ * @param {any} parent Riferimento al gruppo padre
558
+ *
559
+ * @todo: INTERNALDB
560
+ */
561
+ private getGroupsRecursive;
562
+ /**
563
+ * Data una lista di oggetti genera le aggregazioni specificate. Si considera di avere tutti gli oggetti
564
+ *
565
+ * @param {any[]} items Oggetti di cui calcolare le aggregazione
566
+ * @param {GroupOrAggregation[]} aggregations Aggergazioni da generare
567
+ *
568
+ * @todo: INTERNALDB
569
+ */
570
+ private generateAggregations;
571
+ /**
572
+ * Data una lista di oggetti effettua dei raggruppamenti in base alla proprietà **field**, restituendo un oggetto del tipo { Gruppo1: oggetti[], Gruppo2: oggetti[], ecc... }
573
+ *
574
+ * @param {any[]} array Lista degli oggetti da raggruppare
575
+ * @param {string} field Campo su cui effettuare i raggruppamenti
576
+ *
577
+ * @returns {{ [id: string]: any[] }} Dizionario dei gruppi
578
+ *
579
+ * @todo: INTERNALDB
580
+ */
581
+ private groupBy;
582
+ /**
583
+ * Effettua il binding degli oggetti pervenuti da questa chiamata con gli oggetti effettivamente da graficare
584
+ *
585
+ * @param {any} view View da cui sono arrivati gli oggetti. Può essere o un array se sono in **arrayMode** o una AppSearch<T> se sono in **viewMode**
586
+ */
445
587
  private bindDisplayToLoadedItemsOrGroups;
588
+ /**
589
+ * In modalità rowgrouping quando mi arriva un nuovo blocco di oggetti devo aggiungerlo alla vista attuale:
590
+ *
591
+ * 1) Se non viene richiesto il dettaglio di alcun gruppo significa che devo considerare mi siano arrivati tutti i gruppi principali
592
+ * 2) Se viene richiesto il dettaglio di un gruppo diverso dall'ultimo devo aggiungere dopo al gruppo cliccato la lista dei sottogruppi
593
+ * 2) Se viene richiesto il dettaglio dell'ultimo gruppo devo aggiungere dopo al gruppo cliccato la lista degli oggetti
594
+ *
595
+ * @param {any} view AppSearch<T> da cui sono arrivati gli oggetti
596
+ * @param {number} groupingKeys Livelli di raggruppamento da aspettarsi sui dati
597
+ *
598
+ * @todo: ROWGROUPING
599
+ */
600
+ private handleNewDataOnRowGrouping;
446
601
  /**
447
602
  * Metodo richiamato solo quando **TMPRowTDs** e **TMPRowTHs** sono completamente generati ed aggiustati. Serve per collegarli alle variabili usate lato binding HTML
448
603
  */
449
604
  private MoveTemporaryVariablesToRealOnes;
605
+ /**
606
+ * Permette di selezionare o deselezionare in maniera arbitraria degli oggetti
607
+ *
608
+ * @param {any[]} items Oggetti da selezionare o deselezionare
609
+ * @param {boolean} select **true** per selezionarli, **false** per non toccarli
610
+ *
611
+ * @todo: SELECTION
612
+ */
613
+ setSelectionStatus(items: any[], select: boolean): void;
450
614
  /**
451
615
  * Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna
452
616
  */
@@ -459,6 +623,18 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
459
623
  * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella
460
624
  */
461
625
  private reviewColumnsList;
626
+ /**
627
+ * Prende i th e i td in modalità diretive e li ordina in base a se ci sono colonne fixed o meno
628
+ */
629
+ private moveFixedColumnsAtTheBeginning;
630
+ /**
631
+ * In base alla configurazione delle colonne calcola le dimenioni delle colonne pinnate
632
+ */
633
+ private evaluatePinnedColumnsWidth;
634
+ /**
635
+ * Helper per spostare un oggetto di un array da un indice all'altro, in place
636
+ */
637
+ private arrayMove;
462
638
  /**
463
639
  * Terminato il binding delle colonne da **reviewColumnsList** e della **View** dal **writeValue** questo metodo si occupa
464
640
  * dell'allineamento delle informazioni fra le colonne calcolate internamente e le informazioni sulle colonne che arrivano dall'AppSearch
@@ -518,6 +694,15 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
518
694
  * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella
519
695
  */
520
696
  private evaluateRowThs;
697
+ private evaluateHeadersGroupingInfos;
698
+ /**
699
+ * Genera gli header groups da una lista di info sui th all'interno della variabile **TMPRowThGroups**
700
+ */
701
+ private evaluateHeaderGroups;
702
+ /**
703
+ * Calcola il numero di salti da un header foglia all'ultimo parent della catena
704
+ */
705
+ private jumpsToFinalParent;
521
706
  /**
522
707
  * Data una direttiva EsTh restituisce la lista delle aggregazioni richiesta per questa colonna o il gruppo che rappresenta
523
708
  *
@@ -547,7 +732,7 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
547
732
  * @param {boolean} finalize Se **true** significa che non mi aspetto di dover effettuare altre operazioni e posso renderizzare la situazione in base ai RowContext
548
733
  * Senza finalize significa che mi aspetto altre operazioni che prima o poi richiameranno questa funzione col finalize.
549
734
  *
550
- * Ad esempio, una volta selezionato ordinamento fisico/logico delle colonne so che parte un altra ricerca che mi rivalorizzera da "writeValue", che già chiama questa funzione.
735
+ * 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.
551
736
  * Mettendo solo la chiamata da "writeValue" come "finalizzante" mi assicuro che smanattamenti a frontend non causino flickering fino a quando non servono
552
737
  */
553
738
  private applyOrdering;
@@ -557,11 +742,26 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
557
742
  * @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
558
743
  * facenti riferimento allo stesso contesto
559
744
  * @param {string} parent Parent path che rappresenta a quale gruppo è affibbiato questo separatore
745
+ * @param {GroupRouteFragment[]} route Route path che rappresenta a quale gruppo è affibbiato questo separatore
560
746
  * @param {number} level Livello del gruppo di cui questo elemento è separatore, viene usato per applicare la classe "est-lvl-{{level}}"
561
747
  *
562
748
  * @returns {any} Elemento di separazione contenente tutti i bind per presentare una paginazione sotto questo gruppo lato interfaccia
563
749
  */
564
750
  private getGroupSeparator;
751
+ /**
752
+ * Sposta la ricerca di una pagina in avanti (o indietro)
753
+ *
754
+ * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale
755
+ * @param {any} pager Elemento di separazione su cui è effettuata la ricerca
756
+ */
757
+ addToPageGroup(page: number, pager: GroupPager): void;
758
+ /**
759
+ * Sposta la ricerca alla pagina specificata
760
+ *
761
+ * @param {number} page Pagina a cui navigare
762
+ * @param {any} pager Elemento di separazione su cui è effettuata la ricerca
763
+ */
764
+ goToPageGroup(page: number, pager: GroupPager): void;
565
765
  /**
566
766
  * Data una colonna effettua la riemissione di tutte le ricerche relative.
567
767
  *
@@ -616,6 +816,12 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
616
816
  * @param {EsTableColumn} columnItem Colonna da spostare
617
817
  */
618
818
  sendDown(columnItem: EsTableColumn): void;
819
+ /**
820
+ * All'interno della dialog "Ordinamento e Visibilità Colonne" pinna la colonna specificata
821
+ *
822
+ * @param {EsTableColumn} columnItem Colonna da spostare
823
+ */
824
+ pinOrUnpinColumn(columnItem: EsTableColumn): void;
619
825
  /**
620
826
  * All'interno della dialog "Ordinamento e Visibilità Colonne" inverte le impostazioni di visibilità della colonna
621
827
  *
@@ -699,6 +905,23 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
699
905
  * @param {ItemsSelection<any>} selectionItem Oggetto contenente lo stato attuale di selezione
700
906
  */
701
907
  private handleSelectionEvaluation;
908
+ /**
909
+ * Dato un oggetto trova la cella di cache in cui è registrato e aggiorna il contenuto
910
+ *
911
+ * @param {any} item Oggetto da aggiornare
912
+ */
913
+ private rehidrateCache;
914
+ /**
915
+ * Dato un gruppo controlla ricorsivamente l'albero di cui fa parte se c'è stata una inclusione o esclusione diretta
916
+ *
917
+ * @param {any} grp Gruppo da controllare
918
+ *
919
+ * @returns {'none' | 'excluded' | 'included'}
920
+ * 'none' se non ci sono informazioni su inclusioni o esclusioni
921
+ * 'included' se il gruppo controllato è stato incluso in maniera esplicita dall'albero dei gruppi padri
922
+ * 'excluded' se il gruppo controllato è stato escluso in maniera esplicita dall'albero dei gruppi padri
923
+ */
924
+ private parentTreeStatus;
702
925
  /**
703
926
  * Gestisce la selezione globale degli oggetti, sia per pagina che a livello di **SelectAll**
704
927
  *
@@ -712,14 +935,84 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
712
935
  *
713
936
  * @param {any[]} items Oggetti da selezionare o deselezionare
714
937
  * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti
938
+ * @param {boolean} globalCheck Valore del check globale
715
939
  *
716
940
  * @returns {ItemsSelection<any>} Oggetto di selezione aggiornato con le informazioni sull'ultima operazione effettuata
717
941
  */
718
- private handleItemsSelection;
942
+ handleItemsSelection(items: any[], forcedVal?: boolean, globalCheck?: boolean): ItemsSelection<any>;
943
+ /**
944
+ * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.
945
+ *
946
+ * Logica semplificata rispetto all'originale **performSelectionOperations** per lavorare in una modalità in cui tutti gli elementi sono caricati (**ArrayGrouping** = true)
947
+ */
948
+ private performSimpleSelectionOperations;
949
+ /**
950
+ * Helper per selezionare un gruppo e, ricorsivamente, se tutti i gruppi sottostanti al parent sono selezionati, selezionare i gruppi padri
951
+ *
952
+ * @param {any} group Gruppo da selezionare
953
+ */
954
+ private selectGroup;
955
+ /**
956
+ * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.
957
+ *
958
+ * La logica di questa funzione è nata essenzialmente da spam di trial & error ed è stata testata solo fino a due livelli di raggruppamento,
959
+ * qualsiasi cosa vada oltre non è 100% detto che funzioni...
960
+ */
961
+ private performSelectionOperations;
962
+ /**
963
+ * Helper per evitare di riscrivere ogni santa volta array.splice(array.indexof(item), 1);
964
+ */
965
+ private removeItem;
966
+ /**
967
+ * Helper per evitare di riscrivere ogni santa volta array.push(item); e la gestione della
968
+ */
969
+ private addItem;
970
+ /**
971
+ * Ottiene il trittico di selezione: L'array degli oggetti e le due cache
972
+ */
973
+ private getTriptic;
974
+ /**
975
+ * Dato un oggetto restituisce il gruppo di cui fa parte, se esiste
976
+ *
977
+ * @param {any} item Oggetto di cui trovare il gruppo
978
+ */
979
+ private getItemGroup;
980
+ /**
981
+ * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave
982
+ *
983
+ * @param {any} group Chiave da cercare
984
+ * @param {'selected' | 'unselected'} status Stato degli elementi, selezionati o no
985
+ * @param {boolean} recursive Indica se cercare solo gli elementi direttamente collegati o se prendere anche quelli dei gruppi figli
986
+ *
987
+ * @returns {any[]} Oggetti di tipo **_item** facenti capo alla chiave **groupKey**
988
+ */
989
+ private getGroupItems;
990
+ /**
991
+ * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave
992
+ *
993
+ * @param {any} group Gruppo di cui cercare il parent
994
+ *
995
+ * @returns {any} Oggetto di tipo **_group** rappresentante il parent del **group** attuale
996
+ */
997
+ private getGroupParent;
998
+ /**
999
+ * Data la chiave di un gruppo restituisce tutti i gruppi figli
1000
+ *
1001
+ * @param {string} group Gruppo che rappresenta il padre di cui cercare i figli
1002
+ * @param {'selected' | 'unselected'} status Stato dei gruppi, selezionati o no
1003
+ * @param {boolean} recursive Indica se cercare solo i gruppi direttamente collegati o se prendere anche quelli dei gruppi figli
1004
+ *
1005
+ * @returns {any[]} Oggetti di tipo **_group** facenti capo alla chiave **groupKey**
1006
+ */
1007
+ private getGroupChildGroups;
719
1008
  /**
720
1009
  * Finalizza le informazioni di selezione del **ItemsSelection** corrente
721
1010
  */
722
1011
  private finalizeSelectionInformations;
1012
+ /**
1013
+ * Compatta una cache di indici
1014
+ */
1015
+ private compactIndexMap;
723
1016
  /**
724
1017
  * Gestisce i click sulla tabella, gestendo eventualmente anche gli Shift + Click per selezionare un range di oggetti
725
1018
  *
@@ -755,7 +1048,11 @@ export declare class EsTableComponent implements ControlValueAccessor, OnChanges
755
1048
  * Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest**
756
1049
  * per comunicare al componente che utilizza questa tabella che i dati sono da aggiornare
757
1050
  */
758
- onItemsPerPageChanged(): void;
1051
+ onItemsPerPageChanged(newIpp: any): void;
1052
+ /**
1053
+ * Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest** con la vista del separatore
1054
+ */
1055
+ onGroupItemsPerPageChanged(pager: GroupPager, newIpp: number): void;
759
1056
  /**
760
1057
  * Effettua l'esportazione dei dati
761
1058
  *
@@ -1,10 +1,6 @@
1
1
  import { LocalizationService } from "@esfaenza/localizations";
2
- /**
3
- * Classe di localizzazione per il componente **EsTableComponent**
4
- */
2
+ /** Classe di localizzazione per il componente **EsTableComponent** */
5
3
  export declare class EsTableLoc extends LocalizationService {
6
- /**
7
- * @ignore
8
- */
4
+ /** @ignore */
9
5
  constructor(LOC_LOCALE: string);
10
6
  }