@esfaenza/es-table 11.2.37 → 11.2.41
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 +884 -1146
- 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 +5 -6
- package/esfaenza-es-table.metadata.json +1 -1
- package/esm2015/esfaenza-es-table.js +6 -7
- package/esm2015/lib/components/es-table/es_table.component.js +55 -174
- package/esm2015/lib/components/es-td/es_td.component.js +1 -35
- 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/lib/es-table.module.js +2 -2
- package/esm2015/public-api.js +21 -7
- package/fesm2015/esfaenza-es-table.js +832 -1093
- package/fesm2015/esfaenza-es-table.js.map +1 -1
- package/lib/components/es-table/es_table.component.d.ts +32 -68
- package/lib/components/es-td/es_td.component.d.ts +0 -2
- package/lib/core/handlers/{classes/ColumnMetadataHandler.d.ts → ColumnMetadataHandler.d.ts} +24 -23
- 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 -7
- package/lib/core/handlers/{classes/ReportModeHandler.d.ts → ReportModeHandler.d.ts} +2 -2
- package/lib/core/handlers/{classes/RowGroupingHandler.d.ts → RowGroupingHandler.d.ts} +10 -6
- 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 -16
- 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} +4 -1
- package/lib/domain/internals/{classes/GroupRouteFragment.d.ts → GroupRouteFragment.d.ts} +0 -0
- package/lib/domain/internals/TdElement.d.ts +35 -0
- 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 +20 -3
- package/esm2015/lib/core/handlers/classes/ColumnMetadataHandler.js +0 -719
- 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 -130
- package/esm2015/lib/core/handlers/classes/ReportModeHandler.js +0 -70
- package/esm2015/lib/core/handlers/classes/RowGroupingHandler.js +0 -475
- package/esm2015/lib/core/handlers/classes/SelectionHandler.js +0 -527
- package/esm2015/lib/core/handlers/classes/UtilitiesHandler.js +0 -169
- 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 -21
- package/esm2015/lib/domain/internals/classes/GroupRouteFragment.js +0 -17
- 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 -7
- 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 -6
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@
|
|
3
|
-
typeof define === 'function' && define.amd ? define('@esfaenza/es-table', ['exports', '@angular/core', '@
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.esfaenza = global.esfaenza || {}, global.esfaenza['es-table'] = {}), global.ng.core, global.
|
|
5
|
-
}(this, (function (exports, i0,
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@esfaenza/localizations'), require('@esfaenza/extensions'), require('@angular/forms'), require('@esfaenza/preferences'), require('@angular/cdk/drag-drop'), require('@angular/common'), require('@angular/router'), require('@angular/material/select'), require('@angular/material/input'), require('@angular/platform-browser'), require('ngx-bootstrap/modal'), require('ngx-bootstrap/dropdown'), require('@ctrl/ngx-csv'), require('@esfaenza/ngx-contextmenu')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define('@esfaenza/es-table', ['exports', '@angular/core', '@esfaenza/localizations', '@esfaenza/extensions', '@angular/forms', '@esfaenza/preferences', '@angular/cdk/drag-drop', '@angular/common', '@angular/router', '@angular/material/select', '@angular/material/input', '@angular/platform-browser', 'ngx-bootstrap/modal', 'ngx-bootstrap/dropdown', '@ctrl/ngx-csv', '@esfaenza/ngx-contextmenu'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.esfaenza = global.esfaenza || {}, global.esfaenza['es-table'] = {}), global.ng.core, global.localizations, global.i1, global.ng.forms, global.preferences, global.ng.cdk.dragDrop, global.ng.common, global.ng.router, global.ng.material.select, global.ng.material.input, global.ng.platformBrowser, global.modal, global.dropdown, global.ngxCsv, global.ngxContextmenu));
|
|
5
|
+
}(this, (function (exports, i0, localizations, i1, forms, preferences, dragDrop, common, router, select, input, platformBrowser, modal, dropdown, ngxCsv, ngxContextmenu) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function _interopNamespace(e) {
|
|
8
8
|
if (e && e.__esModule) return e;
|
|
@@ -336,22 +336,135 @@
|
|
|
336
336
|
return value;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
-
/**
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
var
|
|
339
|
+
/** Token che indica il locale da utilizzare all'interno del componente. Supportati solo "it-IT" ed "en-US" */
|
|
340
|
+
var EST_LOCALE = new i0.InjectionToken('EST_LOCALE');
|
|
341
|
+
/** Token che indica se emettere log a console o meno */
|
|
342
|
+
var EST_DEBUG = new i0.InjectionToken('EST_DEBUG');
|
|
343
|
+
/** Token che indica i default da assegnare agli Input */
|
|
344
|
+
var EST_DEFAULTS = new i0.InjectionToken('EST_DEFAULTS');
|
|
345
|
+
|
|
346
|
+
/** Classe di localizzazione per il componente **TablePagerComponent** */
|
|
347
|
+
var TablePagerLoc = /** @class */ (function (_super) {
|
|
348
|
+
__extends(TablePagerLoc, _super);
|
|
349
|
+
/** @ignore */
|
|
350
|
+
function TablePagerLoc(LOC_LOCALE) {
|
|
351
|
+
var _this = _super.call(this, LOC_LOCALE !== null && LOC_LOCALE !== void 0 ? LOC_LOCALE : 'it-IT') || this;
|
|
352
|
+
_super.prototype.set.call(_this, "en->it", "All", ["Tutto"]);
|
|
353
|
+
_super.prototype.set.call(_this, "en->it", "Shown Elements", ["Elementi visualizzati"]);
|
|
354
|
+
_super.prototype.set.call(_this, "en->it", "Shown Groups", ["Gruppi visualizzati"]);
|
|
355
|
+
_super.prototype.set.call(_this, "en->it", "Are you sure you want to retrieve all results?", ["Si è sicuri di voler caricare tutti i risultati?"]);
|
|
356
|
+
_super.prototype.set.call(_this, "en->it", "This might slow down the page and possibly crash the entire application", ["L'operazione potrebbe rallentare la pagina fino al crash dell'applicazione"]);
|
|
357
|
+
return _this;
|
|
358
|
+
}
|
|
359
|
+
return TablePagerLoc;
|
|
360
|
+
}(localizations.LocalizationService));
|
|
361
|
+
TablePagerLoc.decorators = [
|
|
362
|
+
{ type: i0.Injectable }
|
|
363
|
+
];
|
|
364
|
+
TablePagerLoc.ctorParameters = function () { return [
|
|
365
|
+
{ type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [EST_LOCALE,] }] }
|
|
366
|
+
]; };
|
|
367
|
+
|
|
368
|
+
// Angular
|
|
369
|
+
/** Componente che si occupa della paginazione di una tabella */
|
|
370
|
+
var TablePagerComponent = /** @class */ (function () {
|
|
371
|
+
/** @ignore */
|
|
372
|
+
function TablePagerComponent(msgExts, lc, cdr, locale) {
|
|
373
|
+
this.msgExts = msgExts;
|
|
374
|
+
this.lc = lc;
|
|
375
|
+
this.cdr = cdr;
|
|
376
|
+
this.locale = locale;
|
|
377
|
+
/** Indica se deve mostrare un warning quando si cercano di solezionare come elementi da visualizzare "Tutti" */
|
|
378
|
+
this.WarnOnAll = true;
|
|
379
|
+
/** Indica se dare la possibilità o meno di selezionare "Tutti" nelle opzioni di paginazione */
|
|
380
|
+
this.AllSearch = true;
|
|
381
|
+
/** Placeholder che identifica il "Tutti" */
|
|
382
|
+
this.DefaultAll = 999999;
|
|
383
|
+
/** Indica se attivare la modalità gruppo con stili più snelli per apparire sotto ai raggruppamenti */
|
|
384
|
+
this.GroupMode = false;
|
|
385
|
+
/** Indica se utilizzare il conteggio dei gruppi o degli oggetti */
|
|
386
|
+
this.GroupCount = false;
|
|
387
|
+
/** Indica il testo che va a sostituire "Oggetti Visualizzati" in caso si stia facendo qualcosa di custom, Ignorato in caso di gruppi */
|
|
388
|
+
this.CountLabel = null;
|
|
389
|
+
/** Indica se visualizzare il numero totale di oggeti presenti */
|
|
390
|
+
this.ShowCount = true;
|
|
391
|
+
/** Indica se visualizzare il numero totale di oggeti presenti */
|
|
392
|
+
this.ShowPaging = true;
|
|
393
|
+
/** Output invocato quando il numero di elementi per pagina viene modificato da un click utente */
|
|
394
|
+
this.pagingSelected = new i0.EventEmitter();
|
|
395
|
+
/** Opzioni di paginazione */
|
|
396
|
+
this.PagingOptions = [10, 15, 30, 45, 100];
|
|
397
|
+
}
|
|
398
|
+
/** @ignore */
|
|
399
|
+
TablePagerComponent.prototype.ngOnInit = function () {
|
|
400
|
+
this.Model = this.View ? (this.View.itemsperpageoverride || 15) : this.CurrentPageSize;
|
|
401
|
+
if (this.AllSearch)
|
|
402
|
+
this.PagingOptions.push(this.DefaultAll);
|
|
403
|
+
};
|
|
404
|
+
/** @ignore */
|
|
405
|
+
TablePagerComponent.prototype.ngOnChanges = function (changes) {
|
|
406
|
+
var newView = changes['View'];
|
|
407
|
+
var newCPS = changes['CurrentPageSize'];
|
|
408
|
+
if ((newView && !newView.firstChange) || (newCPS && !newCPS.firstChange))
|
|
409
|
+
this.Model = (newView === null || newView === void 0 ? void 0 : newView.currentValue) ? (newView.currentValue.itemsperpageoverride || 15) : (newCPS === null || newCPS === void 0 ? void 0 : newCPS.currentValue) ? newCPS.currentValue : null;
|
|
410
|
+
};
|
|
343
411
|
/**
|
|
344
|
-
*
|
|
412
|
+
* Funzione richiamata dal template quando un utente clicca su un numero di paginazione.
|
|
345
413
|
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
414
|
+
* Cliccare 2 volte sullo stesso numero causa comunque un refresh dei dati
|
|
415
|
+
*
|
|
416
|
+
* @param {number} pageSize Dimensione selezionata lato UI
|
|
348
417
|
*/
|
|
349
|
-
function
|
|
350
|
-
|
|
351
|
-
this.
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
418
|
+
TablePagerComponent.prototype.choice = function (pageSize) {
|
|
419
|
+
var _this = this;
|
|
420
|
+
if (pageSize == this.DefaultAll && this.WarnOnAll) {
|
|
421
|
+
this.msgExts.simpleWarningWithChoice(this.lc.loc("Are you sure you want to retrieve all results?"), this.lc.loc("This might slow down the page and possibly crash the entire application"), function () { _this.pagingSelected.emit(pageSize); _this.Model = pageSize; }, function () {
|
|
422
|
+
// Dio solo sa perché mi tocca fare sta roba... qui dentro per qualche motivo la CD non prende
|
|
423
|
+
var prevModel = _this.Model;
|
|
424
|
+
_this.Model = null;
|
|
425
|
+
_this.cdr.detectChanges();
|
|
426
|
+
_this.Model = prevModel;
|
|
427
|
+
_this.cdr.detectChanges();
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
this.pagingSelected.emit(pageSize);
|
|
432
|
+
this.Model = pageSize;
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
return TablePagerComponent;
|
|
436
|
+
}());
|
|
437
|
+
TablePagerComponent.decorators = [
|
|
438
|
+
{ type: i0.Component, args: [{
|
|
439
|
+
selector: "app-paging",
|
|
440
|
+
viewProviders: [{ provide: localizations.LocalizationService, useClass: TablePagerLoc }],
|
|
441
|
+
template: "<ng-container *ngIf=\"!Hidden\">\r\n <span class=\"est-fs-14\"> {{CountLabel && !GroupMode ? CountLabel : ((GroupMode ? 'Shown Groups' : 'Shown Elements') | localize : lc)}}: </span>\r\n <ng-container *ngIf=\"ShowPaging && Model && (Model == DefaultAll || PagerCount >= Model || PagerCount == -1)\">\r\n <mat-form-field [appearance]=\"'legacy'\" class=\"mat-paginator-page-size-select est-fs-14 est-ipp-bold\">\r\n <select matNativeControl [ngModel]=\"Model\" name=\"input\" (ngModelChange)=\"choice($event)\">\r\n <ng-container *ngFor=\"let pOpt of PagingOptions\">\r\n <option *ngIf=\"pOpt == DefaultAll || PagerCount >= pOpt || PagerCount == -1\" [value]=\"pOpt\">{{ pOpt == DefaultAll ? ('All' | localize : lc) : pOpt.toString()}}</option>\r\n </ng-container>\r\n </select>\r\n </mat-form-field>\r\n <span class=\"est-fs-14 est-ipp-bold\" *ngIf=\"ShowCount && PagerCount != -1\"> / </span>\r\n </ng-container>\r\n <span class=\"est-fs-14 est-ipp-bold\" *ngIf=\"ShowCount && PagerCount != -1\">{{PagerCount | number : '0.0-0' : locale}}</span>\r\n</ng-container>",
|
|
442
|
+
encapsulation: i0.ViewEncapsulation.None,
|
|
443
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
444
|
+
styles: [".est-ipp-sel,.est-ipp-sel-all,.est-rg-ipp-sel,.est-rg-ipp-sel-all{color:#0275d8!important;cursor:pointer;text-decoration:none;display:block;display:inline}.est-ipp-bold{font-weight:700}.mat-paginator-page-size-select{margin:6px 4px 0;width:50px}.mat-paginator-page-size-select .mat-form-field-wrapper{height:52px!important;margin-top:-15px!important;padding:0!important}.mat-form-field-type-mat-native-select .mat-form-field-infix:after{margin-top:-5.5px!important}"]
|
|
445
|
+
},] }
|
|
446
|
+
];
|
|
447
|
+
TablePagerComponent.ctorParameters = function () { return [
|
|
448
|
+
{ type: i1.MessageService },
|
|
449
|
+
{ type: localizations.LocalizationService },
|
|
450
|
+
{ type: i0.ChangeDetectorRef },
|
|
451
|
+
{ type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [EST_LOCALE,] }] }
|
|
452
|
+
]; };
|
|
453
|
+
TablePagerComponent.propDecorators = {
|
|
454
|
+
CurrentPageSize: [{ type: i0.Input }],
|
|
455
|
+
View: [{ type: i0.Input }],
|
|
456
|
+
WarnOnAll: [{ type: i0.Input }],
|
|
457
|
+
AllSearch: [{ type: i0.Input }],
|
|
458
|
+
DefaultAll: [{ type: i0.Input }],
|
|
459
|
+
GroupMode: [{ type: i0.Input }],
|
|
460
|
+
GroupCount: [{ type: i0.Input }],
|
|
461
|
+
CountLabel: [{ type: i0.Input }],
|
|
462
|
+
ShowCount: [{ type: i0.Input }],
|
|
463
|
+
ShowPaging: [{ type: i0.Input }],
|
|
464
|
+
PagerCount: [{ type: i0.Input }],
|
|
465
|
+
Hidden: [{ type: i0.Input }],
|
|
466
|
+
pagingSelected: [{ type: i0.Output }]
|
|
467
|
+
};
|
|
355
468
|
|
|
356
469
|
/**
|
|
357
470
|
* Classe che identifica una ricerca paginata in tutte le sue sfumature (di grigio)
|
|
@@ -389,65 +502,6 @@
|
|
|
389
502
|
return AppSearch;
|
|
390
503
|
}());
|
|
391
504
|
|
|
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
505
|
/** Definizione generica di un report che può o no disporre di paginazione/export e la cui richiesta è basata su uno o più parametri */
|
|
452
506
|
var ReportDefinition = /** @class */ (function () {
|
|
453
507
|
function ReportDefinition() {
|
|
@@ -455,64 +509,6 @@
|
|
|
455
509
|
return ReportDefinition;
|
|
456
510
|
}());
|
|
457
511
|
|
|
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
512
|
/** Identifica una selezione applicabile agli oggetti presentati in una tabella */
|
|
517
513
|
var ItemsSelection = /** @class */ (function () {
|
|
518
514
|
/**
|
|
@@ -537,446 +533,27 @@
|
|
|
537
533
|
return ItemsSelection;
|
|
538
534
|
}());
|
|
539
535
|
|
|
540
|
-
/** Classe che rappresenta un
|
|
541
|
-
var
|
|
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
|
-
/** Classe che rappresenta un filtro su un gruppo */
|
|
576
|
-
var GroupFilter = /** @class */ (function () {
|
|
577
|
-
/**
|
|
578
|
-
* Costruttore
|
|
579
|
-
*
|
|
580
|
-
* @param {string} column ID della colonna gruppata per cui si richiede di filtrare
|
|
581
|
-
* @param {string} value Valore del gruppo su questa **column** per cui si richiede di filtrare
|
|
582
|
-
*/
|
|
583
|
-
function GroupFilter(column, value) {
|
|
584
|
-
this.column = column;
|
|
585
|
-
this.value = value;
|
|
586
|
-
}
|
|
587
|
-
return GroupFilter;
|
|
588
|
-
}());
|
|
589
|
-
|
|
590
|
-
/** Classe che rappresenta o un gruppo o una aggregazione su una colonna. Usata solo internamente */
|
|
591
|
-
var GroupOrAggregation = /** @class */ (function () {
|
|
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
|
-
}
|
|
670
|
-
return GroupPager;
|
|
671
|
-
}());
|
|
672
|
-
|
|
673
|
-
/**
|
|
674
|
-
* 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
|
|
675
|
-
* per arrivare ad una ricerca su sottogruppi o elementi relativi
|
|
676
|
-
*/
|
|
677
|
-
var GroupRouteFragment = /** @class */ (function () {
|
|
678
|
-
/**
|
|
679
|
-
* Costruttore
|
|
680
|
-
*
|
|
681
|
-
* @param {string} column Colonna di raggruppamento
|
|
682
|
-
* @param {string} value Valore della colonna di raggruppamento
|
|
683
|
-
*/
|
|
684
|
-
function GroupRouteFragment(column, value) {
|
|
685
|
-
this.column = column;
|
|
686
|
-
this.value = value;
|
|
687
|
-
}
|
|
688
|
-
return GroupRouteFragment;
|
|
689
|
-
}());
|
|
690
|
-
|
|
691
|
-
/** Classe rappresentante una singola aggregazione effettuata su una colonna */
|
|
692
|
-
var ThAggregation = /** @class */ (function () {
|
|
693
|
-
/**
|
|
694
|
-
* Costruttore
|
|
695
|
-
*
|
|
696
|
-
* @param {'min' | 'max' | 'sum'} func Funzione di aggergazione, può essere **min**, **max** o **sum**
|
|
697
|
-
* @param {string} format Formato richiesto per il valore dell'aggregazione
|
|
698
|
-
* @param {string} match Match intero del pezzo di testo da cui si è estrapolata l'aggregazione, da rimpiazzare col valore calcolato
|
|
699
|
-
*/
|
|
700
|
-
function ThAggregation(func, format, match) {
|
|
701
|
-
this.func = func;
|
|
702
|
-
this.format = format;
|
|
703
|
-
this.match = match;
|
|
704
|
-
}
|
|
705
|
-
return ThAggregation;
|
|
706
|
-
}());
|
|
707
|
-
|
|
708
|
-
//Angular
|
|
709
|
-
/** Componente rappresentante una singola cella del body della tabella */
|
|
710
|
-
var EsTd = /** @class */ (function () {
|
|
711
|
-
/** @ignore */
|
|
712
|
-
function EsTd(myself, renderer, _viewContainer, sanitizer) {
|
|
713
|
-
this.myself = myself;
|
|
714
|
-
this.renderer = renderer;
|
|
715
|
-
this._viewContainer = _viewContainer;
|
|
716
|
-
this.sanitizer = sanitizer;
|
|
717
|
-
/** Id della cella, dev'essere lo stesso della colonna **EsTh** relativa */
|
|
718
|
-
this.ID = "";
|
|
719
|
-
/** Valore da mostrare all'interno della cella. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */
|
|
720
|
-
this.Display = null;
|
|
721
|
-
/** Template Angular da istanziare per questo TD */
|
|
722
|
-
this.Template = null;
|
|
723
|
-
}
|
|
724
|
-
Object.defineProperty(EsTd.prototype, "Visible", {
|
|
725
|
-
/**
|
|
726
|
-
* Restituisce lo stato di Visibilità della cella in oggetto
|
|
727
|
-
*
|
|
728
|
-
* @returns {boolean} **true** se visibile, **false** altrimenti
|
|
729
|
-
*/
|
|
730
|
-
get: function () {
|
|
731
|
-
if (this._Visible == undefined)
|
|
732
|
-
this._Visible = true;
|
|
733
|
-
return this._Visible;
|
|
734
|
-
},
|
|
735
|
-
/**
|
|
736
|
-
* Imposta la visibilità o meno della cella, si traduce nell'applicazione o rimozione della classe **app-display-none**
|
|
737
|
-
*
|
|
738
|
-
* @param {boolean} expression Indicazione della visibilità
|
|
739
|
-
*/
|
|
740
|
-
set: function (expression) {
|
|
741
|
-
this._Visible = expression;
|
|
742
|
-
if (expression)
|
|
743
|
-
this.renderer.removeClass(this.myself.nativeElement, "app-display-none");
|
|
744
|
-
else
|
|
745
|
-
this.renderer.addClass(this.myself.nativeElement, "app-display-none");
|
|
746
|
-
},
|
|
747
|
-
enumerable: false,
|
|
748
|
-
configurable: true
|
|
749
|
-
});
|
|
750
|
-
/** @ignore */
|
|
751
|
-
EsTd.prototype.ngAfterViewInit = function () {
|
|
752
|
-
// Se è Internal significa che è gestita internamente da ES-TABLE quindi evito di fare sti due passaggi di lettura del DOM
|
|
753
|
-
if (this.Internal)
|
|
754
|
-
return;
|
|
755
|
-
// L'hash è calcolato dalla ES-table in fase di binding
|
|
756
|
-
this.Context = this.Context || this.getTemplateContext()._hash;
|
|
757
|
-
this.Content = this.Display === null || this.Display === "" ? this.sanitizer.bypassSecurityTrustHtml(this.myself.nativeElement.innerHTML) : this.sanitizer.bypassSecurityTrustHtml(this.Display);
|
|
758
|
-
this.Class = this.myself.nativeElement.className.replace("app-display-none", "");
|
|
759
|
-
};
|
|
760
|
-
/** Ottiene il contesto della view su cui è istanziato il componente */
|
|
761
|
-
EsTd.prototype.getTemplateContext = function () {
|
|
762
|
-
// NGBUG: (<any>this._viewContainer)._view non esiste più in IVY: https://stackoverflow.com/questions/60398827/getting-the-context-of-the-template-inside-of-which-my-component-has-been-render
|
|
763
|
-
var vc = this._viewContainer;
|
|
764
|
-
var context;
|
|
765
|
-
// Primo giro di recupero del contesto, supponendo di non avere a che fare col compilatore IVY
|
|
766
|
-
if (vc._view == null)
|
|
767
|
-
context = null;
|
|
768
|
-
else if (vc._view.parent && !vc._view.context.$implicit && vc._view.parent.context && vc._view.parent.context.$implicit)
|
|
769
|
-
context = vc._view.parent.context.$implicit;
|
|
770
|
-
else if (vc._view.context && vc._view.context.ngIf)
|
|
771
|
-
context = vc._view.viewContainerParent.context.$implicit;
|
|
772
|
-
else
|
|
773
|
-
context = vc._view.context.$implicit;
|
|
774
|
-
if (context)
|
|
775
|
-
return context;
|
|
776
|
-
// Se non ho ancora trovato il contesto probabilmente sono in IVY e devo fare dei lookup un po' incasinati per beccarlo
|
|
777
|
-
var array = this._viewContainer._hostLView;
|
|
778
|
-
for (var i = 0; i < array.length; i++) {
|
|
779
|
-
var item = array[i];
|
|
780
|
-
if (item && item.$implicit && !item.ngIf)
|
|
781
|
-
return item.$implicit;
|
|
782
|
-
// Second level search for the real context in case the first one we find is an ngIf
|
|
783
|
-
if (item && item.length && item.length > 0) {
|
|
784
|
-
for (var ii = 0; ii < item.length; ii++) {
|
|
785
|
-
var iitem = item[ii];
|
|
786
|
-
if (iitem && iitem.$implicit && !iitem.ngIf)
|
|
787
|
-
return iitem.$implicit;
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
};
|
|
792
|
-
return EsTd;
|
|
793
|
-
}());
|
|
794
|
-
EsTd.decorators = [
|
|
795
|
-
{ type: i0.Component, args: [{
|
|
796
|
-
selector: "[es-td]",
|
|
797
|
-
template: "<span>\r\n <ng-content></ng-content>\r\n</span>",
|
|
798
|
-
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
799
|
-
},] }
|
|
800
|
-
];
|
|
801
|
-
EsTd.ctorParameters = function () { return [
|
|
802
|
-
{ type: i0.ElementRef },
|
|
803
|
-
{ type: i0.Renderer2 },
|
|
804
|
-
{ type: i0.ViewContainerRef },
|
|
805
|
-
{ type: platformBrowser.DomSanitizer }
|
|
806
|
-
]; };
|
|
807
|
-
EsTd.propDecorators = {
|
|
808
|
-
ID: [{ type: i0.Input, args: ['es-td',] }],
|
|
809
|
-
Internal: [{ type: i0.Input }],
|
|
810
|
-
RouterLink: [{ type: i0.Input }],
|
|
811
|
-
Display: [{ type: i0.Input }],
|
|
812
|
-
Template: [{ type: i0.Input }],
|
|
813
|
-
Context: [{ type: i0.Input }],
|
|
814
|
-
Visible: [{ type: i0.Input }]
|
|
815
|
-
};
|
|
816
|
-
|
|
817
|
-
//Angular
|
|
818
|
-
/** Componente rappresentante una Colonna della tabella */
|
|
819
|
-
var EsTh = /** @class */ (function () {
|
|
820
|
-
/** @ignore */
|
|
821
|
-
function EsTh(myself, renderer) {
|
|
822
|
-
this.myself = myself;
|
|
823
|
-
this.renderer = renderer;
|
|
824
|
-
/** Dizionario di mappatura con ordinamento attuale e ordinamento successivo per gestire i passaggi di stato */
|
|
825
|
-
this.orderNext = { "NONE": "DESC", "DESC": "ASC", "ASC": null };
|
|
826
|
-
/** Indica se si sta effettuando un'operazione di resize su questa colonna */
|
|
827
|
-
this.resizingThis = false;
|
|
828
|
-
/**
|
|
829
|
-
* Storicizza l'offset di partenza del resize dell'elemento HTML per poter calcolare la nuova dimensione richiesta durente il resize
|
|
830
|
-
*
|
|
831
|
-
* nuova width = startOffset + posizione X del mouse
|
|
832
|
-
*/
|
|
833
|
-
this.startOffset = null;
|
|
834
|
-
/** Id della colonna, dev'essere lo stesso per tutti gli **EsTd** relativi */
|
|
835
|
-
this.ID = "";
|
|
836
|
-
/** Indica se questa colonna è ordinabile o meno */
|
|
837
|
-
this.Orderable = true;
|
|
838
|
-
/** Valore da mostrare all'interno della colonna. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */
|
|
839
|
-
this.Display = "";
|
|
840
|
-
/** Indica se le dimnsioni di questa colonna sono modificabili o meno */
|
|
841
|
-
this.Resizable = false;
|
|
842
|
-
/** Indica se questo header è pinnato. In caso lo fosse presenta il tastino per effettuare lo spinning */
|
|
843
|
-
this.Pinned = false;
|
|
844
|
-
/**
|
|
845
|
-
* Indica se sta venendo eseguita una operazione di ricerca o meno, serve per evitare l'esecuzione di eventuale codice che potrebbe dare fastidio
|
|
846
|
-
* come ad esempio l'escuzione di un ordinamento durante il caricamento di dati nuovi
|
|
847
|
-
*/
|
|
848
|
-
this.SearchInProgress = false;
|
|
849
|
-
/** Indica se il testo presente in questo Header può andare a capo o meno, di default non può */
|
|
850
|
-
this.Wrap = false;
|
|
851
|
-
/** Indica se la colonna è fixed, cioè se non può né essere nascosta, né riposizionata. Solo le prime colonne possono essere Fixed */
|
|
852
|
-
this.Fixed = false;
|
|
853
|
-
/** Template Angular da istanziare per questo TH */
|
|
854
|
-
this.Template = null;
|
|
855
|
-
/** Evento emesso al cambio di ordinamento effettuato su questa colonna */
|
|
856
|
-
this.onOrderChange = new i0.EventEmitter();
|
|
857
|
-
/** Evento emesso all'unpinning della colonna */
|
|
858
|
-
this.onUnpinning = new i0.EventEmitter();
|
|
859
|
-
/** Impostato dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header */
|
|
860
|
-
this._referenced = false;
|
|
861
|
-
}
|
|
862
|
-
Object.defineProperty(EsTh.prototype, "Visible", {
|
|
863
|
-
/**
|
|
864
|
-
* Restituisce lo stato di Visibilità della colonna in oggetto
|
|
865
|
-
*
|
|
866
|
-
* @returns {boolean} **true** se visibile, **false** altrimenti
|
|
867
|
-
*/
|
|
868
|
-
get: function () {
|
|
869
|
-
if (this._Visible == undefined)
|
|
870
|
-
this._Visible = true;
|
|
871
|
-
return this._Visible;
|
|
872
|
-
},
|
|
873
|
-
/**
|
|
874
|
-
* Imposta la visibilità o meno della colonna, si traduce nell'applicazione o rimozione della classe **app-display-none**
|
|
875
|
-
*
|
|
876
|
-
* @param {boolean} expression Indicazione della visibilità
|
|
877
|
-
*/
|
|
878
|
-
set: function (expression) {
|
|
879
|
-
this._Visible = expression;
|
|
880
|
-
if (expression)
|
|
881
|
-
this.renderer.removeClass(this.myself.nativeElement, "app-display-none");
|
|
882
|
-
else
|
|
883
|
-
this.renderer.addClass(this.myself.nativeElement, "app-display-none");
|
|
884
|
-
},
|
|
885
|
-
enumerable: false,
|
|
886
|
-
configurable: true
|
|
887
|
-
});
|
|
888
|
-
/** @ignore */
|
|
889
|
-
EsTh.prototype.ngAfterViewInit = function () {
|
|
890
|
-
//Assegnare direttamente il content è più veloce che passare dal native element per qualche motivo
|
|
891
|
-
this.Description = this.Display === null || this.Display === "" ? this.content.nativeElement.innerText : this.Display;
|
|
892
|
-
this.Class = this.myself.nativeElement.className.replace("app-display-none", "");
|
|
893
|
-
//Resize
|
|
894
|
-
if (this.Resizable)
|
|
895
|
-
this.renderer.addClass(this.myself.nativeElement, "app-relative");
|
|
896
|
-
};
|
|
897
|
-
/** Emette l'evento di unpinning */
|
|
898
|
-
EsTh.prototype.unpin = function () {
|
|
899
|
-
this.onUnpinning.emit(this.ID);
|
|
900
|
-
};
|
|
901
|
-
/** Gestisce la modifica dell'ordinamento qualora venisse cliccato su questa colonna */
|
|
902
|
-
EsTh.prototype.setupNextOrderAndNotify = function () {
|
|
903
|
-
if (!this.ID) {
|
|
904
|
-
console.log("Attempt to order a column without ID. Operation ignored");
|
|
905
|
-
return;
|
|
906
|
-
}
|
|
907
|
-
if (this.SearchInProgress) {
|
|
908
|
-
console.log("Attempt to order a column during a search. Operation ignored");
|
|
909
|
-
return;
|
|
910
|
-
}
|
|
911
|
-
if (!this.OrderBy || !this.Orderable)
|
|
912
|
-
return;
|
|
913
|
-
var nextOrder = this.orderNext[this.Order || "NONE"];
|
|
914
|
-
this.Order = nextOrder;
|
|
915
|
-
this.onOrderChange.emit(this.Order);
|
|
916
|
-
};
|
|
917
|
-
/**
|
|
918
|
-
* Evento di inizio resize della colonna
|
|
919
|
-
*
|
|
920
|
-
* @param {any} ev Evento MouseDown
|
|
921
|
-
*/
|
|
922
|
-
EsTh.prototype.onResizeStart = function (ev) {
|
|
923
|
-
if (!this.Resizable)
|
|
924
|
-
return;
|
|
925
|
-
this.resizingThis = true;
|
|
926
|
-
this.startOffset = this.myself.nativeElement.offsetWidth - ev.pageX;
|
|
927
|
-
};
|
|
928
|
-
/** Listener per la fine dell'operazione di resize */
|
|
929
|
-
EsTh.prototype.onMouseUp = function () {
|
|
930
|
-
if (!this.Resizable)
|
|
931
|
-
return;
|
|
932
|
-
this.resizingThis = false;
|
|
933
|
-
};
|
|
536
|
+
/** Classe che rappresenta un filtro su un gruppo */
|
|
537
|
+
var GroupFilter = /** @class */ (function () {
|
|
934
538
|
/**
|
|
935
|
-
*
|
|
539
|
+
* Costruttore
|
|
936
540
|
*
|
|
937
|
-
* @param {
|
|
541
|
+
* @param {string} column ID della colonna gruppata per cui si richiede di filtrare
|
|
542
|
+
* @param {string} value Valore del gruppo su questa **column** per cui si richiede di filtrare
|
|
938
543
|
*/
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
selector: "[es-th]",
|
|
953
|
-
template: "<span (click)=\"setupNextOrderAndNotify()\" [class.app-no-selection]=\"!!ID && Orderable\" [class.app-pointer]=\"!!ID && Orderable\">\r\n <span #content>\r\n <ng-container *ngIf=\"Template\">\r\n <ng-container *ngTemplateOutlet=\"Template\"></ng-container>\r\n </ng-container>\r\n <ng-content *ngIf=\"!Template\"></ng-content>\r\n </span> \r\n <span class=\"fa\" [class.fa-chevron-down]=\"Order == 'DESC'\" [class.fa-chevron-up]=\"Order == 'ASC'\"></span>\r\n</span>\r\n<span *ngIf=\"Pinned && !Fixed\" class=\"app-pointer fa fa-thumb-tack est-quick-unpin\" (click)=\"unpin()\"></span>\r\n<div [hidden]=\"!Resizable || Fixed || Pinned\" class=\"est-head-resizer\" (mousedown)=\"onResizeStart($event)\">\r\n <div class=\"est-head-resizer-internal\"></div>\r\n</div>",
|
|
954
|
-
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
955
|
-
},] }
|
|
956
|
-
];
|
|
957
|
-
EsTh.ctorParameters = function () { return [
|
|
958
|
-
{ type: i0.ElementRef },
|
|
959
|
-
{ type: i0.Renderer2 }
|
|
960
|
-
]; };
|
|
961
|
-
EsTh.propDecorators = {
|
|
962
|
-
ID: [{ type: i0.Input, args: ['es-th',] }],
|
|
963
|
-
Order: [{ type: i0.Input }],
|
|
964
|
-
Orderable: [{ type: i0.Input }],
|
|
965
|
-
Display: [{ type: i0.Input }],
|
|
966
|
-
Resizable: [{ type: i0.Input }],
|
|
967
|
-
Pinned: [{ type: i0.Input }],
|
|
968
|
-
SearchInProgress: [{ type: i0.Input }],
|
|
969
|
-
OrderBy: [{ type: i0.Input }],
|
|
970
|
-
Wrap: [{ type: i0.Input }],
|
|
971
|
-
Fixed: [{ type: i0.Input }],
|
|
972
|
-
Template: [{ type: i0.Input }],
|
|
973
|
-
onOrderChange: [{ type: i0.Output }],
|
|
974
|
-
onUnpinning: [{ type: i0.Output }],
|
|
975
|
-
content: [{ type: i0.ViewChild, args: ["content", { static: false },] }],
|
|
976
|
-
Visible: [{ type: i0.Input }],
|
|
977
|
-
onMouseUp: [{ type: i0.HostListener, args: ['window:mouseup.out-zone',] }],
|
|
978
|
-
onMouseMove: [{ type: i0.HostListener, args: ['window:mousemove.out-zone', ['$event'],] }]
|
|
979
|
-
};
|
|
544
|
+
function GroupFilter(column, value) {
|
|
545
|
+
this.column = column;
|
|
546
|
+
this.value = value;
|
|
547
|
+
}
|
|
548
|
+
return GroupFilter;
|
|
549
|
+
}());
|
|
550
|
+
|
|
551
|
+
/** Raccolta di tutti gli Input dell'EsTable a cui può essere logicamente sensato assegnare default per progetto */
|
|
552
|
+
var EsTableDefaultable = /** @class */ (function () {
|
|
553
|
+
function EsTableDefaultable() {
|
|
554
|
+
}
|
|
555
|
+
return EsTableDefaultable;
|
|
556
|
+
}());
|
|
980
557
|
|
|
981
558
|
/** Direttiva per la dichiarazione snella di un EsTd da emettere per ogni elemento, data una colonna */
|
|
982
559
|
var EsTdDirective = /** @class */ (function () {
|
|
@@ -1026,6 +603,8 @@
|
|
|
1026
603
|
this.th = "";
|
|
1027
604
|
/** Indica se la colonna è pinnata o no */
|
|
1028
605
|
this.thPinned = false;
|
|
606
|
+
/** Indica se la colonna è pinnabile o no */
|
|
607
|
+
this.thPinnable = true;
|
|
1029
608
|
/** Indica le dimensioni che deve avere questa colonna quando viene pinnata, senza questo tutte le colonne mi collasserebbero l'una sull'altra */
|
|
1030
609
|
this.thPinnedWidth = 150;
|
|
1031
610
|
/** Indicazione sulla visibilità della colonna */
|
|
@@ -1060,6 +639,7 @@
|
|
|
1060
639
|
EsThDirective.propDecorators = {
|
|
1061
640
|
th: [{ type: i0.Input }],
|
|
1062
641
|
thPinned: [{ type: i0.Input }],
|
|
642
|
+
thPinnable: [{ type: i0.Input }],
|
|
1063
643
|
thPinnedWidth: [{ type: i0.Input }],
|
|
1064
644
|
thVisible: [{ type: i0.Input }],
|
|
1065
645
|
thFixed: [{ type: i0.Input }],
|
|
@@ -1076,13 +656,6 @@
|
|
|
1076
656
|
thAggregation: [{ type: i0.Input }]
|
|
1077
657
|
};
|
|
1078
658
|
|
|
1079
|
-
/** Token che indica il locale da utilizzare all'interno del componente. Supportati solo "it-IT" ed "en-US" */
|
|
1080
|
-
var EST_LOCALE = new i0.InjectionToken('EST_LOCALE');
|
|
1081
|
-
/** Token che indica se emettere log a console o meno */
|
|
1082
|
-
var EST_DEBUG = new i0.InjectionToken('EST_DEBUG');
|
|
1083
|
-
/** Token che indica i default da assegnare agli Input */
|
|
1084
|
-
var EST_DEFAULTS = new i0.InjectionToken('EST_DEFAULTS');
|
|
1085
|
-
|
|
1086
659
|
/** Classe di localizzazione per il componente **EsTableComponent** */
|
|
1087
660
|
var EsTableLoc = /** @class */ (function (_super) {
|
|
1088
661
|
__extends(EsTableLoc, _super);
|
|
@@ -1119,14 +692,184 @@
|
|
|
1119
692
|
{ type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [EST_LOCALE,] }] }
|
|
1120
693
|
]; };
|
|
1121
694
|
|
|
1122
|
-
/**
|
|
1123
|
-
var
|
|
1124
|
-
|
|
695
|
+
/** Classe contenente la gestione delle importazioni */
|
|
696
|
+
var ExportHandler = /** @class */ (function () {
|
|
697
|
+
/** @ignore Costruttore*/
|
|
698
|
+
function ExportHandler(est, expExts, msgExts, utiExts, dateExts) {
|
|
699
|
+
this.est = est;
|
|
700
|
+
this.expExts = expExts;
|
|
701
|
+
this.msgExts = msgExts;
|
|
702
|
+
this.utiExts = utiExts;
|
|
703
|
+
this.dateExts = dateExts;
|
|
1125
704
|
}
|
|
1126
|
-
|
|
705
|
+
/**
|
|
706
|
+
* Effettua l'esportazione dei dati
|
|
707
|
+
*
|
|
708
|
+
* @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella
|
|
709
|
+
*/
|
|
710
|
+
ExportHandler.prototype.tryExport = function (format) {
|
|
711
|
+
var _this = this;
|
|
712
|
+
if (!this.est.ExportFunction)
|
|
713
|
+
return;
|
|
714
|
+
if (this.est.reportMode)
|
|
715
|
+
this.est.ExportFunction(format);
|
|
716
|
+
else
|
|
717
|
+
this.est.ExportFunction(function (data, cancel) {
|
|
718
|
+
if (cancel === void 0) { cancel = false; }
|
|
719
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
720
|
+
var _b, _a_1;
|
|
721
|
+
var _this = this;
|
|
722
|
+
return __generator(this, function (_c) {
|
|
723
|
+
switch (_c.label) {
|
|
724
|
+
case 0:
|
|
725
|
+
if (cancel)
|
|
726
|
+
return [2 /*return*/];
|
|
727
|
+
if (data.length == 0) {
|
|
728
|
+
this.msgExts.simpleWarning(this.est.lc.loc("Cannot export an empty dataset"));
|
|
729
|
+
return [2 /*return*/];
|
|
730
|
+
}
|
|
731
|
+
this.setupExport(data);
|
|
732
|
+
if (!(format == "CSV")) return [3 /*break*/, 1];
|
|
733
|
+
this.est.cdr.detectChanges();
|
|
734
|
+
setTimeout(function () { _this.est.exportDownloader.nativeElement.click(); });
|
|
735
|
+
return [3 /*break*/, 7];
|
|
736
|
+
case 1:
|
|
737
|
+
if (!(format == "XLSX")) return [3 /*break*/, 6];
|
|
738
|
+
if (this.ExcelJS != null) {
|
|
739
|
+
this.exportExcel();
|
|
740
|
+
return [2 /*return*/];
|
|
741
|
+
}
|
|
742
|
+
_c.label = 2;
|
|
743
|
+
case 2:
|
|
744
|
+
_c.trys.push([2, 4, , 5]);
|
|
745
|
+
_b = this;
|
|
746
|
+
return [4 /*yield*/, import('exceljs')];
|
|
747
|
+
case 3:
|
|
748
|
+
_b.ExcelJS = _c.sent();
|
|
749
|
+
this.exportExcel();
|
|
750
|
+
return [3 /*break*/, 5];
|
|
751
|
+
case 4:
|
|
752
|
+
_a_1 = _c.sent();
|
|
753
|
+
throw "Impossibile caricare la libreria per l'esportazione in Excel";
|
|
754
|
+
case 5: return [3 /*break*/, 7];
|
|
755
|
+
case 6: throw "Formato di esportazione non riconosciuto";
|
|
756
|
+
case 7: return [2 /*return*/];
|
|
757
|
+
}
|
|
758
|
+
});
|
|
759
|
+
});
|
|
760
|
+
});
|
|
761
|
+
};
|
|
762
|
+
/** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **this.est.headers** e sui dati **this.est.data** */
|
|
763
|
+
ExportHandler.prototype.exportExcel = function () {
|
|
764
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
765
|
+
var iFix, workbook, sheet, header, i, h, i, row, item, i_1, h, cell, val, buffer, blob, objectUrl, fn;
|
|
766
|
+
return __generator(this, function (_b) {
|
|
767
|
+
switch (_b.label) {
|
|
768
|
+
case 0:
|
|
769
|
+
iFix = 1;
|
|
770
|
+
workbook = new this.ExcelJS.Workbook();
|
|
771
|
+
workbook.creator = "Ema's big Es-Table";
|
|
772
|
+
workbook.created = new Date();
|
|
773
|
+
sheet = workbook.addWorksheet('Data');
|
|
774
|
+
header = sheet.getRow(1);
|
|
775
|
+
header.font = { bold: true };
|
|
776
|
+
this.est.headers = this.est.headers.sort(function (a, b) { return a.order - b.order; });
|
|
777
|
+
for (i = 0; i < this.est.headers.length; i++) {
|
|
778
|
+
h = this.est.headers[i];
|
|
779
|
+
header.getCell(i + iFix).value = h.label;
|
|
780
|
+
}
|
|
781
|
+
for (i = 0; i < this.est.data.length; i++) {
|
|
782
|
+
row = sheet.getRow(i + iFix + 1);
|
|
783
|
+
item = this.est.data[i];
|
|
784
|
+
for (i_1 = 0; i_1 < this.est.headers.length; i_1++) {
|
|
785
|
+
h = this.est.headers[i_1];
|
|
786
|
+
cell = row.getCell(i_1 + 1);
|
|
787
|
+
val = item[h.key];
|
|
788
|
+
if (val == null || val == undefined)
|
|
789
|
+
cell.value = "";
|
|
790
|
+
else {
|
|
791
|
+
switch (h.type) {
|
|
792
|
+
case 'date':
|
|
793
|
+
cell.value = this.dateExts.getDateConvertion(val).toDate();
|
|
794
|
+
case 'number':
|
|
795
|
+
cell.value = parseFloat(val.replace(',', '.'));
|
|
796
|
+
default:
|
|
797
|
+
cell.value = val;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
return [4 /*yield*/, workbook.xlsx.writeBuffer()];
|
|
803
|
+
case 1:
|
|
804
|
+
buffer = _b.sent();
|
|
805
|
+
blob = new Blob([buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;" });
|
|
806
|
+
objectUrl = window.URL.createObjectURL(blob);
|
|
807
|
+
fn = this.est.ExportFileName;
|
|
808
|
+
this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + ".xlsx");
|
|
809
|
+
return [2 /*return*/];
|
|
810
|
+
}
|
|
811
|
+
});
|
|
812
|
+
});
|
|
813
|
+
};
|
|
814
|
+
/**
|
|
815
|
+
* Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**
|
|
816
|
+
*
|
|
817
|
+
* @param {any[]} items Oggetti da esportare
|
|
818
|
+
*/
|
|
819
|
+
ExportHandler.prototype.setupExport = function (items) {
|
|
820
|
+
var drcd = this.est.DynamicRowColumnsDefinition;
|
|
821
|
+
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);
|
|
822
|
+
this.est.data = items;
|
|
823
|
+
};
|
|
824
|
+
return ExportHandler;
|
|
1127
825
|
}());
|
|
1128
826
|
|
|
1129
|
-
|
|
827
|
+
/**
|
|
828
|
+
* Classe che identifica un ordinamento di una colonna
|
|
829
|
+
*/
|
|
830
|
+
var AppOrdering = /** @class */ (function () {
|
|
831
|
+
/**
|
|
832
|
+
* Costruttore
|
|
833
|
+
*
|
|
834
|
+
* @param {string} id ID della colonna a cui si vogliono applicare ordinamenti, deve combaciare all'id messo nella dichiarazione dell'ES-TD/TH
|
|
835
|
+
* @param {'DESC' | 'ASC' } order Ordinamento da applicare alla colonna, Discendente/Ascendente, default 'null' per indicare assenza di ordine
|
|
836
|
+
*/
|
|
837
|
+
function AppOrdering(id, order) {
|
|
838
|
+
this.id = id;
|
|
839
|
+
this.order = order;
|
|
840
|
+
}
|
|
841
|
+
return AppOrdering;
|
|
842
|
+
}());
|
|
843
|
+
|
|
844
|
+
/** Definizione di una colonna, utilizzato nella dialog che permette di modificare le posizioni e le visibilità */
|
|
845
|
+
var EsTableColumn = /** @class */ (function () {
|
|
846
|
+
/**
|
|
847
|
+
* Costruttore
|
|
848
|
+
*
|
|
849
|
+
* @param {string} id Id colonna
|
|
850
|
+
* @param {string} description Descrizione (Header)
|
|
851
|
+
* @param {boolean} visible Indica se di default mostrarla o meno
|
|
852
|
+
* @param {boolean} fixed Indica se è una colonna fixed
|
|
853
|
+
* @param {boolean} pinned Indica se è una colonna pinnata
|
|
854
|
+
* @param {number} pinnedWidth Indica la dimensione da assegnare a questa colonna quando è pinnata
|
|
855
|
+
* @param {TemplateRef<any>} template Indica il template da usare per mostrare il testo dell'Header
|
|
856
|
+
* @param {TemplateRef<any>[]} parentTemplates Indica la lista di template padri collegata a questo header
|
|
857
|
+
*/
|
|
858
|
+
function EsTableColumn(id, description, visible, fixed, pinned, pinnable, pinnedWidth, template, parentTemplates) {
|
|
859
|
+
this.id = id;
|
|
860
|
+
this.description = description;
|
|
861
|
+
this.visible = visible;
|
|
862
|
+
this.fixed = fixed;
|
|
863
|
+
this.pinned = pinned;
|
|
864
|
+
this.pinnable = pinnable;
|
|
865
|
+
this.pinnedWidth = pinnedWidth;
|
|
866
|
+
this.template = template;
|
|
867
|
+
this.parentTemplates = parentTemplates;
|
|
868
|
+
}
|
|
869
|
+
return EsTableColumn;
|
|
870
|
+
}());
|
|
871
|
+
|
|
872
|
+
// Angular
|
|
1130
873
|
/** Classe che gestisce tutte le informaizoni relative alle colonne: visibilità, posizione, stato di pin/unpin, ecc ecc... */
|
|
1131
874
|
var ColumnMetadataHandler = /** @class */ (function () {
|
|
1132
875
|
/** @ignore Costruttore*/
|
|
@@ -1191,7 +934,7 @@
|
|
|
1191
934
|
*
|
|
1192
935
|
* Costo: 1 scan EsThs
|
|
1193
936
|
*
|
|
1194
|
-
* @param {
|
|
937
|
+
* @param {EsThDirective[]} ths Colonne della tabella
|
|
1195
938
|
*/
|
|
1196
939
|
ColumnMetadataHandler.prototype.reviewColumnsList = function (ths) {
|
|
1197
940
|
var _this = this;
|
|
@@ -1200,30 +943,18 @@
|
|
|
1200
943
|
return;
|
|
1201
944
|
var _loop_1 = function (i) {
|
|
1202
945
|
var th = ths[i];
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
// Se non ho un id il th è considerato inerte
|
|
1216
|
-
if (!column_1)
|
|
1217
|
-
return "continue";
|
|
1218
|
-
// Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere
|
|
1219
|
-
// Di default la visibilità è quella impostata nel componente
|
|
1220
|
-
if ((this_1.est.HiddenColumns || th.thVisible) && th.thIf) {
|
|
1221
|
-
var previouslyPinned = !this_1.est.ColumnsList || this_1.est.ColumnsList.length == 0 ? null : this_1.est.ColumnsList.find(function (t) { return t.id == column_1; }) || null;
|
|
1222
|
-
var toAdd = new EsTableColumn(column_1, null, th.thVisible, (th.thFixed || th.thGroup), previouslyPinned == null ? th.thPinned : previouslyPinned.pinned, th.thPinnedWidth, th.Template, th._thParents);
|
|
1223
|
-
if (previouslyPinned)
|
|
1224
|
-
toAdd.prev_index = previouslyPinned.prev_index;
|
|
1225
|
-
this_1.est.TMPColumnsList.push(toAdd);
|
|
1226
|
-
}
|
|
946
|
+
var column = th.th;
|
|
947
|
+
// Se non ho un id il th è considerato inerte
|
|
948
|
+
if (!column)
|
|
949
|
+
return "continue";
|
|
950
|
+
// Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere
|
|
951
|
+
// Di default la visibilità è quella impostata nel componente
|
|
952
|
+
if ((this_1.est.HiddenColumns || th.thVisible) && th.thIf) {
|
|
953
|
+
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;
|
|
954
|
+
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);
|
|
955
|
+
if (previouslyPinned)
|
|
956
|
+
toAdd.prev_index = previouslyPinned.prev_index;
|
|
957
|
+
this_1.est.TMPColumnsList.push(toAdd);
|
|
1227
958
|
}
|
|
1228
959
|
};
|
|
1229
960
|
var this_1 = this;
|
|
@@ -1263,33 +994,21 @@
|
|
|
1263
994
|
// Sposto tutti gli header fixed o pinned all'inizio
|
|
1264
995
|
for (var i = 0; i < ths.length; i++) {
|
|
1265
996
|
var th = ths[i];
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
997
|
+
thsCache[th.th] = th;
|
|
998
|
+
// Riassegno sempre per ripulire valori di partenza o per aggiornarli in caso di modifiche utente
|
|
999
|
+
th.thPinned = (!columnsCache[th.th] && th.thPinned) || (columnsCache[th.th] && columnsCache[th.th].pinned);
|
|
1000
|
+
if (th.thPinned) {
|
|
1001
|
+
if (i != pinneds)
|
|
1002
|
+
this.utilities.arrayMove(ths, i, pinneds);
|
|
1003
|
+
pinneds++;
|
|
1273
1004
|
}
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
if (i != pinneds)
|
|
1280
|
-
this.utilities.arrayMove(ths, i, pinneds);
|
|
1281
|
-
pinneds++;
|
|
1282
|
-
}
|
|
1283
|
-
//In questo caso sono informazioni statiche invece, non modificabili dall'utente, quindi non mi dò preoccupazioni
|
|
1284
|
-
if ((th.thFixed || th.thGroup) && !th.thPinned) {
|
|
1285
|
-
if (i != pinneds + fixeds)
|
|
1286
|
-
this.utilities.arrayMove(ths, i, pinneds + fixeds);
|
|
1287
|
-
fixeds++;
|
|
1288
|
-
}
|
|
1005
|
+
//In questo caso sono informazioni statiche invece, non modificabili dall'utente, quindi non mi dò preoccupazioni
|
|
1006
|
+
if ((th.thFixed || th.thGroup) && !th.thPinned) {
|
|
1007
|
+
if (i != pinneds + fixeds)
|
|
1008
|
+
this.utilities.arrayMove(ths, i, pinneds + fixeds);
|
|
1009
|
+
fixeds++;
|
|
1289
1010
|
}
|
|
1290
1011
|
}
|
|
1291
|
-
if (this.utilities.isEsTh(ths[0]) || this.utilities.isEsTd(tds[0]))
|
|
1292
|
-
return;
|
|
1293
1012
|
// Cache degli indici per riposizionare i td come i th
|
|
1294
1013
|
for (var i = 0; i < ths.length; i++)
|
|
1295
1014
|
columnsIndexCache[ths[i].th] = i;
|
|
@@ -1376,8 +1095,8 @@
|
|
|
1376
1095
|
*
|
|
1377
1096
|
* Costo: 1 scan ColumnsList, 1 scan EsThs, 1 scan EsTds
|
|
1378
1097
|
*
|
|
1379
|
-
* @param {
|
|
1380
|
-
* @param {
|
|
1098
|
+
* @param {EsThDirective[]} ths Header della tabella
|
|
1099
|
+
* @param {EsTdDirective[]} tds Celle della tabella
|
|
1381
1100
|
* @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione
|
|
1382
1101
|
*/
|
|
1383
1102
|
ColumnMetadataHandler.prototype.refreshColumnsVisibility = function (ths, tds, view) {
|
|
@@ -1399,26 +1118,16 @@
|
|
|
1399
1118
|
// Definisco se la colonna è visibile in base alla sua rappresentazione locale in ColumnsList
|
|
1400
1119
|
for (var i = 0; i < ths.length; i++) {
|
|
1401
1120
|
var th = ths[i];
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
fixedThs[th.ID] = true;
|
|
1406
|
-
}
|
|
1407
|
-
else {
|
|
1408
|
-
th.thVisible = th.thFixed || (columnsCache[th.th] ? columnsCache[th.th].visible : th.thVisible);
|
|
1409
|
-
if (th.thFixed || th.thGroup)
|
|
1410
|
-
fixedThs[th.th] = true;
|
|
1411
|
-
}
|
|
1121
|
+
th.thVisible = th.thFixed || (columnsCache[th.th] ? columnsCache[th.th].visible : th.thVisible);
|
|
1122
|
+
if (th.thFixed || th.thGroup)
|
|
1123
|
+
fixedThs[th.th] = true;
|
|
1412
1124
|
}
|
|
1413
1125
|
}
|
|
1414
1126
|
if (tds) {
|
|
1415
1127
|
// Definisco se la cella è visibile in base alla sua rappresentazione locale in ColumnsList
|
|
1416
1128
|
for (var i = 0; i < tds.length; i++) {
|
|
1417
1129
|
var td = tds[i];
|
|
1418
|
-
|
|
1419
|
-
td.Visible = fixedThs[td.ID] || (columnsCache[td.ID] ? columnsCache[td.ID].visible : td.Visible);
|
|
1420
|
-
else
|
|
1421
|
-
td.tdVisible = fixedThs[td.td] || (columnsCache[td.td] ? columnsCache[td.td].visible : td.tdVisible);
|
|
1130
|
+
td.tdVisible = fixedThs[td.td] || (columnsCache[td.td] ? columnsCache[td.td].visible : td.tdVisible);
|
|
1422
1131
|
}
|
|
1423
1132
|
}
|
|
1424
1133
|
this.est.changed();
|
|
@@ -1427,38 +1136,26 @@
|
|
|
1427
1136
|
* Allinea gli ordinamenti dati fra le **EsThs** e le informazioni all'interno della View bindata
|
|
1428
1137
|
*
|
|
1429
1138
|
* @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione
|
|
1430
|
-
* @param {
|
|
1139
|
+
* @param {EsThDirective[]} ths Colonne della tabella
|
|
1431
1140
|
*/
|
|
1432
1141
|
ColumnMetadataHandler.prototype.alignHeadersOrdering = function (ths, view) {
|
|
1433
1142
|
var orders = view ? view.orders : this.est.arrayOrders;
|
|
1434
1143
|
for (var i = 0; i < ths.length; i++) {
|
|
1435
1144
|
var th = ths[i];
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
var or = orders[i_1];
|
|
1442
|
-
if (or.id == th.ID)
|
|
1443
|
-
th.Order = or.order;
|
|
1444
|
-
}
|
|
1445
|
-
}
|
|
1446
|
-
else {
|
|
1447
|
-
th.thOrder = null;
|
|
1448
|
-
for (var i_2 = 0; i_2 < orders.length; i_2++) {
|
|
1449
|
-
var or = orders[i_2];
|
|
1450
|
-
if (or.id == th.th)
|
|
1451
|
-
th.thOrder = or.order;
|
|
1452
|
-
}
|
|
1145
|
+
th.thOrder = null;
|
|
1146
|
+
for (var i_1 = 0; i_1 < orders.length; i_1++) {
|
|
1147
|
+
var or = orders[i_1];
|
|
1148
|
+
if (or.id == th.th)
|
|
1149
|
+
th.thOrder = or.order;
|
|
1453
1150
|
}
|
|
1454
1151
|
}
|
|
1455
1152
|
};
|
|
1456
1153
|
/**
|
|
1457
1154
|
* Genera tutte le informazioni che servono per gestire il raggruppamento degli header
|
|
1458
1155
|
*
|
|
1459
|
-
* @param {
|
|
1156
|
+
* @param {EsThDirective[]} ths Colonne della tabella
|
|
1460
1157
|
*
|
|
1461
|
-
* @returns {{ leafs:
|
|
1158
|
+
* @returns {{ leafs: EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} Oggetto contenente la lista delle foglie (header base), il livello
|
|
1462
1159
|
* massimo di raggruppamento raggiunto, una cache in cui vengono indicati tutti i gruppi che sono "parent" (quindi che raggruppano almeno 1 header) e la cache degli header
|
|
1463
1160
|
*/
|
|
1464
1161
|
ColumnMetadataHandler.prototype.evaluateHeadersGroupingInfos = function (ths) {
|
|
@@ -1467,8 +1164,6 @@
|
|
|
1467
1164
|
var thsCache = {};
|
|
1468
1165
|
for (var i = 0; i < ths.length; i++) {
|
|
1469
1166
|
var th = ths[i];
|
|
1470
|
-
if (this.utilities.isEsTh(th))
|
|
1471
|
-
continue;
|
|
1472
1167
|
thsCache[th.th] = th;
|
|
1473
1168
|
if (th.thParent && !parentsCache[th.thParent])
|
|
1474
1169
|
parentsCache[th.thParent] = true;
|
|
@@ -1478,10 +1173,6 @@
|
|
|
1478
1173
|
var leafs = [];
|
|
1479
1174
|
for (var i = 0; i < ths.length; i++) {
|
|
1480
1175
|
var th = ths[i];
|
|
1481
|
-
if (this.utilities.isEsTh(th)) {
|
|
1482
|
-
leafs.push(th);
|
|
1483
|
-
continue;
|
|
1484
|
-
}
|
|
1485
1176
|
// Se sono una foglia vedo quanti livelli ci sono sopra
|
|
1486
1177
|
if (!parentsCache[th.th]) {
|
|
1487
1178
|
leafs.push(th);
|
|
@@ -1494,7 +1185,7 @@
|
|
|
1494
1185
|
/**
|
|
1495
1186
|
* Genera gli header groups da una lista di info sui th all'interno della variabile **TMPRowThGroups**
|
|
1496
1187
|
*
|
|
1497
|
-
* @param {{ leafs:
|
|
1188
|
+
* @param {{ leafs: EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} infos Informazioni di raggruppamento valutate precedentemente
|
|
1498
1189
|
*/
|
|
1499
1190
|
ColumnMetadataHandler.prototype.evaluateHeaderGroups = function (infos) {
|
|
1500
1191
|
if (infos.groupingLevel == 0)
|
|
@@ -1601,7 +1292,7 @@
|
|
|
1601
1292
|
if (!orderings || orderings.length == 0) {
|
|
1602
1293
|
for (var i = 0; i < ths.length; i++) {
|
|
1603
1294
|
var th = ths[i];
|
|
1604
|
-
var order =
|
|
1295
|
+
var order = th.th;
|
|
1605
1296
|
this.est.OrderDirectives.push(order);
|
|
1606
1297
|
}
|
|
1607
1298
|
}
|
|
@@ -1609,7 +1300,7 @@
|
|
|
1609
1300
|
this.est.OrderDirectives = orderings;
|
|
1610
1301
|
var _loop_2 = function (i) {
|
|
1611
1302
|
var th = ths[i];
|
|
1612
|
-
var thId =
|
|
1303
|
+
var thId = th.th;
|
|
1613
1304
|
if (!this_2.est.OrderDirectives.find(function (o) { return o == thId; }))
|
|
1614
1305
|
this_2.est.OrderDirectives.push(thId);
|
|
1615
1306
|
};
|
|
@@ -1862,7 +1553,46 @@
|
|
|
1862
1553
|
return ColumnMetadataHandler;
|
|
1863
1554
|
}());
|
|
1864
1555
|
|
|
1865
|
-
|
|
1556
|
+
/** Classe che identifica una colonna. Utilizzata in modalità "Colonne dinamiche" */
|
|
1557
|
+
var EsTableColumnsDefinition = /** @class */ (function () {
|
|
1558
|
+
/**
|
|
1559
|
+
* Costruttore
|
|
1560
|
+
*
|
|
1561
|
+
* @param {string} description Descrizione della colonna
|
|
1562
|
+
* @param {string} propertyName Nome della proprietà del modello in cui sono contenuti i dati da visualizzare per questa colonna
|
|
1563
|
+
* @param {string} routePath Route di navigazione. Es. "['/pages/mod/mod_detail', { 'idItem': '{0}', 'idItem2' : '{1}' }]"
|
|
1564
|
+
* @param {string[]} routeParameterProperties Proprietà da bindare a **routePath** per generare la route completa.
|
|
1565
|
+
* L'indice scritto in **routePath** è l'indice di accesso a questo array. Es. ["iditem", "iditem2"]
|
|
1566
|
+
* @param {'ASC' | 'DESC' } dataOrder Ordinamento dei dati presentati in questa colonna
|
|
1567
|
+
* @param {number} columnOrder Ordinamento di questa colonna
|
|
1568
|
+
* @param {boolean} visible Visibilità o meno della colonna
|
|
1569
|
+
* @param {string} clss Classe da applicare sia ai TD che ai TH relativi a questa colonna
|
|
1570
|
+
* @param {boolean} orderable Indica se la colonna è ordinabile o no (nel senso ASC / DESC / NONE)
|
|
1571
|
+
* @param {boolean} headerWraps Indica se il testo dell'header dev'essere wrappato all'interno del th. Di default no.
|
|
1572
|
+
*/
|
|
1573
|
+
function EsTableColumnsDefinition(description, propertyName, routePath, routeParameterProperties, dataOrder, columnOrder, visible, clss, orderable, headerWraps) {
|
|
1574
|
+
if (routePath === void 0) { routePath = null; }
|
|
1575
|
+
if (routeParameterProperties === void 0) { routeParameterProperties = null; }
|
|
1576
|
+
if (dataOrder === void 0) { dataOrder = null; }
|
|
1577
|
+
if (columnOrder === void 0) { columnOrder = null; }
|
|
1578
|
+
if (visible === void 0) { visible = true; }
|
|
1579
|
+
if (clss === void 0) { clss = null; }
|
|
1580
|
+
if (orderable === void 0) { orderable = true; }
|
|
1581
|
+
if (headerWraps === void 0) { headerWraps = false; }
|
|
1582
|
+
this.description = description;
|
|
1583
|
+
this.propertyName = propertyName;
|
|
1584
|
+
this.routePath = routePath;
|
|
1585
|
+
this.routeParameterProperties = routeParameterProperties;
|
|
1586
|
+
this.dataOrder = dataOrder;
|
|
1587
|
+
this.columnOrder = columnOrder;
|
|
1588
|
+
this.visible = visible;
|
|
1589
|
+
this.clss = clss;
|
|
1590
|
+
this.orderable = orderable;
|
|
1591
|
+
this.headerWraps = headerWraps;
|
|
1592
|
+
}
|
|
1593
|
+
return EsTableColumnsDefinition;
|
|
1594
|
+
}());
|
|
1595
|
+
|
|
1866
1596
|
/** Classe contenente le gestioni particolari della modalità dinamica dell'es-table */
|
|
1867
1597
|
var DynamicModeHandler = /** @class */ (function () {
|
|
1868
1598
|
/** @ignore Costruttore*/
|
|
@@ -1926,138 +1656,6 @@
|
|
|
1926
1656
|
return DynamicModeHandler;
|
|
1927
1657
|
}());
|
|
1928
1658
|
|
|
1929
|
-
/** Classe contenente la gestione delle importazioni */
|
|
1930
|
-
var ExportHandler = /** @class */ (function () {
|
|
1931
|
-
/** @ignore Costruttore*/
|
|
1932
|
-
function ExportHandler(est, expExts, msgExts, utiExts, dateExts) {
|
|
1933
|
-
this.est = est;
|
|
1934
|
-
this.expExts = expExts;
|
|
1935
|
-
this.msgExts = msgExts;
|
|
1936
|
-
this.utiExts = utiExts;
|
|
1937
|
-
this.dateExts = dateExts;
|
|
1938
|
-
}
|
|
1939
|
-
/**
|
|
1940
|
-
* Effettua l'esportazione dei dati
|
|
1941
|
-
*
|
|
1942
|
-
* @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella
|
|
1943
|
-
*/
|
|
1944
|
-
ExportHandler.prototype.tryExport = function (format) {
|
|
1945
|
-
var _this = this;
|
|
1946
|
-
if (!this.est.ExportFunction)
|
|
1947
|
-
return;
|
|
1948
|
-
if (this.est.reportMode)
|
|
1949
|
-
this.est.ExportFunction(format);
|
|
1950
|
-
else
|
|
1951
|
-
this.est.ExportFunction(function (data, cancel) {
|
|
1952
|
-
if (cancel === void 0) { cancel = false; }
|
|
1953
|
-
return __awaiter(_this, void 0, void 0, function () {
|
|
1954
|
-
var _b, _a_1;
|
|
1955
|
-
var _this = this;
|
|
1956
|
-
return __generator(this, function (_c) {
|
|
1957
|
-
switch (_c.label) {
|
|
1958
|
-
case 0:
|
|
1959
|
-
if (cancel)
|
|
1960
|
-
return [2 /*return*/];
|
|
1961
|
-
if (data.length == 0) {
|
|
1962
|
-
this.msgExts.simpleWarning(this.est.lc.loc("Cannot export an empty dataset"));
|
|
1963
|
-
return [2 /*return*/];
|
|
1964
|
-
}
|
|
1965
|
-
this.setupExport(data);
|
|
1966
|
-
if (!(format == "CSV")) return [3 /*break*/, 1];
|
|
1967
|
-
this.est.cdr.detectChanges();
|
|
1968
|
-
setTimeout(function () { _this.est.exportDownloader.nativeElement.click(); });
|
|
1969
|
-
return [3 /*break*/, 7];
|
|
1970
|
-
case 1:
|
|
1971
|
-
if (!(format == "XLSX")) return [3 /*break*/, 6];
|
|
1972
|
-
if (this.ExcelJS != null) {
|
|
1973
|
-
this.exportExcel();
|
|
1974
|
-
return [2 /*return*/];
|
|
1975
|
-
}
|
|
1976
|
-
_c.label = 2;
|
|
1977
|
-
case 2:
|
|
1978
|
-
_c.trys.push([2, 4, , 5]);
|
|
1979
|
-
_b = this;
|
|
1980
|
-
return [4 /*yield*/, import('exceljs')];
|
|
1981
|
-
case 3:
|
|
1982
|
-
_b.ExcelJS = _c.sent();
|
|
1983
|
-
this.exportExcel();
|
|
1984
|
-
return [3 /*break*/, 5];
|
|
1985
|
-
case 4:
|
|
1986
|
-
_a_1 = _c.sent();
|
|
1987
|
-
throw "Impossibile caricare la libreria per l'esportazione in Excel";
|
|
1988
|
-
case 5: return [3 /*break*/, 7];
|
|
1989
|
-
case 6: throw "Formato di esportazione non riconosciuto";
|
|
1990
|
-
case 7: return [2 /*return*/];
|
|
1991
|
-
}
|
|
1992
|
-
});
|
|
1993
|
-
});
|
|
1994
|
-
});
|
|
1995
|
-
};
|
|
1996
|
-
/** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **this.est.headers** e sui dati **this.est.data** */
|
|
1997
|
-
ExportHandler.prototype.exportExcel = function () {
|
|
1998
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1999
|
-
var iFix, workbook, sheet, header, i, h, i, row, item, i_1, h, cell, val, buffer, blob, objectUrl, fn;
|
|
2000
|
-
return __generator(this, function (_b) {
|
|
2001
|
-
switch (_b.label) {
|
|
2002
|
-
case 0:
|
|
2003
|
-
iFix = 1;
|
|
2004
|
-
workbook = new this.ExcelJS.Workbook();
|
|
2005
|
-
workbook.creator = "Ema's big Es-Table";
|
|
2006
|
-
workbook.created = new Date();
|
|
2007
|
-
sheet = workbook.addWorksheet('Data');
|
|
2008
|
-
header = sheet.getRow(1);
|
|
2009
|
-
header.font = { bold: true };
|
|
2010
|
-
this.est.headers = this.est.headers.sort(function (a, b) { return a.order - b.order; });
|
|
2011
|
-
for (i = 0; i < this.est.headers.length; i++) {
|
|
2012
|
-
h = this.est.headers[i];
|
|
2013
|
-
header.getCell(i + iFix).value = h.label;
|
|
2014
|
-
}
|
|
2015
|
-
for (i = 0; i < this.est.data.length; i++) {
|
|
2016
|
-
row = sheet.getRow(i + iFix + 1);
|
|
2017
|
-
item = this.est.data[i];
|
|
2018
|
-
for (i_1 = 0; i_1 < this.est.headers.length; i_1++) {
|
|
2019
|
-
h = this.est.headers[i_1];
|
|
2020
|
-
cell = row.getCell(i_1 + 1);
|
|
2021
|
-
val = item[h.key];
|
|
2022
|
-
if (val == null || val == undefined)
|
|
2023
|
-
cell.value = "";
|
|
2024
|
-
else {
|
|
2025
|
-
switch (h.type) {
|
|
2026
|
-
case 'date':
|
|
2027
|
-
cell.value = this.dateExts.getDateConvertion(val).toDate();
|
|
2028
|
-
case 'number':
|
|
2029
|
-
cell.value = parseFloat(val.replace(',', '.'));
|
|
2030
|
-
default:
|
|
2031
|
-
cell.value = val;
|
|
2032
|
-
}
|
|
2033
|
-
}
|
|
2034
|
-
}
|
|
2035
|
-
}
|
|
2036
|
-
return [4 /*yield*/, workbook.xlsx.writeBuffer()];
|
|
2037
|
-
case 1:
|
|
2038
|
-
buffer = _b.sent();
|
|
2039
|
-
blob = new Blob([buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;" });
|
|
2040
|
-
objectUrl = window.URL.createObjectURL(blob);
|
|
2041
|
-
fn = this.est.ExportFileName;
|
|
2042
|
-
this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + ".xlsx");
|
|
2043
|
-
return [2 /*return*/];
|
|
2044
|
-
}
|
|
2045
|
-
});
|
|
2046
|
-
});
|
|
2047
|
-
};
|
|
2048
|
-
/**
|
|
2049
|
-
* Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**
|
|
2050
|
-
*
|
|
2051
|
-
* @param {any[]} items Oggetti da esportare
|
|
2052
|
-
*/
|
|
2053
|
-
ExportHandler.prototype.setupExport = function (items) {
|
|
2054
|
-
var drcd = this.est.DynamicRowColumnsDefinition;
|
|
2055
|
-
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);
|
|
2056
|
-
this.est.data = items;
|
|
2057
|
-
};
|
|
2058
|
-
return ExportHandler;
|
|
2059
|
-
}());
|
|
2060
|
-
|
|
2061
1659
|
/** Classe contenente la gestione della modalità gerarchica */
|
|
2062
1660
|
var HierarchyModeHandler = /** @class */ (function () {
|
|
2063
1661
|
/** @ignore Costruttore*/
|
|
@@ -2303,24 +1901,6 @@
|
|
|
2303
1901
|
}
|
|
2304
1902
|
return tmpItems;
|
|
2305
1903
|
};
|
|
2306
|
-
/**
|
|
2307
|
-
* Metodo che prende tutti gli oggetti di cui dispone divisi in bucket da 100 elementi
|
|
2308
|
-
*
|
|
2309
|
-
* @returns {any[][]} Matrice di array Nx100
|
|
2310
|
-
*/
|
|
2311
|
-
ItemsHandler.prototype.getItemSlices = function () {
|
|
2312
|
-
// Se sono qui di sicuro non ho rowgrouping
|
|
2313
|
-
var items = this.getItemsByMode();
|
|
2314
|
-
if (!items)
|
|
2315
|
-
return [];
|
|
2316
|
-
var arrayBy100 = [];
|
|
2317
|
-
var slices = Math.ceil(items.length / this.est.SliceSize);
|
|
2318
|
-
for (var i = 0; i < slices; i++) {
|
|
2319
|
-
var arraySlice = items.slice(i * this.est.SliceSize, i * this.est.SliceSize + this.est.SliceSize);
|
|
2320
|
-
arrayBy100.push(arraySlice);
|
|
2321
|
-
}
|
|
2322
|
-
return arrayBy100;
|
|
2323
|
-
};
|
|
2324
1904
|
/** Se in modalità array applica gli ordinamenti ASC-DESC delle colonne */
|
|
2325
1905
|
ItemsHandler.prototype.arrayModeReviewOrderings = function () {
|
|
2326
1906
|
var _this = this;
|
|
@@ -2330,7 +1910,13 @@
|
|
|
2330
1910
|
return ItemsHandler;
|
|
2331
1911
|
}());
|
|
2332
1912
|
|
|
2333
|
-
|
|
1913
|
+
/** Classe che identifica una direttiva di ordinamento per un report */
|
|
1914
|
+
var ReportOrder = /** @class */ (function () {
|
|
1915
|
+
function ReportOrder() {
|
|
1916
|
+
}
|
|
1917
|
+
return ReportOrder;
|
|
1918
|
+
}());
|
|
1919
|
+
|
|
2334
1920
|
/** Classe che gestisce la modalità Report dell'es-table utilizzata nel Metering */
|
|
2335
1921
|
var ReportModeHandler = /** @class */ (function () {
|
|
2336
1922
|
/** @ignore Costruttore */
|
|
@@ -2401,6 +1987,99 @@
|
|
|
2401
1987
|
return ReportModeHandler;
|
|
2402
1988
|
}());
|
|
2403
1989
|
|
|
1990
|
+
/** Classe che rappresenta un Gruppo con le proprie aggregazioni */
|
|
1991
|
+
var Group = /** @class */ (function () {
|
|
1992
|
+
/**
|
|
1993
|
+
* Costruttore
|
|
1994
|
+
*
|
|
1995
|
+
* @param {string} column ID della colonna raggruppata
|
|
1996
|
+
* @param {number} count Numero di elementi raggruppati sotto questa colonna
|
|
1997
|
+
* @param {string} value Valore del Gruppo
|
|
1998
|
+
*/
|
|
1999
|
+
function Group(column, count, value) {
|
|
2000
|
+
this.column = column;
|
|
2001
|
+
this.count = count;
|
|
2002
|
+
this.value = value;
|
|
2003
|
+
this.aggregations = [];
|
|
2004
|
+
}
|
|
2005
|
+
return Group;
|
|
2006
|
+
}());
|
|
2007
|
+
|
|
2008
|
+
/** Classe che rappresenta un'aggregazione */
|
|
2009
|
+
var GroupAggregation = /** @class */ (function () {
|
|
2010
|
+
/**
|
|
2011
|
+
* Costruttore
|
|
2012
|
+
*
|
|
2013
|
+
* @param {string} column ID della colonna aggregata
|
|
2014
|
+
* @param {'min' | 'max' | 'sum' } aggregation Aggregazione da effettuare su questa colonna
|
|
2015
|
+
* @param {string} value Valore dell'aggregazione
|
|
2016
|
+
*/
|
|
2017
|
+
function GroupAggregation(column, aggregation, value) {
|
|
2018
|
+
this.column = column;
|
|
2019
|
+
this.aggregation = aggregation;
|
|
2020
|
+
this.value = value;
|
|
2021
|
+
}
|
|
2022
|
+
return GroupAggregation;
|
|
2023
|
+
}());
|
|
2024
|
+
|
|
2025
|
+
/** Classe che rappresenta o un gruppo o una aggregazione su una colonna. Usata solo internamente */
|
|
2026
|
+
var GroupOrAggregation = /** @class */ (function () {
|
|
2027
|
+
/**
|
|
2028
|
+
* Costruttore
|
|
2029
|
+
*
|
|
2030
|
+
* @param {string} column Colonna su cui è presente o un gruppo o un'aggregazione
|
|
2031
|
+
* @param {'min' | 'max' | 'sum' } aggregation Aggregazione presente sulla **column**. Se questo campo è nullo significa che è un gruppo.
|
|
2032
|
+
* @param {'string' | 'date' | 'number'} datatype Tipo di dati contenuto nella colonna **column** se non c'è alcuna aggregazione è inutile, pertanto non sarà valorizzato
|
|
2033
|
+
*/
|
|
2034
|
+
function GroupOrAggregation(column, aggregation, datatype) {
|
|
2035
|
+
this.column = column;
|
|
2036
|
+
this.aggregation = aggregation;
|
|
2037
|
+
this.datatype = datatype;
|
|
2038
|
+
}
|
|
2039
|
+
return GroupOrAggregation;
|
|
2040
|
+
}());
|
|
2041
|
+
|
|
2042
|
+
/** Classe che rappresenta un separatore da inserire fra gli oggetti dell'es-table per le operazioni di paginazione dei raggruppamenti per riga */
|
|
2043
|
+
var GroupPager = /** @class */ (function () {
|
|
2044
|
+
/**
|
|
2045
|
+
* Costruttore
|
|
2046
|
+
*
|
|
2047
|
+
* @param {number} groupLevel Livello del gruppo a cui questo separatore fa riferimento
|
|
2048
|
+
* @param {string} parentKey Chiave del gruppo parent se esiste
|
|
2049
|
+
* @param {AppSearch<any>} view Vista di ricerca collegata a questo elemento
|
|
2050
|
+
* @param {'groups' | 'items'} searches Indica che cosa cerca questo separatore, se sottogruppi o oggetti
|
|
2051
|
+
*/
|
|
2052
|
+
function GroupPager(_grouplevel, _thisRoute, _parent, view, searches) {
|
|
2053
|
+
this._grouplevel = _grouplevel;
|
|
2054
|
+
this._thisRoute = _thisRoute;
|
|
2055
|
+
this._parent = _parent;
|
|
2056
|
+
this.view = view;
|
|
2057
|
+
this.searches = searches;
|
|
2058
|
+
this._sep = true;
|
|
2059
|
+
this.buttons = [];
|
|
2060
|
+
this._thisKey = _parent + "_sep";
|
|
2061
|
+
}
|
|
2062
|
+
return GroupPager;
|
|
2063
|
+
}());
|
|
2064
|
+
|
|
2065
|
+
/**
|
|
2066
|
+
* 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
|
|
2067
|
+
* per arrivare ad una ricerca su sottogruppi o elementi relativi
|
|
2068
|
+
*/
|
|
2069
|
+
var GroupRouteFragment = /** @class */ (function () {
|
|
2070
|
+
/**
|
|
2071
|
+
* Costruttore
|
|
2072
|
+
*
|
|
2073
|
+
* @param {string} column Colonna di raggruppamento
|
|
2074
|
+
* @param {string} value Valore della colonna di raggruppamento
|
|
2075
|
+
*/
|
|
2076
|
+
function GroupRouteFragment(column, value) {
|
|
2077
|
+
this.column = column;
|
|
2078
|
+
this.value = value;
|
|
2079
|
+
}
|
|
2080
|
+
return GroupRouteFragment;
|
|
2081
|
+
}());
|
|
2082
|
+
|
|
2404
2083
|
/** Classe che gestisce la modalità Row Grouping dell'es-table */
|
|
2405
2084
|
var RowGroupingHandler = /** @class */ (function () {
|
|
2406
2085
|
/** @ignore Costruttore */
|
|
@@ -2449,7 +2128,7 @@
|
|
|
2449
2128
|
this.est.BaseItemsCount = view.objectcount;
|
|
2450
2129
|
}
|
|
2451
2130
|
else {
|
|
2452
|
-
// 2) Se viene richiesto il dettaglio di un qualsiasi gruppo diverso dall'ultimo vuol dire che devo aggiungere
|
|
2131
|
+
// 2) Se viene richiesto il dettaglio di un qualsiasi gruppo diverso dall'ultimo vuol dire che devo aggiungere
|
|
2453
2132
|
// dopo al gruppo che ho cliccato la lista dei gruppi tirata fuori questa volta (intermediateGroup = true)
|
|
2454
2133
|
/*
|
|
2455
2134
|
* GruppoA GruppoA
|
|
@@ -2460,7 +2139,7 @@
|
|
|
2460
2139
|
* GruppoD
|
|
2461
2140
|
* GruppoE
|
|
2462
2141
|
*/
|
|
2463
|
-
// 3) se i gruppi richiesti dalla view sono uguali ai gruppi presenti vuol dire che sto prendendo gli oggetti veri e propri, sono in
|
|
2142
|
+
// 3) se i gruppi richiesti dalla view sono uguali ai gruppi presenti vuol dire che sto prendendo gli oggetti veri e propri, sono in
|
|
2464
2143
|
// view.items e quindi in TMPBoundSource, ho inoltre le informazioni di paginazione **per il singolo sottogruppo** (intermediateGroup = false)
|
|
2465
2144
|
/*
|
|
2466
2145
|
* GruppoA GruppoA
|
|
@@ -2556,15 +2235,20 @@
|
|
|
2556
2235
|
itemsCacheReference_1.push(itm);
|
|
2557
2236
|
}
|
|
2558
2237
|
});
|
|
2559
|
-
// Elimino gli oggetti vecchi
|
|
2238
|
+
// Elimino gli oggetti vecchi
|
|
2560
2239
|
// 1) Ricerca intermedia, stato salvato - Elimino tutti gli item e tutti i gruppi la cui route è più lunga della corrente, tutti gli item relativi alla path corrente, e tutte
|
|
2561
2240
|
// le cache di ricerca effettuate su una path più profonda dell'attuale
|
|
2562
2241
|
// 2) Ricerca finale o ricerca intermedia senza stato salvato - Elimino tutti gli item relativi alla path corrente
|
|
2563
|
-
// Per "stato salvato" si intendono ricerche vecchie salvate per poter essere rieffettuate in caso di ordinamenti su colonne di interesse
|
|
2242
|
+
// Per "stato salvato" si intendono ricerche vecchie salvate per poter essere rieffettuate in caso di ordinamenti su colonne di interesse
|
|
2564
2243
|
if (intermediateGroup_1 && view.savedstate) {
|
|
2565
2244
|
this.est.boundSource = this.est.boundSource.filter(function (t) { return !(t._item || t._thisRoute.length > groupRoute_1.length); });
|
|
2566
2245
|
this.est.groupSearchRequestsCache = this.est.groupSearchRequestsCache.filter(function (t) { return !(t.route.length > groupRoute_1.length); });
|
|
2567
2246
|
}
|
|
2247
|
+
else if (intermediateGroup_1) {
|
|
2248
|
+
// Se invece lo stato non è salvato vuol dire che c'è stato un cambio di pagina interno ad un gruppo già aperto:
|
|
2249
|
+
// - Elimino tutti gli elementi riconducibili a questo gruppo che erano già presenti
|
|
2250
|
+
this.est.boundSource = this.est.boundSource.filter(function (t) { return !(t._item || (t._thisKey.startsWith(groupKey_1) && t._thisKey != groupKey_1)); });
|
|
2251
|
+
}
|
|
2568
2252
|
this.est.boundSource = this.est.boundSource.filter(function (t) { return !(t._parent == groupKey_1); });
|
|
2569
2253
|
var thisGroup = this.est.boundSource[insertIndex];
|
|
2570
2254
|
if (intermediateGroup_1)
|
|
@@ -2586,13 +2270,11 @@
|
|
|
2586
2270
|
/**
|
|
2587
2271
|
* Se in modalità array applica i raggruppamenti definiti lato row-grouping
|
|
2588
2272
|
*
|
|
2589
|
-
* @param {ths:
|
|
2273
|
+
* @param {ths: EsThDirective[]} ths Header
|
|
2590
2274
|
*/
|
|
2591
2275
|
RowGroupingHandler.prototype.arrayModeReviewGroupings = function (ths) {
|
|
2592
2276
|
if (ths.length == 0)
|
|
2593
2277
|
return;
|
|
2594
|
-
if (this.utilities.isEsTh(ths[0]))
|
|
2595
|
-
return;
|
|
2596
2278
|
var headerGroups = [];
|
|
2597
2279
|
var headerAggregations = [];
|
|
2598
2280
|
for (var i = 0; i < ths.length; i++) {
|
|
@@ -2702,7 +2384,7 @@
|
|
|
2702
2384
|
anygp._thisKey = parent._thisKey + gp.value;
|
|
2703
2385
|
anygp._grouplevel = parent._grouplevel + 1;
|
|
2704
2386
|
}
|
|
2705
|
-
// Pusho il gruppo, tutti i gruppi del livello sotto, o gli item se io sono l'ultimo gruppo.
|
|
2387
|
+
// Pusho il gruppo, tutti i gruppi del livello sotto, o gli item se io sono l'ultimo gruppo.
|
|
2706
2388
|
// La visibilità è solo per il gruppo a livello 0, tutti gli altri gruppi saranno mostrati o nascosti di conseguenza
|
|
2707
2389
|
if (currentIndex == 0)
|
|
2708
2390
|
anygp._visible = true;
|
|
@@ -2905,6 +2587,23 @@
|
|
|
2905
2587
|
return RowGroupingHandler;
|
|
2906
2588
|
}());
|
|
2907
2589
|
|
|
2590
|
+
/** 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 */
|
|
2591
|
+
var CacheTriptic = /** @class */ (function () {
|
|
2592
|
+
/**
|
|
2593
|
+
* Costruttore
|
|
2594
|
+
*
|
|
2595
|
+
* @param {Map<string, any>} cache Cache Chiave-Oggetto
|
|
2596
|
+
* @param {Map<string, number>} index_cache Cache Indice-Oggetto
|
|
2597
|
+
* @param {any[]} array Array contenente gli oggetti
|
|
2598
|
+
*/
|
|
2599
|
+
function CacheTriptic(cache, index_cache, array) {
|
|
2600
|
+
this.cache = cache;
|
|
2601
|
+
this.index_cache = index_cache;
|
|
2602
|
+
this.array = array;
|
|
2603
|
+
}
|
|
2604
|
+
return CacheTriptic;
|
|
2605
|
+
}());
|
|
2606
|
+
|
|
2908
2607
|
/** Classe che gestisce le selezioni degli oggetti */
|
|
2909
2608
|
var SelectionHandler = /** @class */ (function () {
|
|
2910
2609
|
/** @ignore Costruttore */
|
|
@@ -3525,20 +3224,6 @@
|
|
|
3525
3224
|
throw "Gli indici passati non fanno riferimento a una posizione dell'array. Length: " + array.length + " Old:" + oldI + " New: " + newI;
|
|
3526
3225
|
array.splice(newI, 0, array.splice(oldI, 1)[0]);
|
|
3527
3226
|
};
|
|
3528
|
-
/**
|
|
3529
|
-
* Helper che identifica se il td attuale è di tipo **EsTd**. In caso contrario è da considerarsi **EsTdDirective**
|
|
3530
|
-
*
|
|
3531
|
-
* @param {any} td Cella da valutare
|
|
3532
|
-
* @returns {boolean} Restituisce **true** se il **td** è di tipo **EsTd**, **false** se è di tipo **EsTdDirective**
|
|
3533
|
-
*/
|
|
3534
|
-
UtilitiesHandler.prototype.isEsTd = function (td) { return !td._directive; };
|
|
3535
|
-
/**
|
|
3536
|
-
* Helper che identifica se il th attuale è di tipo **EsTh**. In caso contrario è da considerarsi **EsThDirective**
|
|
3537
|
-
*
|
|
3538
|
-
* @param {any} td Header da valutare
|
|
3539
|
-
* @returns {boolean} Restituisce **true** se il **th** è di tipo **EsTh**, **false** se è di tipo **EsThDirective**
|
|
3540
|
-
*/
|
|
3541
|
-
UtilitiesHandler.prototype.isEsTh = function (th) { return !th._directive; };
|
|
3542
3227
|
/**
|
|
3543
3228
|
* Date le informazioni di paginazione ottiene l'array dei pulsanti
|
|
3544
3229
|
*
|
|
@@ -3646,7 +3331,7 @@
|
|
|
3646
3331
|
var EsTableComponent = /** @class */ (function () {
|
|
3647
3332
|
/** @ignore */
|
|
3648
3333
|
function EsTableComponent(ngControl, prefService, deafults, locale, lc, cdr, utilities_H, utiExts, expExts, dateExts, msgExts) {
|
|
3649
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
3334
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
3650
3335
|
this.ngControl = ngControl;
|
|
3651
3336
|
this.prefService = prefService;
|
|
3652
3337
|
this.deafults = deafults;
|
|
@@ -3735,28 +3420,10 @@
|
|
|
3735
3420
|
this.CornerMenuOptions = null;
|
|
3736
3421
|
/** Indica se dev'essere possibile effettuare il resize delle colonne */
|
|
3737
3422
|
this.ColumnsResizable = null;
|
|
3423
|
+
/** Indica se dev'essere possibile effettuare il pinning delle colonne */
|
|
3424
|
+
this.ColumnsPinnable = null;
|
|
3738
3425
|
/** Indica se dev'essere disponibile il sistema di aggiornamento automatico */
|
|
3739
3426
|
this.AutoUpdate = null;
|
|
3740
|
-
/** Indica se la tabella (configurata con **UseCustomCells**) deve mettersi in ascolto per i click sulle celle desiderate
|
|
3741
|
-
*
|
|
3742
|
-
* @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click
|
|
3743
|
-
*/
|
|
3744
|
-
this.UseCustomCellActions = null;
|
|
3745
|
-
/**
|
|
3746
|
-
* Indica le celle desiderate su cui intercettare i click. Attiva solo quando **UseCustomCellActions** è true.
|
|
3747
|
-
* Ogni cella dev'essere separata dalla successiva dal carattere del Simoleon:
|
|
3748
|
-
*
|
|
3749
|
-
* Es, "MiaCella1§MiaCella2"
|
|
3750
|
-
*
|
|
3751
|
-
* @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click
|
|
3752
|
-
*/
|
|
3753
|
-
this.CustomCellActionsOn = '';
|
|
3754
|
-
/**
|
|
3755
|
-
* Serve per decidere di lanciare o meno il **event.stopPropagation()** al termine della gestione dell'evento
|
|
3756
|
-
*
|
|
3757
|
-
* @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click
|
|
3758
|
-
*/
|
|
3759
|
-
this.CellActionPropagates = true;
|
|
3760
3427
|
/**
|
|
3761
3428
|
* Decide se utilizzare o meno le CustomCells. Impostandolo a **true** l'es-table diventa in grado di gestire nativamente:
|
|
3762
3429
|
*
|
|
@@ -3815,12 +3482,6 @@
|
|
|
3815
3482
|
this.HasHeaderGroup = null;
|
|
3816
3483
|
/** Indica la presenza di raggruppamenti a livello del raggruppamento precedentemente esistente, chiaramente è insensata senza **HasHeaderGroup** */
|
|
3817
3484
|
this.HasSecondaryHeaderGroup = null;
|
|
3818
|
-
/** Utilizzato per dividere la sorgente in modalità EndlessScroll */
|
|
3819
|
-
this.SliceSize = 100;
|
|
3820
|
-
/** Decide se utilizzare la modalità di EndlessScroll */
|
|
3821
|
-
this.EndlessScroll = null;
|
|
3822
|
-
/** Qualora **EndlessScroll** fosse true, indica se utilizzare questa modalità solo quando si cerca per "Tutti" o in generale */
|
|
3823
|
-
this.EndlessScrollOnlyForAll = true;
|
|
3824
3485
|
/** Indica se nascondere gli Header della tabella */
|
|
3825
3486
|
this.HeaderHidden = null;
|
|
3826
3487
|
/** Indica se nascondere il Body della tabella */
|
|
@@ -3903,11 +3564,6 @@
|
|
|
3903
3564
|
this.onRemoval = new i0.EventEmitter();
|
|
3904
3565
|
/** Evento richiamato all'annullamento di un'eliminazione */
|
|
3905
3566
|
this.onAbortRemoval = new i0.EventEmitter();
|
|
3906
|
-
/** Evento richiamato al click su una cella quando **UseCustomCellActions** è attivo
|
|
3907
|
-
*
|
|
3908
|
-
* @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click
|
|
3909
|
-
*/
|
|
3910
|
-
this.onCellClick = new i0.EventEmitter();
|
|
3911
3567
|
/** Evento richiamato quando si clicca su un opzione definita nelle **CornerMenuOptions** */
|
|
3912
3568
|
this.onCornerAction = new i0.EventEmitter();
|
|
3913
3569
|
/** Evento richiamato quando si clicca su un opzione definita nelle **DynamicOperations** */
|
|
@@ -3991,14 +3647,11 @@
|
|
|
3991
3647
|
this.UseSelectionCache = this.utilities_H.InputOrDefault(this.UseSelectionCache, (_p = this.deafults) === null || _p === void 0 ? void 0 : _p.UseSelectionCache, true);
|
|
3992
3648
|
this.ShowItemGroupsColumns = this.utilities_H.InputOrDefault(this.ShowItemGroupsColumns, (_q = this.deafults) === null || _q === void 0 ? void 0 : _q.ShowItemGroupsColumns, false);
|
|
3993
3649
|
this.ArraymodeItemsPerPage = this.utilities_H.InputOrDefault(this.ArraymodeItemsPerPage, (_r = this.deafults) === null || _r === void 0 ? void 0 : _r.ArraymodeItemsPerPage, 15);
|
|
3650
|
+
this.ColumnsPinnable = this.utilities_H.InputOrDefault(this.ColumnsPinnable, (_s = this.deafults) === null || _s === void 0 ? void 0 : _s.ColumnsPinnable, true);
|
|
3994
3651
|
}
|
|
3995
3652
|
/** @ignore */
|
|
3996
3653
|
EsTableComponent.prototype.ngOnInit = function () {
|
|
3997
3654
|
var _this = this;
|
|
3998
|
-
//Per poter cambiare il layout in base al livello gerarchico il componente deva avere il pieno controllo di ogni cella,
|
|
3999
|
-
//che con solo la proiezione (senza celle cusotm) non è disponibile
|
|
4000
|
-
if (this.Hierarchy && !this.UseCustomCells)
|
|
4001
|
-
throw "Es-table error: Per poter utilizzare l'es-table con [Hierarchy]=\"true\" è richiesto anche [UseCustomCells]=\"true\"";
|
|
4002
3655
|
// click destro su una riga con selezione attiva: Tiro fuori il context menu e selezione l'elemento corrente
|
|
4003
3656
|
this.ctxMenuSubscription = (this.ContextMenu || this.tableEmptyMenu).open.subscribe(function (t) {
|
|
4004
3657
|
// Gruppi va bene, oggetti pure, ma separatori fra gruppi proprio no...
|
|
@@ -4031,6 +3684,10 @@
|
|
|
4031
3684
|
this.ShiftClick = true;
|
|
4032
3685
|
this.DirectivesBased = true;
|
|
4033
3686
|
}
|
|
3687
|
+
//Per poter cambiare il layout in base al livello gerarchico il componente deva avere il pieno controllo di ogni cella,
|
|
3688
|
+
//che con solo la proiezione (senza celle cusotm) non è disponibile
|
|
3689
|
+
if (this.Hierarchy && !this.UseCustomCells)
|
|
3690
|
+
throw "Es-table error: Per poter utilizzare l'es-table con [Hierarchy]=\"true\" è richiesto anche [UseCustomCells]=\"true\"";
|
|
4034
3691
|
};
|
|
4035
3692
|
/** @ignore */
|
|
4036
3693
|
EsTableComponent.prototype.ngOnDestroy = function () {
|
|
@@ -4041,7 +3698,7 @@
|
|
|
4041
3698
|
EsTableComponent.prototype.ngOnChanges = function (changes) {
|
|
4042
3699
|
return __awaiter(this, void 0, void 0, function () {
|
|
4043
3700
|
var newSearchView;
|
|
4044
|
-
return __generator(this, function (
|
|
3701
|
+
return __generator(this, function (_t) {
|
|
4045
3702
|
newSearchView = changes['SearchView'];
|
|
4046
3703
|
if (newSearchView && this.SearchView)
|
|
4047
3704
|
this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);
|
|
@@ -4060,8 +3717,8 @@
|
|
|
4060
3717
|
var _a;
|
|
4061
3718
|
return __awaiter(this, void 0, void 0, function () {
|
|
4062
3719
|
var firstItemGroupOrNoGrouping, prefs, prefs;
|
|
4063
|
-
return __generator(this, function (
|
|
4064
|
-
switch (
|
|
3720
|
+
return __generator(this, function (_t) {
|
|
3721
|
+
switch (_t.label) {
|
|
4065
3722
|
case 0:
|
|
4066
3723
|
this.View = obj ? obj : null;
|
|
4067
3724
|
// Mi è arrivata l'AppSearch quindi di sicuro non ho una ricerca in progress
|
|
@@ -4111,10 +3768,10 @@
|
|
|
4111
3768
|
return [3 /*break*/, 5];
|
|
4112
3769
|
case 3: return [4 /*yield*/, this.prefService.getItem(this.ngControl.name).toPromise()];
|
|
4113
3770
|
case 4:
|
|
4114
|
-
prefs =
|
|
3771
|
+
prefs = _t.sent();
|
|
4115
3772
|
this.View.columns = (prefs === null || prefs === void 0 ? void 0 : prefs.columns) || [];
|
|
4116
3773
|
this.View.column_ordering = (prefs === null || prefs === void 0 ? void 0 : prefs.column_ordering) || [];
|
|
4117
|
-
|
|
3774
|
+
_t.label = 5;
|
|
4118
3775
|
case 5:
|
|
4119
3776
|
// 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)
|
|
4120
3777
|
if (firstItemGroupOrNoGrouping)
|
|
@@ -4138,14 +3795,14 @@
|
|
|
4138
3795
|
return [3 /*break*/, 10];
|
|
4139
3796
|
case 8: return [4 /*yield*/, this.prefService.getItem(this.ngControl.name).toPromise()];
|
|
4140
3797
|
case 9:
|
|
4141
|
-
prefs =
|
|
3798
|
+
prefs = _t.sent();
|
|
4142
3799
|
this.arrayColumns = (prefs === null || prefs === void 0 ? void 0 : prefs.columns) || [];
|
|
4143
3800
|
this.arrayColumnOrdering = (prefs === null || prefs === void 0 ? void 0 : prefs.column_ordering) || [];
|
|
4144
|
-
|
|
3801
|
+
_t.label = 10;
|
|
4145
3802
|
case 10:
|
|
4146
3803
|
if (this.SearchView)
|
|
4147
3804
|
this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);
|
|
4148
|
-
|
|
3805
|
+
_t.label = 11;
|
|
4149
3806
|
case 11:
|
|
4150
3807
|
if (this.View && !(this.View instanceof ReportDefinition))
|
|
4151
3808
|
this.finalizeContext();
|
|
@@ -4161,30 +3818,12 @@
|
|
|
4161
3818
|
*/
|
|
4162
3819
|
EsTableComponent.prototype.finalizeContext = function () {
|
|
4163
3820
|
var viewCasted = this.View;
|
|
4164
|
-
/*
|
|
4165
|
-
*Uso la tecnica di EndlessScroll se la variabile relativa è attiva e se
|
|
4166
|
-
* 1) Ho un Array, oppure
|
|
4167
|
-
* 2) Ho un AppSearch che sta cercando con paginazione "Tutto", oppure
|
|
4168
|
-
* 3) Ho un AppSearch che sta cercando con paginazione diversa da "Tutto" ma con la variabile EndlessScrollOnlyForAll a false
|
|
4169
|
-
*/
|
|
4170
|
-
var isAppSearchWithIppMax = this.viewMode && viewCasted.itemsperpageoverride == this.defaultAllPageOverride;
|
|
4171
|
-
var isAppSearchNoMaxIpp = this.viewMode && viewCasted.itemsperpageoverride != this.defaultAllPageOverride;
|
|
4172
|
-
this.UseEndlessscroll = this.EndlessScroll && (this.arrayMode || isAppSearchWithIppMax || (isAppSearchNoMaxIpp && !this.EndlessScrollOnlyForAll));
|
|
4173
3821
|
var hasRowGroups = (viewCasted.groupings && viewCasted.groupings.filter(function (t) { return !t.aggregation; }).length > 0) || (this.arrayMode && this.EsThsDirective.some(function (t) { return t.thGroup; }));
|
|
4174
3822
|
// Se ho dei gruppi in modalità array devo sistemare un po' di variabili che diventano insensate
|
|
4175
3823
|
if (this.arrayMode && hasRowGroups)
|
|
4176
3824
|
this.UseArrayModePaging = false;
|
|
4177
3825
|
// Riempimento della TMPBoundSource con gli oggetti che verranno poi mostrati ad interfaccia
|
|
4178
|
-
|
|
4179
|
-
this.addedSlices = [];
|
|
4180
|
-
this.boundSubSources = this.items_H.getItemSlices();
|
|
4181
|
-
var firstSub = this.boundSubSources[0];
|
|
4182
|
-
this.TMPBoundSource = firstSub ? firstSub : [];
|
|
4183
|
-
if (firstSub)
|
|
4184
|
-
this.addedSlices.push(0);
|
|
4185
|
-
}
|
|
4186
|
-
else
|
|
4187
|
-
this.TMPBoundSource = this.items_H.getItemsByMode(false, !this.internalWriteCall);
|
|
3826
|
+
this.TMPBoundSource = this.items_H.getItemsByMode(false, !this.internalWriteCall);
|
|
4188
3827
|
// Se ho una gerarchia, assegno i livelli gerarchici alla TMPBoundSource
|
|
4189
3828
|
if (this.Hierarchy && !hasRowGroups)
|
|
4190
3829
|
this.hierarchyMode_H.assignHierarchyLevels(this.TMPBoundSource);
|
|
@@ -4244,51 +3883,22 @@
|
|
|
4244
3883
|
this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;
|
|
4245
3884
|
}
|
|
4246
3885
|
};
|
|
4247
|
-
/**
|
|
4248
|
-
* Metodo che gestisce l'endless scroll e in base a quanto la tabella è stata scrollata aggiunge degli elementi extra a **TMPBoundSource**
|
|
4249
|
-
*
|
|
4250
|
-
* @param {any} e Evento di scroll del browser
|
|
4251
|
-
*/
|
|
4252
|
-
EsTableComponent.prototype.onScroll = function (e) {
|
|
4253
|
-
var _this = this;
|
|
4254
|
-
var tableViewHeight = e.target.offsetHeight;
|
|
4255
|
-
var tableScrollHeight = e.target.scrollHeight;
|
|
4256
|
-
var scrollLocation = e.target.scrollTop;
|
|
4257
|
-
var buffer = 200;
|
|
4258
|
-
var limit = tableScrollHeight - tableViewHeight - buffer;
|
|
4259
|
-
if (scrollLocation > limit) {
|
|
4260
|
-
var indexToAdd = Math.floor(this.TMPBoundSource.length / 100);
|
|
4261
|
-
if (this.boundSubSources[indexToAdd] && this.addedSlices.indexOf(indexToAdd) == -1) {
|
|
4262
|
-
// Devo ricordarmi di fare l'hash del nuovo pezzo
|
|
4263
|
-
this.utilities_H.calculateHash(this.boundSubSources[indexToAdd]);
|
|
4264
|
-
this.TMPBoundSource = this.TMPBoundSource.concat(this.boundSubSources[indexToAdd]);
|
|
4265
|
-
this.addedSlices.push(indexToAdd);
|
|
4266
|
-
setTimeout(function () { _this.postBoundSourceCalculation(); });
|
|
4267
|
-
}
|
|
4268
|
-
}
|
|
4269
|
-
};
|
|
4270
3886
|
/**
|
|
4271
3887
|
* Metodo lanciato dopo che la sorgente dati è stata correttamente bindata, si occupa di ricalcolare tutto ciò che serve
|
|
4272
3888
|
* all'es-table per renderizzare i valori da mostrare
|
|
4273
3889
|
*/
|
|
4274
3890
|
EsTableComponent.prototype.postBoundSourceCalculation = function () {
|
|
4275
|
-
var _this = this;
|
|
4276
3891
|
// Resetto tutto tranne RowTDs e RowTHs per evitare flickering. RowTDs e RowTHs saranno modificate all'interno del prossimo ciclo di CD
|
|
4277
3892
|
this.RowContexts = [];
|
|
4278
3893
|
this.OrderDirectives = [];
|
|
4279
3894
|
this.lastSelectedItemID = null;
|
|
4280
|
-
|
|
4281
|
-
this.internalPostBoundSource();
|
|
4282
|
-
else {
|
|
4283
|
-
this.cdr.detectChanges();
|
|
4284
|
-
setTimeout(function () { _this.internalPostBoundSource(); });
|
|
4285
|
-
}
|
|
3895
|
+
this.internalPostBoundSource();
|
|
4286
3896
|
};
|
|
4287
3897
|
/** Per poter distinguere le chiamate a questo metodo: Dopo il setTimeout se uso gli EsTd/EsTh vecchi, senza il setTimeout se uso le nuove direttive */
|
|
4288
3898
|
EsTableComponent.prototype.internalPostBoundSource = function () {
|
|
4289
3899
|
var View = this.View;
|
|
4290
|
-
var ths = this.
|
|
4291
|
-
var tds = this.
|
|
3900
|
+
var ths = this.EsThsDirective && this.EsThsDirective.length > 0 ? this.EsThsDirective.toArray() : [];
|
|
3901
|
+
var tds = this.EsTdsDirective && this.EsTdsDirective.length > 0 ? this.EsTdsDirective.toArray() : [];
|
|
4292
3902
|
// Se non ho colonne dinamiche ma sono in modalità dinamica (lo capisco perché c'è una view piena di genericitem) metto il default delle colonne
|
|
4293
3903
|
this.dynamicMode_H.eventuallyReviewDynamicColumns();
|
|
4294
3904
|
this.bindDisplayToLoadedItemsOrGroups(View);
|
|
@@ -4423,8 +4033,8 @@
|
|
|
4423
4033
|
*
|
|
4424
4034
|
* Costo: 2 scan EsThs, 1 scan EsTds
|
|
4425
4035
|
*
|
|
4426
|
-
* @param {
|
|
4427
|
-
* @param {
|
|
4036
|
+
* @param {EsThDirective[]} ths Colonne della tabella
|
|
4037
|
+
* @param {EsTdDirective[]} tds Celle della tabella
|
|
4428
4038
|
*/
|
|
4429
4039
|
EsTableComponent.prototype.evaluateRowTds = function (ths, tds) {
|
|
4430
4040
|
if (tds.length == 0)
|
|
@@ -4437,58 +4047,35 @@
|
|
|
4437
4047
|
}
|
|
4438
4048
|
for (var i = 0; i < ths.length; i++) {
|
|
4439
4049
|
var th = ths[i];
|
|
4440
|
-
thsCache[
|
|
4050
|
+
thsCache[th.th] = th;
|
|
4441
4051
|
}
|
|
4442
4052
|
this.TMPRowTDs = {};
|
|
4443
4053
|
// Variabile d'appoggio per permettermi di inserire tutte le colonne "Fixed" davanti
|
|
4444
4054
|
var contextFixeds = {};
|
|
4445
4055
|
for (var i = 0; i < tds.length; i++) {
|
|
4446
4056
|
var td = tds[i];
|
|
4447
|
-
|
|
4448
|
-
var
|
|
4057
|
+
for (var i_1 = 0; i_1 < this.boundSource.length; i_1++) {
|
|
4058
|
+
var item = this.boundSource[i_1];
|
|
4059
|
+
var ctx = item._hash;
|
|
4060
|
+
var key = td.td;
|
|
4061
|
+
var th = thsCache[td.td];
|
|
4449
4062
|
if (!!th)
|
|
4450
4063
|
th._referenced = true;
|
|
4451
4064
|
else
|
|
4452
|
-
throw "ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: " + td.
|
|
4453
|
-
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
|
|
4459
|
-
|
|
4065
|
+
throw "ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: " + td.td;
|
|
4066
|
+
if (td.tdIf || th.thGroup) {
|
|
4067
|
+
var thCasted = th;
|
|
4068
|
+
var isFixed = th.thFixed || th.thGroup || th.thPinned;
|
|
4069
|
+
var itemToAdd = item._item ?
|
|
4070
|
+
{ LeftBorder: thCasted._lbord, RightBorder: thCasted._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: false, GroupAggregation: false, Visible: columnsCache[td.td].visible, Wraps: false, Class: td.tdClass, Template: thCasted.thGroup && !this.ShowItemGroupsColumns ? null : td.Template } :
|
|
4071
|
+
{ LeftBorder: thCasted._lbord, RightBorder: thCasted._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: thCasted.thGroup, GroupAggregation: !!thCasted.thAggregation, Visible: columnsCache[td.td].visible, Wraps: false, Class: thCasted.thGroupClass || '', Content: this.rowGrouping_H.getGroupCellDisplay(item, key, th) };
|
|
4072
|
+
if (this.TMPRowTDs[ctx]) {
|
|
4460
4073
|
this.TMPRowTDs[ctx].push(itemToAdd);
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
}
|
|
4467
|
-
}
|
|
4468
|
-
else {
|
|
4469
|
-
for (var i_1 = 0; i_1 < this.boundSource.length; i_1++) {
|
|
4470
|
-
var item = this.boundSource[i_1];
|
|
4471
|
-
var ctx = item._hash;
|
|
4472
|
-
var key = td.td;
|
|
4473
|
-
var th = thsCache[td.td];
|
|
4474
|
-
if (!!th)
|
|
4475
|
-
th._referenced = true;
|
|
4476
|
-
else
|
|
4477
|
-
throw "ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: " + td.td;
|
|
4478
|
-
if (td.tdIf || (!this.utilities_H.isEsTh(th) && th.thGroup)) {
|
|
4479
|
-
var thCasted = th;
|
|
4480
|
-
var isFixed = (this.utilities_H.isEsTh(th) && th.Fixed) || (!this.utilities_H.isEsTh(th) && (th.thFixed || th.thGroup || th.thPinned));
|
|
4481
|
-
var itemToAdd = item._item ?
|
|
4482
|
-
{ LeftBorder: thCasted._lbord, RightBorder: thCasted._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: false, GroupAggregation: false, Visible: columnsCache[td.td].visible, Wraps: false, Class: td.tdClass, Template: thCasted.thGroup && !this.ShowItemGroupsColumns ? null : td.Template } :
|
|
4483
|
-
{ LeftBorder: thCasted._lbord, RightBorder: thCasted._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: thCasted.thGroup, GroupAggregation: !!thCasted.thAggregation, Visible: columnsCache[td.td].visible, Wraps: false, Class: thCasted.thGroupClass || '', Content: this.rowGrouping_H.getGroupCellDisplay(item, key, th) };
|
|
4484
|
-
if (this.TMPRowTDs[ctx]) {
|
|
4485
|
-
this.TMPRowTDs[ctx].push(itemToAdd);
|
|
4486
|
-
}
|
|
4487
|
-
else {
|
|
4488
|
-
this.RowContexts.push(ctx);
|
|
4489
|
-
this.TMPRowTDs[ctx] = [itemToAdd];
|
|
4490
|
-
contextFixeds[ctx] = isFixed ? 1 : 0;
|
|
4491
|
-
}
|
|
4074
|
+
}
|
|
4075
|
+
else {
|
|
4076
|
+
this.RowContexts.push(ctx);
|
|
4077
|
+
this.TMPRowTDs[ctx] = [itemToAdd];
|
|
4078
|
+
contextFixeds[ctx] = isFixed ? 1 : 0;
|
|
4492
4079
|
}
|
|
4493
4080
|
}
|
|
4494
4081
|
}
|
|
@@ -4500,7 +4087,7 @@
|
|
|
4500
4087
|
for (var i = 0; i < ths.length; i++) {
|
|
4501
4088
|
var th = ths[i];
|
|
4502
4089
|
if (!th._referenced)
|
|
4503
|
-
errs.push(
|
|
4090
|
+
errs.push(th.th);
|
|
4504
4091
|
}
|
|
4505
4092
|
if (errs.length > 0) {
|
|
4506
4093
|
var errIds = errs.join(', ');
|
|
@@ -4514,10 +4101,10 @@
|
|
|
4514
4101
|
*
|
|
4515
4102
|
* Costo: 1 scan EsThs
|
|
4516
4103
|
*
|
|
4517
|
-
* @param {
|
|
4104
|
+
* @param {EsThDirective[]} ths Colonne della tabella
|
|
4518
4105
|
*/
|
|
4519
4106
|
EsTableComponent.prototype.evaluateRowThs = function (ths) {
|
|
4520
|
-
var
|
|
4107
|
+
var _t;
|
|
4521
4108
|
if (ths.length == 0)
|
|
4522
4109
|
return;
|
|
4523
4110
|
var columnsListCache = {};
|
|
@@ -4528,18 +4115,10 @@
|
|
|
4528
4115
|
columnsListCache[itm.id] = itm;
|
|
4529
4116
|
}
|
|
4530
4117
|
this.TMPRowTHs = [];
|
|
4531
|
-
var fixed = 0;
|
|
4532
4118
|
for (var i = 0; i < ths.length; i++) {
|
|
4533
4119
|
var th = ths[i];
|
|
4534
4120
|
var toAdd = void 0;
|
|
4535
|
-
if (
|
|
4536
|
-
toAdd = { Pinned: false, ID: th.ID, Visible: th.Visible, Class: th.Class, Order: th.Order, Orderable: th.Orderable, Template: null, Content: th.Description, Wrap: th.Wrap };
|
|
4537
|
-
if (th.Fixed)
|
|
4538
|
-
this.TMPRowTHs.splice(0 + (fixed++), 0, toAdd);
|
|
4539
|
-
else
|
|
4540
|
-
this.TMPRowTHs.push(toAdd);
|
|
4541
|
-
}
|
|
4542
|
-
else if (th.thIf || th.thGroup) {
|
|
4121
|
+
if (th.thIf || th.thGroup) {
|
|
4543
4122
|
var thClass = (th.thClass || '') + (th.thGroup ? " est-col-min" : "");
|
|
4544
4123
|
toAdd = { Pinned: columnsListCache[th.th].pinned, Fixed: th.thFixed, PinnedWidth: th.thPinnedWidth, ID: th.th, Visible: th.thVisible, Class: thClass, Order: th.thOrder, Orderable: th.thOrderable, Template: th.Template, Content: null, Wrap: th.thWrap, LeftBorder: th._lbord, RightBorder: th._rbord };
|
|
4545
4124
|
this.TMPRowTHs.push(toAdd);
|
|
@@ -4550,7 +4129,7 @@
|
|
|
4550
4129
|
if (!castedView.groupings)
|
|
4551
4130
|
castedView.groupings = groupAggregations;
|
|
4552
4131
|
else
|
|
4553
|
-
(
|
|
4132
|
+
(_t = castedView.groupings).push.apply(_t, __spread(groupAggregations));
|
|
4554
4133
|
this.ResearchNeeded = true;
|
|
4555
4134
|
}
|
|
4556
4135
|
}
|
|
@@ -4793,21 +4372,6 @@
|
|
|
4793
4372
|
// Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca
|
|
4794
4373
|
this.internalWriteValue();
|
|
4795
4374
|
};
|
|
4796
|
-
/**
|
|
4797
|
-
* Gestore dei click sulle celle per le quali era impostata una azione custom da **CustomCellActionsOn**
|
|
4798
|
-
*
|
|
4799
|
-
* @param {string} name Nome della cella su cui si è fatto click
|
|
4800
|
-
* @param {any} model Modello relativo alla cella cliccata
|
|
4801
|
-
*
|
|
4802
|
-
* @returns {boolean} **true** se il click è stato fatto su una cella cliccabile, **false** altrimenti
|
|
4803
|
-
*/
|
|
4804
|
-
EsTableComponent.prototype.cellClicked = function (name, model) {
|
|
4805
|
-
if (this.UseCustomCellActions && this.CustomCellActionsOn.split('$').indexOf(name) != -1) {
|
|
4806
|
-
this.onCellClick.emit({ column: name, model: model });
|
|
4807
|
-
return true;
|
|
4808
|
-
}
|
|
4809
|
-
return false;
|
|
4810
|
-
};
|
|
4811
4375
|
/**
|
|
4812
4376
|
* Gestione dei click sulle opzioni del menù contestuale in alto a destra generato dall'Input **CornerMenuOptions**
|
|
4813
4377
|
*
|
|
@@ -4866,7 +4430,7 @@
|
|
|
4866
4430
|
viewProviders: [{ provide: localizations.LocalizationService, useClass: EsTableLoc }],
|
|
4867
4431
|
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
4868
4432
|
encapsulation: i0.ViewEncapsulation.None,
|
|
4869
|
-
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<!--\r\nI TH sono contenuto statico, questo significa che senza condizione per RowTHs arriverebbero sia qui sia nell ng-container dell'header in fase non inizializzata, duplicando fisicamente le colonne.\r\nPer ovviare al problema, questo pezzo lo faccio apparire solo se ci sono gi\u00E0 dei RowTHs, quindi su valorizzazione della View succeder\u00E0:\r\n1) appaiono i th nell' ng-container dell'header, e NON qui\r\n2) i TH vengono presi, elaborati e trasformati in RowTHs\r\n3) l'ng-container dell'header sparisce (per la condizione !UseCustomCells || !RowTHs) e qui appaiono i nuovi TH (che poi sono gli stessi di prima che girano)\r\n4) Vengono presi i nuovi TH da qui e trasformati a loro volta in RowTHs\r\n-->\r\n<div hidden *ngIf=\"UseCustomCells && RowTHs\">\r\n <ng-container *ngIf=\"View\">\r\n <!--Qui invece ci sono tutti i TH-->\r\n <ng-container *ngTemplateOutlet=\"headerRef\"></ng-container>\r\n </ng-container>\r\n</div>\r\n\r\n<!--\r\nQuesta parte \u00E8 un po' pi\u00F9 semplice del sopra. Infatti i TD vengono s\u00EC bindati in entrambi i punti (qui e nell'ng-container del body), ma avr\u00F2 le TD statiche prima di generare la TMPBoundSource.\r\nQuesto significa che il workflow di binding sar\u00E0:\r\n1) Appaiono i TD statici nel body e NON qui, perch\u00E9 i TMPBoundSource non sono ancora stati emessi\r\n2) Contemporaneamente all'emissione dei TMPBoundSource vengono anche emessi i RowTds\r\n3) Considerando il punto 2, al giro dopo appariranno i TD qui, perch\u00E9 \u00E8 stata generata la TMPBoundSource, e spariranno contemporaneamente dall'ng-container del body (per la condizione !UseCustomCells || !RowTDs)\r\n-->\r\n<div hidden *ngIf=\"UseCustomCells && bodyRef\">\r\n <ng-container *ngIf=\"View\">\r\n <!--Tutti i TD che dopo verranno presi ed elaborati internamente-->\r\n <ng-container *ngFor=\"let item of TMPBoundSource\">\r\n <ng-container *ngTemplateOutlet=\"bodyRef; context : {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n </ng-container>\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}}\" [class.est-scrollable]=\"UseEndlessscroll\" (scroll)=\"UseEndlessscroll && onScroll($event)\" [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'}}\"\r\n [class.est-pointer]=\"UseCustomCellActions && CustomCellActionsOn.indexOf('$' + rowItem.propertyName + '$') != -1\"\r\n (click)=\"cellClicked(rowItem.propertyName, item) && !CellActionPropagates && $event.stopPropagation()\"\r\n [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\" [class.est-pointer]=\"UseCustomCellActions && CustomCellActionsOn.indexOf('$' + $any(rowItem).ID + '$') != -1\" (click)=\"cellClicked(rowItem.ID, item) && !CellActionPropagates && $event.stopPropagation()\" [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>",
|
|
4433
|
+
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>",
|
|
4870
4434
|
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)}"]
|
|
4871
4435
|
},] }
|
|
4872
4436
|
];
|
|
@@ -4886,18 +4450,14 @@
|
|
|
4886
4450
|
EsTableComponent.propDecorators = {
|
|
4887
4451
|
EsTdsDirective: [{ type: i0.ContentChildren, args: [EsTdDirective,] }],
|
|
4888
4452
|
EsThsDirective: [{ type: i0.ContentChildren, args: [EsThDirective,] }],
|
|
4889
|
-
EsThs: [{ type: i0.ContentChildren, args: [i0.forwardRef(function () { return EsTh; }),] }],
|
|
4890
|
-
EsTds: [{ type: i0.ContentChildren, args: [i0.forwardRef(function () { return EsTd; }),] }],
|
|
4891
4453
|
bodyRef: [{ type: i0.ContentChild, args: ['body', { static: false },] }],
|
|
4892
4454
|
headerRef: [{ type: i0.ContentChild, args: ['header', { static: false },] }],
|
|
4893
4455
|
headerGroupRef: [{ type: i0.ContentChild, args: ['headerGroup', { static: false },] }],
|
|
4894
4456
|
secondaryHeaderGroupRef: [{ type: i0.ContentChild, args: ['secondaryHeaderGroup', { static: false },] }],
|
|
4895
4457
|
CornerMenuOptions: [{ type: i0.Input }],
|
|
4896
4458
|
ColumnsResizable: [{ type: i0.Input }],
|
|
4459
|
+
ColumnsPinnable: [{ type: i0.Input }],
|
|
4897
4460
|
AutoUpdate: [{ type: i0.Input }],
|
|
4898
|
-
UseCustomCellActions: [{ type: i0.Input }],
|
|
4899
|
-
CustomCellActionsOn: [{ type: i0.Input }],
|
|
4900
|
-
CellActionPropagates: [{ type: i0.Input }],
|
|
4901
4461
|
UseCustomCells: [{ type: i0.Input }],
|
|
4902
4462
|
MaxHeight: [{ type: i0.Input }],
|
|
4903
4463
|
ContainerClass: [{ type: i0.Input }],
|
|
@@ -4921,9 +4481,6 @@
|
|
|
4921
4481
|
ExportFunction: [{ type: i0.Input }],
|
|
4922
4482
|
HasHeaderGroup: [{ type: i0.Input }],
|
|
4923
4483
|
HasSecondaryHeaderGroup: [{ type: i0.Input }],
|
|
4924
|
-
SliceSize: [{ type: i0.Input }],
|
|
4925
|
-
EndlessScroll: [{ type: i0.Input }],
|
|
4926
|
-
EndlessScrollOnlyForAll: [{ type: i0.Input }],
|
|
4927
4484
|
HeaderHidden: [{ type: i0.Input }],
|
|
4928
4485
|
BodyHidden: [{ type: i0.Input }],
|
|
4929
4486
|
SelectionDisabled: [{ type: i0.Input }],
|
|
@@ -4954,7 +4511,6 @@
|
|
|
4954
4511
|
onSelectionChanged: [{ type: i0.Output }],
|
|
4955
4512
|
onRemoval: [{ type: i0.Output }],
|
|
4956
4513
|
onAbortRemoval: [{ type: i0.Output }],
|
|
4957
|
-
onCellClick: [{ type: i0.Output }],
|
|
4958
4514
|
onCornerAction: [{ type: i0.Output }],
|
|
4959
4515
|
onDynamicOperation: [{ type: i0.Output }],
|
|
4960
4516
|
exportDownloader: [{ type: i0.ViewChild, args: ['exportDownloader', { static: false },] }],
|
|
@@ -4969,127 +4525,243 @@
|
|
|
4969
4525
|
return EsTableModuleConfig;
|
|
4970
4526
|
}());
|
|
4971
4527
|
|
|
4972
|
-
|
|
4973
|
-
|
|
4974
|
-
|
|
4975
|
-
/** @ignore */
|
|
4976
|
-
function TablePagerLoc(LOC_LOCALE) {
|
|
4977
|
-
var _this = _super.call(this, LOC_LOCALE !== null && LOC_LOCALE !== void 0 ? LOC_LOCALE : 'it-IT') || this;
|
|
4978
|
-
_super.prototype.set.call(_this, "en->it", "All", ["Tutto"]);
|
|
4979
|
-
_super.prototype.set.call(_this, "en->it", "Shown Elements", ["Elementi visualizzati"]);
|
|
4980
|
-
_super.prototype.set.call(_this, "en->it", "Shown Groups", ["Gruppi visualizzati"]);
|
|
4981
|
-
_super.prototype.set.call(_this, "en->it", "Are you sure you want to retrieve all results?", ["Si è sicuri di voler caricare tutti i risultati?"]);
|
|
4982
|
-
_super.prototype.set.call(_this, "en->it", "This might slow down the page and possibly crash the entire application", ["L'operazione potrebbe rallentare la pagina fino al crash dell'applicazione"]);
|
|
4983
|
-
return _this;
|
|
4984
|
-
}
|
|
4985
|
-
return TablePagerLoc;
|
|
4986
|
-
}(localizations.LocalizationService));
|
|
4987
|
-
TablePagerLoc.decorators = [
|
|
4988
|
-
{ type: i0.Injectable }
|
|
4989
|
-
];
|
|
4990
|
-
TablePagerLoc.ctorParameters = function () { return [
|
|
4991
|
-
{ type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [EST_LOCALE,] }] }
|
|
4992
|
-
]; };
|
|
4993
|
-
|
|
4994
|
-
// Angular
|
|
4995
|
-
/** Componente che si occupa della paginazione di una tabella */
|
|
4996
|
-
var TablePagerComponent = /** @class */ (function () {
|
|
4528
|
+
//Angular
|
|
4529
|
+
/** Componente rappresentante una Colonna della tabella */
|
|
4530
|
+
var EsTh = /** @class */ (function () {
|
|
4997
4531
|
/** @ignore */
|
|
4998
|
-
function
|
|
4999
|
-
this.
|
|
5000
|
-
this.
|
|
5001
|
-
|
|
5002
|
-
this.
|
|
5003
|
-
/** Indica se
|
|
5004
|
-
this.
|
|
5005
|
-
/**
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
this.
|
|
5011
|
-
/**
|
|
5012
|
-
this.
|
|
5013
|
-
/** Indica
|
|
5014
|
-
this.
|
|
5015
|
-
/**
|
|
5016
|
-
this.
|
|
5017
|
-
/** Indica se
|
|
5018
|
-
this.
|
|
5019
|
-
/**
|
|
5020
|
-
this.
|
|
5021
|
-
/**
|
|
5022
|
-
|
|
4532
|
+
function EsTh(myself, renderer) {
|
|
4533
|
+
this.myself = myself;
|
|
4534
|
+
this.renderer = renderer;
|
|
4535
|
+
/** Dizionario di mappatura con ordinamento attuale e ordinamento successivo per gestire i passaggi di stato */
|
|
4536
|
+
this.orderNext = { "NONE": "DESC", "DESC": "ASC", "ASC": null };
|
|
4537
|
+
/** Indica se si sta effettuando un'operazione di resize su questa colonna */
|
|
4538
|
+
this.resizingThis = false;
|
|
4539
|
+
/**
|
|
4540
|
+
* Storicizza l'offset di partenza del resize dell'elemento HTML per poter calcolare la nuova dimensione richiesta durente il resize
|
|
4541
|
+
*
|
|
4542
|
+
* nuova width = startOffset + posizione X del mouse
|
|
4543
|
+
*/
|
|
4544
|
+
this.startOffset = null;
|
|
4545
|
+
/** Id della colonna, dev'essere lo stesso per tutti gli **EsTd** relativi */
|
|
4546
|
+
this.ID = "";
|
|
4547
|
+
/** Indica se questa colonna è ordinabile o meno */
|
|
4548
|
+
this.Orderable = true;
|
|
4549
|
+
/** Valore da mostrare all'interno della colonna. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */
|
|
4550
|
+
this.Display = "";
|
|
4551
|
+
/** Indica se le dimnsioni di questa colonna sono modificabili o meno */
|
|
4552
|
+
this.Resizable = false;
|
|
4553
|
+
/** Indica se questo header è pinnato. In caso lo fosse presenta il tastino per effettuare lo spinning */
|
|
4554
|
+
this.Pinned = false;
|
|
4555
|
+
/**
|
|
4556
|
+
* Indica se sta venendo eseguita una operazione di ricerca o meno, serve per evitare l'esecuzione di eventuale codice che potrebbe dare fastidio
|
|
4557
|
+
* come ad esempio l'escuzione di un ordinamento durante il caricamento di dati nuovi
|
|
4558
|
+
*/
|
|
4559
|
+
this.SearchInProgress = false;
|
|
4560
|
+
/** Indica se il testo presente in questo Header può andare a capo o meno, di default non può */
|
|
4561
|
+
this.Wrap = false;
|
|
4562
|
+
/** Indica se la colonna è fixed, cioè se non può né essere nascosta, né riposizionata. Solo le prime colonne possono essere Fixed */
|
|
4563
|
+
this.Fixed = false;
|
|
4564
|
+
/** Template Angular da istanziare per questo TH */
|
|
4565
|
+
this.Template = null;
|
|
4566
|
+
/** Evento emesso al cambio di ordinamento effettuato su questa colonna */
|
|
4567
|
+
this.onOrderChange = new i0.EventEmitter();
|
|
4568
|
+
/** Evento emesso all'unpinning della colonna */
|
|
4569
|
+
this.onUnpinning = new i0.EventEmitter();
|
|
4570
|
+
/** Impostato dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header */
|
|
4571
|
+
this._referenced = false;
|
|
5023
4572
|
}
|
|
4573
|
+
Object.defineProperty(EsTh.prototype, "Visible", {
|
|
4574
|
+
/**
|
|
4575
|
+
* Restituisce lo stato di Visibilità della colonna in oggetto
|
|
4576
|
+
*
|
|
4577
|
+
* @returns {boolean} **true** se visibile, **false** altrimenti
|
|
4578
|
+
*/
|
|
4579
|
+
get: function () {
|
|
4580
|
+
if (this._Visible == undefined)
|
|
4581
|
+
this._Visible = true;
|
|
4582
|
+
return this._Visible;
|
|
4583
|
+
},
|
|
4584
|
+
/**
|
|
4585
|
+
* Imposta la visibilità o meno della colonna, si traduce nell'applicazione o rimozione della classe **app-display-none**
|
|
4586
|
+
*
|
|
4587
|
+
* @param {boolean} expression Indicazione della visibilità
|
|
4588
|
+
*/
|
|
4589
|
+
set: function (expression) {
|
|
4590
|
+
this._Visible = expression;
|
|
4591
|
+
if (expression)
|
|
4592
|
+
this.renderer.removeClass(this.myself.nativeElement, "app-display-none");
|
|
4593
|
+
else
|
|
4594
|
+
this.renderer.addClass(this.myself.nativeElement, "app-display-none");
|
|
4595
|
+
},
|
|
4596
|
+
enumerable: false,
|
|
4597
|
+
configurable: true
|
|
4598
|
+
});
|
|
5024
4599
|
/** @ignore */
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
|
|
5028
|
-
|
|
4600
|
+
EsTh.prototype.ngAfterViewInit = function () {
|
|
4601
|
+
//Assegnare direttamente il content è più veloce che passare dal native element per qualche motivo
|
|
4602
|
+
this.Description = this.Display === null || this.Display === "" ? this.content.nativeElement.innerText : this.Display;
|
|
4603
|
+
this.Class = this.myself.nativeElement.className.replace("app-display-none", "");
|
|
4604
|
+
//Resize
|
|
4605
|
+
if (this.Resizable)
|
|
4606
|
+
this.renderer.addClass(this.myself.nativeElement, "app-relative");
|
|
5029
4607
|
};
|
|
5030
|
-
/**
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
4608
|
+
/** Emette l'evento di unpinning */
|
|
4609
|
+
EsTh.prototype.unpin = function () {
|
|
4610
|
+
this.onUnpinning.emit(this.ID);
|
|
4611
|
+
};
|
|
4612
|
+
/** Gestisce la modifica dell'ordinamento qualora venisse cliccato su questa colonna */
|
|
4613
|
+
EsTh.prototype.setupNextOrderAndNotify = function () {
|
|
4614
|
+
if (!this.ID) {
|
|
4615
|
+
console.log("Attempt to order a column without ID. Operation ignored");
|
|
4616
|
+
return;
|
|
4617
|
+
}
|
|
4618
|
+
if (this.SearchInProgress) {
|
|
4619
|
+
console.log("Attempt to order a column during a search. Operation ignored");
|
|
4620
|
+
return;
|
|
4621
|
+
}
|
|
4622
|
+
if (!this.OrderBy || !this.Orderable)
|
|
4623
|
+
return;
|
|
4624
|
+
var nextOrder = this.orderNext[this.Order || "NONE"];
|
|
4625
|
+
this.Order = nextOrder;
|
|
4626
|
+
this.onOrderChange.emit(this.Order);
|
|
5036
4627
|
};
|
|
5037
4628
|
/**
|
|
5038
|
-
*
|
|
4629
|
+
* Evento di inizio resize della colonna
|
|
5039
4630
|
*
|
|
5040
|
-
*
|
|
4631
|
+
* @param {any} ev Evento MouseDown
|
|
4632
|
+
*/
|
|
4633
|
+
EsTh.prototype.onResizeStart = function (ev) {
|
|
4634
|
+
if (!this.Resizable)
|
|
4635
|
+
return;
|
|
4636
|
+
this.resizingThis = true;
|
|
4637
|
+
this.startOffset = this.myself.nativeElement.offsetWidth - ev.pageX;
|
|
4638
|
+
};
|
|
4639
|
+
/** Listener per la fine dell'operazione di resize */
|
|
4640
|
+
EsTh.prototype.onMouseUp = function () {
|
|
4641
|
+
if (!this.Resizable)
|
|
4642
|
+
return;
|
|
4643
|
+
this.resizingThis = false;
|
|
4644
|
+
};
|
|
4645
|
+
/**
|
|
4646
|
+
* Listener per gestire il movimento del mouse qualora un'operazione di resize fosse in esecuzione
|
|
5041
4647
|
*
|
|
5042
|
-
* @param {
|
|
4648
|
+
* @param {$event} ev Evento MouseMove
|
|
5043
4649
|
*/
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
_this.Model = prevModel;
|
|
5053
|
-
_this.cdr.detectChanges();
|
|
5054
|
-
});
|
|
5055
|
-
}
|
|
5056
|
-
else {
|
|
5057
|
-
this.pagingSelected.emit(pageSize);
|
|
5058
|
-
this.Model = pageSize;
|
|
5059
|
-
}
|
|
4650
|
+
EsTh.prototype.onMouseMove = function ($event) {
|
|
4651
|
+
if (!this.Resizable || !this.resizingThis)
|
|
4652
|
+
return;
|
|
4653
|
+
//Uso jquery per non dover far partire un intero ciclo di change detection solo per fare un resize del cazzo
|
|
4654
|
+
//(anche perché viene lanciato ogni 0.1 secondo quindi not a good idea)
|
|
4655
|
+
this.myself.nativeElement.style.width = (this.startOffset + $event.pageX) + "px";
|
|
4656
|
+
//Fermo il bubbling per non fare cose strane
|
|
4657
|
+
$event.preventDefault();
|
|
5060
4658
|
};
|
|
5061
|
-
return
|
|
4659
|
+
return EsTh;
|
|
5062
4660
|
}());
|
|
5063
|
-
|
|
4661
|
+
EsTh.decorators = [
|
|
5064
4662
|
{ type: i0.Component, args: [{
|
|
5065
|
-
selector: "
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
encapsulation: i0.ViewEncapsulation.None,
|
|
5069
|
-
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
5070
|
-
styles: [".est-ipp-sel,.est-ipp-sel-all,.est-rg-ipp-sel,.est-rg-ipp-sel-all{color:#0275d8!important;cursor:pointer;text-decoration:none;display:block;display:inline}.est-ipp-bold{font-weight:700}.mat-paginator-page-size-select{margin:6px 4px 0;width:50px}.mat-paginator-page-size-select .mat-form-field-wrapper{height:52px!important;margin-top:-15px!important;padding:0!important}.mat-form-field-type-mat-native-select .mat-form-field-infix:after{margin-top:-5.5px!important}"]
|
|
4663
|
+
selector: "[es-th]",
|
|
4664
|
+
template: "<span (click)=\"setupNextOrderAndNotify()\" [class.app-no-selection]=\"!!ID && Orderable\" [class.app-pointer]=\"!!ID && Orderable\">\r\n <span #content>\r\n <ng-container *ngIf=\"Template\">\r\n <ng-container *ngTemplateOutlet=\"Template\"></ng-container>\r\n </ng-container>\r\n <ng-content *ngIf=\"!Template\"></ng-content>\r\n </span> \r\n <span class=\"fa\" [class.fa-chevron-down]=\"Order == 'DESC'\" [class.fa-chevron-up]=\"Order == 'ASC'\"></span>\r\n</span>\r\n<span *ngIf=\"Pinned && !Fixed\" class=\"app-pointer fa fa-thumb-tack est-quick-unpin\" (click)=\"unpin()\"></span>\r\n<div [hidden]=\"!Resizable || Fixed || Pinned\" class=\"est-head-resizer\" (mousedown)=\"onResizeStart($event)\">\r\n <div class=\"est-head-resizer-internal\"></div>\r\n</div>",
|
|
4665
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
5071
4666
|
},] }
|
|
5072
4667
|
];
|
|
5073
|
-
|
|
5074
|
-
{ type:
|
|
5075
|
-
{ type:
|
|
5076
|
-
{ type: i0.ChangeDetectorRef },
|
|
5077
|
-
{ type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [EST_LOCALE,] }] }
|
|
4668
|
+
EsTh.ctorParameters = function () { return [
|
|
4669
|
+
{ type: i0.ElementRef },
|
|
4670
|
+
{ type: i0.Renderer2 }
|
|
5078
4671
|
]; };
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
|
|
5090
|
-
|
|
5091
|
-
|
|
5092
|
-
|
|
4672
|
+
EsTh.propDecorators = {
|
|
4673
|
+
ID: [{ type: i0.Input, args: ['es-th',] }],
|
|
4674
|
+
Order: [{ type: i0.Input }],
|
|
4675
|
+
Orderable: [{ type: i0.Input }],
|
|
4676
|
+
Display: [{ type: i0.Input }],
|
|
4677
|
+
Resizable: [{ type: i0.Input }],
|
|
4678
|
+
Pinned: [{ type: i0.Input }],
|
|
4679
|
+
SearchInProgress: [{ type: i0.Input }],
|
|
4680
|
+
OrderBy: [{ type: i0.Input }],
|
|
4681
|
+
Wrap: [{ type: i0.Input }],
|
|
4682
|
+
Fixed: [{ type: i0.Input }],
|
|
4683
|
+
Template: [{ type: i0.Input }],
|
|
4684
|
+
onOrderChange: [{ type: i0.Output }],
|
|
4685
|
+
onUnpinning: [{ type: i0.Output }],
|
|
4686
|
+
content: [{ type: i0.ViewChild, args: ["content", { static: false },] }],
|
|
4687
|
+
Visible: [{ type: i0.Input }],
|
|
4688
|
+
onMouseUp: [{ type: i0.HostListener, args: ['window:mouseup.out-zone',] }],
|
|
4689
|
+
onMouseMove: [{ type: i0.HostListener, args: ['window:mousemove.out-zone', ['$event'],] }]
|
|
4690
|
+
};
|
|
4691
|
+
|
|
4692
|
+
//Angular
|
|
4693
|
+
/** Componente rappresentante una singola cella del body della tabella */
|
|
4694
|
+
var EsTd = /** @class */ (function () {
|
|
4695
|
+
/** @ignore */
|
|
4696
|
+
function EsTd(myself, renderer, _viewContainer, sanitizer) {
|
|
4697
|
+
this.myself = myself;
|
|
4698
|
+
this.renderer = renderer;
|
|
4699
|
+
this._viewContainer = _viewContainer;
|
|
4700
|
+
this.sanitizer = sanitizer;
|
|
4701
|
+
/** Id della cella, dev'essere lo stesso della colonna **EsTh** relativa */
|
|
4702
|
+
this.ID = "";
|
|
4703
|
+
/** Valore da mostrare all'interno della cella. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */
|
|
4704
|
+
this.Display = null;
|
|
4705
|
+
/** Template Angular da istanziare per questo TD */
|
|
4706
|
+
this.Template = null;
|
|
4707
|
+
}
|
|
4708
|
+
Object.defineProperty(EsTd.prototype, "Visible", {
|
|
4709
|
+
/**
|
|
4710
|
+
* Restituisce lo stato di Visibilità della cella in oggetto
|
|
4711
|
+
*
|
|
4712
|
+
* @returns {boolean} **true** se visibile, **false** altrimenti
|
|
4713
|
+
*/
|
|
4714
|
+
get: function () {
|
|
4715
|
+
if (this._Visible == undefined)
|
|
4716
|
+
this._Visible = true;
|
|
4717
|
+
return this._Visible;
|
|
4718
|
+
},
|
|
4719
|
+
/**
|
|
4720
|
+
* Imposta la visibilità o meno della cella, si traduce nell'applicazione o rimozione della classe **app-display-none**
|
|
4721
|
+
*
|
|
4722
|
+
* @param {boolean} expression Indicazione della visibilità
|
|
4723
|
+
*/
|
|
4724
|
+
set: function (expression) {
|
|
4725
|
+
this._Visible = expression;
|
|
4726
|
+
if (expression)
|
|
4727
|
+
this.renderer.removeClass(this.myself.nativeElement, "app-display-none");
|
|
4728
|
+
else
|
|
4729
|
+
this.renderer.addClass(this.myself.nativeElement, "app-display-none");
|
|
4730
|
+
},
|
|
4731
|
+
enumerable: false,
|
|
4732
|
+
configurable: true
|
|
4733
|
+
});
|
|
4734
|
+
/** @ignore */
|
|
4735
|
+
EsTd.prototype.ngAfterViewInit = function () {
|
|
4736
|
+
// Se è Internal significa che è gestita internamente da ES-TABLE quindi evito di fare sti due passaggi di lettura del DOM
|
|
4737
|
+
if (this.Internal)
|
|
4738
|
+
return;
|
|
4739
|
+
this.Content = this.Display === null || this.Display === "" ? this.sanitizer.bypassSecurityTrustHtml(this.myself.nativeElement.innerHTML) : this.sanitizer.bypassSecurityTrustHtml(this.Display);
|
|
4740
|
+
this.Class = this.myself.nativeElement.className.replace("app-display-none", "");
|
|
4741
|
+
};
|
|
4742
|
+
return EsTd;
|
|
4743
|
+
}());
|
|
4744
|
+
EsTd.decorators = [
|
|
4745
|
+
{ type: i0.Component, args: [{
|
|
4746
|
+
selector: "[es-td]",
|
|
4747
|
+
template: "<span>\r\n <ng-content></ng-content>\r\n</span>",
|
|
4748
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
4749
|
+
},] }
|
|
4750
|
+
];
|
|
4751
|
+
EsTd.ctorParameters = function () { return [
|
|
4752
|
+
{ type: i0.ElementRef },
|
|
4753
|
+
{ type: i0.Renderer2 },
|
|
4754
|
+
{ type: i0.ViewContainerRef },
|
|
4755
|
+
{ type: platformBrowser.DomSanitizer }
|
|
4756
|
+
]; };
|
|
4757
|
+
EsTd.propDecorators = {
|
|
4758
|
+
ID: [{ type: i0.Input, args: ['es-td',] }],
|
|
4759
|
+
Internal: [{ type: i0.Input }],
|
|
4760
|
+
RouterLink: [{ type: i0.Input }],
|
|
4761
|
+
Display: [{ type: i0.Input }],
|
|
4762
|
+
Template: [{ type: i0.Input }],
|
|
4763
|
+
Context: [{ type: i0.Input }],
|
|
4764
|
+
Visible: [{ type: i0.Input }]
|
|
5093
4765
|
};
|
|
5094
4766
|
|
|
5095
4767
|
var EsTableModule = /** @class */ (function () {
|
|
@@ -5123,13 +4795,79 @@
|
|
|
5123
4795
|
],
|
|
5124
4796
|
declarations: [EsTh, EsTd, EsTableComponent, EsTdDirective, EsThDirective, TablePagerComponent],
|
|
5125
4797
|
providers: [i1.UtilityService, i1.ExportService, i1.HashingService, i1.MessageService],
|
|
5126
|
-
exports: [
|
|
4798
|
+
exports: [EsTableComponent, EsTdDirective, EsThDirective, TablePagerComponent]
|
|
5127
4799
|
},] }
|
|
5128
4800
|
];
|
|
5129
4801
|
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
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
|
+
}());
|
|
5133
4871
|
|
|
5134
4872
|
/**
|
|
5135
4873
|
* Generated bundle index. Do not edit.
|
|
@@ -5144,8 +4882,8 @@
|
|
|
5144
4882
|
exports.EsTableModule = EsTableModule;
|
|
5145
4883
|
exports.EsTableModuleConfig = EsTableModuleConfig;
|
|
5146
4884
|
exports.EsTableOperationDefinition = EsTableOperationDefinition;
|
|
5147
|
-
exports.
|
|
5148
|
-
exports.
|
|
4885
|
+
exports.EsTdDirective = EsTdDirective;
|
|
4886
|
+
exports.EsThDirective = EsThDirective;
|
|
5149
4887
|
exports.GenericItem = GenericItem;
|
|
5150
4888
|
exports.Group = Group;
|
|
5151
4889
|
exports.GroupAggregation = GroupAggregation;
|
|
@@ -5158,15 +4896,15 @@
|
|
|
5158
4896
|
exports.ReportParam = ReportParam;
|
|
5159
4897
|
exports.ReportResult = ReportResult;
|
|
5160
4898
|
exports.ReportRow = ReportRow;
|
|
5161
|
-
exports
|
|
4899
|
+
exports.TablePagerComponent = TablePagerComponent;
|
|
4900
|
+
exports.ɵa = TablePagerLoc;
|
|
5162
4901
|
exports.ɵb = EST_LOCALE;
|
|
5163
4902
|
exports.ɵc = EST_DEBUG;
|
|
5164
4903
|
exports.ɵd = EST_DEFAULTS;
|
|
5165
|
-
exports.ɵe =
|
|
5166
|
-
exports.ɵf =
|
|
5167
|
-
exports.ɵg =
|
|
5168
|
-
exports.ɵh =
|
|
5169
|
-
exports.ɵi = TablePagerLoc;
|
|
4904
|
+
exports.ɵe = EsTableLoc;
|
|
4905
|
+
exports.ɵf = UtilitiesHandler;
|
|
4906
|
+
exports.ɵg = EsTh;
|
|
4907
|
+
exports.ɵh = EsTd;
|
|
5170
4908
|
|
|
5171
4909
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5172
4910
|
|