@esfaenza/es-table 11.2.39 → 11.2.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/esfaenza-es-table.umd.js +486 -501
- package/bundles/esfaenza-es-table.umd.js.map +1 -1
- package/bundles/esfaenza-es-table.umd.min.js +1 -1
- package/bundles/esfaenza-es-table.umd.min.js.map +1 -1
- package/esfaenza-es-table.d.ts +1 -1
- package/esfaenza-es-table.metadata.json +1 -1
- package/esm2015/esfaenza-es-table.js +2 -2
- package/esm2015/lib/components/es-table/es_table.component.js +22 -8
- package/esm2015/lib/core/handlers/ColumnMetadataHandler.js +669 -0
- package/esm2015/lib/core/handlers/DynamicModeHandler.js +63 -0
- package/esm2015/lib/core/handlers/ExportHandler.js +106 -0
- package/esm2015/lib/core/handlers/HierarchyModeHandler.js +136 -0
- package/esm2015/lib/core/handlers/ItemsHandler.js +112 -0
- package/esm2015/lib/core/handlers/ReportModeHandler.js +70 -0
- package/esm2015/lib/core/handlers/RowGroupingHandler.js +481 -0
- package/esm2015/lib/core/handlers/SelectionHandler.js +526 -0
- package/esm2015/lib/core/handlers/UtilitiesHandler.js +155 -0
- package/esm2015/lib/directives/es_th.directive.js +4 -1
- package/esm2015/lib/domain/configuration/EsTableDefaultable.js +1 -1
- package/esm2015/lib/domain/externals/CornerMenuOption.js +4 -0
- package/esm2015/lib/domain/externals/EsTableColumnsDefinition.js +31 -0
- package/esm2015/lib/domain/externals/EsTableOperationDefinition.js +22 -0
- package/esm2015/lib/domain/externals/appsearch/AppOrdering.js +16 -0
- package/esm2015/lib/domain/externals/appsearch/AppSearch.js +35 -0
- package/esm2015/lib/domain/externals/appsearch/GenericItem.js +11 -0
- package/esm2015/lib/domain/externals/appsearch/Group.js +17 -0
- package/esm2015/lib/domain/externals/appsearch/GroupAggregation.js +16 -0
- package/esm2015/lib/domain/externals/appsearch/GroupFilter.js +14 -0
- package/esm2015/lib/domain/externals/appsearch/GroupOrAggregation.js +16 -0
- package/esm2015/lib/domain/externals/appsearch/ItemsSelection.js +23 -0
- package/esm2015/lib/domain/externals/report/ReportColumn.js +4 -0
- package/esm2015/lib/domain/externals/report/ReportDefinition.js +4 -0
- package/esm2015/lib/domain/externals/report/ReportOrder.js +4 -0
- package/esm2015/lib/domain/externals/report/ReportParam.js +4 -0
- package/esm2015/lib/domain/externals/report/ReportResult.js +4 -0
- package/esm2015/lib/domain/externals/report/ReportRow.js +4 -0
- package/esm2015/lib/domain/internals/CacheTriptic.js +16 -0
- package/esm2015/lib/domain/internals/EsTableColumn.js +27 -0
- package/esm2015/lib/domain/internals/GroupPager.js +22 -0
- package/esm2015/lib/domain/internals/GroupRouteFragment.js +17 -0
- package/esm2015/lib/domain/internals/TdElement.js +2 -0
- package/esm2015/lib/domain/internals/ThAggregation.js +16 -0
- package/esm2015/lib/domain/internals/ThElement.js +2 -0
- package/esm2015/public-api.js +18 -5
- package/fesm2015/esfaenza-es-table.js +436 -452
- package/fesm2015/esfaenza-es-table.js.map +1 -1
- package/lib/components/es-table/es_table.component.d.ts +25 -5
- package/lib/core/handlers/{classes/ColumnMetadataHandler.d.ts → ColumnMetadataHandler.d.ts} +9 -7
- package/lib/core/handlers/{classes/DynamicModeHandler.d.ts → DynamicModeHandler.d.ts} +2 -2
- package/lib/core/handlers/{classes/ExportHandler.d.ts → ExportHandler.d.ts} +1 -1
- package/lib/core/handlers/{classes/HierarchyModeHandler.d.ts → HierarchyModeHandler.d.ts} +1 -1
- package/lib/core/handlers/{classes/ItemsHandler.d.ts → ItemsHandler.d.ts} +1 -1
- package/lib/core/handlers/{classes/ReportModeHandler.d.ts → ReportModeHandler.d.ts} +2 -2
- package/lib/core/handlers/{classes/RowGroupingHandler.d.ts → RowGroupingHandler.d.ts} +8 -3
- package/lib/core/handlers/{classes/SelectionHandler.d.ts → SelectionHandler.d.ts} +3 -3
- package/lib/core/handlers/{classes/UtilitiesHandler.d.ts → UtilitiesHandler.d.ts} +0 -0
- package/lib/directives/es_th.directive.d.ts +3 -1
- package/lib/domain/configuration/EsTableDefaultable.d.ts +1 -0
- package/lib/domain/externals/{classes/CornerMenuOption.d.ts → CornerMenuOption.d.ts} +0 -0
- package/lib/domain/externals/{classes/EsTableColumnsDefinition.d.ts → EsTableColumnsDefinition.d.ts} +0 -0
- package/lib/domain/externals/{classes/EsTableOperationDefinition.d.ts → EsTableOperationDefinition.d.ts} +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/AppOrdering.d.ts +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/AppSearch.d.ts +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/GenericItem.d.ts +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/Group.d.ts +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/GroupAggregation.d.ts +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/GroupFilter.d.ts +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/GroupOrAggregation.d.ts +0 -0
- package/lib/domain/externals/{classes/appsearch → appsearch}/ItemsSelection.d.ts +1 -1
- package/lib/domain/externals/{classes/report → report}/ReportColumn.d.ts +0 -0
- package/lib/domain/externals/{classes/report → report}/ReportDefinition.d.ts +3 -1
- package/lib/domain/externals/{classes/report → report}/ReportOrder.d.ts +0 -0
- package/lib/domain/externals/{classes/report → report}/ReportParam.d.ts +0 -0
- package/lib/domain/externals/{classes/report → report}/ReportResult.d.ts +2 -1
- package/lib/domain/externals/{classes/report → report}/ReportRow.d.ts +0 -0
- package/lib/domain/internals/{classes/CacheTriptic.d.ts → CacheTriptic.d.ts} +0 -0
- package/lib/domain/internals/{classes/EsTableColumn.d.ts → EsTableColumn.d.ts} +2 -1
- package/lib/domain/internals/{classes/GroupPager.d.ts → GroupPager.d.ts} +2 -1
- package/lib/domain/internals/{classes/GroupRouteFragment.d.ts → GroupRouteFragment.d.ts} +0 -0
- package/lib/domain/internals/{classes/TdElement.d.ts → TdElement.d.ts} +17 -1
- package/lib/domain/internals/{classes/ThAggregation.d.ts → ThAggregation.d.ts} +0 -0
- package/lib/domain/internals/{classes/ThElement.d.ts → ThElement.d.ts} +0 -0
- package/package.json +1 -1
- package/public-api.d.ts +17 -1
- package/esm2015/lib/core/handlers/classes/ColumnMetadataHandler.js +0 -667
- package/esm2015/lib/core/handlers/classes/DynamicModeHandler.js +0 -64
- package/esm2015/lib/core/handlers/classes/ExportHandler.js +0 -106
- package/esm2015/lib/core/handlers/classes/HierarchyModeHandler.js +0 -136
- package/esm2015/lib/core/handlers/classes/ItemsHandler.js +0 -112
- package/esm2015/lib/core/handlers/classes/ReportModeHandler.js +0 -70
- package/esm2015/lib/core/handlers/classes/RowGroupingHandler.js +0 -478
- package/esm2015/lib/core/handlers/classes/SelectionHandler.js +0 -527
- package/esm2015/lib/core/handlers/classes/UtilitiesHandler.js +0 -155
- package/esm2015/lib/core/handlers/index.js +0 -10
- package/esm2015/lib/domain/externals/classes/CornerMenuOption.js +0 -4
- package/esm2015/lib/domain/externals/classes/EsTableColumnsDefinition.js +0 -31
- package/esm2015/lib/domain/externals/classes/EsTableOperationDefinition.js +0 -22
- package/esm2015/lib/domain/externals/classes/appsearch/AppOrdering.js +0 -16
- package/esm2015/lib/domain/externals/classes/appsearch/AppSearch.js +0 -35
- package/esm2015/lib/domain/externals/classes/appsearch/GenericItem.js +0 -11
- package/esm2015/lib/domain/externals/classes/appsearch/Group.js +0 -17
- package/esm2015/lib/domain/externals/classes/appsearch/GroupAggregation.js +0 -16
- package/esm2015/lib/domain/externals/classes/appsearch/GroupFilter.js +0 -14
- package/esm2015/lib/domain/externals/classes/appsearch/GroupOrAggregation.js +0 -16
- package/esm2015/lib/domain/externals/classes/appsearch/ItemsSelection.js +0 -23
- package/esm2015/lib/domain/externals/classes/report/ReportColumn.js +0 -4
- package/esm2015/lib/domain/externals/classes/report/ReportDefinition.js +0 -4
- package/esm2015/lib/domain/externals/classes/report/ReportOrder.js +0 -4
- package/esm2015/lib/domain/externals/classes/report/ReportParam.js +0 -4
- package/esm2015/lib/domain/externals/classes/report/ReportResult.js +0 -4
- package/esm2015/lib/domain/externals/classes/report/ReportRow.js +0 -4
- package/esm2015/lib/domain/externals/index.js +0 -18
- package/esm2015/lib/domain/index.js +0 -3
- package/esm2015/lib/domain/internals/classes/CacheTriptic.js +0 -16
- package/esm2015/lib/domain/internals/classes/EsTableColumn.js +0 -26
- package/esm2015/lib/domain/internals/classes/GroupPager.js +0 -22
- package/esm2015/lib/domain/internals/classes/GroupRouteFragment.js +0 -17
- package/esm2015/lib/domain/internals/classes/TdElement.js +0 -2
- package/esm2015/lib/domain/internals/classes/ThAggregation.js +0 -16
- package/esm2015/lib/domain/internals/classes/ThElement.js +0 -2
- package/esm2015/lib/domain/internals/index.js +0 -8
- package/lib/core/handlers/index.d.ts +0 -9
- package/lib/domain/externals/index.d.ts +0 -17
- package/lib/domain/index.d.ts +0 -2
- package/lib/domain/internals/index.d.ts +0 -7
|
@@ -336,23 +336,6 @@
|
|
|
336
336
|
return value;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
-
/**
|
|
340
|
-
* Classe che identifica un ordinamento di una colonna
|
|
341
|
-
*/
|
|
342
|
-
var AppOrdering = /** @class */ (function () {
|
|
343
|
-
/**
|
|
344
|
-
* Costruttore
|
|
345
|
-
*
|
|
346
|
-
* @param {string} id ID della colonna a cui si vogliono applicare ordinamenti, deve combaciare all'id messo nella dichiarazione dell'ES-TD/TH
|
|
347
|
-
* @param {'DESC' | 'ASC' } order Ordinamento da applicare alla colonna, Discendente/Ascendente, default 'null' per indicare assenza di ordine
|
|
348
|
-
*/
|
|
349
|
-
function AppOrdering(id, order) {
|
|
350
|
-
this.id = id;
|
|
351
|
-
this.order = order;
|
|
352
|
-
}
|
|
353
|
-
return AppOrdering;
|
|
354
|
-
}());
|
|
355
|
-
|
|
356
339
|
/**
|
|
357
340
|
* Classe che identifica una ricerca paginata in tutte le sue sfumature (di grigio)
|
|
358
341
|
*/
|
|
@@ -389,65 +372,6 @@
|
|
|
389
372
|
return AppSearch;
|
|
390
373
|
}());
|
|
391
374
|
|
|
392
|
-
/** Classe che identifica una colonna. Utilizzata in modalità "Colonne dinamiche" */
|
|
393
|
-
var EsTableColumnsDefinition = /** @class */ (function () {
|
|
394
|
-
/**
|
|
395
|
-
* Costruttore
|
|
396
|
-
*
|
|
397
|
-
* @param {string} description Descrizione della colonna
|
|
398
|
-
* @param {string} propertyName Nome della proprietà del modello in cui sono contenuti i dati da visualizzare per questa colonna
|
|
399
|
-
* @param {string} routePath Route di navigazione. Es. "['/pages/mod/mod_detail', { 'idItem': '{0}', 'idItem2' : '{1}' }]"
|
|
400
|
-
* @param {string[]} routeParameterProperties Proprietà da bindare a **routePath** per generare la route completa.
|
|
401
|
-
* L'indice scritto in **routePath** è l'indice di accesso a questo array. Es. ["iditem", "iditem2"]
|
|
402
|
-
* @param {'ASC' | 'DESC' } dataOrder Ordinamento dei dati presentati in questa colonna
|
|
403
|
-
* @param {number} columnOrder Ordinamento di questa colonna
|
|
404
|
-
* @param {boolean} visible Visibilità o meno della colonna
|
|
405
|
-
* @param {string} clss Classe da applicare sia ai TD che ai TH relativi a questa colonna
|
|
406
|
-
* @param {boolean} orderable Indica se la colonna è ordinabile o no (nel senso ASC / DESC / NONE)
|
|
407
|
-
* @param {boolean} headerWraps Indica se il testo dell'header dev'essere wrappato all'interno del th. Di default no.
|
|
408
|
-
*/
|
|
409
|
-
function EsTableColumnsDefinition(description, propertyName, routePath, routeParameterProperties, dataOrder, columnOrder, visible, clss, orderable, headerWraps) {
|
|
410
|
-
if (routePath === void 0) { routePath = null; }
|
|
411
|
-
if (routeParameterProperties === void 0) { routeParameterProperties = null; }
|
|
412
|
-
if (dataOrder === void 0) { dataOrder = null; }
|
|
413
|
-
if (columnOrder === void 0) { columnOrder = null; }
|
|
414
|
-
if (visible === void 0) { visible = true; }
|
|
415
|
-
if (clss === void 0) { clss = null; }
|
|
416
|
-
if (orderable === void 0) { orderable = true; }
|
|
417
|
-
if (headerWraps === void 0) { headerWraps = false; }
|
|
418
|
-
this.description = description;
|
|
419
|
-
this.propertyName = propertyName;
|
|
420
|
-
this.routePath = routePath;
|
|
421
|
-
this.routeParameterProperties = routeParameterProperties;
|
|
422
|
-
this.dataOrder = dataOrder;
|
|
423
|
-
this.columnOrder = columnOrder;
|
|
424
|
-
this.visible = visible;
|
|
425
|
-
this.clss = clss;
|
|
426
|
-
this.orderable = orderable;
|
|
427
|
-
this.headerWraps = headerWraps;
|
|
428
|
-
}
|
|
429
|
-
return EsTableColumnsDefinition;
|
|
430
|
-
}());
|
|
431
|
-
|
|
432
|
-
/** Classe che definisce un oggetto generico come lista di proprietà-valore */
|
|
433
|
-
var GenericItem = /** @class */ (function () {
|
|
434
|
-
/** @ignore */
|
|
435
|
-
function GenericItem() {
|
|
436
|
-
this._selected = false;
|
|
437
|
-
this._rowClass = null;
|
|
438
|
-
this._hash = null;
|
|
439
|
-
this.properties = {};
|
|
440
|
-
}
|
|
441
|
-
return GenericItem;
|
|
442
|
-
}());
|
|
443
|
-
|
|
444
|
-
/** Indica un'opzione cliccabile nel Corner Menù della tabella (il menù richiamabile dai 3 pallini verticli in alto a destra) */
|
|
445
|
-
var CornerMenuOption = /** @class */ (function () {
|
|
446
|
-
function CornerMenuOption() {
|
|
447
|
-
}
|
|
448
|
-
return CornerMenuOption;
|
|
449
|
-
}());
|
|
450
|
-
|
|
451
375
|
/** Definizione generica di un report che può o no disporre di paginazione/export e la cui richiesta è basata su uno o più parametri */
|
|
452
376
|
var ReportDefinition = /** @class */ (function () {
|
|
453
377
|
function ReportDefinition() {
|
|
@@ -455,64 +379,6 @@
|
|
|
455
379
|
return ReportDefinition;
|
|
456
380
|
}());
|
|
457
381
|
|
|
458
|
-
/** Classe che identifica una direttiva di ordinamento per un report */
|
|
459
|
-
var ReportOrder = /** @class */ (function () {
|
|
460
|
-
function ReportOrder() {
|
|
461
|
-
}
|
|
462
|
-
return ReportOrder;
|
|
463
|
-
}());
|
|
464
|
-
|
|
465
|
-
/** Classe che rappresenta una colonna di un report */
|
|
466
|
-
var ReportColumn = /** @class */ (function () {
|
|
467
|
-
function ReportColumn() {
|
|
468
|
-
}
|
|
469
|
-
return ReportColumn;
|
|
470
|
-
}());
|
|
471
|
-
|
|
472
|
-
/** Classe che rappresenta una lista di oggetti generati da un report */
|
|
473
|
-
var ReportResult = /** @class */ (function () {
|
|
474
|
-
function ReportResult() {
|
|
475
|
-
}
|
|
476
|
-
return ReportResult;
|
|
477
|
-
}());
|
|
478
|
-
|
|
479
|
-
/** Classe che rappresenta i valori delle proprietà di un oggetto Report */
|
|
480
|
-
var ReportRow = /** @class */ (function () {
|
|
481
|
-
function ReportRow() {
|
|
482
|
-
}
|
|
483
|
-
return ReportRow;
|
|
484
|
-
}());
|
|
485
|
-
|
|
486
|
-
/** Classe che identifica un parametro generico per un report */
|
|
487
|
-
var ReportParam = /** @class */ (function () {
|
|
488
|
-
function ReportParam() {
|
|
489
|
-
}
|
|
490
|
-
return ReportParam;
|
|
491
|
-
}());
|
|
492
|
-
|
|
493
|
-
/** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */
|
|
494
|
-
var EsTableOperationDefinition = /** @class */ (function () {
|
|
495
|
-
/**
|
|
496
|
-
* Costruttore
|
|
497
|
-
*
|
|
498
|
-
* @param {string} id Codice dell'operazione
|
|
499
|
-
* @param {string} title Titolo dell'operazione, da presentare all'utente su hover della cella
|
|
500
|
-
* @param {string} iconClass Classe che fornisca un iconcina Es. "fa fa-remove"
|
|
501
|
-
* @param {string} text Eventuale testo presentato nella cella, genericamente va in alternativa a **iconClass**
|
|
502
|
-
* @param {string} conditionField Indica il campo dell'oggetto sottostante su cui verificare la visibilità o meno di questa icona
|
|
503
|
-
* @param {string} conditionValue Indica il valore che la proprietà **conditionField** dell'oggetto sottostante deve assumere affinché questa opzione si veda
|
|
504
|
-
*/
|
|
505
|
-
function EsTableOperationDefinition(id, title, iconClass, text, conditionField, conditionValue) {
|
|
506
|
-
this.id = id;
|
|
507
|
-
this.title = title;
|
|
508
|
-
this.iconClass = iconClass;
|
|
509
|
-
this.text = text;
|
|
510
|
-
this.conditionField = conditionField;
|
|
511
|
-
this.conditionValue = conditionValue;
|
|
512
|
-
}
|
|
513
|
-
return EsTableOperationDefinition;
|
|
514
|
-
}());
|
|
515
|
-
|
|
516
382
|
/** Identifica una selezione applicabile agli oggetti presentati in una tabella */
|
|
517
383
|
var ItemsSelection = /** @class */ (function () {
|
|
518
384
|
/**
|
|
@@ -537,41 +403,6 @@
|
|
|
537
403
|
return ItemsSelection;
|
|
538
404
|
}());
|
|
539
405
|
|
|
540
|
-
/** Classe che rappresenta un Gruppo con le proprie aggregazioni */
|
|
541
|
-
var Group = /** @class */ (function () {
|
|
542
|
-
/**
|
|
543
|
-
* Costruttore
|
|
544
|
-
*
|
|
545
|
-
* @param {string} column ID della colonna raggruppata
|
|
546
|
-
* @param {number} count Numero di elementi raggruppati sotto questa colonna
|
|
547
|
-
* @param {string} value Valore del Gruppo
|
|
548
|
-
*/
|
|
549
|
-
function Group(column, count, value) {
|
|
550
|
-
this.column = column;
|
|
551
|
-
this.count = count;
|
|
552
|
-
this.value = value;
|
|
553
|
-
this.aggregations = [];
|
|
554
|
-
}
|
|
555
|
-
return Group;
|
|
556
|
-
}());
|
|
557
|
-
|
|
558
|
-
/** Classe che rappresenta un'aggregazione */
|
|
559
|
-
var GroupAggregation = /** @class */ (function () {
|
|
560
|
-
/**
|
|
561
|
-
* Costruttore
|
|
562
|
-
*
|
|
563
|
-
* @param {string} column ID della colonna aggregata
|
|
564
|
-
* @param {'min' | 'max' | 'sum' } aggregation Aggregazione da effettuare su questa colonna
|
|
565
|
-
* @param {string} value Valore dell'aggregazione
|
|
566
|
-
*/
|
|
567
|
-
function GroupAggregation(column, aggregation, value) {
|
|
568
|
-
this.column = column;
|
|
569
|
-
this.aggregation = aggregation;
|
|
570
|
-
this.value = value;
|
|
571
|
-
}
|
|
572
|
-
return GroupAggregation;
|
|
573
|
-
}());
|
|
574
|
-
|
|
575
406
|
/** Classe che rappresenta un filtro su un gruppo */
|
|
576
407
|
var GroupFilter = /** @class */ (function () {
|
|
577
408
|
/**
|
|
@@ -587,123 +418,11 @@
|
|
|
587
418
|
return GroupFilter;
|
|
588
419
|
}());
|
|
589
420
|
|
|
590
|
-
/**
|
|
591
|
-
var
|
|
592
|
-
|
|
593
|
-
* Costruttore
|
|
594
|
-
*
|
|
595
|
-
* @param {string} column Colonna su cui è presente o un gruppo o un'aggregazione
|
|
596
|
-
* @param {'min' | 'max' | 'sum' } aggregation Aggregazione presente sulla **column**. Se questo campo è nullo significa che è un gruppo.
|
|
597
|
-
* @param {'string' | 'date' | 'number'} datatype Tipo di dati contenuto nella colonna **column** se non c'è alcuna aggregazione è inutile, pertanto non sarà valorizzato
|
|
598
|
-
*/
|
|
599
|
-
function GroupOrAggregation(column, aggregation, datatype) {
|
|
600
|
-
this.column = column;
|
|
601
|
-
this.aggregation = aggregation;
|
|
602
|
-
this.datatype = datatype;
|
|
603
|
-
}
|
|
604
|
-
return GroupOrAggregation;
|
|
605
|
-
}());
|
|
606
|
-
|
|
607
|
-
/** Rappresenta un trittico formato da un array e due cache relative a tale array per un accesso estremamente veloce per tutte le operazioni del caso */
|
|
608
|
-
var CacheTriptic = /** @class */ (function () {
|
|
609
|
-
/**
|
|
610
|
-
* Costruttore
|
|
611
|
-
*
|
|
612
|
-
* @param {Map<string, any>} cache Cache Chiave-Oggetto
|
|
613
|
-
* @param {Map<string, number>} index_cache Cache Indice-Oggetto
|
|
614
|
-
* @param {any[]} array Array contenente gli oggetti
|
|
615
|
-
*/
|
|
616
|
-
function CacheTriptic(cache, index_cache, array) {
|
|
617
|
-
this.cache = cache;
|
|
618
|
-
this.index_cache = index_cache;
|
|
619
|
-
this.array = array;
|
|
620
|
-
}
|
|
621
|
-
return CacheTriptic;
|
|
622
|
-
}());
|
|
623
|
-
|
|
624
|
-
/** Definizione di una colonna, utilizzato nella dialog che permette di modificare le posizioni e le visibilità */
|
|
625
|
-
var EsTableColumn = /** @class */ (function () {
|
|
626
|
-
/**
|
|
627
|
-
* Costruttore
|
|
628
|
-
*
|
|
629
|
-
* @param {string} id Id colonna
|
|
630
|
-
* @param {string} description Descrizione (Header)
|
|
631
|
-
* @param {boolean} visible Indica se di default mostrarla o meno
|
|
632
|
-
* @param {boolean} fixed Indica se è una colonna fixed
|
|
633
|
-
* @param {boolean} pinned Indica se è una colonna pinnata
|
|
634
|
-
* @param {number} pinnedWidth Indica la dimensione da assegnare a questa colonna quando è pinnata
|
|
635
|
-
* @param {TemplateRef<any>} template Indica il template da usare per mostrare il testo dell'Header
|
|
636
|
-
* @param {TemplateRef<any>[]} parentTemplates Indica la lista di template padri collegata a questo header
|
|
637
|
-
*/
|
|
638
|
-
function EsTableColumn(id, description, visible, fixed, pinned, pinnedWidth, template, parentTemplates) {
|
|
639
|
-
this.id = id;
|
|
640
|
-
this.description = description;
|
|
641
|
-
this.visible = visible;
|
|
642
|
-
this.fixed = fixed;
|
|
643
|
-
this.pinned = pinned;
|
|
644
|
-
this.pinnedWidth = pinnedWidth;
|
|
645
|
-
this.template = template;
|
|
646
|
-
this.parentTemplates = parentTemplates;
|
|
647
|
-
}
|
|
648
|
-
return EsTableColumn;
|
|
649
|
-
}());
|
|
650
|
-
|
|
651
|
-
/** Classe che rappresenta un separatore da inserire fra gli oggetti dell'es-table per le operazioni di paginazione dei raggruppamenti per riga */
|
|
652
|
-
var GroupPager = /** @class */ (function () {
|
|
653
|
-
/**
|
|
654
|
-
* Costruttore
|
|
655
|
-
*
|
|
656
|
-
* @param {number} groupLevel Livello del gruppo a cui questo separatore fa riferimento
|
|
657
|
-
* @param {string} parentKey Chiave del gruppo parent se esiste
|
|
658
|
-
* @param {AppSearch<any>} view Vista di ricerca collegata a questo elemento
|
|
659
|
-
* @param {'groups' | 'items'} searches Indica che cosa cerca questo separatore, se sottogruppi o oggetti
|
|
660
|
-
*/
|
|
661
|
-
function GroupPager(_grouplevel, _thisRoute, _parent, view, searches) {
|
|
662
|
-
this._grouplevel = _grouplevel;
|
|
663
|
-
this._thisRoute = _thisRoute;
|
|
664
|
-
this._parent = _parent;
|
|
665
|
-
this.view = view;
|
|
666
|
-
this.searches = searches;
|
|
667
|
-
this._sep = true;
|
|
668
|
-
this.buttons = [];
|
|
669
|
-
this._thisKey = _parent + "_sep";
|
|
670
|
-
}
|
|
671
|
-
return GroupPager;
|
|
672
|
-
}());
|
|
673
|
-
|
|
674
|
-
/**
|
|
675
|
-
* Classe che rappresenta un singolo frammento di route di un elemento gruppo o non. Un array di questi indica tutte le colonne di gruppo con i loro valori
|
|
676
|
-
* per arrivare ad una ricerca su sottogruppi o elementi relativi
|
|
677
|
-
*/
|
|
678
|
-
var GroupRouteFragment = /** @class */ (function () {
|
|
679
|
-
/**
|
|
680
|
-
* Costruttore
|
|
681
|
-
*
|
|
682
|
-
* @param {string} column Colonna di raggruppamento
|
|
683
|
-
* @param {string} value Valore della colonna di raggruppamento
|
|
684
|
-
*/
|
|
685
|
-
function GroupRouteFragment(column, value) {
|
|
686
|
-
this.column = column;
|
|
687
|
-
this.value = value;
|
|
688
|
-
}
|
|
689
|
-
return GroupRouteFragment;
|
|
690
|
-
}());
|
|
691
|
-
|
|
692
|
-
/** Classe rappresentante una singola aggregazione effettuata su una colonna */
|
|
693
|
-
var ThAggregation = /** @class */ (function () {
|
|
694
|
-
/**
|
|
695
|
-
* Costruttore
|
|
696
|
-
*
|
|
697
|
-
* @param {'min' | 'max' | 'sum'} func Funzione di aggergazione, può essere **min**, **max** o **sum**
|
|
698
|
-
* @param {string} format Formato richiesto per il valore dell'aggregazione
|
|
699
|
-
* @param {string} match Match intero del pezzo di testo da cui si è estrapolata l'aggregazione, da rimpiazzare col valore calcolato
|
|
700
|
-
*/
|
|
701
|
-
function ThAggregation(func, format, match) {
|
|
702
|
-
this.func = func;
|
|
703
|
-
this.format = format;
|
|
704
|
-
this.match = match;
|
|
421
|
+
/** Raccolta di tutti gli Input dell'EsTable a cui può essere logicamente sensato assegnare default per progetto */
|
|
422
|
+
var EsTableDefaultable = /** @class */ (function () {
|
|
423
|
+
function EsTableDefaultable() {
|
|
705
424
|
}
|
|
706
|
-
return
|
|
425
|
+
return EsTableDefaultable;
|
|
707
426
|
}());
|
|
708
427
|
|
|
709
428
|
/** Direttiva per la dichiarazione snella di un EsTd da emettere per ogni elemento, data una colonna */
|
|
@@ -754,6 +473,8 @@
|
|
|
754
473
|
this.th = "";
|
|
755
474
|
/** Indica se la colonna è pinnata o no */
|
|
756
475
|
this.thPinned = false;
|
|
476
|
+
/** Indica se la colonna è pinnabile o no */
|
|
477
|
+
this.thPinnable = true;
|
|
757
478
|
/** Indica le dimensioni che deve avere questa colonna quando viene pinnata, senza questo tutte le colonne mi collasserebbero l'una sull'altra */
|
|
758
479
|
this.thPinnedWidth = 150;
|
|
759
480
|
/** Indicazione sulla visibilità della colonna */
|
|
@@ -788,6 +509,7 @@
|
|
|
788
509
|
EsThDirective.propDecorators = {
|
|
789
510
|
th: [{ type: i0.Input }],
|
|
790
511
|
thPinned: [{ type: i0.Input }],
|
|
512
|
+
thPinnable: [{ type: i0.Input }],
|
|
791
513
|
thPinnedWidth: [{ type: i0.Input }],
|
|
792
514
|
thVisible: [{ type: i0.Input }],
|
|
793
515
|
thFixed: [{ type: i0.Input }],
|
|
@@ -838,23 +560,193 @@
|
|
|
838
560
|
_super.prototype.set.call(_this, "en->it", "Paging options are not available for this report", ["Le opzioni di paginazione non sono disponibili per questo report"]);
|
|
839
561
|
return _this;
|
|
840
562
|
}
|
|
841
|
-
return EsTableLoc;
|
|
842
|
-
}(localizations.LocalizationService));
|
|
843
|
-
EsTableLoc.decorators = [
|
|
844
|
-
{ type: i0.Injectable }
|
|
845
|
-
];
|
|
846
|
-
EsTableLoc.ctorParameters = function () { return [
|
|
847
|
-
{ type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [EST_LOCALE,] }] }
|
|
848
|
-
]; };
|
|
563
|
+
return EsTableLoc;
|
|
564
|
+
}(localizations.LocalizationService));
|
|
565
|
+
EsTableLoc.decorators = [
|
|
566
|
+
{ type: i0.Injectable }
|
|
567
|
+
];
|
|
568
|
+
EsTableLoc.ctorParameters = function () { return [
|
|
569
|
+
{ type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [EST_LOCALE,] }] }
|
|
570
|
+
]; };
|
|
571
|
+
|
|
572
|
+
/** Classe contenente la gestione delle importazioni */
|
|
573
|
+
var ExportHandler = /** @class */ (function () {
|
|
574
|
+
/** @ignore Costruttore*/
|
|
575
|
+
function ExportHandler(est, expExts, msgExts, utiExts, dateExts) {
|
|
576
|
+
this.est = est;
|
|
577
|
+
this.expExts = expExts;
|
|
578
|
+
this.msgExts = msgExts;
|
|
579
|
+
this.utiExts = utiExts;
|
|
580
|
+
this.dateExts = dateExts;
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Effettua l'esportazione dei dati
|
|
584
|
+
*
|
|
585
|
+
* @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella
|
|
586
|
+
*/
|
|
587
|
+
ExportHandler.prototype.tryExport = function (format) {
|
|
588
|
+
var _this = this;
|
|
589
|
+
if (!this.est.ExportFunction)
|
|
590
|
+
return;
|
|
591
|
+
if (this.est.reportMode)
|
|
592
|
+
this.est.ExportFunction(format);
|
|
593
|
+
else
|
|
594
|
+
this.est.ExportFunction(function (data, cancel) {
|
|
595
|
+
if (cancel === void 0) { cancel = false; }
|
|
596
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
597
|
+
var _b, _a_1;
|
|
598
|
+
var _this = this;
|
|
599
|
+
return __generator(this, function (_c) {
|
|
600
|
+
switch (_c.label) {
|
|
601
|
+
case 0:
|
|
602
|
+
if (cancel)
|
|
603
|
+
return [2 /*return*/];
|
|
604
|
+
if (data.length == 0) {
|
|
605
|
+
this.msgExts.simpleWarning(this.est.lc.loc("Cannot export an empty dataset"));
|
|
606
|
+
return [2 /*return*/];
|
|
607
|
+
}
|
|
608
|
+
this.setupExport(data);
|
|
609
|
+
if (!(format == "CSV")) return [3 /*break*/, 1];
|
|
610
|
+
this.est.cdr.detectChanges();
|
|
611
|
+
setTimeout(function () { _this.est.exportDownloader.nativeElement.click(); });
|
|
612
|
+
return [3 /*break*/, 7];
|
|
613
|
+
case 1:
|
|
614
|
+
if (!(format == "XLSX")) return [3 /*break*/, 6];
|
|
615
|
+
if (this.ExcelJS != null) {
|
|
616
|
+
this.exportExcel();
|
|
617
|
+
return [2 /*return*/];
|
|
618
|
+
}
|
|
619
|
+
_c.label = 2;
|
|
620
|
+
case 2:
|
|
621
|
+
_c.trys.push([2, 4, , 5]);
|
|
622
|
+
_b = this;
|
|
623
|
+
return [4 /*yield*/, import('exceljs')];
|
|
624
|
+
case 3:
|
|
625
|
+
_b.ExcelJS = _c.sent();
|
|
626
|
+
this.exportExcel();
|
|
627
|
+
return [3 /*break*/, 5];
|
|
628
|
+
case 4:
|
|
629
|
+
_a_1 = _c.sent();
|
|
630
|
+
throw "Impossibile caricare la libreria per l'esportazione in Excel";
|
|
631
|
+
case 5: return [3 /*break*/, 7];
|
|
632
|
+
case 6: throw "Formato di esportazione non riconosciuto";
|
|
633
|
+
case 7: return [2 /*return*/];
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
});
|
|
637
|
+
});
|
|
638
|
+
};
|
|
639
|
+
/** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **this.est.headers** e sui dati **this.est.data** */
|
|
640
|
+
ExportHandler.prototype.exportExcel = function () {
|
|
641
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
642
|
+
var iFix, workbook, sheet, header, i, h, i, row, item, i_1, h, cell, val, buffer, blob, objectUrl, fn;
|
|
643
|
+
return __generator(this, function (_b) {
|
|
644
|
+
switch (_b.label) {
|
|
645
|
+
case 0:
|
|
646
|
+
iFix = 1;
|
|
647
|
+
workbook = new this.ExcelJS.Workbook();
|
|
648
|
+
workbook.creator = "Ema's big Es-Table";
|
|
649
|
+
workbook.created = new Date();
|
|
650
|
+
sheet = workbook.addWorksheet('Data');
|
|
651
|
+
header = sheet.getRow(1);
|
|
652
|
+
header.font = { bold: true };
|
|
653
|
+
this.est.headers = this.est.headers.sort(function (a, b) { return a.order - b.order; });
|
|
654
|
+
for (i = 0; i < this.est.headers.length; i++) {
|
|
655
|
+
h = this.est.headers[i];
|
|
656
|
+
header.getCell(i + iFix).value = h.label;
|
|
657
|
+
}
|
|
658
|
+
for (i = 0; i < this.est.data.length; i++) {
|
|
659
|
+
row = sheet.getRow(i + iFix + 1);
|
|
660
|
+
item = this.est.data[i];
|
|
661
|
+
for (i_1 = 0; i_1 < this.est.headers.length; i_1++) {
|
|
662
|
+
h = this.est.headers[i_1];
|
|
663
|
+
cell = row.getCell(i_1 + 1);
|
|
664
|
+
val = item[h.key];
|
|
665
|
+
if (val == null || val == undefined)
|
|
666
|
+
cell.value = "";
|
|
667
|
+
else {
|
|
668
|
+
switch (h.type) {
|
|
669
|
+
case 'date':
|
|
670
|
+
cell.value = this.dateExts.getDateConvertion(val).toDate();
|
|
671
|
+
case 'number':
|
|
672
|
+
cell.value = parseFloat(val.replace(',', '.'));
|
|
673
|
+
default:
|
|
674
|
+
cell.value = val;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
return [4 /*yield*/, workbook.xlsx.writeBuffer()];
|
|
680
|
+
case 1:
|
|
681
|
+
buffer = _b.sent();
|
|
682
|
+
blob = new Blob([buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;" });
|
|
683
|
+
objectUrl = window.URL.createObjectURL(blob);
|
|
684
|
+
fn = this.est.ExportFileName;
|
|
685
|
+
this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + ".xlsx");
|
|
686
|
+
return [2 /*return*/];
|
|
687
|
+
}
|
|
688
|
+
});
|
|
689
|
+
});
|
|
690
|
+
};
|
|
691
|
+
/**
|
|
692
|
+
* Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**
|
|
693
|
+
*
|
|
694
|
+
* @param {any[]} items Oggetti da esportare
|
|
695
|
+
*/
|
|
696
|
+
ExportHandler.prototype.setupExport = function (items) {
|
|
697
|
+
var drcd = this.est.DynamicRowColumnsDefinition;
|
|
698
|
+
this.est.headers = drcd && drcd.length > 0 ? this.expExts.setupForGenericExport(items, drcd.map(function (t) { return { label: t.description, key: t.propertyName, order: t.columnOrder, type: 'string' }; })) : this.expExts.setupForExport(items);
|
|
699
|
+
this.est.data = items;
|
|
700
|
+
};
|
|
701
|
+
return ExportHandler;
|
|
702
|
+
}());
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* Classe che identifica un ordinamento di una colonna
|
|
706
|
+
*/
|
|
707
|
+
var AppOrdering = /** @class */ (function () {
|
|
708
|
+
/**
|
|
709
|
+
* Costruttore
|
|
710
|
+
*
|
|
711
|
+
* @param {string} id ID della colonna a cui si vogliono applicare ordinamenti, deve combaciare all'id messo nella dichiarazione dell'ES-TD/TH
|
|
712
|
+
* @param {'DESC' | 'ASC' } order Ordinamento da applicare alla colonna, Discendente/Ascendente, default 'null' per indicare assenza di ordine
|
|
713
|
+
*/
|
|
714
|
+
function AppOrdering(id, order) {
|
|
715
|
+
this.id = id;
|
|
716
|
+
this.order = order;
|
|
717
|
+
}
|
|
718
|
+
return AppOrdering;
|
|
719
|
+
}());
|
|
849
720
|
|
|
850
|
-
/**
|
|
851
|
-
var
|
|
852
|
-
|
|
721
|
+
/** Definizione di una colonna, utilizzato nella dialog che permette di modificare le posizioni e le visibilità */
|
|
722
|
+
var EsTableColumn = /** @class */ (function () {
|
|
723
|
+
/**
|
|
724
|
+
* Costruttore
|
|
725
|
+
*
|
|
726
|
+
* @param {string} id Id colonna
|
|
727
|
+
* @param {string} description Descrizione (Header)
|
|
728
|
+
* @param {boolean} visible Indica se di default mostrarla o meno
|
|
729
|
+
* @param {boolean} fixed Indica se è una colonna fixed
|
|
730
|
+
* @param {boolean} pinned Indica se è una colonna pinnata
|
|
731
|
+
* @param {number} pinnedWidth Indica la dimensione da assegnare a questa colonna quando è pinnata
|
|
732
|
+
* @param {TemplateRef<any>} template Indica il template da usare per mostrare il testo dell'Header
|
|
733
|
+
* @param {TemplateRef<any>[]} parentTemplates Indica la lista di template padri collegata a questo header
|
|
734
|
+
*/
|
|
735
|
+
function EsTableColumn(id, description, visible, fixed, pinned, pinnable, pinnedWidth, template, parentTemplates) {
|
|
736
|
+
this.id = id;
|
|
737
|
+
this.description = description;
|
|
738
|
+
this.visible = visible;
|
|
739
|
+
this.fixed = fixed;
|
|
740
|
+
this.pinned = pinned;
|
|
741
|
+
this.pinnable = pinnable;
|
|
742
|
+
this.pinnedWidth = pinnedWidth;
|
|
743
|
+
this.template = template;
|
|
744
|
+
this.parentTemplates = parentTemplates;
|
|
853
745
|
}
|
|
854
|
-
return
|
|
746
|
+
return EsTableColumn;
|
|
855
747
|
}());
|
|
856
748
|
|
|
857
|
-
//
|
|
749
|
+
// Angular
|
|
858
750
|
/** Classe che gestisce tutte le informaizoni relative alle colonne: visibilità, posizione, stato di pin/unpin, ecc ecc... */
|
|
859
751
|
var ColumnMetadataHandler = /** @class */ (function () {
|
|
860
752
|
/** @ignore Costruttore*/
|
|
@@ -936,7 +828,7 @@
|
|
|
936
828
|
// Di default la visibilità è quella impostata nel componente
|
|
937
829
|
if ((this_1.est.HiddenColumns || th.thVisible) && th.thIf) {
|
|
938
830
|
var previouslyPinned = !this_1.est.ColumnsList || this_1.est.ColumnsList.length == 0 ? null : this_1.est.ColumnsList.find(function (t) { return t.id == column; }) || null;
|
|
939
|
-
var toAdd = new EsTableColumn(column, null, th.thVisible, (th.thFixed || th.thGroup), previouslyPinned == null ? th.thPinned : previouslyPinned.pinned, th.thPinnedWidth, th.Template, th._thParents);
|
|
831
|
+
var toAdd = new EsTableColumn(column, null, th.thVisible, (th.thFixed || th.thGroup), previouslyPinned == null ? th.thPinned : previouslyPinned.pinned, th.thPinnable, th.thPinnedWidth, th.Template, th._thParents);
|
|
940
832
|
if (previouslyPinned)
|
|
941
833
|
toAdd.prev_index = previouslyPinned.prev_index;
|
|
942
834
|
this_1.est.TMPColumnsList.push(toAdd);
|
|
@@ -1538,200 +1430,107 @@
|
|
|
1538
1430
|
return ColumnMetadataHandler;
|
|
1539
1431
|
}());
|
|
1540
1432
|
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
var DynamicModeHandler = /** @class */ (function () {
|
|
1544
|
-
/** @ignore Costruttore*/
|
|
1545
|
-
function DynamicModeHandler(est) {
|
|
1546
|
-
this.est = est;
|
|
1547
|
-
}
|
|
1548
|
-
/**
|
|
1549
|
-
* Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica
|
|
1550
|
-
*
|
|
1551
|
-
* @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
|
|
1552
|
-
* @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
|
|
1553
|
-
* Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
|
|
1554
|
-
* @param {GenericItem} item Oggetto generico collegato a questo contesto
|
|
1555
|
-
*
|
|
1556
|
-
* @returns {any} Router link generato in base al parametri
|
|
1557
|
-
*/
|
|
1558
|
-
DynamicModeHandler.prototype.generateRouterLink = function (path, parameterProps, item) {
|
|
1559
|
-
if (this.est.DynamicTableRouterLinkCache[item._hash + path]) {
|
|
1560
|
-
return this.est.DynamicTableRouterLinkCache[item._hash + path];
|
|
1561
|
-
}
|
|
1562
|
-
else {
|
|
1563
|
-
var link = this.getRouterLink(path, parameterProps, item);
|
|
1564
|
-
this.est.DynamicTableRouterLinkCache[item._hash + path] = link;
|
|
1565
|
-
return link;
|
|
1566
|
-
}
|
|
1567
|
-
};
|
|
1568
|
-
/**
|
|
1569
|
-
* Crea un router link
|
|
1570
|
-
*
|
|
1571
|
-
* @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
|
|
1572
|
-
* @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
|
|
1573
|
-
* Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
|
|
1574
|
-
* @param {GenericItem} item Oggetto generico collegato a questo contesto
|
|
1575
|
-
*
|
|
1576
|
-
* @returns {any} Router link generato in base al parametri
|
|
1577
|
-
*/
|
|
1578
|
-
DynamicModeHandler.prototype.getRouterLink = function (path, pars, item) {
|
|
1579
|
-
for (var i = 0; i < pars.length; i++)
|
|
1580
|
-
path = path.replace('{' + i + '}', item.properties[pars[i]]);
|
|
1581
|
-
path = path.replace(/'/g, '"').replace(/ /g, '');
|
|
1582
|
-
return JSON.parse(path);
|
|
1583
|
-
};
|
|
1584
|
-
/** Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna */
|
|
1585
|
-
DynamicModeHandler.prototype.eventuallyReviewDynamicColumns = function () {
|
|
1586
|
-
// Senza oggetti esco
|
|
1587
|
-
if (!this.est.TMPBoundSource || this.est.TMPBoundSource.length == 0)
|
|
1588
|
-
return;
|
|
1589
|
-
var useGenericItems = !!this.est.TMPBoundSource[0]["properties"];
|
|
1590
|
-
if (!useGenericItems || (!this.est.FirstBind && this.est.DynamicRowColumnsDefinition && this.est.DynamicRowColumnsDefinition.length > 0))
|
|
1591
|
-
return;
|
|
1592
|
-
if ((!this.est.DynamicRowColumnsDefinition || this.est.DynamicRowColumnsDefinition.length == 0)) {
|
|
1593
|
-
var props = this.est.TMPBoundSource[0]["properties"];
|
|
1594
|
-
this.est.DynamicRowColumnsDefinition = [];
|
|
1595
|
-
for (var key in props)
|
|
1596
|
-
this.est.DynamicRowColumnsDefinition.push(new EsTableColumnsDefinition(key, key));
|
|
1597
|
-
this.est.UserDefinedDynamicCols = false;
|
|
1598
|
-
}
|
|
1599
|
-
else
|
|
1600
|
-
this.est.UserDefinedDynamicCols = true;
|
|
1601
|
-
};
|
|
1602
|
-
return DynamicModeHandler;
|
|
1603
|
-
}());
|
|
1604
|
-
|
|
1605
|
-
/** Classe contenente la gestione delle importazioni */
|
|
1606
|
-
var ExportHandler = /** @class */ (function () {
|
|
1607
|
-
/** @ignore Costruttore*/
|
|
1608
|
-
function ExportHandler(est, expExts, msgExts, utiExts, dateExts) {
|
|
1609
|
-
this.est = est;
|
|
1610
|
-
this.expExts = expExts;
|
|
1611
|
-
this.msgExts = msgExts;
|
|
1612
|
-
this.utiExts = utiExts;
|
|
1613
|
-
this.dateExts = dateExts;
|
|
1614
|
-
}
|
|
1433
|
+
/** Classe che identifica una colonna. Utilizzata in modalità "Colonne dinamiche" */
|
|
1434
|
+
var EsTableColumnsDefinition = /** @class */ (function () {
|
|
1615
1435
|
/**
|
|
1616
|
-
*
|
|
1436
|
+
* Costruttore
|
|
1617
1437
|
*
|
|
1618
|
-
* @param {string}
|
|
1438
|
+
* @param {string} description Descrizione della colonna
|
|
1439
|
+
* @param {string} propertyName Nome della proprietà del modello in cui sono contenuti i dati da visualizzare per questa colonna
|
|
1440
|
+
* @param {string} routePath Route di navigazione. Es. "['/pages/mod/mod_detail', { 'idItem': '{0}', 'idItem2' : '{1}' }]"
|
|
1441
|
+
* @param {string[]} routeParameterProperties Proprietà da bindare a **routePath** per generare la route completa.
|
|
1442
|
+
* L'indice scritto in **routePath** è l'indice di accesso a questo array. Es. ["iditem", "iditem2"]
|
|
1443
|
+
* @param {'ASC' | 'DESC' } dataOrder Ordinamento dei dati presentati in questa colonna
|
|
1444
|
+
* @param {number} columnOrder Ordinamento di questa colonna
|
|
1445
|
+
* @param {boolean} visible Visibilità o meno della colonna
|
|
1446
|
+
* @param {string} clss Classe da applicare sia ai TD che ai TH relativi a questa colonna
|
|
1447
|
+
* @param {boolean} orderable Indica se la colonna è ordinabile o no (nel senso ASC / DESC / NONE)
|
|
1448
|
+
* @param {boolean} headerWraps Indica se il testo dell'header dev'essere wrappato all'interno del th. Di default no.
|
|
1619
1449
|
*/
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
if (
|
|
1623
|
-
|
|
1624
|
-
if (
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
});
|
|
1669
|
-
});
|
|
1670
|
-
});
|
|
1671
|
-
};
|
|
1672
|
-
/** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **this.est.headers** e sui dati **this.est.data** */
|
|
1673
|
-
ExportHandler.prototype.exportExcel = function () {
|
|
1674
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1675
|
-
var iFix, workbook, sheet, header, i, h, i, row, item, i_1, h, cell, val, buffer, blob, objectUrl, fn;
|
|
1676
|
-
return __generator(this, function (_b) {
|
|
1677
|
-
switch (_b.label) {
|
|
1678
|
-
case 0:
|
|
1679
|
-
iFix = 1;
|
|
1680
|
-
workbook = new this.ExcelJS.Workbook();
|
|
1681
|
-
workbook.creator = "Ema's big Es-Table";
|
|
1682
|
-
workbook.created = new Date();
|
|
1683
|
-
sheet = workbook.addWorksheet('Data');
|
|
1684
|
-
header = sheet.getRow(1);
|
|
1685
|
-
header.font = { bold: true };
|
|
1686
|
-
this.est.headers = this.est.headers.sort(function (a, b) { return a.order - b.order; });
|
|
1687
|
-
for (i = 0; i < this.est.headers.length; i++) {
|
|
1688
|
-
h = this.est.headers[i];
|
|
1689
|
-
header.getCell(i + iFix).value = h.label;
|
|
1690
|
-
}
|
|
1691
|
-
for (i = 0; i < this.est.data.length; i++) {
|
|
1692
|
-
row = sheet.getRow(i + iFix + 1);
|
|
1693
|
-
item = this.est.data[i];
|
|
1694
|
-
for (i_1 = 0; i_1 < this.est.headers.length; i_1++) {
|
|
1695
|
-
h = this.est.headers[i_1];
|
|
1696
|
-
cell = row.getCell(i_1 + 1);
|
|
1697
|
-
val = item[h.key];
|
|
1698
|
-
if (val == null || val == undefined)
|
|
1699
|
-
cell.value = "";
|
|
1700
|
-
else {
|
|
1701
|
-
switch (h.type) {
|
|
1702
|
-
case 'date':
|
|
1703
|
-
cell.value = this.dateExts.getDateConvertion(val).toDate();
|
|
1704
|
-
case 'number':
|
|
1705
|
-
cell.value = parseFloat(val.replace(',', '.'));
|
|
1706
|
-
default:
|
|
1707
|
-
cell.value = val;
|
|
1708
|
-
}
|
|
1709
|
-
}
|
|
1710
|
-
}
|
|
1711
|
-
}
|
|
1712
|
-
return [4 /*yield*/, workbook.xlsx.writeBuffer()];
|
|
1713
|
-
case 1:
|
|
1714
|
-
buffer = _b.sent();
|
|
1715
|
-
blob = new Blob([buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;" });
|
|
1716
|
-
objectUrl = window.URL.createObjectURL(blob);
|
|
1717
|
-
fn = this.est.ExportFileName;
|
|
1718
|
-
this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + ".xlsx");
|
|
1719
|
-
return [2 /*return*/];
|
|
1720
|
-
}
|
|
1721
|
-
});
|
|
1722
|
-
});
|
|
1450
|
+
function EsTableColumnsDefinition(description, propertyName, routePath, routeParameterProperties, dataOrder, columnOrder, visible, clss, orderable, headerWraps) {
|
|
1451
|
+
if (routePath === void 0) { routePath = null; }
|
|
1452
|
+
if (routeParameterProperties === void 0) { routeParameterProperties = null; }
|
|
1453
|
+
if (dataOrder === void 0) { dataOrder = null; }
|
|
1454
|
+
if (columnOrder === void 0) { columnOrder = null; }
|
|
1455
|
+
if (visible === void 0) { visible = true; }
|
|
1456
|
+
if (clss === void 0) { clss = null; }
|
|
1457
|
+
if (orderable === void 0) { orderable = true; }
|
|
1458
|
+
if (headerWraps === void 0) { headerWraps = false; }
|
|
1459
|
+
this.description = description;
|
|
1460
|
+
this.propertyName = propertyName;
|
|
1461
|
+
this.routePath = routePath;
|
|
1462
|
+
this.routeParameterProperties = routeParameterProperties;
|
|
1463
|
+
this.dataOrder = dataOrder;
|
|
1464
|
+
this.columnOrder = columnOrder;
|
|
1465
|
+
this.visible = visible;
|
|
1466
|
+
this.clss = clss;
|
|
1467
|
+
this.orderable = orderable;
|
|
1468
|
+
this.headerWraps = headerWraps;
|
|
1469
|
+
}
|
|
1470
|
+
return EsTableColumnsDefinition;
|
|
1471
|
+
}());
|
|
1472
|
+
|
|
1473
|
+
/** Classe contenente le gestioni particolari della modalità dinamica dell'es-table */
|
|
1474
|
+
var DynamicModeHandler = /** @class */ (function () {
|
|
1475
|
+
/** @ignore Costruttore*/
|
|
1476
|
+
function DynamicModeHandler(est) {
|
|
1477
|
+
this.est = est;
|
|
1478
|
+
}
|
|
1479
|
+
/**
|
|
1480
|
+
* Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica
|
|
1481
|
+
*
|
|
1482
|
+
* @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
|
|
1483
|
+
* @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
|
|
1484
|
+
* Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
|
|
1485
|
+
* @param {GenericItem} item Oggetto generico collegato a questo contesto
|
|
1486
|
+
*
|
|
1487
|
+
* @returns {any} Router link generato in base al parametri
|
|
1488
|
+
*/
|
|
1489
|
+
DynamicModeHandler.prototype.generateRouterLink = function (path, parameterProps, item) {
|
|
1490
|
+
if (this.est.DynamicTableRouterLinkCache[item._hash + path]) {
|
|
1491
|
+
return this.est.DynamicTableRouterLinkCache[item._hash + path];
|
|
1492
|
+
}
|
|
1493
|
+
else {
|
|
1494
|
+
var link = this.getRouterLink(path, parameterProps, item);
|
|
1495
|
+
this.est.DynamicTableRouterLinkCache[item._hash + path] = link;
|
|
1496
|
+
return link;
|
|
1497
|
+
}
|
|
1723
1498
|
};
|
|
1724
1499
|
/**
|
|
1725
|
-
*
|
|
1500
|
+
* Crea un router link
|
|
1726
1501
|
*
|
|
1727
|
-
* @param {
|
|
1502
|
+
* @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
|
|
1503
|
+
* @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
|
|
1504
|
+
* Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
|
|
1505
|
+
* @param {GenericItem} item Oggetto generico collegato a questo contesto
|
|
1506
|
+
*
|
|
1507
|
+
* @returns {any} Router link generato in base al parametri
|
|
1728
1508
|
*/
|
|
1729
|
-
|
|
1730
|
-
var
|
|
1731
|
-
|
|
1732
|
-
|
|
1509
|
+
DynamicModeHandler.prototype.getRouterLink = function (path, pars, item) {
|
|
1510
|
+
for (var i = 0; i < pars.length; i++)
|
|
1511
|
+
path = path.replace('{' + i + '}', item.properties[pars[i]]);
|
|
1512
|
+
path = path.replace(/'/g, '"').replace(/ /g, '');
|
|
1513
|
+
return JSON.parse(path);
|
|
1733
1514
|
};
|
|
1734
|
-
|
|
1515
|
+
/** Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna */
|
|
1516
|
+
DynamicModeHandler.prototype.eventuallyReviewDynamicColumns = function () {
|
|
1517
|
+
// Senza oggetti esco
|
|
1518
|
+
if (!this.est.TMPBoundSource || this.est.TMPBoundSource.length == 0)
|
|
1519
|
+
return;
|
|
1520
|
+
var useGenericItems = !!this.est.TMPBoundSource[0]["properties"];
|
|
1521
|
+
if (!useGenericItems || (!this.est.FirstBind && this.est.DynamicRowColumnsDefinition && this.est.DynamicRowColumnsDefinition.length > 0))
|
|
1522
|
+
return;
|
|
1523
|
+
if ((!this.est.DynamicRowColumnsDefinition || this.est.DynamicRowColumnsDefinition.length == 0)) {
|
|
1524
|
+
var props = this.est.TMPBoundSource[0]["properties"];
|
|
1525
|
+
this.est.DynamicRowColumnsDefinition = [];
|
|
1526
|
+
for (var key in props)
|
|
1527
|
+
this.est.DynamicRowColumnsDefinition.push(new EsTableColumnsDefinition(key, key));
|
|
1528
|
+
this.est.UserDefinedDynamicCols = false;
|
|
1529
|
+
}
|
|
1530
|
+
else
|
|
1531
|
+
this.est.UserDefinedDynamicCols = true;
|
|
1532
|
+
};
|
|
1533
|
+
return DynamicModeHandler;
|
|
1735
1534
|
}());
|
|
1736
1535
|
|
|
1737
1536
|
/** Classe contenente la gestione della modalità gerarchica */
|
|
@@ -1988,7 +1787,13 @@
|
|
|
1988
1787
|
return ItemsHandler;
|
|
1989
1788
|
}());
|
|
1990
1789
|
|
|
1991
|
-
|
|
1790
|
+
/** Classe che identifica una direttiva di ordinamento per un report */
|
|
1791
|
+
var ReportOrder = /** @class */ (function () {
|
|
1792
|
+
function ReportOrder() {
|
|
1793
|
+
}
|
|
1794
|
+
return ReportOrder;
|
|
1795
|
+
}());
|
|
1796
|
+
|
|
1992
1797
|
/** Classe che gestisce la modalità Report dell'es-table utilizzata nel Metering */
|
|
1993
1798
|
var ReportModeHandler = /** @class */ (function () {
|
|
1994
1799
|
/** @ignore Costruttore */
|
|
@@ -2059,6 +1864,99 @@
|
|
|
2059
1864
|
return ReportModeHandler;
|
|
2060
1865
|
}());
|
|
2061
1866
|
|
|
1867
|
+
/** Classe che rappresenta un Gruppo con le proprie aggregazioni */
|
|
1868
|
+
var Group = /** @class */ (function () {
|
|
1869
|
+
/**
|
|
1870
|
+
* Costruttore
|
|
1871
|
+
*
|
|
1872
|
+
* @param {string} column ID della colonna raggruppata
|
|
1873
|
+
* @param {number} count Numero di elementi raggruppati sotto questa colonna
|
|
1874
|
+
* @param {string} value Valore del Gruppo
|
|
1875
|
+
*/
|
|
1876
|
+
function Group(column, count, value) {
|
|
1877
|
+
this.column = column;
|
|
1878
|
+
this.count = count;
|
|
1879
|
+
this.value = value;
|
|
1880
|
+
this.aggregations = [];
|
|
1881
|
+
}
|
|
1882
|
+
return Group;
|
|
1883
|
+
}());
|
|
1884
|
+
|
|
1885
|
+
/** Classe che rappresenta un'aggregazione */
|
|
1886
|
+
var GroupAggregation = /** @class */ (function () {
|
|
1887
|
+
/**
|
|
1888
|
+
* Costruttore
|
|
1889
|
+
*
|
|
1890
|
+
* @param {string} column ID della colonna aggregata
|
|
1891
|
+
* @param {'min' | 'max' | 'sum' } aggregation Aggregazione da effettuare su questa colonna
|
|
1892
|
+
* @param {string} value Valore dell'aggregazione
|
|
1893
|
+
*/
|
|
1894
|
+
function GroupAggregation(column, aggregation, value) {
|
|
1895
|
+
this.column = column;
|
|
1896
|
+
this.aggregation = aggregation;
|
|
1897
|
+
this.value = value;
|
|
1898
|
+
}
|
|
1899
|
+
return GroupAggregation;
|
|
1900
|
+
}());
|
|
1901
|
+
|
|
1902
|
+
/** Classe che rappresenta o un gruppo o una aggregazione su una colonna. Usata solo internamente */
|
|
1903
|
+
var GroupOrAggregation = /** @class */ (function () {
|
|
1904
|
+
/**
|
|
1905
|
+
* Costruttore
|
|
1906
|
+
*
|
|
1907
|
+
* @param {string} column Colonna su cui è presente o un gruppo o un'aggregazione
|
|
1908
|
+
* @param {'min' | 'max' | 'sum' } aggregation Aggregazione presente sulla **column**. Se questo campo è nullo significa che è un gruppo.
|
|
1909
|
+
* @param {'string' | 'date' | 'number'} datatype Tipo di dati contenuto nella colonna **column** se non c'è alcuna aggregazione è inutile, pertanto non sarà valorizzato
|
|
1910
|
+
*/
|
|
1911
|
+
function GroupOrAggregation(column, aggregation, datatype) {
|
|
1912
|
+
this.column = column;
|
|
1913
|
+
this.aggregation = aggregation;
|
|
1914
|
+
this.datatype = datatype;
|
|
1915
|
+
}
|
|
1916
|
+
return GroupOrAggregation;
|
|
1917
|
+
}());
|
|
1918
|
+
|
|
1919
|
+
/** Classe che rappresenta un separatore da inserire fra gli oggetti dell'es-table per le operazioni di paginazione dei raggruppamenti per riga */
|
|
1920
|
+
var GroupPager = /** @class */ (function () {
|
|
1921
|
+
/**
|
|
1922
|
+
* Costruttore
|
|
1923
|
+
*
|
|
1924
|
+
* @param {number} groupLevel Livello del gruppo a cui questo separatore fa riferimento
|
|
1925
|
+
* @param {string} parentKey Chiave del gruppo parent se esiste
|
|
1926
|
+
* @param {AppSearch<any>} view Vista di ricerca collegata a questo elemento
|
|
1927
|
+
* @param {'groups' | 'items'} searches Indica che cosa cerca questo separatore, se sottogruppi o oggetti
|
|
1928
|
+
*/
|
|
1929
|
+
function GroupPager(_grouplevel, _thisRoute, _parent, view, searches) {
|
|
1930
|
+
this._grouplevel = _grouplevel;
|
|
1931
|
+
this._thisRoute = _thisRoute;
|
|
1932
|
+
this._parent = _parent;
|
|
1933
|
+
this.view = view;
|
|
1934
|
+
this.searches = searches;
|
|
1935
|
+
this._sep = true;
|
|
1936
|
+
this.buttons = [];
|
|
1937
|
+
this._thisKey = _parent + "_sep";
|
|
1938
|
+
}
|
|
1939
|
+
return GroupPager;
|
|
1940
|
+
}());
|
|
1941
|
+
|
|
1942
|
+
/**
|
|
1943
|
+
* Classe che rappresenta un singolo frammento di route di un elemento gruppo o non. Un array di questi indica tutte le colonne di gruppo con i loro valori
|
|
1944
|
+
* per arrivare ad una ricerca su sottogruppi o elementi relativi
|
|
1945
|
+
*/
|
|
1946
|
+
var GroupRouteFragment = /** @class */ (function () {
|
|
1947
|
+
/**
|
|
1948
|
+
* Costruttore
|
|
1949
|
+
*
|
|
1950
|
+
* @param {string} column Colonna di raggruppamento
|
|
1951
|
+
* @param {string} value Valore della colonna di raggruppamento
|
|
1952
|
+
*/
|
|
1953
|
+
function GroupRouteFragment(column, value) {
|
|
1954
|
+
this.column = column;
|
|
1955
|
+
this.value = value;
|
|
1956
|
+
}
|
|
1957
|
+
return GroupRouteFragment;
|
|
1958
|
+
}());
|
|
1959
|
+
|
|
2062
1960
|
/** Classe che gestisce la modalità Row Grouping dell'es-table */
|
|
2063
1961
|
var RowGroupingHandler = /** @class */ (function () {
|
|
2064
1962
|
/** @ignore Costruttore */
|
|
@@ -2566,6 +2464,23 @@
|
|
|
2566
2464
|
return RowGroupingHandler;
|
|
2567
2465
|
}());
|
|
2568
2466
|
|
|
2467
|
+
/** Rappresenta un trittico formato da un array e due cache relative a tale array per un accesso estremamente veloce per tutte le operazioni del caso */
|
|
2468
|
+
var CacheTriptic = /** @class */ (function () {
|
|
2469
|
+
/**
|
|
2470
|
+
* Costruttore
|
|
2471
|
+
*
|
|
2472
|
+
* @param {Map<string, any>} cache Cache Chiave-Oggetto
|
|
2473
|
+
* @param {Map<string, number>} index_cache Cache Indice-Oggetto
|
|
2474
|
+
* @param {any[]} array Array contenente gli oggetti
|
|
2475
|
+
*/
|
|
2476
|
+
function CacheTriptic(cache, index_cache, array) {
|
|
2477
|
+
this.cache = cache;
|
|
2478
|
+
this.index_cache = index_cache;
|
|
2479
|
+
this.array = array;
|
|
2480
|
+
}
|
|
2481
|
+
return CacheTriptic;
|
|
2482
|
+
}());
|
|
2483
|
+
|
|
2569
2484
|
/** Classe che gestisce le selezioni degli oggetti */
|
|
2570
2485
|
var SelectionHandler = /** @class */ (function () {
|
|
2571
2486
|
/** @ignore Costruttore */
|
|
@@ -3293,7 +3208,7 @@
|
|
|
3293
3208
|
var EsTableComponent = /** @class */ (function () {
|
|
3294
3209
|
/** @ignore */
|
|
3295
3210
|
function EsTableComponent(ngControl, prefService, deafults, locale, lc, cdr, utilities_H, utiExts, expExts, dateExts, msgExts) {
|
|
3296
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
3211
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
3297
3212
|
this.ngControl = ngControl;
|
|
3298
3213
|
this.prefService = prefService;
|
|
3299
3214
|
this.deafults = deafults;
|
|
@@ -3382,6 +3297,8 @@
|
|
|
3382
3297
|
this.CornerMenuOptions = null;
|
|
3383
3298
|
/** Indica se dev'essere possibile effettuare il resize delle colonne */
|
|
3384
3299
|
this.ColumnsResizable = null;
|
|
3300
|
+
/** Indica se dev'essere possibile effettuare il pinning delle colonne */
|
|
3301
|
+
this.ColumnsPinnable = null;
|
|
3385
3302
|
/** Indica se dev'essere disponibile il sistema di aggiornamento automatico */
|
|
3386
3303
|
this.AutoUpdate = null;
|
|
3387
3304
|
/**
|
|
@@ -3607,6 +3524,7 @@
|
|
|
3607
3524
|
this.UseSelectionCache = this.utilities_H.InputOrDefault(this.UseSelectionCache, (_p = this.deafults) === null || _p === void 0 ? void 0 : _p.UseSelectionCache, true);
|
|
3608
3525
|
this.ShowItemGroupsColumns = this.utilities_H.InputOrDefault(this.ShowItemGroupsColumns, (_q = this.deafults) === null || _q === void 0 ? void 0 : _q.ShowItemGroupsColumns, false);
|
|
3609
3526
|
this.ArraymodeItemsPerPage = this.utilities_H.InputOrDefault(this.ArraymodeItemsPerPage, (_r = this.deafults) === null || _r === void 0 ? void 0 : _r.ArraymodeItemsPerPage, 15);
|
|
3527
|
+
this.ColumnsPinnable = this.utilities_H.InputOrDefault(this.ColumnsPinnable, (_s = this.deafults) === null || _s === void 0 ? void 0 : _s.ColumnsPinnable, true);
|
|
3610
3528
|
}
|
|
3611
3529
|
/** @ignore */
|
|
3612
3530
|
EsTableComponent.prototype.ngOnInit = function () {
|
|
@@ -3657,7 +3575,7 @@
|
|
|
3657
3575
|
EsTableComponent.prototype.ngOnChanges = function (changes) {
|
|
3658
3576
|
return __awaiter(this, void 0, void 0, function () {
|
|
3659
3577
|
var newSearchView;
|
|
3660
|
-
return __generator(this, function (
|
|
3578
|
+
return __generator(this, function (_t) {
|
|
3661
3579
|
newSearchView = changes['SearchView'];
|
|
3662
3580
|
if (newSearchView && this.SearchView)
|
|
3663
3581
|
this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);
|
|
@@ -3676,8 +3594,8 @@
|
|
|
3676
3594
|
var _a;
|
|
3677
3595
|
return __awaiter(this, void 0, void 0, function () {
|
|
3678
3596
|
var firstItemGroupOrNoGrouping, prefs, prefs;
|
|
3679
|
-
return __generator(this, function (
|
|
3680
|
-
switch (
|
|
3597
|
+
return __generator(this, function (_t) {
|
|
3598
|
+
switch (_t.label) {
|
|
3681
3599
|
case 0:
|
|
3682
3600
|
this.View = obj ? obj : null;
|
|
3683
3601
|
// Mi è arrivata l'AppSearch quindi di sicuro non ho una ricerca in progress
|
|
@@ -3727,10 +3645,10 @@
|
|
|
3727
3645
|
return [3 /*break*/, 5];
|
|
3728
3646
|
case 3: return [4 /*yield*/, this.prefService.getItem(this.ngControl.name).toPromise()];
|
|
3729
3647
|
case 4:
|
|
3730
|
-
prefs =
|
|
3648
|
+
prefs = _t.sent();
|
|
3731
3649
|
this.View.columns = (prefs === null || prefs === void 0 ? void 0 : prefs.columns) || [];
|
|
3732
3650
|
this.View.column_ordering = (prefs === null || prefs === void 0 ? void 0 : prefs.column_ordering) || [];
|
|
3733
|
-
|
|
3651
|
+
_t.label = 5;
|
|
3734
3652
|
case 5:
|
|
3735
3653
|
// La paginazione devo farla solamente quando richiedo o un gruppo principale (se sono in row grouping) o se non richiedo gruppi (in tutti lgi altri casi)
|
|
3736
3654
|
if (firstItemGroupOrNoGrouping)
|
|
@@ -3754,14 +3672,14 @@
|
|
|
3754
3672
|
return [3 /*break*/, 10];
|
|
3755
3673
|
case 8: return [4 /*yield*/, this.prefService.getItem(this.ngControl.name).toPromise()];
|
|
3756
3674
|
case 9:
|
|
3757
|
-
prefs =
|
|
3675
|
+
prefs = _t.sent();
|
|
3758
3676
|
this.arrayColumns = (prefs === null || prefs === void 0 ? void 0 : prefs.columns) || [];
|
|
3759
3677
|
this.arrayColumnOrdering = (prefs === null || prefs === void 0 ? void 0 : prefs.column_ordering) || [];
|
|
3760
|
-
|
|
3678
|
+
_t.label = 10;
|
|
3761
3679
|
case 10:
|
|
3762
3680
|
if (this.SearchView)
|
|
3763
3681
|
this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);
|
|
3764
|
-
|
|
3682
|
+
_t.label = 11;
|
|
3765
3683
|
case 11:
|
|
3766
3684
|
if (this.View && !(this.View instanceof ReportDefinition))
|
|
3767
3685
|
this.finalizeContext();
|
|
@@ -4063,7 +3981,7 @@
|
|
|
4063
3981
|
* @param {EsThDirective[]} ths Colonne della tabella
|
|
4064
3982
|
*/
|
|
4065
3983
|
EsTableComponent.prototype.evaluateRowThs = function (ths) {
|
|
4066
|
-
var
|
|
3984
|
+
var _t;
|
|
4067
3985
|
if (ths.length == 0)
|
|
4068
3986
|
return;
|
|
4069
3987
|
var columnsListCache = {};
|
|
@@ -4088,7 +4006,7 @@
|
|
|
4088
4006
|
if (!castedView.groupings)
|
|
4089
4007
|
castedView.groupings = groupAggregations;
|
|
4090
4008
|
else
|
|
4091
|
-
(
|
|
4009
|
+
(_t = castedView.groupings).push.apply(_t, __spread(groupAggregations));
|
|
4092
4010
|
this.ResearchNeeded = true;
|
|
4093
4011
|
}
|
|
4094
4012
|
}
|
|
@@ -4389,7 +4307,7 @@
|
|
|
4389
4307
|
viewProviders: [{ provide: localizations.LocalizationService, useClass: EsTableLoc }],
|
|
4390
4308
|
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
4391
4309
|
encapsulation: i0.ViewEncapsulation.None,
|
|
4392
|
-
template: "<!-- Patacchino di autoaggiornamento -->\r\n<div class=\"w-100\" *ngIf=\"AutoUpdate\">\r\n <div class=\"pull-right\">\r\n {{'Update every' | localize : lc}} <input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control est-custom-input\" type=\"text\" [(ngModel)]=\"seconds\" /> {{'second/s' | localize : lc}}\r\n </div>\r\n <div class=\"pull-right m-t-2\">\r\n <label class=\"est-switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"autoUpdate\" (ngModelChange)=\"autoUpdateChanged();\" />\r\n <div class=\"est-slider round\"></div>\r\n </label>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n\r\n<div *ngIf=\"View\" class=\"est-relative\">\r\n <div *ngIf=\"FirstBind && ShowLoadingOnBootstrap\" class=\"est-loading-box\">\r\n <div class=\"est-loading-content\">\r\n <span class=\"fa fa-spinner fa-spin\"></span> {{'Performing Table bootstrap' | localize: lc}}...\r\n </div>\r\n </div>\r\n\r\n <div class=\"est-top-pager\" *ngIf=\"PagingStyle == 'both' || PagingStyle == 'top'\">\r\n <ng-container *ngTemplateOutlet=\"pagingElement\"></ng-container>\r\n </div>\r\n\r\n <div class=\"est-top-allselect\" *ngIf=\"canSelectAll || (!reportMode && (View?.selection || arraymodeSelection)?.all)\">\r\n <span>{{ (selectedObjects == -1 ? ('All the' | localize : lc) : ((selectedObjects || 0) | number : '0.0-0' : locale)) + ' ' + ((selectedObjects == 1 ? 'Object Selected' : 'Objects Selected') | localize : lc) }}</span> \r\n <span class=\"est-link est-inline\" (click)=\"selection_H.selectAllOrResetSelection()\">{{ (View?.selection || arraymodeSelection)?.all ? ('Reset Selection' | localize : lc) : ('Select Everything' | localize : lc)}}</span>\r\n </div>\r\n\r\n <div class=\"table-responsive datatable {{ContainerClass}}\" [style.max-height.px]=\"MaxHeight\">\r\n <table class=\"{{ TableClass }} est-margin-bottom-10\" [class.est-high-density]=\"HighCellDensity\">\r\n <thead [hidden]=\"HeaderHidden || FirstBind\">\r\n <!-- Aggiungo il pezzo che gestisce la selezione di tutto se attivo da config -->\r\n <tr *ngIf=\"SelectAll || PagingStyle != 'bottom'\">\r\n <th class=\"est-no-selection\" [attr.colspan]=\"Columns.Global\" [class.est-hidden-view]=\"!canSelectAll && (reportMode || !(View?.selection || arraymodeSelection)?.all) && PagingStyle == 'bottom'\">\r\n <p class=\"est-hidden-view app-margin-bottom-0\">\u00A7</p>\r\n </th>\r\n </tr>\r\n\r\n <!-- Blocco header group -->\r\n <ng-container *ngIf=\"RowThGroups\">\r\n <tr *ngFor=\"let level of RowThGroups\">\r\n <th *ngFor=\"let cell of level\" [attr.colspan]=\"cell.Span\" \r\n [class.est-pinned-header]=\"cell.Pinned\" [class.est-col-min]=\"cell.Pinned\"\r\n [class.est-ltab-border]=\"cell.Borders\" [class.est-rtab-border]=\"cell.Borders\"\r\n class=\"est-text-center\">\r\n <ng-container *ngIf=\"cell.Pinned; Else: cell.Template\">\r\n <div class=\"est-pinned-border est-cell-group-padding\"></div>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!RowThGroups\">\r\n <tr *ngIf=\"HasHeaderGroup\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupRef\"></ng-container>\r\n <th *ngIf=\"Export\"></th>\r\n </tr>\r\n \r\n <!-- Blocco header group secondario -->\r\n <tr *ngIf=\"HasSecondaryHeaderGroup\">\r\n <ng-container *ngTemplateOutlet=\"secondaryHeaderGroupRef\"></ng-container>\r\n <th *ngIf=\"Export\"></th>\r\n </tr>\r\n </ng-container>\r\n\r\n <!-- Blocco effettivo degli header -->\r\n <tr>\r\n <!-- Aggiungo una checkbox se la selezione \u00E8 attiva -->\r\n <th class=\"est-col-min\" *ngIf=\"Selection && !HasPinnedColumns\">\r\n <input *ngIf=\"!SingleSelection\" class=\"est-pointer\" type=\"checkbox\" [disabled]=\"SelectionDisabled\" [(ngModel)]=\"globalCheck\" [ngModelOptions]=\"{'standalone': true}\" (ngModelChange)=\"globalCheckChanged();\">\r\n </th>\r\n\r\n <!-- Header che valgono per view mode e array mode -->\r\n <ng-container *ngIf=\"(viewMode || arrayMode)\">\r\n\r\n <!-- In una tabella base prendo semplicemente i th scritti dall'utente nell'HTML -->\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTHs) && !DynamicRowColumnsDefinition\">\r\n <ng-container *ngTemplateOutlet=\"headerRef\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Se ho un modello dinamico dell'oggetto creo le colonne in base alle propriet\u00E0 -->\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTHs) && DynamicRowColumnsDefinition\">\r\n <th *ngFor=\"let operation of DynamicOperations\" class=\"est-col-min est-no-side-padding\"></th>\r\n \r\n <ng-container *ngFor=\"let rowHeader of DynamicRowColumnsDefinition\">\r\n <ng-container *ngIf=\"rowHeader.visible\">\r\n <th *ngIf=\"OrderByColumn\" es-th=\"{{rowHeader.propertyName}}\" class=\"{{UserDefinedDynamicCols ? ((rowHeader.clss || '') + (rowHeader.headerWraps ? '' : ' est-nowrap')) : ' est-nowrap'}}\" [Order]=\"rowHeader.dataOrder\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.orderable\" [OrderBy]=\"OrderByColumn\" [SearchInProgress]=\"!!researchInProgress\" (onOrderChange)=\"thOrderChanged(rowHeader.propertyName, $event)\">{{rowHeader.description}}</th>\r\n <th *ngIf=\"!OrderByColumn\" es-th=\"{{rowHeader.propertyName}}\" class=\"{{UserDefinedDynamicCols ? ((rowHeader.clss || '') + (rowHeader.headerWraps ? '' : ' est-nowrap')) : ' est-nowrap'}}\" [Order]=\"rowHeader.dataOrder\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.orderable\" [OrderBy]=\"OrderByColumn\">{{rowHeader.description}}</th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Se non ho un modello dinamico ma invece delle celle custom, genero gli header in base ai row th -->\r\n <ng-container *ngIf=\"UseCustomCells && RowTHs\">\r\n <th *ngIf=\"HasPinnedColumns\" class=\"est-pinned-header est-col-min\">\r\n <div [style.width.px]=\"PinnedContainerWidth\" class=\"est-pinned-border est-simple-border-bottom\">\r\n <th class=\"est-col-min est-no-border\" *ngIf=\"Selection\" [style.width.px]=\"20\">\r\n <input *ngIf=\"!SingleSelection\" class=\"est-pointer\" type=\"checkbox\" [disabled]=\"SelectionDisabled\" [(ngModel)]=\"globalCheck\" [ngModelOptions]=\"{'standalone': true}\" (ngModelChange)=\"globalCheckChanged();\">\r\n </th>\r\n <ng-container *ngFor=\"let rowHeader of RowTHs\">\r\n <th *ngIf=\"rowHeader && rowHeader.Visible && rowHeader.Pinned\" [style.width.px]=\"rowHeader.PinnedWidth\" es-th=\"{{rowHeader.ID}}\" \r\n class=\"{{rowHeader.Class || ''}}\" \r\n [class.est-pinned-internal-header]=\"true\" \r\n [class.est-no-border]=\"true\" \r\n [class.est-nowrap]=\"!rowHeader.Wrap\" \r\n [Pinned]=\"true\" [Fixed]=\"rowHeader.Fixed\" [Order]=\"rowHeader.Order\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.Orderable\" [OrderBy]=\"OrderByColumn\" [SearchInProgress]=\"!!researchInProgress\" (onUnpinning)=\"columnMetadata_H.unpinColumn($event)\" (onOrderChange)=\"OrderByColumn && thOrderChanged(rowHeader.ID, $event)\">\r\n <ng-container *ngIf=\"rowHeader.Template\"><ng-container *ngTemplateOutlet=\"rowHeader.Template;\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowHeader.Template\">{{rowHeader.Content}}</span>\r\n </th>\r\n </ng-container>\r\n </div>\r\n </th>\r\n <ng-container *ngFor=\"let rowHeader of RowTHs\">\r\n <th *ngIf=\"rowHeader && rowHeader.Visible && !rowHeader.Pinned\" es-th=\"{{rowHeader.ID}}\" class=\"{{rowHeader.Class || ''}}\" [class.est-ltab-border]=\"rowHeader.LeftBorder\" [class.est-rtab-border]=\"rowHeader.RightBorder\" [class.est-nowrap]=\"!rowHeader.Wrap\" [Order]=\"rowHeader.Order\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.Orderable\" [OrderBy]=\"OrderByColumn\" [SearchInProgress]=\"!!researchInProgress\" (onOrderChange)=\"OrderByColumn && thOrderChanged(rowHeader.ID, $event)\">\r\n <ng-container *ngIf=\"rowHeader.Template\"><ng-container *ngTemplateOutlet=\"rowHeader.Template;\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowHeader.Template\">{{rowHeader.Content}}</span>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!--Casistica in cui ho il setup proveniente da un report. Gli header sono definiti da come \u00E8 fatto il report-->\r\n <ng-container *ngIf=\"reportMode\">\r\n <th [style.color]=\"clm.color\" *ngFor=\"let clm of ReportValues.columns\" class=\"est-no-selection est-pointer est-nowrap\" (click)=\"reportMode_H.setupNextOrderAndSearch(clm)\">\r\n {{clm.description}}<span class=\"fa\" [class.fa-chevron-down]=\"clm.order == 'DESC'\" [class.fa-chevron-up]=\"clm.order == 'ASC'\"></span>\r\n </th>\r\n </ng-container>\r\n\r\n <!--Per l'eliminazione mi serve un header aggiuntivo-->\r\n <th *ngIf=\"Removal\" [class.est-right-9]=\"Export || HiddenColumns\" class=\"est-col-min est-sticky-last-column\"><span class=\"fa fa-trash\"></span></th>\r\n\r\n <!--Per l'esportazione mi serve l'header extra da cui faccio uscire i 3 pallocchi-->\r\n <th *ngIf=\"Export || HiddenColumns || ColumnsOrdering || CornerMenuOptions\" class=\"est-table-dotted-menu est-sticky-last-column est-col-min text-sm-center\">\r\n \r\n <!-- Link nascosto che serve a scaricare il file -->\r\n <a *ngIf=\"headers\" hidden #exportDownloader csvLink [data]=\"data\" [headers]=\"headers\" [delimiter]=\"';'\" [filename]=\"ExportFileName.endsWith('.xlsx') ? ExportFileName.replace('.xlsx', '.csv') : ExportFileName.endsWith('.csv') ? ExportFileName : ExportFileName + '.csv'\"></a>\r\n\r\n <!-- Blocco con i 3 pallocchi che tira fuori il context menu delle operazioni -->\r\n <div class=\"btn-group\" container=\"body\" placement=\"bottom right\" dropdown #dropdown=\"bs-dropdown\" [autoClose]=\"true\">\r\n <span dropdownToggle class=\"fa fa-ellipsis-v est-fs-18 est-pointer est-padding-3\"></span>\r\n\r\n <div *dropdownMenu class=\"dropdown-menu dropdown-menu-right est-bring-to-front-strong\">\r\n <div class=\"est-pointer\">\r\n <a class=\"dropdown-item\" *ngIf=\"HiddenColumns || ColumnsOrdering\" (click)=\"columnMetadata_H.resetColumnVisSelection(); changeColumnVisibilityModal.show();\">\r\n <ng-container *ngIf=\"!HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Order' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && !ColumnsOrdering\">\r\n {{'Columns Visibility' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Visibility and Order' | localize : lc}}\r\n </ng-container>\r\n </a>\r\n <a class=\"dropdown-item\" *ngIf=\"Export && CSVExport\" (click)=\"export_H.tryExport('CSV')\">{{'Export View' | localize : lc}} (CSV)</a>\r\n <a class=\"dropdown-item\" *ngIf=\"Export && XLSXExport\" (click)=\"export_H.tryExport('XLSX')\">{{'Export View' | localize : lc}} (XLSX)</a>\r\n <a class=\"dropdown-item\" *ngFor=\"let option of CornerMenuOptions\" (click)=\"cornerActionClicked(option.id)\">{{option.description}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n \r\n <!-- Valido per modalit\u00E0 View o Array. Se sono in report mode il body \u00E8 creato in altro modo -->\r\n <tbody [hidden]=\"BodyHidden || FirstBind\" *ngIf=\"(arrayMode || viewMode)\">\r\n <!--Con selection attiva richiamo il template che gestisce il context menu-->\r\n <ng-container *ngIf=\"Selection\">\r\n <ng-container *ngTemplateOutlet=\"TBodySelection; context: { $implicit: { selDisabled: arrayMode ? false : SelectionDisabled, sel: Selection }}\"></ng-container>\r\n </ng-container>\r\n\r\n <!--Senza selection richiamo il template che NON gestisce il context menu-->\r\n <ng-container *ngIf=\"!Selection\">\r\n <ng-container *ngTemplateOutlet=\"TBody\"></ng-container>\r\n </ng-container>\r\n </tbody>\r\n\r\n <!-- Per la modalit\u00E0 a report c'\u00E8 un body particolare semi-dinamico -->\r\n <tbody [hidden]=\"BodyHidden\" *ngIf=\"reportMode\">\r\n <tr *ngFor=\"let row of ReportValues.rows; let even = even;\">\r\n <td class=\"est-nowrap\" *ngFor=\"let val of row.values\">{{val}}</td>\r\n <td class=\"est-sticky-last-column{{even && !Hierarchy ? '-alt' : ''}}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div *ngIf=\"PagingStyle == 'both' || PagingStyle == 'bottom'\">\r\n <ng-container *ngTemplateOutlet=\"pagingElement\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<!-- Template che contiene tutte le info di paginazione in modo da poterlo replicare anche sopra -->\r\n<ng-template #pagingElement>\r\n <ng-container *ngIf=\"!FirstBind\">\r\n <!-- Pulsanti avanti-indietro di paginazione -->\r\n <div *ngIf=\"PagerOptions.ShowPaging && PagerOptions.ShowButtons && (PagerOptions.PagerCount > 10 || PagerOptions.PagerCount == -1)\" class=\"pull-right btn-toolbar\">\r\n <ng-container *ngIf=\"(!reportMode || View?.pagingavailable) && (!arrayMode || SearchView)\">\r\n <ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { Margin: true, ATP: addToPage.bind(this), GTP: goToPage.bind(this), Array: arrayPulsanti }}\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"arrayMode && UseArrayModePaging && !SearchView\">\r\n <ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { Margin: true, ATP: arrayAddToPage.bind(this), GTP: arrayGoToPage.bind(this), Array: arrayPulsanti }}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <!-- Paginatore dove appare la count e le opzioni di paginazione -->\r\n <div class=\"pull-right\" *ngIf=\"PagerOptions.ShowCount || PagerOptions.ShowPagingOptions\">\r\n <div class=\"est-mt-min-5\" *ngIf=\"PagerOptions.ShowPaging\">\r\n <app-paging *ngIf=\"!PagerOptions.UsesView\" [CountLabel]=\"CountLabel\" [ShowPaging]=\"PagerOptions.ShowPagingOptions\" [ShowCount]=\"PagerOptions.ShowCount\" [PagerCount]=\"PagerOptions.PagerCount\" [WarnOnAll]=\"false\" [CurrentPageSize]=\"ArraymodeItemsPerPage\" (pagingSelected)=\"items_H.refreshPaging($event)\"></app-paging>\r\n <app-paging *ngIf=\"PagerOptions.UsesView\" [CountLabel]=\"CountLabel\" [ShowPaging]=\"PagerOptions.ShowPagingOptions\" [ShowCount]=\"PagerOptions.ShowCount\" [PagerCount]=\"PagerOptions.PagerCount\" [GroupMode]=\"PagerOptions.Searches == 'groups'\" [AllSearch]=\"AllSearch\" [View]=\"PagerOptions.View\" (pagingSelected)=\"onItemsPerPageChanged($event);\"></app-paging>\r\n </div>\r\n <div *ngIf=\"reportMode && !PagerOptions.ShowPaging\"><em>{{'Paging options are not available for this report' | localize: lc}}</em></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<!-- Template che contiene i pulsanti per cambiare pagina -->\r\n<ng-template #pagingButtons let-options>\r\n <div class=\"est-flex\" [class.est-margin-left-50]=\"options.Margin\">\r\n <a class=\"btn\" class=\"est-page-prev app-pointer\" (click)=\"options.ATP(-1, options.separator)\"><span class=\"fa fa-chevron-left\"></span></a>\r\n <div *ngIf=\"options.Array\" class=\"est-inline\"><a *ngFor=\"let p of options.Array\" class=\"btn est-page-sel {{p.cssClass}}\" (click)=\"options.GTP(p.val, options.separator)\">{{p.val}}</a></div>\r\n <a class=\"btn\" class=\"est-page-next app-pointer\" (click)=\"options.ATP(1, options.separator)\"><span class=\"fa fa-chevron-right\"></span></a>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Questi due template rappresentano effettivamente il body della tabella. essendo il tr l'unica cosa che davvero cambia, il resto \u00E8 templatizzato -->\r\n<ng-template #TBodySelection let-templateOptions>\r\n <ng-container *ngFor=\"let item of boundSource; let even = even; let i=index; trackBy: bodyTrackBy\">\r\n <tr *ngIf=\"item._visible || (!Hierarchy && !ArrayGrouping)\" \r\n [class]=\"item._rowClass ? item._rowClass : ''\" \r\n [class.est-line-through]=\"item.removed || item.deleted\" \r\n [class.est-pointer]=\"!item.locked\" \r\n [class.est-white-selected]=\"item._selected && !item.locked\"\r\n [class.est-rg]=\"item._group\"\r\n [class.est-rg-sep]=\"item._sep\"\r\n [contextMenu]=\"!item.locked ? (ContextMenu || emptyMenu) : emptyMenu\" [contextMenuSubject]=\"item\"\r\n (click)=\"(!item.locked && !item._sep && !item._group && handleClick($event, item)) || item._group && handleGroupClick(item)\">\r\n\r\n <td *ngIf=\"!item.locked && !item._sep && !HasPinnedColumns\">\r\n <input type=\"checkbox\" \r\n [disabled]=\"templateOptions.selDisabled\" \r\n [class.est-pointer]=\"!item.locked\"\r\n [(ngModel)]=\"item._selected\" name=\"check{{i}}\" \r\n (click)=\"$event.stopPropagation(); handleClick($event, item);\">\r\n </td>\r\n <td *ngIf=\"(item.locked || item._sep) && !HasPinnedColumns\"></td>\r\n\r\n <ng-container *ngIf=\"item._sep\"><ng-container *ngTemplateOutlet=\"groupPager; context: { $implicit: item }\"></ng-container> </ng-container>\r\n\r\n <ng-container *ngIf=\"!item._sep\">\r\n <ng-container *ngTemplateOutlet=\"basicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"dynamicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customCells; context: { $implicit: item, templateOptions: templateOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"bodyDeleteAndExport; context: { $implicit: { even: even, item: item }}\"></ng-container>\r\n </tr>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #TBody>\r\n <ng-container *ngFor=\"let item of boundSource; let even = even;\">\r\n <tr *ngIf=\"item._visible || !Hierarchy\" \r\n [class]=\"item._rowClass ? item._rowClass : ''\" \r\n [class.est-line-through]=\"item.removed || item.deleted\"\r\n [class.est-rg]=\"item._group\"\r\n [class.est-rg-sep]=\"item._sep\"\r\n (click)=\"item._group && handleGroupClick(item)\">\r\n\r\n <ng-container *ngIf=\"item._sep\"><ng-container *ngTemplateOutlet=\"groupPager; context: { $implicit: item }\"></ng-container></ng-container>\r\n\r\n <ng-container *ngIf=\"!item._sep\">\r\n <ng-container *ngTemplateOutlet=\"basicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"dynamicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customCells; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"bodyDeleteAndExport; context: { $implicit: { even: even, item: item }}\"></ng-container>\r\n </tr>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #groupPager let-item>\r\n <td class=\"est-pinned-body \" *ngIf=\"HasPinnedColumns\"><div class=\"est-pinned-border est-cell-group-padding\"></div></td>\r\n <td *ngIf=\"item._grouplevel > 1\" [attr.colspan]=\"item._grouplevel-1\"></td>\r\n <td [attr.colspan]=\"Columns.VisibleUnpinned - (item._grouplevel > 0 ? item._grouplevel - 1 : 0)\">\r\n <div class=\"est-rg-sep-flex-right\" *ngIf=\"RowGroupingPagingStyle == 'right'\">\r\n <div class=\"est-rg-page\"><ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { separator: item, ATP: addToPageGroup.bind(this), GTP: goToPageGroup.bind(this), Array: item.buttons }}\"></ng-container></div>\r\n <div class=\"est-rg-ipp\" *ngIf=\"(item.searches == 'groups' ? item.view.groupcount : item.view.objectcount) > 10\"><app-paging [CountLabel]=\"CountLabel\" [AllSearch]=\"AllSearch\" [GroupMode]=\"item.searches == 'groups'\" [PagerCount]=\"item.searches == 'groups' ? item.view.groupcount : item.view.objectcount\" [View]=\"item.view\" (pagingSelected)=\"onGroupItemsPerPageChanged(item, $event);\"></app-paging></div>\r\n </div>\r\n\r\n <div class=\"est-rg-sep-flex-left\" *ngIf=\"RowGroupingPagingStyle == 'left'\">\r\n <div class=\"est-rg-ipp\"><app-paging [AllSearch]=\"AllSearch\" [CountLabel]=\"CountLabel\" [GroupMode]=\"item.searches == 'groups'\" [PagerCount]=\"item.searches == 'groups' ? item.view.groupcount : item.view.objectcount\" [View]=\"item.view\" (pagingSelected)=\"onGroupItemsPerPageChanged(item, $event);\"></app-paging></div>\r\n <div class=\"est-rg-page\" *ngIf=\"(item.searches == 'groups' ? item.view.groupcount : item.view.objectcount) > 10\"><ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { separator: item, ATP: addToPageGroup.bind(this), GTP: goToPageGroup.bind(this), Array: item.buttons }}\"></ng-container></div>\r\n </div>\r\n </td>\r\n</ng-template>\r\n\r\n<!-- Questo template contiene la print condizionale su tabelle semplici, con header e body scritti a manazza -->\r\n<ng-template #basicColumns let-item>\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTDs) && !DynamicRowColumnsDefinition\">\r\n <ng-container *ngTemplateOutlet=\"bodyRef; context : {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<!-- Questo template contiene la print condizionale su tabelle definite in maniera dinamica dal modello -->\r\n<ng-template #dynamicColumns let-item>\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTDs) && DynamicRowColumnsDefinition\">\r\n <ng-container *ngFor=\"let operation of DynamicOperations; let first = first; let last = last;\">\r\n <ng-container *ngIf=\"!operation.conditionField || (item.properties[operation.conditionField] == operation.conditionValue)\">\r\n <td [class.est-no-right-padding]=\"last\" [class.est-no-left-padding]=\"!first\" class=\"est-col-min\"><span title=\"{{operation.title}}\" class=\"{{operation.iconClass}} est-pointer\" (click)=\"dynamicOperation(item, operation.id)\">{{operation.text}}</span></td>\r\n </ng-container>\r\n <ng-container *ngIf=\"operation.conditionField && (item.properties[operation.conditionField] != operation.conditionValue)\">\r\n <td class=\"est-col-min est-no-side-padding\"></td>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngFor=\"let rowItem of DynamicRowColumnsDefinition\">\r\n <ng-container *ngIf=\"rowItem.routePath && rowItem.visible\">\r\n <td es-td=\"{{rowItem.propertyName}}\" class=\"{{UserDefinedDynamicCols ? rowItem.clss : 'est-nowrap'}}\" [Internal]=\"false\" [Context]=\"item._hash\">\r\n <a [routerLink]=\"dynamicMode_H.generateRouterLink(rowItem.routePath, rowItem.routeParameterProperties, item)\" class=\"est-link\" [innerHTML]=\"item.properties[rowItem.propertyName]\"></a>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"!rowItem.routePath && rowItem.visible\">\r\n <ng-container *ngTemplateOutlet=\"findEsTd(rowItem.propertyName) || defaultEsTd; context: { $implicit: item.properties[rowItem.propertyName], rowItem : rowItem, item : item }\"> </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultEsTd let-value let-rowItem='rowItem' let-item='item'>\r\n <td es-td=\"{{rowItem.propertyName}}\" class=\"{{UserDefinedDynamicCols ? rowItem.clss : 'est-nowrap'}}\" [Internal]=\"false\" [Context]=\"item._hash\">\r\n {{value}}\r\n </td>\r\n</ng-template>\r\n\r\n<!-- Questo template contiene la print condizionale delle celle custom se configurate -->\r\n<ng-template #customCells let-item let-opt=\"templateOptions\">\r\n <ng-container *ngIf=\"UseCustomCells && RowTDs\">\r\n\r\n <td *ngIf=\"HasPinnedColumns\" class=\"est-pinned-body est-col-min\" [class.est-white-selected]=\"item._selected\">\r\n <div [style.width.px]=\"PinnedContainerWidth\" class=\"est-pinned-border\">\r\n <td *ngIf=\"!item.locked && !item._sep && Selection\" class=\"est-no-border est-col-min\" [style.width.px]=\"20\">\r\n <input type=\"checkbox\" [disabled]=\"opt.selDisabled\" [class.est-pointer]=\"!item.locked\" [(ngModel)]=\"item._selected\" name=\"check{{item._hash}}\" (click)=\"$event.stopPropagation(); handleClick($event, item);\">\r\n </td>\r\n <td class=\"est-no-border est-col-min\" *ngIf=\"(item.locked || item._sep) && Selection\" [style.width.px]=\"20\"></td>\r\n\r\n <ng-container *ngFor=\"let rowItem of RowTDs[item._hash]; let i = index\">\r\n <td *ngIf=\"rowItem && rowItem.Pinned\" [style.width.px]=\"rowItem.PinnedWidth\" es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-no-border]=\"true\" [class.est-rg-hdr]=\"rowItem.GroupHeader\" [class.est-rg-agg]=\"rowItem.GroupAggregation\" \r\n [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\"><ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container></ng-container>\r\n <ng-container *ngIf=\"rowItem.Template\"><ng-container *ngTemplateOutlet=\"rowItem.Template; context: { $implicit: item }\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowItem.Template\">{{rowItem.Content}}</span>\r\n </td>\r\n </ng-container>\r\n </div>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let rowItem of RowTDs[item._hash]; let i = index\">\r\n <ng-container *ngIf=\"rowItem && !rowItem.Pinned\">\r\n\r\n <!-- Casistica senza bodyRef, quindi con direttive per i td -->\r\n <ng-container *ngIf=\"!bodyRef && rowItem.Visible\">\r\n <td es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-ltab-border]=\"rowItem.LeftBorder\" [class.est-rtab-border]=\"rowItem.RightBorder\" [class.est-rg-hdr]=\"rowItem.GroupHeader\" [class.est-rg-agg]=\"rowItem.GroupAggregation\" \r\n [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\"><ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container></ng-container>\r\n <ng-container *ngIf=\"rowItem.Template\"><ng-container *ngTemplateOutlet=\"rowItem.Template; context: { $implicit: item }\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowItem.Template\">{{rowItem.Content}}</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Casistica bodyRef, quindi con componenti per i td (RouterLink) DEPRECATO -->\r\n <ng-container *ngIf=\"rowItem.RouterLink && rowItem.Visible && bodyRef\">\r\n <td es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\">\r\n <ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <a [routerLink]='rowItem.RouterLink' class=\"est-link\" [innerHTML]=\"rowItem.Content\"></a>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Casistica bodyRef, quindi con componenti per i td (NON RouterLink) DEPRECATO -->\r\n <ng-container *ngIf=\"!rowItem.RouterLink && rowItem.Visible && bodyRef\">\r\n <td es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\">\r\n <ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowItem.Template\">\r\n <ng-container *ngTemplateOutlet=\"rowItem.Template; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <span *ngIf=\"!rowItem.Template\" [innerHTML]=\"rowItem.Content\"></span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #HierarchyNavigator let-item>\r\n <span *ngIf=\"!item.parent\" class=\"fa fa-chevron-down\" style=\"visibility:hidden\"></span>\r\n <span *ngIf=\"item.parent && item._expanded\" class=\"fa fa-chevron-down est-pointer est-no-selection\" (click)=\"hierarchyMode_H.collapseParent(item[this.OwnKey])\"></span>\r\n <span *ngIf=\"item.parent && !item._expanded\" class=\"fa fa-chevron-up est-pointer est-no-selection\" (click)=\"hierarchyMode_H.expandParent(item[this.OwnKey])\"></span>\r\n \r\n</ng-template>\r\n\r\n<!-- Questo template contiene i pulsanti di eliminazione/undo eliminazione ed esportazione che vanno in fondo ad un record edlla tabella -->\r\n<ng-template #bodyDeleteAndExport let-options>\r\n <ng-container *ngIf=\"Removal && !RemovalCondition\">\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"!(options.item.removed || options.item.deleted)\"><span class=\"fa fa-remove est-pointer text-danger\" [hidden]=\"options.item.removable != undefined && !options.item.removable\" (click)=\"onRemoval.emit(options.item)\"></span></td>\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"(options.item.removed || options.item.deleted)\"><span class=\"fa fa-undo text-warning est-pointer\" (click)=\"onAbortRemoval.emit(options.item)\"></span></td>\r\n </ng-container>\r\n <ng-container *ngIf=\"Removal && RemovalCondition\">\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"!(options.item.removed || options.item.deleted) && options.item[RemovalCondition]\"><span class=\"fa fa-remove est-pointer text-danger\" [hidden]=\"options.item.removable != undefined && !options.item.removable\" (click)=\"onRemoval.emit(options.item)\"></span></td>\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"(options.item.removed || options.item.deleted) && options.item[RemovalCondition]\"><span class=\"fa fa-undo text-warning est-pointer\" (click)=\"onAbortRemoval.emit(options.item)\"></span></td>\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"!options.item[RemovalCondition]\"><span class=\"fa fa-remove est-hidden-view\"></span></td>\r\n </ng-container>\r\n <td *ngIf=\"Export || HiddenColumns || CornerMenuOptions\" class=\"est-sticky-last-column{{options.even && !Hierarchy ? '-alt' : ''}}\"></td>\r\n</ng-template>\r\n\r\n<!-- Context menu vuoto default per tutte le tabella che non ce l'hanno, in modo che al click destro appaia \"nessuna op disponibile\" -->\r\n<context-menu #emptyMenu>\r\n <ng-template contextMenuItem>\r\n <span>\r\n <em>{{'No operations available' | localize : lc}}...</em>\r\n </span>\r\n </ng-template>\r\n</context-menu>\r\n\r\n<!-- Modal per cambiare posizione e visibilit\u00E0 delle colonne dell'es-table -->\r\n<div bsModal #changeColumnVisibilityModal=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" cdkDrag>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header est-pointer\" cdkDragHandle>\r\n <h5 class=\"modal-title pull-left\">\r\n <ng-container *ngIf=\"!HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Order' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && !ColumnsOrdering\">\r\n {{'Columns Visibility' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Visibility and Order' | localize : lc}}\r\n </ng-container>\r\n </h5>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"changeColumnVisibilityModal.hide();\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div *ngIf=\"!TMPColumnsList || TMPColumnsList.length == 0\" class=\"card card-info est-padding-10 est-margin-bottom-0\">\r\n {{'There are no columns configured to be hidden/shown in this view' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"TMPColumnsList && TMPColumnsList.length > 0\" style=\"max-height:500px; overflow-y:auto\">\r\n <!--Aaaaaaah la tristezza... qui mi servirebbe l'es-table per facilitare la selezione multipla ecc... peccato che se la linko qui entro in un loop impressionante-->\r\n <table class=\"table table-striped table-sm est-margin-bottom-0\">\r\n <thead>\r\n <tr>\r\n <th class=\"est-col-min\" *ngIf=\"HiddenColumns\">\r\n <input class=\"est-pointer\" type=\"checkbox\" [(ngModel)]=\"globalColVisCheck\" [ngModelOptions]=\"{'standalone': true}\" (ngModelChange)=\"columnMetadata_H.globalColVisCheckChanged();\">\r\n </th>\r\n <!-- <th class=\"est-col-min\" *ngIf=\"ColumnsOrdering\"></th> -->\r\n <th class=\"est-col-min est-nowrap\">{{'Column Name' | localize : lc}}</th>\r\n <!--Filler-->\r\n <th></th>\r\n <!-- Pinner -->\r\n <th *ngIf=\"DirectivesBased\" class=\"est-col-min\"></th>\r\n </tr>\r\n </thead>\r\n <tbody \r\n cdkDropList \r\n [cdkDropListData]=\"TMPColumnsList\" \r\n (cdkDropListDropped)=\"columnMetadata_H.columnReordered($event)\" \r\n [cdkDropListSortPredicate]=\"columnMetadata_H.sortPredicate.bind(this.columnMetadata_H)\"\r\n class=\"est-dropbox\">\r\n\r\n <tr *ngFor=\"let item of TMPColumnsList; let i = index; let last = last\" \r\n class=\"est-pointer est-droplist\" \r\n [class.est-white-selected]=\"lastSelectedItemID == item.id\" \r\n [class.est-no-selection]=\"!item.visible\"\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"!ColumnsOrdering || item.fixed || item.pinned\">\r\n\r\n <td *ngIf=\"HiddenColumns\">\r\n <input type=\"checkbox\" [class.est-hidden-view]=\"item.fixed\" class=\"est-pointer\" [(ngModel)]=\"item.visible\" name=\"visible{{i}}\" (ngModelChange)=\"columnMetadata_H.updateGlobalColVisCheck();\" />\r\n </td>\r\n <!-- <td class=\"est-nowrap\" *ngIf=\"ColumnsOrdering\">\r\n <span class=\"fa fa-arrow-up\" [class.est-hidden-view]=\"item.fixed || item.pinned\" (click)=\"lastSelectedItemID = item.id; i != 0 && !item.fixed && columnMetadata_H.sendUp(item); $event.stopPropagation();\"></span>\r\n <span class=\"fa fa-arrow-down\" [class.est-hidden-view]=\"item.fixed || item.pinned\" (click)=\"lastSelectedItemID = item.id; !last && !item.fixed && columnMetadata_H.sendDown(item); $event.stopPropagation();\"></span>\r\n </td> -->\r\n <td class=\"est-nowrap drag-visible\" (click)=\"columnMetadata_H.columnClicked(item);\">\r\n <ng-container *ngIf=\"item.template\">\r\n <!-- Padri -->\r\n <span *ngIf=\"item.parentTemplates && item.parentTemplates.length > 0\" class=\"est-fw-bold est-fs-13\">\r\n ( \r\n <ng-container *ngFor=\"let parent of item.parentTemplates; let last=last\">\r\n <ng-container *ngTemplateOutlet=\"parent\"></ng-container>\r\n <span *ngIf=\"!last\"> - </span>\r\n </ng-container>\r\n )\r\n </span>\r\n <!-- Template header originale -->\r\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!item.template\">{{item.description}}</ng-container>\r\n </td>\r\n <!--Filler-->\r\n <td (click)=\"columnMetadata_H.columnClicked(item);\"></td>\r\n <!-- Pinner -->\r\n <td *ngIf=\"DirectivesBased\"><span *ngIf=\"!item.fixed\" class=\"fa fa-thumb-tack\" [class.text-success]=\"item.pinned\" (click)=\"columnMetadata_H.pinOrUnpinColumn(item)\"></span></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary est-margin-right-10\" (click)=\"lastSelectedItemID = null; changeColumnVisibilityModal.hide();\">{{'Close' | localize : lc}}</button>\r\n <button type=\"button\" [disabled]=\"!TMPColumnsList || TMPColumnsList.length == 0\" class=\"btn btn-primary\" (click)=\"columnMetadata_H.confirmColumnVisibilitySelection() && changeColumnVisibilityModal.hide()\">{{'Confirm' | localize : lc}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>",
|
|
4310
|
+
template: "<!-- Patacchino di autoaggiornamento -->\r\n<div class=\"w-100\" *ngIf=\"AutoUpdate\">\r\n <div class=\"pull-right\">\r\n {{'Update every' | localize : lc}} <input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control est-custom-input\" type=\"text\" [(ngModel)]=\"seconds\" /> {{'second/s' | localize : lc}}\r\n </div>\r\n <div class=\"pull-right m-t-2\">\r\n <label class=\"est-switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"autoUpdate\" (ngModelChange)=\"autoUpdateChanged();\" />\r\n <div class=\"est-slider round\"></div>\r\n </label>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n\r\n<div *ngIf=\"View\" class=\"est-relative\">\r\n <div *ngIf=\"FirstBind && ShowLoadingOnBootstrap\" class=\"est-loading-box\">\r\n <div class=\"est-loading-content\">\r\n <span class=\"fa fa-spinner fa-spin\"></span> {{'Performing Table bootstrap' | localize: lc}}...\r\n </div>\r\n </div>\r\n\r\n <div class=\"est-top-pager\" *ngIf=\"PagingStyle == 'both' || PagingStyle == 'top'\">\r\n <ng-container *ngTemplateOutlet=\"pagingElement\"></ng-container>\r\n </div>\r\n\r\n <div class=\"est-top-allselect\" *ngIf=\"canSelectAll || (!reportMode && (View?.selection || arraymodeSelection)?.all)\">\r\n <span>{{ (selectedObjects == -1 ? ('All the' | localize : lc) : ((selectedObjects || 0) | number : '0.0-0' : locale)) + ' ' + ((selectedObjects == 1 ? 'Object Selected' : 'Objects Selected') | localize : lc) }}</span> \r\n <span class=\"est-link est-inline\" (click)=\"selection_H.selectAllOrResetSelection()\">{{ (View?.selection || arraymodeSelection)?.all ? ('Reset Selection' | localize : lc) : ('Select Everything' | localize : lc)}}</span>\r\n </div>\r\n\r\n <div class=\"table-responsive datatable {{ContainerClass}}\" [style.max-height.px]=\"MaxHeight\">\r\n <table class=\"{{ TableClass }} est-margin-bottom-10\" [class.est-high-density]=\"HighCellDensity\">\r\n <thead [hidden]=\"HeaderHidden || FirstBind\">\r\n <!-- Aggiungo il pezzo che gestisce la selezione di tutto se attivo da config -->\r\n <tr *ngIf=\"SelectAll || PagingStyle != 'bottom'\">\r\n <th class=\"est-no-selection\" [attr.colspan]=\"Columns.Global\" [class.est-hidden-view]=\"!canSelectAll && (reportMode || !(View?.selection || arraymodeSelection)?.all) && PagingStyle == 'bottom'\">\r\n <p class=\"est-hidden-view app-margin-bottom-0\">\u00A7</p>\r\n </th>\r\n </tr>\r\n\r\n <!-- Blocco header group -->\r\n <ng-container *ngIf=\"RowThGroups\">\r\n <tr *ngFor=\"let level of RowThGroups\">\r\n <th *ngFor=\"let cell of level\" [attr.colspan]=\"cell.Span\" \r\n [class.est-pinned-header]=\"cell.Pinned\" [class.est-col-min]=\"cell.Pinned\"\r\n [class.est-ltab-border]=\"cell.Borders\" [class.est-rtab-border]=\"cell.Borders\"\r\n class=\"est-text-center\">\r\n <ng-container *ngIf=\"cell.Pinned; Else: cell.Template\">\r\n <div class=\"est-pinned-border est-cell-group-padding\"></div>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!RowThGroups\">\r\n <tr *ngIf=\"HasHeaderGroup\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupRef\"></ng-container>\r\n <th *ngIf=\"Export\"></th>\r\n </tr>\r\n \r\n <!-- Blocco header group secondario -->\r\n <tr *ngIf=\"HasSecondaryHeaderGroup\">\r\n <ng-container *ngTemplateOutlet=\"secondaryHeaderGroupRef\"></ng-container>\r\n <th *ngIf=\"Export\"></th>\r\n </tr>\r\n </ng-container>\r\n\r\n <!-- Blocco effettivo degli header -->\r\n <tr>\r\n <!-- Aggiungo una checkbox se la selezione \u00E8 attiva -->\r\n <th class=\"est-col-min\" *ngIf=\"Selection && !HasPinnedColumns\">\r\n <input *ngIf=\"!SingleSelection\" class=\"est-pointer\" type=\"checkbox\" [disabled]=\"SelectionDisabled\" [(ngModel)]=\"globalCheck\" [ngModelOptions]=\"{'standalone': true}\" (ngModelChange)=\"globalCheckChanged();\">\r\n </th>\r\n\r\n <!-- Header che valgono per view mode e array mode -->\r\n <ng-container *ngIf=\"(viewMode || arrayMode)\">\r\n\r\n <!-- In una tabella base prendo semplicemente i th scritti dall'utente nell'HTML -->\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTHs) && !DynamicRowColumnsDefinition\">\r\n <ng-container *ngTemplateOutlet=\"headerRef\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Se ho un modello dinamico dell'oggetto creo le colonne in base alle propriet\u00E0 -->\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTHs) && DynamicRowColumnsDefinition\">\r\n <th *ngFor=\"let operation of DynamicOperations\" class=\"est-col-min est-no-side-padding\"></th>\r\n \r\n <ng-container *ngFor=\"let rowHeader of DynamicRowColumnsDefinition\">\r\n <ng-container *ngIf=\"rowHeader.visible\">\r\n <th *ngIf=\"OrderByColumn\" es-th=\"{{rowHeader.propertyName}}\" class=\"{{UserDefinedDynamicCols ? ((rowHeader.clss || '') + (rowHeader.headerWraps ? '' : ' est-nowrap')) : ' est-nowrap'}}\" [Order]=\"rowHeader.dataOrder\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.orderable\" [OrderBy]=\"OrderByColumn\" [SearchInProgress]=\"!!researchInProgress\" (onOrderChange)=\"thOrderChanged(rowHeader.propertyName, $event)\">{{rowHeader.description}}</th>\r\n <th *ngIf=\"!OrderByColumn\" es-th=\"{{rowHeader.propertyName}}\" class=\"{{UserDefinedDynamicCols ? ((rowHeader.clss || '') + (rowHeader.headerWraps ? '' : ' est-nowrap')) : ' est-nowrap'}}\" [Order]=\"rowHeader.dataOrder\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.orderable\" [OrderBy]=\"OrderByColumn\">{{rowHeader.description}}</th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Se non ho un modello dinamico ma invece delle celle custom, genero gli header in base ai row th -->\r\n <ng-container *ngIf=\"UseCustomCells && RowTHs\">\r\n <th *ngIf=\"HasPinnedColumns\" class=\"est-pinned-header est-col-min\">\r\n <div [style.width.px]=\"PinnedContainerWidth\" class=\"est-pinned-border est-simple-border-bottom\">\r\n <th class=\"est-col-min est-no-border\" *ngIf=\"Selection\" [style.width.px]=\"20\">\r\n <input *ngIf=\"!SingleSelection\" class=\"est-pointer\" type=\"checkbox\" [disabled]=\"SelectionDisabled\" [(ngModel)]=\"globalCheck\" [ngModelOptions]=\"{'standalone': true}\" (ngModelChange)=\"globalCheckChanged();\">\r\n </th>\r\n <ng-container *ngFor=\"let rowHeader of RowTHs\">\r\n <th *ngIf=\"rowHeader && rowHeader.Visible && rowHeader.Pinned\" [style.width.px]=\"rowHeader.PinnedWidth\" es-th=\"{{rowHeader.ID}}\" \r\n class=\"{{rowHeader.Class || ''}}\" \r\n [class.est-pinned-internal-header]=\"true\" \r\n [class.est-no-border]=\"true\" \r\n [class.est-nowrap]=\"!rowHeader.Wrap\" \r\n [Pinned]=\"true\" [Fixed]=\"rowHeader.Fixed\" [Order]=\"rowHeader.Order\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.Orderable\" [OrderBy]=\"OrderByColumn\" [SearchInProgress]=\"!!researchInProgress\" (onUnpinning)=\"columnMetadata_H.unpinColumn($event)\" (onOrderChange)=\"OrderByColumn && thOrderChanged(rowHeader.ID, $event)\">\r\n <ng-container *ngIf=\"rowHeader.Template\"><ng-container *ngTemplateOutlet=\"rowHeader.Template;\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowHeader.Template\">{{rowHeader.Content}}</span>\r\n </th>\r\n </ng-container>\r\n </div>\r\n </th>\r\n <ng-container *ngFor=\"let rowHeader of RowTHs\">\r\n <th *ngIf=\"rowHeader && rowHeader.Visible && !rowHeader.Pinned\" es-th=\"{{rowHeader.ID}}\" class=\"{{rowHeader.Class || ''}}\" [class.est-ltab-border]=\"rowHeader.LeftBorder\" [class.est-rtab-border]=\"rowHeader.RightBorder\" [class.est-nowrap]=\"!rowHeader.Wrap\" [Order]=\"rowHeader.Order\" [Resizable]=\"ColumnsResizable\" [Orderable]=\"rowHeader.Orderable\" [OrderBy]=\"OrderByColumn\" [SearchInProgress]=\"!!researchInProgress\" (onOrderChange)=\"OrderByColumn && thOrderChanged(rowHeader.ID, $event)\">\r\n <ng-container *ngIf=\"rowHeader.Template\"><ng-container *ngTemplateOutlet=\"rowHeader.Template;\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowHeader.Template\">{{rowHeader.Content}}</span>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!--Casistica in cui ho il setup proveniente da un report. Gli header sono definiti da come \u00E8 fatto il report-->\r\n <ng-container *ngIf=\"reportMode\">\r\n <th [style.color]=\"clm.color\" *ngFor=\"let clm of ReportValues.columns\" class=\"est-no-selection est-pointer est-nowrap\" (click)=\"reportMode_H.setupNextOrderAndSearch(clm)\">\r\n {{clm.description}}<span class=\"fa\" [class.fa-chevron-down]=\"clm.order == 'DESC'\" [class.fa-chevron-up]=\"clm.order == 'ASC'\"></span>\r\n </th>\r\n </ng-container>\r\n\r\n <!--Per l'eliminazione mi serve un header aggiuntivo-->\r\n <th *ngIf=\"Removal\" [class.est-right-9]=\"Export || HiddenColumns\" class=\"est-col-min est-sticky-last-column\"><span class=\"fa fa-trash\"></span></th>\r\n\r\n <!--Per l'esportazione mi serve l'header extra da cui faccio uscire i 3 pallocchi-->\r\n <th *ngIf=\"Export || HiddenColumns || ColumnsOrdering || CornerMenuOptions\" class=\"est-table-dotted-menu est-sticky-last-column est-col-min text-sm-center\">\r\n \r\n <!-- Link nascosto che serve a scaricare il file -->\r\n <a *ngIf=\"headers\" hidden #exportDownloader csvLink [data]=\"data\" [headers]=\"headers\" [delimiter]=\"';'\" [filename]=\"ExportFileName.endsWith('.xlsx') ? ExportFileName.replace('.xlsx', '.csv') : ExportFileName.endsWith('.csv') ? ExportFileName : ExportFileName + '.csv'\"></a>\r\n\r\n <!-- Blocco con i 3 pallocchi che tira fuori il context menu delle operazioni -->\r\n <div class=\"btn-group\" container=\"body\" placement=\"bottom right\" dropdown #dropdown=\"bs-dropdown\" [autoClose]=\"true\">\r\n <span dropdownToggle class=\"fa fa-ellipsis-v est-fs-18 est-pointer est-padding-3\"></span>\r\n\r\n <div *dropdownMenu class=\"dropdown-menu dropdown-menu-right est-bring-to-front-strong\">\r\n <div class=\"est-pointer\">\r\n <a class=\"dropdown-item\" *ngIf=\"HiddenColumns || ColumnsOrdering\" (click)=\"columnMetadata_H.resetColumnVisSelection(); changeColumnVisibilityModal.show();\">\r\n <ng-container *ngIf=\"!HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Order' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && !ColumnsOrdering\">\r\n {{'Columns Visibility' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Visibility and Order' | localize : lc}}\r\n </ng-container>\r\n </a>\r\n <a class=\"dropdown-item\" *ngIf=\"Export && CSVExport\" (click)=\"export_H.tryExport('CSV')\">{{'Export View' | localize : lc}} (CSV)</a>\r\n <a class=\"dropdown-item\" *ngIf=\"Export && XLSXExport\" (click)=\"export_H.tryExport('XLSX')\">{{'Export View' | localize : lc}} (XLSX)</a>\r\n <a class=\"dropdown-item\" *ngFor=\"let option of CornerMenuOptions\" (click)=\"cornerActionClicked(option.id)\">{{option.description}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n \r\n <!-- Valido per modalit\u00E0 View o Array. Se sono in report mode il body \u00E8 creato in altro modo -->\r\n <tbody [hidden]=\"BodyHidden || FirstBind\" *ngIf=\"(arrayMode || viewMode)\">\r\n <!--Con selection attiva richiamo il template che gestisce il context menu-->\r\n <ng-container *ngIf=\"Selection\">\r\n <ng-container *ngTemplateOutlet=\"TBodySelection; context: { $implicit: { selDisabled: arrayMode ? false : SelectionDisabled, sel: Selection }}\"></ng-container>\r\n </ng-container>\r\n\r\n <!--Senza selection richiamo il template che NON gestisce il context menu-->\r\n <ng-container *ngIf=\"!Selection\">\r\n <ng-container *ngTemplateOutlet=\"TBody\"></ng-container>\r\n </ng-container>\r\n </tbody>\r\n\r\n <!-- Per la modalit\u00E0 a report c'\u00E8 un body particolare semi-dinamico -->\r\n <tbody [hidden]=\"BodyHidden\" *ngIf=\"reportMode\">\r\n <tr *ngFor=\"let row of ReportValues.rows; let even = even;\">\r\n <td class=\"est-nowrap\" *ngFor=\"let val of row.values\">{{val}}</td>\r\n <td class=\"est-sticky-last-column{{even && !Hierarchy ? '-alt' : ''}}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div *ngIf=\"PagingStyle == 'both' || PagingStyle == 'bottom'\">\r\n <ng-container *ngTemplateOutlet=\"pagingElement\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<!-- Template che contiene tutte le info di paginazione in modo da poterlo replicare anche sopra -->\r\n<ng-template #pagingElement>\r\n <ng-container *ngIf=\"!FirstBind\">\r\n <!-- Pulsanti avanti-indietro di paginazione -->\r\n <div *ngIf=\"PagerOptions.ShowPaging && PagerOptions.ShowButtons && (PagerOptions.PagerCount > 10 || PagerOptions.PagerCount == -1)\" class=\"pull-right btn-toolbar\">\r\n <ng-container *ngIf=\"(!reportMode || View?.pagingavailable) && (!arrayMode || SearchView)\">\r\n <ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { Margin: true, ATP: addToPage.bind(this), GTP: goToPage.bind(this), Array: arrayPulsanti }}\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"arrayMode && UseArrayModePaging && !SearchView\">\r\n <ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { Margin: true, ATP: arrayAddToPage.bind(this), GTP: arrayGoToPage.bind(this), Array: arrayPulsanti }}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <!-- Paginatore dove appare la count e le opzioni di paginazione -->\r\n <div class=\"pull-right\" *ngIf=\"PagerOptions.ShowCount || PagerOptions.ShowPagingOptions\">\r\n <div class=\"est-mt-min-5\" *ngIf=\"PagerOptions.ShowPaging\">\r\n <app-paging *ngIf=\"!PagerOptions.UsesView\" [CountLabel]=\"CountLabel\" [ShowPaging]=\"PagerOptions.ShowPagingOptions\" [ShowCount]=\"PagerOptions.ShowCount\" [PagerCount]=\"PagerOptions.PagerCount\" [WarnOnAll]=\"false\" [CurrentPageSize]=\"ArraymodeItemsPerPage\" (pagingSelected)=\"items_H.refreshPaging($event)\"></app-paging>\r\n <app-paging *ngIf=\"PagerOptions.UsesView\" [CountLabel]=\"CountLabel\" [ShowPaging]=\"PagerOptions.ShowPagingOptions\" [ShowCount]=\"PagerOptions.ShowCount\" [PagerCount]=\"PagerOptions.PagerCount\" [GroupMode]=\"PagerOptions.Searches == 'groups'\" [AllSearch]=\"AllSearch\" [View]=\"PagerOptions.View\" (pagingSelected)=\"onItemsPerPageChanged($event);\"></app-paging>\r\n </div>\r\n <div *ngIf=\"reportMode && !PagerOptions.ShowPaging\"><em>{{'Paging options are not available for this report' | localize: lc}}</em></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<!-- Template che contiene i pulsanti per cambiare pagina -->\r\n<ng-template #pagingButtons let-options>\r\n <div class=\"est-flex\" [class.est-margin-left-50]=\"options.Margin\">\r\n <a class=\"btn\" class=\"est-page-prev app-pointer\" (click)=\"options.ATP(-1, options.separator)\"><span class=\"fa fa-chevron-left\"></span></a>\r\n <div *ngIf=\"options.Array\" class=\"est-inline\"><a *ngFor=\"let p of options.Array\" class=\"btn est-page-sel {{p.cssClass}}\" (click)=\"options.GTP(p.val, options.separator)\">{{p.val}}</a></div>\r\n <a class=\"btn\" class=\"est-page-next app-pointer\" (click)=\"options.ATP(1, options.separator)\"><span class=\"fa fa-chevron-right\"></span></a>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Questi due template rappresentano effettivamente il body della tabella. essendo il tr l'unica cosa che davvero cambia, il resto \u00E8 templatizzato -->\r\n<ng-template #TBodySelection let-templateOptions>\r\n <ng-container *ngFor=\"let item of boundSource; let even = even; let i=index; trackBy: bodyTrackBy\">\r\n <tr *ngIf=\"item._visible || (!Hierarchy && !ArrayGrouping)\" \r\n [class]=\"item._rowClass ? item._rowClass : ''\" \r\n [class.est-line-through]=\"item.removed || item.deleted\" \r\n [class.est-pointer]=\"!item.locked\" \r\n [class.est-white-selected]=\"item._selected && !item.locked\"\r\n [class.est-rg]=\"item._group\"\r\n [class.est-rg-sep]=\"item._sep\"\r\n [contextMenu]=\"!item.locked ? (ContextMenu || emptyMenu) : emptyMenu\" [contextMenuSubject]=\"item\"\r\n (click)=\"(!item.locked && !item._sep && !item._group && handleClick($event, item)) || item._group && handleGroupClick(item)\">\r\n\r\n <td *ngIf=\"!item.locked && !item._sep && !HasPinnedColumns\">\r\n <input type=\"checkbox\" \r\n [disabled]=\"templateOptions.selDisabled\" \r\n [class.est-pointer]=\"!item.locked\"\r\n [(ngModel)]=\"item._selected\" name=\"check{{i}}\" \r\n (click)=\"$event.stopPropagation(); handleClick($event, item);\">\r\n </td>\r\n <td *ngIf=\"(item.locked || item._sep) && !HasPinnedColumns\"></td>\r\n\r\n <ng-container *ngIf=\"item._sep\"><ng-container *ngTemplateOutlet=\"groupPager; context: { $implicit: item }\"></ng-container> </ng-container>\r\n\r\n <ng-container *ngIf=\"!item._sep\">\r\n <ng-container *ngTemplateOutlet=\"basicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"dynamicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customCells; context: { $implicit: item, templateOptions: templateOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"bodyDeleteAndExport; context: { $implicit: { even: even, item: item }}\"></ng-container>\r\n </tr>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #TBody>\r\n <ng-container *ngFor=\"let item of boundSource; let even = even;\">\r\n <tr *ngIf=\"item._visible || !Hierarchy\" \r\n [class]=\"item._rowClass ? item._rowClass : ''\" \r\n [class.est-line-through]=\"item.removed || item.deleted\"\r\n [class.est-rg]=\"item._group\"\r\n [class.est-rg-sep]=\"item._sep\"\r\n (click)=\"item._group && handleGroupClick(item)\">\r\n\r\n <ng-container *ngIf=\"item._sep\"><ng-container *ngTemplateOutlet=\"groupPager; context: { $implicit: item }\"></ng-container></ng-container>\r\n\r\n <ng-container *ngIf=\"!item._sep\">\r\n <ng-container *ngTemplateOutlet=\"basicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"dynamicColumns; context: { $implicit: item }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customCells; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"bodyDeleteAndExport; context: { $implicit: { even: even, item: item }}\"></ng-container>\r\n </tr>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #groupPager let-item>\r\n <td class=\"est-pinned-body \" *ngIf=\"HasPinnedColumns\"><div class=\"est-pinned-border est-cell-group-padding\"></div></td>\r\n <td *ngIf=\"item._grouplevel > 1\" [attr.colspan]=\"item._grouplevel-1\"></td>\r\n <td [attr.colspan]=\"Columns.VisibleUnpinned - (item._grouplevel > 0 ? item._grouplevel - 1 : 0)\">\r\n <div class=\"est-rg-sep-flex-right\" *ngIf=\"RowGroupingPagingStyle == 'right'\">\r\n <div class=\"est-rg-page\"><ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { separator: item, ATP: addToPageGroup.bind(this), GTP: goToPageGroup.bind(this), Array: item.buttons }}\"></ng-container></div>\r\n <div class=\"est-rg-ipp\" *ngIf=\"(item.searches == 'groups' ? item.view.groupcount : item.view.objectcount) > 10\"><app-paging [CountLabel]=\"CountLabel\" [AllSearch]=\"AllSearch\" [GroupMode]=\"item.searches == 'groups'\" [PagerCount]=\"item.searches == 'groups' ? item.view.groupcount : item.view.objectcount\" [View]=\"item.view\" (pagingSelected)=\"onGroupItemsPerPageChanged(item, $event);\"></app-paging></div>\r\n </div>\r\n\r\n <div class=\"est-rg-sep-flex-left\" *ngIf=\"RowGroupingPagingStyle == 'left'\">\r\n <div class=\"est-rg-ipp\"><app-paging [AllSearch]=\"AllSearch\" [CountLabel]=\"CountLabel\" [GroupMode]=\"item.searches == 'groups'\" [PagerCount]=\"item.searches == 'groups' ? item.view.groupcount : item.view.objectcount\" [View]=\"item.view\" (pagingSelected)=\"onGroupItemsPerPageChanged(item, $event);\"></app-paging></div>\r\n <div class=\"est-rg-page\" *ngIf=\"(item.searches == 'groups' ? item.view.groupcount : item.view.objectcount) > 10\"><ng-container *ngTemplateOutlet=\"pagingButtons; context: { $implicit: { separator: item, ATP: addToPageGroup.bind(this), GTP: goToPageGroup.bind(this), Array: item.buttons }}\"></ng-container></div>\r\n </div>\r\n </td>\r\n</ng-template>\r\n\r\n<!-- Questo template contiene la print condizionale su tabelle semplici, con header e body scritti a manazza -->\r\n<ng-template #basicColumns let-item>\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTDs) && !DynamicRowColumnsDefinition\">\r\n <ng-container *ngTemplateOutlet=\"bodyRef; context : {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<!-- Questo template contiene la print condizionale su tabelle definite in maniera dinamica dal modello -->\r\n<ng-template #dynamicColumns let-item>\r\n <ng-container *ngIf=\"(!UseCustomCells || !RowTDs) && DynamicRowColumnsDefinition\">\r\n <ng-container *ngFor=\"let operation of DynamicOperations; let first = first; let last = last;\">\r\n <ng-container *ngIf=\"!operation.conditionField || (item.properties[operation.conditionField] == operation.conditionValue)\">\r\n <td [class.est-no-right-padding]=\"last\" [class.est-no-left-padding]=\"!first\" class=\"est-col-min\"><span title=\"{{operation.title}}\" class=\"{{operation.iconClass}} est-pointer\" (click)=\"dynamicOperation(item, operation.id)\">{{operation.text}}</span></td>\r\n </ng-container>\r\n <ng-container *ngIf=\"operation.conditionField && (item.properties[operation.conditionField] != operation.conditionValue)\">\r\n <td class=\"est-col-min est-no-side-padding\"></td>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngFor=\"let rowItem of DynamicRowColumnsDefinition\">\r\n <ng-container *ngIf=\"rowItem.routePath && rowItem.visible\">\r\n <td es-td=\"{{rowItem.propertyName}}\" class=\"{{UserDefinedDynamicCols ? rowItem.clss : 'est-nowrap'}}\" [Internal]=\"false\" [Context]=\"item._hash\">\r\n <a [routerLink]=\"dynamicMode_H.generateRouterLink(rowItem.routePath, rowItem.routeParameterProperties, item)\" class=\"est-link\" [innerHTML]=\"item.properties[rowItem.propertyName]\"></a>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"!rowItem.routePath && rowItem.visible\">\r\n <ng-container *ngTemplateOutlet=\"findEsTd(rowItem.propertyName) || defaultEsTd; context: { $implicit: item.properties[rowItem.propertyName], rowItem : rowItem, item : item }\"> </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultEsTd let-value let-rowItem='rowItem' let-item='item'>\r\n <td es-td=\"{{rowItem.propertyName}}\" class=\"{{UserDefinedDynamicCols ? rowItem.clss : 'est-nowrap'}}\" [Internal]=\"false\" [Context]=\"item._hash\">\r\n {{value}}\r\n </td>\r\n</ng-template>\r\n\r\n<!-- Questo template contiene la print condizionale delle celle custom se configurate -->\r\n<ng-template #customCells let-item let-opt=\"templateOptions\">\r\n <ng-container *ngIf=\"UseCustomCells && RowTDs\">\r\n\r\n <td *ngIf=\"HasPinnedColumns\" class=\"est-pinned-body est-col-min\" [class.est-white-selected]=\"item._selected\">\r\n <div [style.width.px]=\"PinnedContainerWidth\" class=\"est-pinned-border\">\r\n <td *ngIf=\"!item.locked && !item._sep && Selection\" class=\"est-no-border est-col-min\" [style.width.px]=\"20\">\r\n <input type=\"checkbox\" [disabled]=\"opt.selDisabled\" [class.est-pointer]=\"!item.locked\" [(ngModel)]=\"item._selected\" name=\"check{{item._hash}}\" (click)=\"$event.stopPropagation(); handleClick($event, item);\">\r\n </td>\r\n <td class=\"est-no-border est-col-min\" *ngIf=\"(item.locked || item._sep) && Selection\" [style.width.px]=\"20\"></td>\r\n\r\n <ng-container *ngFor=\"let rowItem of RowTDs[item._hash]; let i = index\">\r\n <td *ngIf=\"rowItem && rowItem.Pinned && rowItem.Visible\" [style.width.px]=\"rowItem.PinnedWidth\" es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-no-border]=\"true\" [class.est-rg-hdr]=\"rowItem.GroupHeader\" [class.est-rg-agg]=\"rowItem.GroupAggregation\" \r\n [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\"><ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container></ng-container>\r\n <ng-container *ngIf=\"rowItem.Template\"><ng-container *ngTemplateOutlet=\"rowItem.Template; context: { $implicit: item }\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowItem.Template\">{{rowItem.Content}}</span>\r\n </td>\r\n </ng-container>\r\n </div>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let rowItem of RowTDs[item._hash]; let i = index\">\r\n <ng-container *ngIf=\"rowItem && !rowItem.Pinned\">\r\n\r\n <!-- Casistica senza bodyRef, quindi con direttive per i td -->\r\n <ng-container *ngIf=\"!bodyRef && rowItem.Visible\">\r\n <td es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-ltab-border]=\"rowItem.LeftBorder\" [class.est-rtab-border]=\"rowItem.RightBorder\" [class.est-rg-hdr]=\"rowItem.GroupHeader\" [class.est-rg-agg]=\"rowItem.GroupAggregation\" \r\n [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\"><ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container></ng-container>\r\n <ng-container *ngIf=\"rowItem.Template\"><ng-container *ngTemplateOutlet=\"rowItem.Template; context: { $implicit: item }\"></ng-container></ng-container>\r\n <span *ngIf=\"!rowItem.Template\">{{rowItem.Content}}</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Casistica bodyRef, quindi con componenti per i td (RouterLink) DEPRECATO -->\r\n <ng-container *ngIf=\"rowItem.RouterLink && rowItem.Visible && bodyRef\">\r\n <td es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\">\r\n <ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <a [routerLink]='rowItem.RouterLink' class=\"est-link\" [innerHTML]=\"rowItem.Content\"></a>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Casistica bodyRef, quindi con componenti per i td (NON RouterLink) DEPRECATO -->\r\n <ng-container *ngIf=\"!rowItem.RouterLink && rowItem.Visible && bodyRef\">\r\n <td es-td=\"{{rowItem.ID}}\" class=\"{{rowItem.Class}}\" [class.est-nowrap]=\"Hierarchy || !rowItem.Wraps\" [Internal]=\"true\">\r\n <ng-container *ngIf=\"Hierarchy && i == 0\">\r\n <ng-container *ngTemplateOutlet=\"HierarchyNavigator; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowItem.Template\">\r\n <ng-container *ngTemplateOutlet=\"rowItem.Template; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <span *ngIf=\"!rowItem.Template\" [innerHTML]=\"rowItem.Content\"></span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #HierarchyNavigator let-item>\r\n <span *ngIf=\"!item.parent\" class=\"fa fa-chevron-down\" style=\"visibility:hidden\"></span>\r\n <span *ngIf=\"item.parent && item._expanded\" class=\"fa fa-chevron-down est-pointer est-no-selection\" (click)=\"hierarchyMode_H.collapseParent(item[this.OwnKey])\"></span>\r\n <span *ngIf=\"item.parent && !item._expanded\" class=\"fa fa-chevron-up est-pointer est-no-selection\" (click)=\"hierarchyMode_H.expandParent(item[this.OwnKey])\"></span>\r\n \r\n</ng-template>\r\n\r\n<!-- Questo template contiene i pulsanti di eliminazione/undo eliminazione ed esportazione che vanno in fondo ad un record edlla tabella -->\r\n<ng-template #bodyDeleteAndExport let-options>\r\n <ng-container *ngIf=\"Removal && !RemovalCondition\">\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"!(options.item.removed || options.item.deleted)\"><span class=\"fa fa-remove est-pointer text-danger\" [hidden]=\"options.item.removable != undefined && !options.item.removable\" (click)=\"onRemoval.emit(options.item)\"></span></td>\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"(options.item.removed || options.item.deleted)\"><span class=\"fa fa-undo text-warning est-pointer\" (click)=\"onAbortRemoval.emit(options.item)\"></span></td>\r\n </ng-container>\r\n <ng-container *ngIf=\"Removal && RemovalCondition\">\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"!(options.item.removed || options.item.deleted) && options.item[RemovalCondition]\"><span class=\"fa fa-remove est-pointer text-danger\" [hidden]=\"options.item.removable != undefined && !options.item.removable\" (click)=\"onRemoval.emit(options.item)\"></span></td>\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"(options.item.removed || options.item.deleted) && options.item[RemovalCondition]\"><span class=\"fa fa-undo text-warning est-pointer\" (click)=\"onAbortRemoval.emit(options.item)\"></span></td>\r\n <td class=\"est-sticky-last-column{{options.even? '-alt' : ''}} {{Export || HiddenColumns || CornerMenuOptions ? 'est-right-9' : ''}}\" *ngIf=\"!options.item[RemovalCondition]\"><span class=\"fa fa-remove est-hidden-view\"></span></td>\r\n </ng-container>\r\n <td *ngIf=\"Export || HiddenColumns || CornerMenuOptions\" class=\"est-sticky-last-column{{options.even && !Hierarchy ? '-alt' : ''}}\"></td>\r\n</ng-template>\r\n\r\n<!-- Context menu vuoto default per tutte le tabella che non ce l'hanno, in modo che al click destro appaia \"nessuna op disponibile\" -->\r\n<context-menu #emptyMenu>\r\n <ng-template contextMenuItem>\r\n <span>\r\n <em>{{'No operations available' | localize : lc}}...</em>\r\n </span>\r\n </ng-template>\r\n</context-menu>\r\n\r\n<!-- Modal per cambiare posizione e visibilit\u00E0 delle colonne dell'es-table -->\r\n<div bsModal #changeColumnVisibilityModal=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" cdkDrag>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header est-pointer\" cdkDragHandle>\r\n <h5 class=\"modal-title pull-left\">\r\n <ng-container *ngIf=\"!HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Order' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && !ColumnsOrdering\">\r\n {{'Columns Visibility' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"HiddenColumns && ColumnsOrdering\">\r\n {{'Columns Visibility and Order' | localize : lc}}\r\n </ng-container>\r\n </h5>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"changeColumnVisibilityModal.hide();\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div *ngIf=\"!TMPColumnsList || TMPColumnsList.length == 0\" class=\"card card-info est-padding-10 est-margin-bottom-0\">\r\n {{'There are no columns configured to be hidden/shown in this view' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"TMPColumnsList && TMPColumnsList.length > 0\" style=\"max-height:500px; overflow-y:auto\">\r\n <!--Aaaaaaah la tristezza... qui mi servirebbe l'es-table per facilitare la selezione multipla ecc... peccato che se la linko qui entro in un loop impressionante-->\r\n <table class=\"table table-striped table-sm est-margin-bottom-0\">\r\n <thead>\r\n <tr>\r\n <th class=\"est-col-min\" *ngIf=\"HiddenColumns\">\r\n <input class=\"est-pointer\" type=\"checkbox\" [(ngModel)]=\"globalColVisCheck\" [ngModelOptions]=\"{'standalone': true}\" (ngModelChange)=\"columnMetadata_H.globalColVisCheckChanged();\">\r\n </th>\r\n <!-- <th class=\"est-col-min\" *ngIf=\"ColumnsOrdering\"></th> -->\r\n <th class=\"est-col-min est-nowrap\">{{'Column Name' | localize : lc}}</th>\r\n <!--Filler-->\r\n <th></th>\r\n <!-- Pinner -->\r\n <th *ngIf=\"DirectivesBased\" class=\"est-col-min\"></th>\r\n </tr>\r\n </thead>\r\n <tbody \r\n cdkDropList \r\n [cdkDropListData]=\"TMPColumnsList\" \r\n (cdkDropListDropped)=\"columnMetadata_H.columnReordered($event)\" \r\n [cdkDropListSortPredicate]=\"columnMetadata_H.sortPredicate.bind(this.columnMetadata_H)\"\r\n class=\"est-dropbox\">\r\n\r\n <tr *ngFor=\"let item of TMPColumnsList; let i = index; let last = last\" \r\n class=\"est-pointer est-droplist\" \r\n [class.est-white-selected]=\"lastSelectedItemID == item.id\" \r\n [class.est-no-selection]=\"!item.visible\"\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"!ColumnsOrdering || item.fixed || item.pinned\">\r\n\r\n <td *ngIf=\"HiddenColumns\">\r\n <input type=\"checkbox\" [class.est-hidden-view]=\"item.fixed\" class=\"est-pointer\" [(ngModel)]=\"item.visible\" name=\"visible{{i}}\" (ngModelChange)=\"columnMetadata_H.updateGlobalColVisCheck();\" />\r\n </td>\r\n <td class=\"est-nowrap drag-visible\" (click)=\"columnMetadata_H.columnClicked(item);\">\r\n <ng-container *ngIf=\"item.template\">\r\n <!-- Padri -->\r\n <span *ngIf=\"item.parentTemplates && item.parentTemplates.length > 0\" class=\"est-fw-bold est-fs-13\">\r\n ( \r\n <ng-container *ngFor=\"let parent of item.parentTemplates; let last=last\">\r\n <ng-container *ngTemplateOutlet=\"parent\"></ng-container>\r\n <span *ngIf=\"!last\"> - </span>\r\n </ng-container>\r\n )\r\n </span>\r\n <!-- Template header originale -->\r\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!item.template\">{{item.description}}</ng-container>\r\n </td>\r\n <!--Filler-->\r\n <td (click)=\"columnMetadata_H.columnClicked(item);\"></td>\r\n <!-- Pinner -->\r\n <td *ngIf=\"DirectivesBased && ColumnsPinnable\"><span *ngIf=\"!item.fixed && item.pinnable\" class=\"fa fa-thumb-tack\" [class.text-success]=\"item.pinned\" (click)=\"columnMetadata_H.pinOrUnpinColumn(item)\"></span></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary est-margin-right-10\" (click)=\"lastSelectedItemID = null; changeColumnVisibilityModal.hide();\">{{'Close' | localize : lc}}</button>\r\n <button type=\"button\" [disabled]=\"!TMPColumnsList || TMPColumnsList.length == 0\" class=\"btn btn-primary\" (click)=\"columnMetadata_H.confirmColumnVisibilitySelection() && changeColumnVisibilityModal.hide()\">{{'Confirm' | localize : lc}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>",
|
|
4393
4311
|
styles: [".est-loading-box{height:200px;text-align:center;position:relative;background:#ccc}.est-loading-content{margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:35px}.est-scrollable{max-height:600px;overflow:auto}.est-head-resizer{top:0;right:0;bottom:0;width:7px;position:absolute;cursor:col-resize}.est-head-resizer-internal{top:0;right:0;left:6px;bottom:0;width:1px;position:absolute;background-color:#ccc;height:100%}.est-pointer{cursor:pointer}.est-high-density td,.est-high-density th{padding:0 .2rem}.est-no-selection{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.est-hidden-view{visibility:hidden}.est-no-border{border:none!important}.est-nowrap{white-space:nowrap}.est-mt-min-5{margin-top:-5px}.est-white-selected{background-color:#ddd!important}.est-line-through{text-decoration:line-through}.est-no-side-padding{padding-left:0;padding-right:0}.est-no-left-padding,.est-no-right-padding{padding-left:0}.est-col-min{width:1px}.est-margin-bottom-0{margin-bottom:0!important}.est-margin-right-10{margin-right:10px!important}.est-right-9{right:9px!important}.est-table-dotted-menu{padding:0 0 2px!important;color:#999}.est-fs-18{font-size:18px}.est-fs-13,.est-fs-14{font-size:14px}.est-fw-bold{font-weight:700}.est-padding-3{padding:3px!important}.est-page-container{position:relative}.est-bring-to-front-strong{z-index:99999999!important}.est-switch{position:relative;display:inline-block;width:30px;height:17px;margin-bottom:0;margin-right:5px;margin-left:5px}.est-switch input{display:none}.est-slider{cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc}.est-slider,.est-slider:before{position:absolute;transition:.4s}.est-slider:before{content:\"\";height:13px;width:13px;left:3px;bottom:2px;background-color:#fff}input:checked+.est-slider{background-color:#2196f3}input:focus+.est-slider{box-shadow:0 0 1px #2196f3}input:checked+.est-slider:before{transform:translateX(11px)}.est-slider.round{border-radius:10px}.est-slider.round:before{border-radius:50%}.est-custom-input{width:30px;display:inline;padding:1px;height:20px}.est-row-lvl-1 td:first-child{padding-left:5px}.est-row-lvl-2 td:first-child{padding-left:20px}.est-row-lvl-3 td:first-child{padding-left:35px}.est-row-lvl-4 td:first-child{padding-left:50px}.est-row-lvl-5 td:first-child{padding-left:65px}.est-row-lvl-6 td:first-child{padding-left:80px}.est-row-lvl-7 td:first-child{padding-left:95px}.est-row-lvl-8 td:first-child{padding-left:110px}.est-row-lvl-9 td:first-child{padding-left:125px}.est-row-lvl-10 td:first-child{padding-left:140px}.est-row-lvl-11 td:first-child{padding-left:155px}.est-row-lvl-12 td:first-child{padding-left:170px}.est-row-lvl-13 td:first-child{padding-left:185px}.est-row-lvl-14 td:first-child{padding-left:200px}.est-row-lvl-15 td:first-child{padding-left:215px}.est-row-lvl-16 td:first-child{padding-left:230px}.est-row-lvl-17 td:first-child{padding-left:245px}.est-row-lvl-18 td:first-child{padding-left:260px}.est-row-lvl-19 td:first-child{padding-left:275px}.est-row-lvl-20 td:first-child{padding-left:290px}.est-row-lvl-21 td:first-child{padding-left:305px}.est-row-lvl-22 td:first-child{padding-left:320px}.est-row-lvl-23 td:first-child{padding-left:335px}.est-row-lvl-24 td:first-child{padding-left:350px}.est-row-lvl-25 td:first-child{padding-left:365px}.est-row-lvl-26 td:first-child{padding-left:380px}.est-row-lvl-27 td:first-child{padding-left:395px}.est-row-lvl-28 td:first-child{padding-left:410px}.est-row-lvl-29 td:first-child{padding-left:425px}.est-row-lvl-30 td:first-child{padding-left:440px}.est-row-lvl-31 td:first-child{padding-left:455px}.est-row-lvl-32 td:first-child{padding-left:470px}.est-row-lvl-33 td:first-child{padding-left:485px}.est-row-lvl-34 td:first-child{padding-left:500px}.est-row-lvl-35 td:first-child{padding-left:515px}.est-row-lvl-36 td:first-child{padding-left:530px}.est-row-lvl-37 td:first-child{padding-left:545px}.est-row-lvl-38 td:first-child{padding-left:560px}.est-row-lvl-39 td:first-child{padding-left:575px}.est-row-lvl-40 td:first-child{padding-left:590px}.est-row-lvl-41 td:first-child{padding-left:605px}.est-row-lvl-42 td:first-child{padding-left:620px}.est-row-lvl-43 td:first-child{padding-left:635px}.est-row-lvl-44 td:first-child{padding-left:650px}.est-row-lvl-45 td:first-child{padding-left:665px}.est-row-lvl-46 td:first-child{padding-left:680px}.est-row-lvl-47 td:first-child{padding-left:695px}.est-row-lvl-48 td:first-child{padding-left:710px}.est-row-lvl-49 td:first-child{padding-left:725px}.est-row-lvl-50 td:first-child{padding-left:740px}.est-row-lvl-51 td:first-child{padding-left:755px}.est-row-lvl-52 td:first-child{padding-left:770px}.est-row-lvl-53 td:first-child{padding-left:785px}.est-row-lvl-54 td:first-child{padding-left:800px}.est-row-lvl-55 td:first-child{padding-left:815px}.est-row-lvl-56 td:first-child{padding-left:830px}.est-row-lvl-57 td:first-child{padding-left:845px}.est-row-lvl-58 td:first-child{padding-left:860px}.est-row-lvl-59 td:first-child{padding-left:875px}.est-row-lvl-60 td:first-child{padding-left:890px}.est-row-lvl-61 td:first-child{padding-left:905px}.est-row-lvl-62 td:first-child{padding-left:920px}.est-row-lvl-63 td:first-child{padding-left:935px}.est-row-lvl-64 td:first-child{padding-left:950px}.est-row-lvl-65 td:first-child{padding-left:965px}.est-row-lvl-66 td:first-child{padding-left:980px}.est-row-lvl-67 td:first-child{padding-left:995px}.est-row-lvl-68 td:first-child{padding-left:1010px}.est-row-lvl-69 td:first-child{padding-left:1025px}.est-row-lvl-70 td:first-child{padding-left:1040px}.est-row-lvl-71 td:first-child{padding-left:1055px}.est-row-lvl-72 td:first-child{padding-left:1070px}.est-row-lvl-73 td:first-child{padding-left:1085px}.est-row-lvl-74 td:first-child{padding-left:1100px}.est-row-lvl-75 td:first-child{padding-left:1115px}.est-row-lvl-76 td:first-child{padding-left:1130px}.est-row-lvl-77 td:first-child{padding-left:1145px}.est-row-lvl-78 td:first-child{padding-left:1160px}.est-row-lvl-79 td:first-child{padding-left:1175px}.est-row-lvl-80 td:first-child{padding-left:1190px}.est-row-lvl-81 td:first-child{padding-left:1205px}.est-row-lvl-82 td:first-child{padding-left:1220px}.est-row-lvl-83 td:first-child{padding-left:1235px}.est-row-lvl-84 td:first-child{padding-left:1250px}.est-row-lvl-85 td:first-child{padding-left:1265px}.est-row-lvl-86 td:first-child{padding-left:1280px}.est-row-lvl-87 td:first-child{padding-left:1295px}.est-row-lvl-88 td:first-child{padding-left:1310px}.est-row-lvl-89 td:first-child{padding-left:1325px}.est-row-lvl-90 td:first-child{padding-left:1340px}.est-row-lvl-91 td:first-child{padding-left:1355px}.est-row-lvl-92 td:first-child{padding-left:1370px}.est-row-lvl-93 td:first-child{padding-left:1385px}.est-row-lvl-94 td:first-child{padding-left:1400px}.est-row-lvl-95 td:first-child{padding-left:1415px}.est-row-lvl-96 td:first-child{padding-left:1430px}.est-row-lvl-97 td:first-child{padding-left:1445px}.est-row-lvl-98 td:first-child{padding-left:1460px}.est-row-lvl-99 td:first-child{padding-left:1475px}.est-relative{position:relative}.est-top-pager{position:absolute;right:0;top:5px}.est-top-allselect{position:absolute;left:0;top:5px;font-weight:700}.est-padding-10{padding:10px!important}.est-margin-right-50{margin-right:50px}.est-margin-left-50{margin-left:50px}.est-quick-unpin{color:#000;margin-left:8px;font-size:14px;transform:rotate(45deg)}.est-page-sel{color:#000;margin-left:3px;margin-right:3px;padding:0 5px;font-size:inherit;border:none;border-radius:15px}.est-page-next,.est-page-prev{color:#000;font-size:inherit;padding:2px 0 0}.est-pinned-header{background-color:#fff;left:0;top:0;position:sticky;z-index:1;border-bottom:1px solid #dee2e6!important;padding:0!important}.est-simple-border-bottom{border-bottom:1px solid #dee2e6}.est-pinned-internal-header{border-top:0;border-bottom:0 solid #dee2e6}.est-pinned-border{border-right:2px solid #dee2e6!important}.est-cell-padding{padding:.3rem}.est-pinned-body{background-color:#fff;left:0;position:sticky;z-index:1;border-top:1px solid #dee2e6!important;padding:0!important}.est-inline{display:inline!important}.est-inline-block{display:inline-block!important}.est-link{color:#0275d8!important;cursor:pointer;text-decoration:none;display:block}.est-link:hover{color:#23527c!important;cursor:pointer;text-decoration:underline!important}.est-sticky-last-column{right:-1px;position:sticky;z-index:0;background-color:#fff}.est-sticky-last-column-alt{right:-1px;position:sticky;z-index:0;background-color:#f2f2f2}.est-ltab-border{border-left:2px solid #bbb}.est-rtab-border{border-right:2px solid #bbb}.est-cell-group-padding{padding:calc(.3rem + 1px);position:absolute;top:0;left:0;height:100%;width:100%}.est-margin-bottom-10{margin-bottom:10px}.est-text-center{text-align:center}.est-flex{display:flex}.est-rg-sep-flex-right{display:flex;flex-direction:row-reverse;width:100%;margin:-5px}.est-rg-sep-flex-left{display:flex;flex-direction:row;width:100%;margin:-5px}.est-rg-hdr{font-weight:700}.est-rg-agg{font-style:italic}.est-rg{background-color:hsla(0,0%,46.7%,.4666666666666667)!important}.est-rg-sep{font-size:12px;padding-right:20px!important;background-color:hsla(0,0%,73.3%,.7333333333333333)!important}.est-rg-ipp{text-align:left;display:inline-flex;margin-right:25px}.est-rg-page{text-align:right;display:inline-flex;font-size:inherit;padding-top:5px}.est-droplist.cdk-drag-placeholder{opacity:0}.est-droplist.cdk-drag-preview{z-index:999999999!important;opacity:1;box-sizing:border-box;border-radius:4px;background-color:#fff;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.est-droplist.cdk-drag-preview td:not(.drag-visible){visibility:hidden}.est-droplist.cdk-drag-preview td.drag-visible{padding-top:3px}.est-droplist.cdk-drag-animating,.est-droplist.cdk-drop-list-dragging .est-dropbox:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}"]
|
|
4394
4312
|
},] }
|
|
4395
4313
|
];
|
|
@@ -4415,6 +4333,7 @@
|
|
|
4415
4333
|
secondaryHeaderGroupRef: [{ type: i0.ContentChild, args: ['secondaryHeaderGroup', { static: false },] }],
|
|
4416
4334
|
CornerMenuOptions: [{ type: i0.Input }],
|
|
4417
4335
|
ColumnsResizable: [{ type: i0.Input }],
|
|
4336
|
+
ColumnsPinnable: [{ type: i0.Input }],
|
|
4418
4337
|
AutoUpdate: [{ type: i0.Input }],
|
|
4419
4338
|
UseCustomCells: [{ type: i0.Input }],
|
|
4420
4339
|
MaxHeight: [{ type: i0.Input }],
|
|
@@ -4880,9 +4799,75 @@
|
|
|
4880
4799
|
},] }
|
|
4881
4800
|
];
|
|
4882
4801
|
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4802
|
+
/** Indica un'opzione cliccabile nel Corner Menù della tabella (il menù richiamabile dai 3 pallini verticli in alto a destra) */
|
|
4803
|
+
var CornerMenuOption = /** @class */ (function () {
|
|
4804
|
+
function CornerMenuOption() {
|
|
4805
|
+
}
|
|
4806
|
+
return CornerMenuOption;
|
|
4807
|
+
}());
|
|
4808
|
+
|
|
4809
|
+
/** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */
|
|
4810
|
+
var EsTableOperationDefinition = /** @class */ (function () {
|
|
4811
|
+
/**
|
|
4812
|
+
* Costruttore
|
|
4813
|
+
*
|
|
4814
|
+
* @param {string} id Codice dell'operazione
|
|
4815
|
+
* @param {string} title Titolo dell'operazione, da presentare all'utente su hover della cella
|
|
4816
|
+
* @param {string} iconClass Classe che fornisca un iconcina Es. "fa fa-remove"
|
|
4817
|
+
* @param {string} text Eventuale testo presentato nella cella, genericamente va in alternativa a **iconClass**
|
|
4818
|
+
* @param {string} conditionField Indica il campo dell'oggetto sottostante su cui verificare la visibilità o meno di questa icona
|
|
4819
|
+
* @param {string} conditionValue Indica il valore che la proprietà **conditionField** dell'oggetto sottostante deve assumere affinché questa opzione si veda
|
|
4820
|
+
*/
|
|
4821
|
+
function EsTableOperationDefinition(id, title, iconClass, text, conditionField, conditionValue) {
|
|
4822
|
+
this.id = id;
|
|
4823
|
+
this.title = title;
|
|
4824
|
+
this.iconClass = iconClass;
|
|
4825
|
+
this.text = text;
|
|
4826
|
+
this.conditionField = conditionField;
|
|
4827
|
+
this.conditionValue = conditionValue;
|
|
4828
|
+
}
|
|
4829
|
+
return EsTableOperationDefinition;
|
|
4830
|
+
}());
|
|
4831
|
+
|
|
4832
|
+
/** Classe che definisce un oggetto generico come lista di proprietà-valore */
|
|
4833
|
+
var GenericItem = /** @class */ (function () {
|
|
4834
|
+
/** @ignore */
|
|
4835
|
+
function GenericItem() {
|
|
4836
|
+
this._selected = false;
|
|
4837
|
+
this._rowClass = null;
|
|
4838
|
+
this._hash = null;
|
|
4839
|
+
this.properties = {};
|
|
4840
|
+
}
|
|
4841
|
+
return GenericItem;
|
|
4842
|
+
}());
|
|
4843
|
+
|
|
4844
|
+
/** Classe che rappresenta una colonna di un report */
|
|
4845
|
+
var ReportColumn = /** @class */ (function () {
|
|
4846
|
+
function ReportColumn() {
|
|
4847
|
+
}
|
|
4848
|
+
return ReportColumn;
|
|
4849
|
+
}());
|
|
4850
|
+
|
|
4851
|
+
/** Classe che identifica un parametro generico per un report */
|
|
4852
|
+
var ReportParam = /** @class */ (function () {
|
|
4853
|
+
function ReportParam() {
|
|
4854
|
+
}
|
|
4855
|
+
return ReportParam;
|
|
4856
|
+
}());
|
|
4857
|
+
|
|
4858
|
+
/** Classe che rappresenta una lista di oggetti generati da un report */
|
|
4859
|
+
var ReportResult = /** @class */ (function () {
|
|
4860
|
+
function ReportResult() {
|
|
4861
|
+
}
|
|
4862
|
+
return ReportResult;
|
|
4863
|
+
}());
|
|
4864
|
+
|
|
4865
|
+
/** Classe che rappresenta i valori delle proprietà di un oggetto Report */
|
|
4866
|
+
var ReportRow = /** @class */ (function () {
|
|
4867
|
+
function ReportRow() {
|
|
4868
|
+
}
|
|
4869
|
+
return ReportRow;
|
|
4870
|
+
}());
|
|
4886
4871
|
|
|
4887
4872
|
/**
|
|
4888
4873
|
* Generated bundle index. Do not edit.
|