@esfaenza/es-table 11.2.6 → 11.2.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-es-table.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/es-table/src/lib/domain/classes/AppOrdering.ts","../../../projects/es-table/src/lib/domain/classes/AppSearch.ts","../../../projects/es-table/src/lib/domain/classes/EsTableColumnsDefinition.ts","../../../projects/es-table/src/lib/domain/classes/GenericItem.ts","../../../projects/es-table/src/lib/domain/classes/CornerMenuOption.ts","../../../projects/es-table/src/lib/domain/classes/ReportDefinition.ts","../../../projects/es-table/src/lib/domain/classes/ReportOrder.ts","../../../projects/es-table/src/lib/domain/classes/ReportColumn.ts","../../../projects/es-table/src/lib/domain/classes/ReportResult.ts","../../../projects/es-table/src/lib/domain/classes/ReportRow.ts","../../../projects/es-table/src/lib/domain/classes/ReportParam.ts","../../../projects/es-table/src/lib/domain/classes/EsTableOperationDefinition.ts","../../../projects/es-table/src/lib/domain/classes/EsTableColumn.ts","../../../projects/es-table/src/lib/domain/classes/ItemsSelection.ts","../../../projects/es-table/src/lib/es_td.component.ts","../../../projects/es-table/src/lib/es_th.component.ts","../../../projects/es-table/src/lib/tokens.ts","../../../projects/es-table/src/lib/es_table.component.loc.ts","../../../projects/es-table/src/lib/es_table.component.ts","../../../projects/es-table/src/lib/models/EsTableModuleConfig.ts","../../../projects/es-table/src/lib/pager/table_pager.component.loc.ts","../../../projects/es-table/src/lib/pager/table_pager.component.ts","../../../projects/es-table/src/lib/es-table.module.ts","../../../projects/es-table/src/public-api.ts","../../../projects/es-table/src/esfaenza-es-table.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**\r\n * Classe che identifica un ordinamento di una colonna\r\n */\r\nexport class AppOrdering {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id ID della colonna a cui si vogliono applicare ordinamenti, deve combaciare all'id messo nella dichiarazione dell'ES-TD/TH\r\n * @param {'DESC' | 'ASC' } order Ordinamento da applicare alla colonna, Discendente/Ascendente, default 'null' per indicare assenza di ordine\r\n */\r\n constructor(public id: string, public order?: 'DESC' | 'ASC') { }\r\n}","import { IAppSearch } from './IAppSearch';\r\nimport { AppOrdering } from './AppOrdering';\r\nimport { ItemsSelection } from './ItemsSelection';\r\n\r\n/**\r\n * Classe che identifica una ricerca paginata in tutte le sue sfumature (di grigio)\r\n */\r\nexport class AppSearch<T> implements IAppSearch<T> {\r\n\r\n /**\r\n * Costruttore che genera un'istanza coi valori di default e impostando **firstsearch** a **true**\r\n */\r\n constructor() {\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n this.searchinprogress = false;\r\n this.firstsearch = true;\r\n }\r\n\r\n /**\r\n * Indica se c'è una ricerca in corso\r\n */\r\n public searchinprogress: boolean;\r\n\r\n /**\r\n * Indica il numero totale di pagine trovate dalla ricerca. Ogni pagina è una lista di **itemsperpageoverride** oggetti\r\n */\r\n public pages: number;\r\n\r\n /**\r\n * Conteggio totale degli oggetti trovati (inclusi quelli in pagine non attualmente selezionate)\r\n */\r\n public objectcount: number;\r\n\r\n /**\r\n * Pagina attualmente in visualizzazione\r\n */\r\n public page: number;\r\n\r\n /**\r\n * Numero di oggetti da persentare in ogni pagina. Per convenzione si considera valorizzato a 15 se non fornito\r\n */\r\n public itemsperpageoverride: number;\r\n\r\n /**\r\n * Lista degli oggetti nella pagina attualmente in visualizzazione\r\n */\r\n public items: T[];\r\n\r\n /**\r\n * Lista di colonne per cui ordinare\r\n */\r\n public orders: AppOrdering[];\r\n\r\n /**\r\n * Lista di colonne da visualizzare\r\n */\r\n public columns: string[];\r\n\r\n /**\r\n * Lista di colonne nell'ordine corretto\r\n */\r\n public column_ordering: string[];\r\n\r\n /**\r\n * Indica se la ricerca era salvata. Qualora fosse questo il caso, al caricamento l'es-table si occuperà di ri-effettuare la ricerca ed aggiornare il modello\r\n */\r\n public savedstate: boolean;\r\n\r\n /**\r\n * Indica se bisogna ancora effettuare la prima ricerca\r\n */\r\n public firstsearch: boolean;\r\n\r\n /**\r\n * Oggetto che indica la selezione corrente. \r\n * \r\n * Se **all** è **true** vuole dire che è tutto selezionato ed eventualmente ci sono delle esclusioni (**exclusions**)\r\n * Se **all** è **false** vuol dire che sono selezionati **item** specifici\r\n * \r\n * In base all'Input **UseSelectionCache** le proprietà **exclusions** e **items** fanno riferimento o alla pagina corrente (se **false**) \r\n * o all'intera ricerca (se **true**)\r\n */\r\n public selection: ItemsSelection<T>;\r\n\r\n /**\r\n * Indica che la ricerca è stata richiesta dall'estable. Questa variabile NON deve essere toccata. È gestita al 100% dall'es-table. \r\n * \r\n * L'unica cosa che serve è che nel modello lato C# sia presente in modo da non perderla durante la serializzazione\r\n */\r\n public internalsearchrequest: boolean;\r\n\r\n /**\r\n * Permette di resettare questo oggetto ai valori di default\r\n */\r\n public reset() {\r\n this.pages = 1;\r\n this.objectcount = 0;\r\n this.searchinprogress = false;\r\n this.firstsearch = false;\r\n this.page = 1;\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n }\r\n}","/**\r\n * Classe che identifica una colonna. Utilizzata in modalità \"Colonne dinamiche\"\r\n */\r\nexport class EsTableColumnsDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} description Descrizione della colonna\r\n * @param {string} propertyName Nome della proprietà del modello in cui sono contenuti i dati da visualizzare per questa colonna\r\n * @param {string} routePath Route di navigazione. Es. \"['/pages/mod/mod_detail', { 'idItem': '{0}', 'idItem2' : '{1}' }]\"\r\n * @param {string[]} routeParameterProperties Proprietà da bindare a **routePath** per generare la route completa. \r\n * L'indice scritto in **routePath** è l'indice di accesso a questo array. Es. [\"iditem\", \"iditem2\"]\r\n * @param {'ASC' | 'DESC' } dataOrder Ordinamento dei dati presentati in questa colonna\r\n * @param {number} columnOrder Ordinamento di questa colonna\r\n * @param {boolean} visible Visibilità o meno della colonna\r\n * @param {string} clss Classe da applicare sia ai TD che ai TH relativi a questa colonna\r\n * @param {boolean} orderable Indica se la colonna è ordinabile o no (nel senso ASC / DESC / NONE)\r\n */\r\n constructor(public description: string,\r\n public propertyName: string,\r\n public routePath: string = null,\r\n public routeParameterProperties: string[] = null,\r\n public dataOrder: 'ASC' | 'DESC' = null,\r\n public columnOrder: number = null,\r\n public visible: boolean = true,\r\n public clss: string = null,\r\n public orderable: boolean = true) {\r\n\r\n }\r\n\r\n /**\r\n * Routerlink che verrà generato a runtime basandosi sulle informazioni di **routePath** e **routeParameterProperties**\r\n */\r\n public routerLink: any;\r\n}","/**\r\n * Classe che definisce un oggetto generico come lista di proprietà-valore\r\n */\r\nexport class GenericItem {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() {\r\n this._selected = false;\r\n this._rowClass = null;\r\n this.hash = null;\r\n this.properties = {};\r\n }\r\n\r\n /**\r\n * Dizionario delle proprietà dell'oggeto con il loro valore\r\n */\r\n properties: Record<string, string>;\r\n\r\n /**\r\n * Indica se l'oggetto in questione è selezionato o meno\r\n */\r\n _selected: boolean;\r\n\r\n /**\r\n * Viene valorizzato da un eventuale **RowClassAssigner** (o automaticamente se in modalità gerarchica) e serve applicare stili particolari alla intera riga\r\n */\r\n _rowClass: string;\r\n\r\n /**\r\n * Hash dell'oggetto per generare i contesti di bind all'interno dell'es-table (vedere eventualmente l'implementazione specifica)\r\n */\r\n hash: string;\r\n}","\r\n/**\r\n * Indica un'opzione cliccabile nel Corner Menù della tabella (il menù richiamabile dai 3 pallini verticli in alto a destra)\r\n */\r\nexport class CornerMenuOption {\r\n\r\n /**\r\n * Id dell'operazione. I callback relativi verranno effettuati con questo\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione dell'operazione da presentare all'utente\r\n */\r\n description: string;\r\n}","import { ReportParam, ReportOrder, ReportResult } from \"../\";\r\n\r\n/**\r\n * Definizione generica di un report che può o no disporre di paginazione/export e la cui richiesta è basata su uno o più parametri\r\n */\r\nexport class ReportDefinition {\r\n\r\n /**\r\n * Codice report\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione report\r\n */\r\n description: string;\r\n\r\n /**\r\n * Indica se questo report dispone/può disporre di paginazione\r\n */\r\n pagingavailable: boolean;\r\n\r\n /**\r\n * Pagina attualmente in visualizzazione\r\n */\r\n page: number;\r\n\r\n /**\r\n * Numero massimo di pagine\r\n */\r\n pages: number;\r\n\r\n /**\r\n * Numero di elementi per pagina, si consideri 15 in caso questo parametro non fosse assegnato\r\n */\r\n itemsperpageoverride: number;\r\n\r\n /**\r\n * Formato di Export disponibile\r\n */\r\n expformat: string;\r\n\r\n /**\r\n * Parametri del report\r\n */\r\n pars: ReportParam[];\r\n\r\n /**\r\n * Informazioni di ordinamento dati delle colonne relative al report\r\n */\r\n orders: ReportOrder[];\r\n\r\n /**\r\n * Risultato della ricerca di un report, equivalente all'**items** dell'AppSearch e nel formato specifico dei report\r\n */\r\n result: ReportResult;\r\n}","\r\n/**\r\n * Classe che identifica una direttiva di ordinamento per un report\r\n */\r\nexport class ReportOrder {\r\n\r\n /**\r\n * Ordine\r\n */\r\n order: string;\r\n\r\n /**\r\n * Colonna relativa\r\n */\r\n column: string;\r\n}","/**\r\n * Classe che rappresenta una colonna di un report\r\n */\r\nexport class ReportColumn {\r\n\r\n /**\r\n * Id della colonna\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione della colonna (Header)\r\n */\r\n description: string;\r\n\r\n /**\r\n * Colore in notazione HTML\r\n */\r\n color: string;\r\n\r\n /**\r\n * Tipo di campo contenuto in questa colonna\r\n */\r\n type: number;\r\n\r\n /**\r\n * Sequenza per eventuali ordinamenti\r\n */\r\n seq: number;\r\n\r\n /**\r\n * Ordinamento dei dati presentati\r\n */\r\n order: string;\r\n}","import { ReportColumn, ReportRow } from \"..\";\r\n\r\n/**\r\n * Classe che rappresenta una lista di oggetti generati da un report\r\n */\r\nexport class ReportResult {\r\n\r\n /**\r\n * Numero di oggetti generati\r\n */\r\n count: number;\r\n\r\n /**\r\n * Se il report è vuoto o no (essenzialmente è un **count == 0**)\r\n */\r\n empty: boolean;\r\n\r\n /**\r\n * Colonne del report (indicazione delle varie proprietà da mostrare e Header con cui mostrarli)\r\n */\r\n columns: ReportColumn[];\r\n\r\n /**\r\n * Righe del report: 1 riga = 1 oggetto\r\n */\r\n rows: ReportRow[];\r\n}\r\n","/**\r\n * Classe che rappresenta i valori delle proprietà di un oggetto Report\r\n */\r\nexport class ReportRow {\r\n \r\n /**\r\n * Valori dell'oggetto in ordine sequenziale\r\n */\r\n values: string[];\r\n}\r\n\r\n","\r\n/**\r\n * Classe che identifica un parametro generico per un report\r\n */\r\nexport class ReportParam {\r\n\r\n /**\r\n * Codice del parametro\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione del parametro\r\n */\r\n description: string;\r\n\r\n /**\r\n * Tipo enumerabile del parametro (qualora fosse un dizionario di valori)\r\n */\r\n enumtype: string;\r\n\r\n /**\r\n * Colonna relativa e questo parametro\r\n */\r\n column: string;\r\n\r\n /**\r\n * Tipo del dizionario\r\n */\r\n dictype: string;\r\n\r\n /**\r\n * Sequenza del parametro per ordinarlo logicamente rispetto agli altri\r\n */\r\n seq: number;\r\n\r\n /**\r\n * Typecode C# della tipologia di parametro\r\n */\r\n typecode: number;\r\n\r\n /**\r\n * Indica se i parametro è richiesto o meno\r\n */\r\n required: boolean;\r\n\r\n /**\r\n * Valore del parametro, offerto sia come valore di default o in alternativa riempito lato UI\r\n */\r\n value: any;\r\n\r\n /**\r\n * Indica se questo parametro si basa su un enum. Se questa proprietà è true mi aspetto che almeno **enumtype** sia valorizzato\r\n */\r\n isenum: boolean;\r\n\r\n /**\r\n * Indica se questo parametro si basa su un dizionario. Se questa proprietà è true mi aspetto che almeno **dictype** sia valorizzato\r\n */\r\n isdictionary: boolean;\r\n\r\n /**\r\n * Indica se il parametro è di tipo data\r\n */\r\n isdate: boolean;\r\n\r\n /**\r\n * Indica se il parametro è di tipo boolean\r\n */\r\n isboolean: boolean;\r\n\r\n /**\r\n * Indica un filtro da applicare nei confronti del Backend qualora si vogliano caricare solo le possibilità logicamente accettabili per questo parametro\r\n */\r\n dictionaryfilter: string;\r\n\r\n /**\r\n * Valori disponibili per questo parametro, da valorizzare in caso **enumtype** o **dictype** fossero valorizzati\r\n */\r\n availablevalues: {\r\n id: string;\r\n description: string;\r\n }[];\r\n\r\n /**\r\n * Tipologia lato \"typescript\" di questo parametro, dev'essere sempre logicamente congruente al **typecode**\r\n */\r\n type: \"string\" | \"number\" | \"date\" | \"boolean\";\r\n\r\n /**\r\n * Eventuale pattern di validazione per questo parametro\r\n */\r\n pattern: string;\r\n}","\r\n/**\r\n * Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella\r\n */\r\nexport class EsTableOperationDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice dell'operazione\r\n * @param {string} title Titolo dell'operazione, da presentare all'utente su hover della cella\r\n * @param {string} iconClass Classe che fornisca un iconcina Es. \"fa fa-remove\"\r\n * @param {string} text Eventuale testo presentato nella cella, genericamente va in alternativa a **iconClass**\r\n * @param {string} conditionField Indica il campo dell'oggetto sottostante su cui verificare la visibilità o meno di questa icona\r\n * @param {string} conditionValue Indica il valore che la proprietà **conditionField** dell'oggetto sottostante deve assumere affinché questa opzione si veda\r\n */\r\n constructor(public id: string, \r\n public title: string, \r\n public iconClass?: string, \r\n public text?: string, \r\n public conditionField?: string, \r\n public conditionValue?: string) {\r\n }\r\n}","\r\n/**\r\n * Definizione di una colonna\r\n */\r\nexport class EsTableColumn {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Id colonna\r\n * @param {string} description Descrizione (Header)\r\n * @param {boolean} visible Indica se di default mostrarla o meno\r\n */\r\n constructor(public id: string, public description: string, public visible: boolean) { }\r\n}\r\n","/**\r\n * Identifica una selezione applicabile agli oggetti presentati in una tabella\r\n */\r\nexport class ItemsSelection<T> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {T[]} selected Oggetti da considerare selezionati\r\n */\r\n constructor(selected: T[]) { \r\n this.count = selected.length;\r\n this.items = selected;\r\n this.all = false;\r\n this.exclusions = [];\r\n }\r\n\r\n /**\r\n * Conteggio degli oggetti selezionati\r\n */\r\n public count: number;\r\n\r\n /**\r\n * Se **all** + **false** indica gli elementi da includere, altrimenti è insensato\r\n */\r\n public items: T[]\r\n\r\n /**\r\n * Indica se tutti gli elementi sono da considerarsi selezionati (anche quelli di altre pagine)\r\n */\r\n public all: boolean = false;\r\n\r\n /**\r\n * Se **all** è **true**, indica gli elementi da escludere, altrimenti è insensato\r\n */\r\n public exclusions: T[] = [];\r\n}\r\n","//Angular\r\nimport { Component, Input, Renderer2, ElementRef, ViewContainerRef, ChangeDetectionStrategy } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n/**\r\n * Componente rappresentante una singola cella del body della tabella\r\n */\r\n@Component({\r\n selector: \"[es-td]\",\r\n templateUrl: \"./es_td.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTd {\r\n \r\n /**\r\n * Id della cella, dev'essere lo stesso della colonna **EsTh** relativa\r\n */\r\n @Input('es-td') ID: string = \"\";\r\n\r\n /**\r\n * Indica se è una cella interna (rigenerata programmaticamente) o no\r\n */\r\n @Input() Internal?: boolean;\r\n\r\n /**\r\n * RouterLink qualora il click su questa cella debba navigare da qualche parte\r\n */\r\n @Input() RouterLink?: any;\r\n\r\n /**\r\n * Valore da mostrare all'interno della cella. Se omesso verrà proiettato il contenuto dal template in cui è stata usata\r\n */\r\n @Input() Display?: string = null;\r\n\r\n /**\r\n * Classi da applicare alla cella\r\n */\r\n public Class?: string;\r\n\r\n /**\r\n * Contenuto da mostrare proiettato dal componente padre\r\n */\r\n public Content?: SafeHtml;\r\n\r\n /**\r\n * Contesto dell'oggetto a cui si riferisce il dato visualizzato. Contiene l'hash dell'oggetto in questione\r\n */\r\n public Context: string;\r\n\r\n /**\r\n * Indicazioni sulla visibilità della cella\r\n */\r\n private _Visible?: boolean;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private myself: ElementRef, private renderer: Renderer2, private _viewContainer: ViewContainerRef, protected sanitizer: DomSanitizer) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della cella, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della cella in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngAfterViewInit() {\r\n // Se è Internal significa che è gestita internamente da ES-TABLE quindi evito di fare sti due passaggi di lettura del DOM\r\n if (this.Internal)\r\n return;\r\n\r\n // 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\r\n let vc = (<any>this._viewContainer);\r\n\r\n let context;\r\n // Primo giro di recupero del contesto, supponendo di non avere a che fare col compilatore IVY\r\n if (vc._view == null)\r\n context = null;\r\n else if (vc._view.parent && !vc._view.context.$implicit && vc._view.parent.context && vc._view.parent.context.$implicit)\r\n context = vc._view.parent.context.$implicit;\r\n else if (vc._view.context && vc._view.context.ngIf)\r\n context = vc._view.viewContainerParent.context.$implicit;\r\n else\r\n context = vc._view.context.$implicit;\r\n\r\n // Se non ho ancora trovato il contesto probabilmente sono in IVY e devo fare dei lookup un po' incasinati per beccarlo\r\n if (context == null) {\r\n var array = (<any>this._viewContainer)._hostLView;\r\n for (let i = 0; i < array.length; i++) {\r\n let item = array[i];\r\n if (item && item.$implicit && !item.ngIf) {\r\n context = item.$implicit;\r\n break;\r\n }\r\n\r\n // Second level search for the real context in case the first one we find is an ngIf\r\n if(item && item.length && item.length > 0)\r\n {\r\n for (let ii = 0; ii < item.length; ii++) {\r\n let iitem = item[ii];\r\n if (iitem && iitem.$implicit && !iitem.ngIf) {\r\n context = iitem.$implicit;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(context)\r\n break;\r\n }\r\n }\r\n\r\n // Calcolato dalla ES-table in fase di binding\r\n let hash = context.hash;\r\n\r\n this.Context = hash;\r\n this.Content = this.Display === null || this.Display === \"\" ? this.sanitizer.bypassSecurityTrustHtml(this.myself.nativeElement.innerHTML) : this.sanitizer.bypassSecurityTrustHtml(this.Display);\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n }\r\n}","//Angular\r\nimport { Component, Input, Output, EventEmitter, ElementRef, ViewChild, Renderer2, HostListener, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/**\r\n * Componente rappresentante una Colonna della tabella\r\n */\r\n@Component({\r\n selector: \"[es-th]\",\r\n templateUrl: \"./es_th.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTh {\r\n\r\n /**\r\n * Dizionario di mappatura con ordinamento attuale e ordinamento successivo per gestire i passaggi di stato\r\n */\r\n private orderNext: { [index: string]: 'DESC' | 'ASC' | null } = { \"NONE\": \"DESC\", \"DESC\": \"ASC\", \"ASC\": null };\r\n\r\n /**\r\n * Indicazione sulla visibilità della colonna\r\n */\r\n private _Visible: boolean;\r\n\r\n /**\r\n * Indica se si sta effettuando un'operazione di resize su questa colonna\r\n */\r\n private resizingThis: boolean = false;\r\n\r\n /**\r\n * Storicizza l'offset di partenza del resize dell'elemento HTML per poter calcolare la nuova dimensione richiesta durente il resize \r\n * \r\n * nuova width = startOffset + posizione X del mouse\r\n */\r\n private startOffset: number = null;\r\n\r\n /**\r\n * Id della colonna, dev'essere lo stesso per tutti gli **EsTd** relativi\r\n */\r\n @Input('es-th') ID: string = \"\";\r\n\r\n /**\r\n * Ordinamento attuale della colonna\r\n */\r\n @Input() Order?: 'DESC' | 'ASC';\r\n \r\n /**\r\n * Indica se questa colonna è ordinabile o meno\r\n */\r\n @Input() Orderable: boolean = true;\r\n\r\n /**\r\n * Valore da mostrare all'interno della colonna. Se omesso verrà proiettato il contenuto dal template in cui è stata usata\r\n */\r\n @Input() Display: string =\"\";\r\n\r\n /**\r\n * Indica se le dimnsioni di questa colonna sono modificabili o meno\r\n */\r\n @Input() Resizable: boolean = false;\r\n\r\n /**\r\n * Indica se è una colonna interna (rigenerata programmaticamente) o no\r\n */\r\n @Input() Internal: boolean;\r\n\r\n /**\r\n * Indica se sta venendo eseguita una operazione di ricerca o meno, serve per evitare l'esecuzione di eventuale codice che potrebbe dare fastidio \r\n * come ad esempio l'escuzione di un ordinamento durante il caricamento di dati nuovi\r\n */\r\n @Input() SearchInProgress: boolean = false;\r\n\r\n /**\r\n * Impostato dall'**EsTable**, serve per permettere o meno di effettuare ordinamenti dati su questa colonna\r\n */\r\n @Input() OrderBy: boolean;\r\n\r\n /**\r\n * Evento emesso al cambio di ordinamento effettuato su questa colonna\r\n */\r\n @Output() public onOrderChange: EventEmitter<'DESC' | 'ASC' | null> = new EventEmitter<'DESC' | 'ASC' | null>();\r\n\r\n /**\r\n * Proiezione del contenuto di questa colonna\r\n */\r\n @ViewChild(\"content\", { static: false }) content: ElementRef;\r\n\r\n /**\r\n * Classi da applicare alla colonna\r\n */\r\n public Class: string;\r\n\r\n /**\r\n * Impostato dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header\r\n */\r\n public Referenced: boolean = false;\r\n\r\n /**\r\n * Variabile finale su cui è bindato il contenuto della cella. Sarà valorizzato a **Display** se specificato, all'**innerHTML** dell'elemento proiettato altrimenti\r\n */\r\n public Description: string;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private myself: ElementRef, private renderer: Renderer2) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della colonna, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della colonna in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngAfterViewInit() {\r\n //Assegnare direttamente il content è più veloce che passare dal native element per qualche motivo\r\n this.Description = this.Display === null || this.Display === \"\" ? this.content.nativeElement.innerText : this.Display;\r\n\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n\r\n //Resize\r\n if (this.Resizable)\r\n this.renderer.addClass(this.myself.nativeElement, \"app-relative\");\r\n }\r\n\r\n /**\r\n * Gestisce la modifica dell'ordinamento qualora venisse cliccato su questa colonna\r\n */\r\n setupNextOrderAndNotify() {\r\n if (!this.ID) {\r\n console.log(\"Attempt to order a column without ID. Operation ignored\");\r\n return;\r\n }\r\n\r\n if(this.SearchInProgress)\r\n {\r\n console.log(\"Attempt to order a column during a search. Operation ignored\");\r\n return;\r\n }\r\n\r\n if (!this.OrderBy || !this.Orderable)\r\n return;\r\n\r\n var nextOrder = this.orderNext[this.Order || \"NONE\"];\r\n this.Order = nextOrder;\r\n\r\n this.onOrderChange.emit(this.Order);\r\n }\r\n\r\n /**\r\n * Evento di inizio resize della colonna\r\n * \r\n * @param {any} ev Evento MouseDown\r\n */\r\n onResizeStart(ev) {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = true;\r\n this.startOffset = this.myself.nativeElement.offsetWidth - ev.pageX;\r\n }\r\n\r\n /**\r\n * Listener per la fine dell'operazione di resize\r\n */\r\n @HostListener('window:mouseup.out-zone')\r\n public onMouseUp(): void {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = false;\r\n }\r\n\r\n /**\r\n * Listener per gestire il movimento del mouse qualora un'operazione di resize fosse in esecuzione\r\n * \r\n * @param {$event} ev Evento MouseMove\r\n */\r\n @HostListener('window:mousemove.out-zone', ['$event'])\r\n public onMouseMove($event): void {\r\n if (!this.Resizable || !this.resizingThis)\r\n return;\r\n\r\n //Uso jquery per non dover far partire un intero ciclo di change detection solo per fare un resize del cazzo\r\n //(anche perché viene lanciato ogni 0.1 secondo quindi not a good idea)\r\n this.myself.nativeElement.style.width = (this.startOffset + $event.pageX) + \"px\";\r\n\r\n //Fermo il bubbling per non fare cose strane\r\n $event.preventDefault();\r\n }\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il locale da utilizzare all'interno del componente. Supportati solo \"it-IT\" ed \"en-US\"\r\n */\r\nexport const EST_LOCALE: InjectionToken<string> = new InjectionToken<string>('EST_LOCALE');","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from './tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsTableComponent**\r\n */\r\n@Injectable()\r\nexport class EsTableLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) { \r\n super(LOC_LOCALE ?? 'it-IT');\r\n \r\n super.set(\"en->it\", \"Performing Table bootstrap\", [\"Sto caricando la Tabella\"]);\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Export View\", [\"Esporta Vista\"]);\r\n super.set(\"en->it\", \"Column Name\", [\"Nome Colonna\"]);\r\n super.set(\"en->it\", \"Columns Order\", [\"Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Columns Visibility\", [\"Visibilità Colonne\"]);\r\n super.set(\"en->it\", \"There are no columns configured to be hidden/shown in this view\", [\"Non ci sono colonne configurate per essere visualizzate/nascoste in questa vista dati\"]);\r\n super.set(\"en->it\", \"Columns Visibility and Order\", [\"Visibilità e Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Objects Selected\", [\"Oggetti Selezionati\"]);\r\n super.set(\"en->it\", \"Object Selected\", [\"Oggetto Selezionato\"]);\r\n super.set(\"en->it\", \"Select Everything\", [\"Seleziona Tutto\"]);\r\n super.set(\"en->it\", \"Reset Selection\", [\"Resetta Selezione\"]);\r\n super.set(\"en->it\", \"No operations available\", [\"Nessuna operazione disponibile\"]);\r\n super.set(\"en->it\", \"Paging options are not available for this report\", [\"Le opzioni di paginazione non sono disponibili per questo report\"]);\r\n }\r\n}","// Angular\r\nimport {\r\n Component, forwardRef, ContentChildren, QueryList, ChangeDetectorRef, ChangeDetectionStrategy, Input,\r\n EventEmitter, Output, ContentChild, OnChanges, SimpleChanges, ViewChild, ElementRef, ViewEncapsulation, Optional, Self\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\n// Configurazioni\r\nimport { HashingService, UtilityService, ExportService } from '@esfaenza/extensions';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\nimport { PreferencesService } from '@esfaenza/preferences';\r\n\r\n// Plugins\r\nimport { ContextMenuComponent } from '@esfaenza/ngx-contextmenu';\r\n\r\n// Modelli\r\nimport {\r\n IAppSearch, AppSearch, AppOrdering, GenericItem, EsTableColumnsDefinition, CornerMenuOption,\r\n ReportDefinition, ReportResult, ReportOrder, ReportColumn, EsTableOperationDefinition, EsTableColumn\r\n} from './domain';\r\n\r\n// Componenti e Localizzazione\r\nimport { EsTd } from './es_td.component';\r\nimport { EsTh } from './es_th.component';\r\nimport { EsTableLoc } from './es_table.component.loc';\r\nimport { ItemsSelection } from './domain/classes/ItemsSelection';\r\n\r\n/** Componente che permette di rappresentare una griglia di valori */\r\n@Component({\r\n selector: 'es-table',\r\n viewProviders: [{ provide: LocalizationService, useClass: EsTableLoc }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: ['./es_table.component.scss'],\r\n templateUrl: './es_table.component.html'\r\n})\r\nexport class EsTableComponent implements ControlValueAccessor, OnChanges {\r\n\r\n /** @ignore */\r\n constructor(@Self() @Optional() public ngControl: NgControl, @Optional() private prefService: PreferencesService, public lc: LocalizationService, private cdr: ChangeDetectorRef, private hashExts: HashingService, private utiExts: UtilityService, private expExts: ExportService) {\r\n if (ngControl)\r\n ngControl.valueAccessor = this;\r\n }\r\n\r\n /** View finale su cui bindarsi lato Frontend, il tipo può essere IAppSearch<any> (per la **viewMode**), any[] (per l'**arrayMode**) e ReportDefinition per la **reportMode** */\r\n public View: any = null;\r\n\r\n /** Modello da cui l'es-table mostra i pulsanti di paginazione in basso a destra */\r\n public arrayPulsanti: any;\r\n\r\n /** Indica se l'es-table deve mostrare il check globale nell'header per fare il \"seleziona tutto\" */\r\n public globalCheck = false;\r\n\r\n /**\r\n * Tiene da conto l'ultimo elemento selezionato in modo da fare ragionamenti del tipo\r\n * \"Ho selezionato questo, l'ultimo selezionato era **lastSelected**, devo selezionare tutti quelli in mezzo\", ad esempio per la selezione multipla\r\n */\r\n private lastSelected: any = null;\r\n\r\n /** Conteggio interno per il numero di elementi selezionati */\r\n public selectedObjects = 0;\r\n\r\n /** Indica se è possibile effettuare una selezione massiva */\r\n public canSelectAll = false;\r\n\r\n /** Indica se il componente sta gestendo un IAppSearch<any> */\r\n public viewMode = false;\r\n\r\n /** Indica se il componente sta gestendo un any[] */\r\n public arrayMode = false;\r\n\r\n /** Indica se il componente sta gestendo un ReportDefinition */\r\n public reportMode = false;\r\n\r\n /**\r\n * Contenitore degli elementi da listare lato interfaccia dopo tutte le elaborazioni del caso,\r\n * generalmente non sono altro che tutti gli oggetti da presentare con in più l'hash calcolato per identificare 1 oggetto con la propria riga\r\n */\r\n public boundSource: any[] = [];\r\n\r\n /** Stessa cosa della **boundSource**, utilizzata come appoggio temporaneo interno */\r\n public TMPBoundSource: any[] = [];\r\n\r\n /** \"Fetta\" di oggetti utilizzata nell'endless scroll, ogni elemento di questo array è un blocchetto di 100 elementi */\r\n public boundSubSources: any[] = [];\r\n\r\n /** Questa funge da indicatore per gli slice inseriti, la lunghezza dovrebbe essere corrispondente a **boundSubSources** */\r\n public addedSlices: number[] = [];\r\n\r\n /** Variabile che identifica il valore del \"seleziona Tutto\" nella paginazione */\r\n public defaultAllPageOverride = 999999;\r\n\r\n /** Indica se utilizzare il sistema di Endless Scroll */\r\n public UseEndlessscroll: boolean;\r\n\r\n /** Valori dell'eventuale report in visualizzazione */\r\n public ReportValues: ReportResult;\r\n\r\n /** Serve per tenere in memoria il conteggio precedente e recuperarlo in caso diventi -2 (verificare con Ale perché la logica del -2) */\r\n public previousCount: number;\r\n\r\n /** Indica se utilizzare il sistema di autoupdate, cioè un trigger time-izzato in alto a destra della tabella che ripete le ricerche ogni X **seconds** */\r\n public autoUpdate = false;\r\n\r\n /** Numero di secondi da fare trascorrere fra una ricerca e l'altra */\r\n public seconds = '10';\r\n\r\n /** Riferimento all'Interval che viene generato se **autoUpdate** è impostata a true in modo da poterlo ripulire */\r\n public updateTimer: any;\r\n\r\n /** Impostata a true ogni volta che viene avviata una ricerca, e a false ogni volta che un nuovo valore viene ricevuto */\r\n public researchInProgress: boolean = false;\r\n\r\n /** Modello rappresentante un singolo td della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTDs: { [context: string]: EsTd[] } = null;\r\n\r\n /** Modello di appoggio temporaneo per i **RowTDs** */\r\n public TMPRowTDs: { [context: string]: EsTd[] } = null;\r\n\r\n /** Modello rappresentante un singolo th della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTHs: { ID: string, Visible: boolean, Class: string, Content: string, Order: string, Orderable: boolean }[] = null;\r\n\r\n /** Modello di appoggio temporaneo per i **RowTHs** */\r\n public TMPRowTHs: { ID: string, Visible: boolean, Class: string, Content: string, Order: string, Orderable: boolean }[] = null;\r\n\r\n /** Cache per i routerLink generati nelle tabelle dinamiche */\r\n public DynamicTableRouterLinkCache: {} = {};\r\n\r\n /**\r\n * Lista dei contesti. Un contesto non è altro che un hash particolare calcolato su un oggetto che identifica univocamente tale oggetto.\r\n *\r\n * Ognuno di questi contesti rappresenterà a sua volta, univocamente, una riga all'interno della tabella\r\n */\r\n public RowContexts: any[] = [];\r\n\r\n /** Direttive di ordinamento delle colonne (non ordinamento dei dati ma delle colonne in se) */\r\n public OrderDirectives: string[] = [];\r\n\r\n /** Codice dell'ultimo oggetto solezionato */\r\n public lastSelectedItemID = null;\r\n\r\n /**\r\n * Indica se oltre alle colonne dinamiche specifiche di un tipo di oggetto ci sono anche colonne dinamiche aggiunte dall'utente\r\n *\r\n * Es. una colonna in cui mostrare sempre un iconcina\r\n */\r\n public UserDefinedDynamicCols: boolean = false;\r\n\r\n /** Indica che questo è il primo Bind della tabella, viene settato a false non appena il primo bind viene terminato con successo */\r\n public FirstBind: boolean = true;\r\n\r\n /** Lista di colonne che si possono visualizzare/ordinare fra di loro */\r\n public ColumnsList: EsTableColumn[] = [];\r\n\r\n /** Variabile d'appoggio usata dalla dialog di selezione/nascondimento, per evitare di danneggiare **ColumnsList** in caso di modifiche poi annullate */\r\n public TMPColumnsList: EsTableColumn[] = [];\r\n\r\n /** Valore del check globale di visibilità valido per tutte le colonne in **ColumnsList** */\r\n public globalColVisCheck = false;\r\n\r\n /** Contenitore di tutte le sottoscrizioni alle variazioni di ordine dei th che vengono create, registrate e gestite automaticamente dall'es-table */\r\n private EsThsOrderChangeSubscriptions: any[] = [];\r\n\r\n /** Query per recuperare tutti gli es-th */\r\n @ContentChildren(forwardRef(() => EsTh)) private EsThs: QueryList<EsTh>;\r\n\r\n /** Query per recuperare tutti gli es-td */\r\n @ContentChildren(forwardRef(() => EsTd)) private EsTds: QueryList<EsTd>;\r\n\r\n /** Query per recuperare le informazioni del body (punto della tabella dove vengono mostrate le righe) */\r\n @ContentChild('body', { static: false }) public templateRef: any;\r\n\r\n /** Query per recuperare le informazioni dell'header (punto della tabella dove vengono mostrate le intestazioni delle righe) */\r\n @ContentChild('header', { static: false }) public templateRefHeader: any;\r\n\r\n /** Query per recuperare le informazioni sul raggruppamento degli header */\r\n @ContentChild('headerGroup', { static: false }) public templateRefHeaderGroup: any;\r\n\r\n /** Query per recuperare le informazioni sul raggruppamento di secondo livello degli header */\r\n @ContentChild('secondaryHeaderGroup', { static: false }) public templateRefSecondaryHeaderGroup: any;\r\n\r\n /** Opzioni extra che devono apparire nel Menù contestuale in alto a destra, richiamato dai 3 pallini verticali */\r\n @Input() CornerMenuOptions: CornerMenuOption[] = null;\r\n\r\n /** Indica se dev'essere possibile effettuare il resize delle colonne */\r\n @Input() ColumnsResizable = false;\r\n\r\n /** Indica se dev'essere disponibile il sistema di aggiornamento automatico */\r\n @Input() AutoUpdate = false;\r\n\r\n /** Indica se la tabella (configurata con **UseCustomCells**) deve mettersi in ascolto per i click sulle celle desiderate */\r\n @Input() UseCustomCellActions = false;\r\n\r\n /**\r\n * Indica le celle desiderate su cui intercettare i click. Attiva solo quando **UseCustomCellActions** è true.\r\n * Ogni cella dev'essere separata dalla successiva dal carattere del Simoleon:\r\n *\r\n * Es, \"MiaCella1§MiaCella2\"\r\n */\r\n @Input() CustomCellActionsOn = '';\r\n\r\n /** Serve per decidere di lanciare o meno il **event.stopPropagation()** al termine della gestione dell'evento */\r\n @Input() CellActionPropagates = true;\r\n\r\n /**\r\n * Decide se utilizzare o meno le CustomCells. Impostandolo a **true** l'es-table diventa in grado di gestire nativamente:\r\n *\r\n * 1) Ordinamento e visibilità delle colonne\r\n *\r\n * 2) Ordinamento dei dati\r\n *\r\n * 3) Modalità Gerarchica\r\n *\r\n * ecc...\r\n */\r\n @Input() UseCustomCells = false;\r\n\r\n /** Permette di impostare l'altezza massima della tabella. Se null la dimensione si adatta al numero di elementi attualmente in visualizzazione */\r\n @Input() MaxHeight: number = null;\r\n\r\n /** Classi da applicare alla tabella oltre a quelle gestite autonomamente dalla libreria */\r\n @Input() Class = '';\r\n\r\n /** Permette o meno l'export in formato XLSX */\r\n @Input() XLSXExport = false;\r\n\r\n /** Permette o meno l'export in formato CSV */\r\n @Input() CSVExport = true;\r\n\r\n /** Permette di visualizzare o meno l'opzione di paginazione \"Tutti\" */\r\n @Input() AllSearch = true;\r\n\r\n /** Diminuisce gli spazi fra una cella e l'altra, e internamente il padding del font in modo da presentare molti più dati in un'unica pagina */\r\n @Input() HighCellDensity = false;\r\n\r\n /** Abilita o meno la possibilità di selezionare oggetti */\r\n @Input() Selection = false;\r\n\r\n /** Mostra o meno un messaggio di Loading al primo caricamento della tabella */\r\n @Input() ShowLoadingOnBootstrap = false;\r\n\r\n /** Se impostato a **true** aggiunge una colonna con pulsante di eliminazione per effettuare l'elimina dell'oggetto relativo */\r\n @Input() Removal = false;\r\n\r\n /**\r\n * Condizione che nasconde l'icona di eliminazione inserita impostando **Removal** a true qualora la condizione non venisse rispettata\r\n *\r\n * Come condizione si considera un semplice campo su cui effettuare un controllo booleano, come ad esempio \"canremove\"\r\n */\r\n @Input() RemovalCondition = '';\r\n\r\n /** Indica se abilitare la possibilità di esportare la vista dati attuale */\r\n @Input() Export = false;\r\n\r\n /** Indica se permettere la selezione multipla Windows-like cliccando un oggetto e facendo poi Shift + click su un oggetto successivo */\r\n @Input() ShiftClick = false;\r\n\r\n /** Mostra o nasconde le informazioni di paginazione, sia i pulsanti, sia il selettore degli oggetti per pagina */\r\n @Input() ShowPaging = true;\r\n\r\n /** Indica se nascondere o mostrare il componente di paginazione */\r\n @Input() HidePaging = false;\r\n\r\n /** Indica se nascondere o mostrare il conteggio degli elementi trovati */\r\n @Input() HidePagingCount = false;\r\n\r\n /** Indica se nascondere o mostrare i pulsanti di paginazione */\r\n @Input() HidePagingButtons = false;\r\n\r\n /** Riferimento al ContextMenu (ngx-contextmenu) associato al click destro di uno o più elementi selezionati nella tabella */\r\n @Input() ContextMenu: ContextMenuComponent = null;\r\n\r\n /** Nome dell'esportazione generata da questa tabella */\r\n @Input() ExportFileName = 'Export.csv';\r\n\r\n /** Classe (HTML) di default della tabella */\r\n @Input() TableClass = 'table table-striped table-hover table-sm';\r\n\r\n /** Testo da visualizzare nel conteggio. Di default: \"Oggetti selezionati\" */\r\n @Input() CountLabel: string = this.lc.loc('Found objects');\r\n\r\n /**\r\n * Funzione da utilizzare in esportazione. Nel formato \"Report\" avrà un unico parametro \"Formato\" e nessun valore di ritorno.\r\n *\r\n * Nel formato \"View\" ha come parametro una callback con i dati completi da esportare (dato che di default la ricerca è paginata)\r\n */\r\n @Input() ExportFunction: any;\r\n\r\n /** Indica la presenza di raggruppamenti a livello di header */\r\n @Input() HasHeaderGroup = false;\r\n\r\n /** Indica la presenza di raggruppamenti a livello del raggruppamento precedentemente esistente, chiaramente è insensata senza **HasHeaderGroup** */\r\n @Input() HasSecondaryHeaderGroup = false;\r\n\r\n /** Utilizzato per dividere la sorgente in modalità EndlessScroll */\r\n @Input() SliceSize = 100;\r\n\r\n /** Decide se utilizzare la modalità di EndlessScroll */\r\n @Input() EndlessScroll = false;\r\n\r\n /** Qualora **EndlessScroll** fosse true, indica se utilizzare questa modalità solo quando si cerca per \"Tutti\" o in generale */\r\n @Input() EndlessScrollOnlyForAll = true;\r\n\r\n /** Indica se nascondere gli Header della tabella */\r\n @Input() HeaderHidden = false;\r\n\r\n /** Indica se nascondere il Body della tabella */\r\n @Input() BodyHidden = false;\r\n\r\n /**\r\n * Indica se la selezione è temporaneamente disabilitata. Rispetto all'Input **Selection** che visivamente gestisce se ci sono o no gli input di selezione,\r\n * questo Input gestisce se questi input sono abilitati o meno\r\n */\r\n @Input() SelectionDisabled = false;\r\n\r\n /**\r\n * Indica se forzare il sistema di selezione a gestire un elemento per volta.\r\n * Selezionare un'altra riga con una già selezionata applicherà la selezione alla nuova riga, rimuovendola dall'attuale\r\n */\r\n @Input() SingleSelection = false;\r\n\r\n /** Callback che dato un oggetto resituisce l'eventuale classe da applicare alla riga collegata all'oggetto */\r\n @Input() RowClassAssigner: any = null;\r\n\r\n /** Permette di ordinare i dati in maniera discendente o ascendente */\r\n @Input() OrderByColumn = false;\r\n\r\n /** Permette di avere più direttive di ordinamento dei dati */\r\n @Input() MultipleOrderingDirectives = true;\r\n\r\n /** Permette di nascondere le colonne in base alle selezioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() HiddenColumns = false;\r\n\r\n /** Permette di riordinare le colonne in base alle impostazioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() ColumnsOrdering = false;\r\n\r\n /**\r\n * Eventuale supporto alle ricerche applicate alla modalità Array\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() SearchView = null as IAppSearch<any>;\r\n\r\n /** Abilita o disabilita il sistema che permette di selezionare tutti gli elementi nella vista */\r\n @Input() SelectAll = false;\r\n\r\n /** Simula la paginazione anche per le tabelle che funzionano in modalità Array */\r\n @Input() UseArrayModePaging = true;\r\n\r\n /** Definizione di colonne dinamche per la modalità, appunto, dinamica */\r\n @Input() DynamicRowColumnsDefinition: EsTableColumnsDefinition[] = null;\r\n\r\n /** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */\r\n @Input() DynamicOperations: EsTableOperationDefinition[] = [];\r\n\r\n /** Indica se visualizzare i dati in maniera gerarchica */\r\n @Input() Hierarchy = false;\r\n\r\n /** Nome della proprietà che contiene l'ID del padre. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() ParentKey = '';\r\n\r\n /** Nome della proprietà che contiene l'ID dell'oggetto attuale. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() OwnKey = '';\r\n\r\n /** Indica se partire con un albero espanso. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() StartsExpanded = true;\r\n\r\n /** Indica se effettuare il salvataggio delle preferenze di ricerca */\r\n @Input() SavePreferences = false;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() SecondarySource = false;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() TertiarySource = false;\r\n\r\n /** Indica se utilizzare la cache di selezione che permette di mantenere gli stati di selezione dei vari oggetti navigando da una pagina all'altra */\r\n @Input() UseSelectionCache = true;\r\n\r\n /** Evento che viene richiamato al cambio di oridnamento di una colonna */\r\n @Output() onOrderChanged: EventEmitter<AppOrdering> = new EventEmitter<AppOrdering>();\r\n\r\n /**\r\n * Evento che viene richiamato quando l'es-table ritiene sia necessario ri-effettuare la ricerca.\r\n * Il booleano dell'evento indica se viene suggerito di resettare la pagina o meno\r\n */\r\n @Output() onSearchRequest: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n /** Evento che parte ad ogni modifica di \"checkaggio\" in forma di comodo array. Espone l'oggetto con lo stato di check attuale */\r\n @Output() onSelectionChanged: EventEmitter<ItemsSelection<any>> = new EventEmitter<ItemsSelection<any>>();\r\n\r\n /** Evento richiamato all'eliminazione di un oggetto */\r\n @Output() onRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento richiamato all'annullamento di un'eliminazione */\r\n @Output() onAbortRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento richiamato al click su una cella quando **UseCustomCellActions** è attivo */\r\n @Output() onCellClick: EventEmitter<{ column: string, model: any }> = new EventEmitter<{ column: string, model: any }>();\r\n\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **CornerMenuOptions** */\r\n @Output() onCornerAction: EventEmitter<{ id: string, estable: any }> = new EventEmitter<{ id: string, estable: any }>();\r\n\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **DynamicOperations** */\r\n @Output() onDynamicOperation: EventEmitter<{ id: string, item: any }> = new EventEmitter<{ id: string, item: any }>();\r\n\r\n /** Dati esportati da ngx-csv */\r\n public data: any[];\r\n /** Header dei dati esportati da ngx-csv */\r\n public headers: any[];\r\n /** Elemento HTML da cliccare per l'esportazione */\r\n @ViewChild('exportDownloader', { static: false }) public exportDownloader: ElementRef;\r\n\r\n /** Placeholder di menù contestuale per quando non ci sono opzioni nel placeholder \"Vero\" */\r\n @ViewChild('emptyMenu', { static: true }) public tableEmptyMenu: ContextMenuComponent;\r\n\r\n /** Subscription sull'apertura del context menu da ripulire al destroy della classe */\r\n private ctxMenuSubscription: any;\r\n\r\n /** Pagina in visualizzazione (durante la paginazione in modalità Array) */\r\n public arraymodePage = 1;\r\n /** Numero di pagine (durante la paginazione in modalità Array) */\r\n public arraymodePages = 1;\r\n /** Oggetti per ogni pagina (durante la paginazione in modalità Array) */\r\n @Input() ArraymodeItemsPerPage = 15;\r\n /** Oggetto di selezione per la modalità Array, che deve comportarsi come la controparte in modalità View */\r\n public arraymodeSelection: ItemsSelection<any>;\r\n\r\n /**\r\n * Variabile che serve a gestire il momento in cui l'es-table aggiorna la paginazione (pulsanti ecc).\r\n * Essendo operazioni comunque costose le effettuo solo su binding esterni, non su rewrite generati internamente\r\n */\r\n private internalWriteCall = false;\r\n\r\n /** Cache di selezione Hash - Oggetto */\r\n private selOrDeselCache: { [hash: string]: any } = {};\r\n\r\n /** @ignore */\r\n public ngOnInit() {\r\n //Per poter cambiare il layout in base al livello gerarchico il componente deva avere il pieno controllo di ogni cella,\r\n //che con solo la proiezione (senza celle cusotm) non è disponibile\r\n if (this.Hierarchy && !this.UseCustomCells)\r\n throw \"Es-table error: Per poter utilizzare l'es-table con [Hierarchy]=\\\"true\\\" è richiesto anche [UseCustomCells]=\\\"true\\\"\";\r\n\r\n // click destro su una riga con selezione attiva: Tiro fuori il context menu e selezione l'elemento corrente\r\n this.ctxMenuSubscription = (this.ContextMenu || this.tableEmptyMenu).open.subscribe(t => {\r\n let shouldEmit = !t.item._selected;\r\n\r\n t.item._selected = true;\r\n var itemSelection = this.handleItemsSelection([t.item]);\r\n this.changed();\r\n\r\n if (shouldEmit)\r\n this.onSelectionChanged.emit(itemSelection);\r\n });\r\n }\r\n\r\n /** @ignore */\r\n public ngOnDestroy() {\r\n if (this.ctxMenuSubscription)\r\n this.ctxMenuSubscription.unsubscribe();\r\n this.EsThsOrderChangeSubscriptions.forEach(t => { t.unsubscribe(); });\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n let newSearchView = changes['SearchView'];\r\n if (newSearchView && this.SearchView)\r\n this.arrayPulsanti = this.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1);\r\n }\r\n\r\n // #region Implementazione ControlValueAccessor ignorabile\r\n\r\n /** @ignore */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n /** @ignore */\r\n public registerOnTouched(fn): void { }\r\n /** @ignore */\r\n changed() { this.propagateChange(this.View); }\r\n /** @ignore */\r\n propagateChange = (_: any) => { };\r\n\r\n // #endregion\r\n\r\n /** @ignore */\r\n public writeValue(obj): void {\r\n this.View = obj ? obj : null;\r\n\r\n //Mi è arrivata l'AppSearch quindi di sicuro non ho una ricerca in progress\r\n this.researchInProgress = false;\r\n\r\n if (!this.View && !this.SearchView) {\r\n // Su view nulla evito di fare pressoché qualsiasi cosa. Se arriva un null devo anche assicurarmi di non mostrare nulla\r\n this.boundSource = this.TMPBoundSource || [];\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n // Se per sbaglio l'oggetto che mi arriva non è tipizzato (instanceof AppSearch restituisce false anche se è del tipo giusto)\r\n // lo correggo--------------------------------------------------------------------------------------------------------------\r\n if (this.View && typeof (this.View as any).result != 'undefined' && !(this.View instanceof ReportDefinition)) {\r\n (this.View as any).__proto__ = new ReportDefinition();\r\n }\r\n else if (this.View && typeof (this.View as any).itemsperpageoverride != 'undefined' && !(this.View instanceof AppSearch)) {\r\n (this.View as any).__proto__ = new AppSearch();\r\n }\r\n else if (this.SearchView && typeof (this.SearchView as any).itemsperpageoverride != 'undefined' && !(this.SearchView instanceof AppSearch)) {\r\n (this.SearchView as any).__proto__ = new AppSearch();\r\n }\r\n // -------------------------------------------------------------------------------------------------------------------------\r\n\r\n if (this.View && this.View instanceof ReportDefinition) {\r\n // Se mi arriva una report definition vuol dire che potrei avere dei risultati da visualizzare\r\n this.setMode('report');\r\n\r\n this.ReportValues = this.View.result;\r\n if (this.ReportValues)\r\n this.reviewReportBindings();\r\n }\r\n else if (this.View && this.View instanceof AppSearch) {\r\n // Se cambia l'oggetto intero significa che ho rimandato la ricerca\r\n this.setMode('view');\r\n\r\n // Se vengo da una ricerca interna mantengo lo stato di selezione precedente (quindi su cambio pagina, cambio ipp, ecc...)\r\n // se invece l'utente ha fatto una ricerca lui (quindi cambiando filtri), secco le info di selezione\r\n if (!this.View.selection || !this.View.internalsearchrequest || !this.UseSelectionCache) {\r\n this.selOrDeselCache = {};\r\n this.View.selection = new ItemsSelection([]);\r\n this.onSelectionChanged.emit(this.View.selection);\r\n }\r\n\r\n this.View.internalsearchrequest = false;\r\n\r\n // Recupero Preference\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name)\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per questa tabella\");\r\n else if (!this.prefService)\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n else {\r\n var prefs = this.prefService.retrieve<{ columns: string[], column_ordering: string[] }>(<string>this.ngControl.name);\r\n if (prefs) {\r\n this.View.columns = prefs.columns;\r\n this.View.column_ordering = prefs.column_ordering;\r\n }\r\n }\r\n }\r\n\r\n this.arrayPulsanti = this.getPagesArray(6, this.View.page, this.View.pages || 1);\r\n }\r\n else if (this.View && (this.View.length != null && this.View.length != undefined)) {\r\n this.setMode('array');\r\n\r\n if (!this.UseSelectionCache || !this.arraymodeSelection) {\r\n this.selOrDeselCache = {};\r\n this.arraymodeSelection = new ItemsSelection([]);;\r\n this.onSelectionChanged.emit(this.arraymodeSelection);\r\n }\r\n\r\n if (this.SearchView)\r\n this.arrayPulsanti = this.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1);\r\n }\r\n\r\n if (this.View && !(this.View instanceof ReportDefinition)) {\r\n /*\r\n *Uso la tecnica di EndlessScroll se la variabile relativa è attiva e se\r\n * 1) Ho un Array, oppure\r\n * 2) Ho un AppSearch che sta cercando con paginazione \"Tutto\", oppure\r\n * 3) Ho un AppSearch che sta cercando con paginazione diversa da \"Tutto\" ma con la variabile EndlessScrollOnlyForAll a false\r\n */\r\n let viewCasted = this.View as AppSearch<any>;\r\n let isAppSearchWithIppMax = this.viewMode && viewCasted.itemsperpageoverride == this.defaultAllPageOverride;\r\n let isAppSearchNoMaxIpp = this.viewMode && viewCasted.itemsperpageoverride != this.defaultAllPageOverride;\r\n this.UseEndlessscroll = this.EndlessScroll && (this.arrayMode || isAppSearchWithIppMax || (isAppSearchNoMaxIpp && !this.EndlessScrollOnlyForAll));\r\n\r\n if (this.UseEndlessscroll) {\r\n this.addedSlices = [];\r\n this.boundSubSources = this.getItemSlices();\r\n\r\n this.TMPBoundSource = this.boundSubSources[0] ? this.boundSubSources[0] : [];\r\n if (this.boundSubSources[0])\r\n this.addedSlices.push(0);\r\n }\r\n else\r\n this.TMPBoundSource = this.getItemsByMode(false, !this.internalWriteCall);\r\n\r\n if (this.Hierarchy)\r\n this.assignHierarchyLevels(this.TMPBoundSource);\r\n\r\n this.calculateHash(this.TMPBoundSource);\r\n\r\n // Assegno a una variabile mia l'eventuale override per la classe della riga\r\n // Se poi sono in modalità gerarchica inietto anche la classe per la configurazione del livello della riga\r\n if ((this.TMPBoundSource && this.RowClassAssigner) || this.Hierarchy) {\r\n for (let i = 0; i < this.TMPBoundSource.length; i++) {\r\n let item = this.TMPBoundSource[i];\r\n item._rowClass = this.RowClassAssigner ? this.RowClassAssigner(item) : \"\";\r\n item._rowClass += this.Hierarchy ? \" est-row-lvl-\" + item.level : \"\";\r\n }\r\n }\r\n }\r\n\r\n this.postBoundSourceCalculation();\r\n }\r\n\r\n // #region Gestione retrieve degli oggetti da mostrare in tabella, considerando eventuali Endless Scrolls\r\n\r\n /**\r\n * In base alla modalità specificata (ArrayMode, ViewMode, ecc...) questo metodo recupera l'array di oggetti da bindare ad interfaccia\r\n *\r\n * @param {boolean} onlyselected [false] Indica di prendere solo gli oggetti selezionati\r\n * @param {boolean} refreshPaging [false] Indica se aggiornare le informazioni di paginazione o meno\r\n * @param {boolean} allIfPossible [false] Indica se prendere tutti gli oggetti quaora possibile, usato solo in ArrayMode\r\n *\r\n * @returns {any[]} Lista degli oggetti su cui effettuare il bind lato interfaccia\r\n */\r\n private getItemsByMode(onlyselected: boolean = false, refreshPaging: boolean = false, allIfPossible: boolean = false): any[] {\r\n let items: any[] = [];\r\n\r\n if ((this.viewMode && this.View instanceof AppSearch)) {\r\n items = this.getViewItemsBySource();\r\n }\r\n else if (this.arrayMode) {\r\n if (this.UseArrayModePaging && !allIfPossible) {\r\n\r\n // Se sono in modalità array ma la ricerca dipende da una view devo riallineare gli itemperpage\r\n if (this.SearchView)\r\n this.ArraymodeItemsPerPage = this.SearchView.itemsperpageoverride;\r\n\r\n // Devo chiamare il refresh page solo se vengo richiamato da un binding esterno\r\n if (refreshPaging)\r\n this.refreshPaging(this.ArraymodeItemsPerPage);\r\n\r\n items = this.adaptViewToPaging();\r\n } else {\r\n items = this.View as any[];\r\n }\r\n }\r\n\r\n // Se voglio solo i selezionati filtro\r\n if (onlyselected)\r\n return items.filter(t => t._selected);\r\n\r\n return items;\r\n }\r\n\r\n /** @ignore */\r\n private getViewItemsBySource(): any[] {\r\n return this.SecondarySource ? (this.View as any).items2 : this.TertiarySource ? (this.View as any).items3 : (this.View as any).items;\r\n }\r\n\r\n /**\r\n * Metodo che prende tutti gli oggetti di cui dispone divisi in bucket da 100 elementi\r\n *\r\n * @returns {any[][]} Matrice di array Nx100\r\n */\r\n private getItemSlices(): any[][] {\r\n let items = this.getItemsByMode();\r\n if (!items)\r\n return [];\r\n let arrayBy100 = [];\r\n\r\n let slices = Math.ceil(items.length / this.SliceSize);\r\n for (let i = 0; i < slices; i++) {\r\n let arraySlice = items.slice(i * this.SliceSize, i * this.SliceSize + this.SliceSize);\r\n arrayBy100.push(arraySlice);\r\n }\r\n return arrayBy100;\r\n }\r\n\r\n /**\r\n * Metodo che gestisce l'endless scroll e in base a quanto la tabella è stata scrollata aggiunge degli elementi extra a **TMPBoundSource**\r\n *\r\n * @param {any} e Evento di scroll del browser\r\n */\r\n public onScroll(e: any) {\r\n let tableViewHeight = e.target.offsetHeight;\r\n let tableScrollHeight = e.target.scrollHeight;\r\n let scrollLocation = e.target.scrollTop;\r\n let buffer = 200;\r\n\r\n let limit = tableScrollHeight - tableViewHeight - buffer;\r\n if (scrollLocation > limit) {\r\n let indexToAdd = Math.floor(this.TMPBoundSource.length / 100);\r\n if (this.boundSubSources[indexToAdd] && this.addedSlices.indexOf(indexToAdd) == -1) {\r\n // Devo ricordarmi di fare l'hash del nuovo pezzo\r\n this.calculateHash(this.boundSubSources[indexToAdd]);\r\n this.TMPBoundSource = this.TMPBoundSource.concat(this.boundSubSources[indexToAdd]);\r\n this.addedSlices.push(indexToAdd);\r\n\r\n setTimeout(() => { this.postBoundSourceCalculation(); });\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione di tutto il ciclo di vita post binding oggetti\r\n\r\n /**\r\n * Metodo lanciato dopo che la sorgente dati è stata correttamente bindata, si occupa di ricalcolare tutto ciò che serve\r\n * all'es-table per renderizzare i valori da mostrare\r\n */\r\n private postBoundSourceCalculation() {\r\n // Resetto tutto tranne RowTDs e RowTHs per evitare flickering. RowTDs e RowTHs saranno modificate all'interno del prossimo ciclo di CD\r\n this.RowContexts = [];\r\n this.OrderDirectives = [];\r\n this.lastSelectedItemID = null;\r\n\r\n // Set timeout e basta funzionerebbe per la modalità JIT, ma per AOT servono sia quello che detectChanges\r\n this.cdr.detectChanges();\r\n setTimeout(() => {\r\n // Se non ho colonne dinamiche ma sono in modalità dinamica (lo capisco perché c'è una view piena di genericitem) metto il default delle colonne\r\n this.eventuallyReviewDynamicColumns();\r\n // Molte cose sono ovviamente disponibili solo in modalità View\r\n if (this.viewMode && this.UseCustomCells) {\r\n let view = this.View as AppSearch<any>\r\n let ths = this.EsThs ? this.EsThs.toArray() : [];\r\n let tds = this.EsTds ? this.EsTds.toArray() : [];\r\n\r\n // N.B: Rispettare l'ordine di queste 3 macrocategorie è VITALE\r\n\r\n // ************************************* Sistemazioni di TH, TD, e visibilità varie *************************************\r\n\r\n this.alignColumnsIfLoadedView(view); // Se sto caricando una View da hotpotato (quindi con savedstate = true) riallineo la visibilità delle colonne e il loro ordine.\r\n this.refreshColumnsVisibility(ths, tds, view); // Lavoro sui TH ed eventualmente modifico la visibilità anche dei TD.\r\n this.alignHeadersOrdering(ths, view); // Allineo gli ordinamenti agli header\r\n this.reviewColumnsList(ths); // Aggiorna la lista delle colonne da mostrare nella dialog per ordinamento ecc\r\n\r\n // ************************************* Generazione binding per righe e colonne *************************************\r\n\r\n this.evaluateRowThs(ths); // Raccolgo i TH\r\n this.evaluateRowTds(ths, tds); // Raccolgo i TD in contesti separati, un contesto per ogni item\r\n\r\n // ************************************* Ultimi aggiustmaenti dei binding *************************************\r\n\r\n this.generateDefaultOrder(view); // Genero le direttive di ordinamento, che siano default o derivanti dalla AppSearch\r\n this.applyOrdering(view, true); // Applico l'ordinamento sulle colonne (non ASC DESC, ma \"prima questa o quella colonna\")\r\n this.evaluateSelection(view.items, view.selection); // Riallineo le info di selezione degli elementi della View\r\n }\r\n else if (this.viewMode && !this.UseCustomCells) {\r\n // Riallineo le info di selezione degli elementi della View\r\n let view = this.View as AppSearch<any>;\r\n this.evaluateSelection(view.items, view.selection);\r\n }\r\n else if (this.arrayMode) {\r\n // Riallineo le info di selezione degli elementi dell'array\r\n this.arrayModeEvaluateSelection(this.View as any[]);\r\n }\r\n\r\n // Collego gli oggetti da mostrare\r\n this.boundSource = this.TMPBoundSource;\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n this.FirstBind = false;\r\n });\r\n }\r\n\r\n /**\r\n * Valuta quali elementi devono essere marcati come selezionati nella vista attuale. Si basa sull'oggetto **selection** interno all'AppSearch\r\n *\r\n * @param {any[]} items Oggetti di cui valutare la selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetti di selezione derivante dalla view o dall'oggetto per Array\r\n */\r\n private evaluateSelection(items: any[], selectionItem: ItemsSelection<any>) {\r\n if (!selectionItem)\r\n return;\r\n\r\n this.handleSelectionEvaluation(items, selectionItem);\r\n }\r\n\r\n /**\r\n * Valuta quali elementi devono essere marcati come selezionati nella vista attuale. Si basa sull'oggetto **arraymodeSelection** dell'es-table\r\n *\r\n * @param {any[]} array Lista di oggetti di cui valutare la selezione in modalità array\r\n */\r\n private arrayModeEvaluateSelection(array: any[]) {\r\n if (array.length == 0)\r\n return;\r\n\r\n this.handleSelectionEvaluation(array, this.arraymodeSelection);\r\n }\r\n\r\n /**\r\n * Implementazione agnostica della valutazione delle selezioni degli oggetti. Richiede gli oggetti della vista attuale e l'itemSelector\r\n *\r\n * @param {any[]} items Oggetti di cui aggiornare lo stato di selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetto contenente lo stato attuale di selezione\r\n */\r\n private handleSelectionEvaluation(items: any[], selectionItem: ItemsSelection<any>) {\r\n let allSelected = true;\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let itm = items[i];\r\n\r\n // Reidrato la cache di selezione coi nuovi oggetti altrimenti non riuscirei a beccare gli indici giusti\r\n // Dopodiché la uso per calcolare istantaneamente se gli oggetti sono selezionati o no\r\n if (this.selOrDeselCache[itm.hash])\r\n this.selOrDeselCache[itm.hash] = itm;\r\n\r\n if (selectionItem.all)\r\n itm._selected = !this.selOrDeselCache[itm.hash];\r\n else\r\n itm._selected = !!this.selOrDeselCache[itm.hash];\r\n\r\n allSelected = allSelected && itm._selected;\r\n }\r\n\r\n // Se tutti gli oggetti di questa pagina sono solezionati allora posso mettere il global check a true\r\n // Se sono in situazione di all-select anche metto la global checkbox, nonostante ci possano essere delle esclusioni\r\n this.globalCheck = allSelected || selectionItem.all;\r\n this.canSelectAll = selectionItem.count > 0 && this.SelectAll;\r\n\r\n // Potrebbe cambiare qualora qualcuno inserisse dati a manazza in modalità Array e desse il refresh manuale alla tabella\r\n // Comunque costa 0 quindi mi permetto di refreshare\r\n if (this.arrayMode) {\r\n let prevSelected = this.selectedObjects;\r\n this.finalizeSelectionInformations(selectionItem);\r\n if (this.selectedObjects != prevSelected)\r\n this.onSelectionChanged.emit(selectionItem);\r\n }\r\n }\r\n\r\n /**\r\n * Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna\r\n */\r\n private eventuallyReviewDynamicColumns() {\r\n // Senza oggetti esco\r\n if (!this.TMPBoundSource || this.TMPBoundSource.length == 0)\r\n return;\r\n\r\n var useGenericItems = !!this.TMPBoundSource[0][\"properties\"];\r\n if (!useGenericItems || (!this.FirstBind && this.DynamicRowColumnsDefinition && this.DynamicRowColumnsDefinition.length > 0))\r\n return;\r\n\r\n if ((!this.DynamicRowColumnsDefinition || this.DynamicRowColumnsDefinition.length == 0)) {\r\n var props = <Record<string, string>>this.TMPBoundSource[0][\"properties\"];\r\n this.DynamicRowColumnsDefinition = [];\r\n for (let key in props)\r\n this.DynamicRowColumnsDefinition.push(new EsTableColumnsDefinition(key, key))\r\n this.UserDefinedDynamicCols = false;\r\n }\r\n else\r\n this.UserDefinedDynamicCols = true;\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** estrappolo la lista di **EsTableColumn** che questa tabella dovrà eventualmente gestire per Visibilità e Ordine\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[]} ths Colonne della tabella\r\n */\r\n private reviewColumnsList(ths: EsTh[]) {\r\n this.ColumnsList = [];\r\n if (ths.length == 0)\r\n return;\r\n\r\n // Appena il contentChildren è valorizzato scorro tutti gli header\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n // Se non ho un id il th è considerato inerte\r\n if (!th.ID || th.Internal)\r\n continue;\r\n\r\n th.OrderBy = this.OrderByColumn;\r\n\r\n if (this.OrderByColumn && th.Orderable) {\r\n // Collego ogni header all'evento di cambio ordinamento\r\n let sbscr = th.onOrderChange.subscribe(order => { this.thOrderChanged(th.ID, order); });\r\n this.EsThsOrderChangeSubscriptions.push(sbscr);\r\n }\r\n\r\n // Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere\r\n // Di default la visibilità è quella impostata nel componente\r\n if (this.HiddenColumns || th.Visible) {\r\n this.ColumnsList.push(new EsTableColumn(th.ID, th.Description, th.Visible));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Terminato il binding delle colonne da **reviewColumnsList** e della **View** dal **writeValue** questo metodo si occupa\r\n * dell'allineamento delle informazioni fra le colonne calcolate internamente e le informazioni sulle colonne che arrivano dall'AppSearch\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n private alignColumnsIfLoadedView(view: AppSearch<any>) {\r\n let emitChanged = view.savedstate;\r\n let newColset = [];\r\n\r\n if (!this.ColumnsList || this.ColumnsList.length == 0)\r\n return;\r\n\r\n this.ColumnsList.forEach(c => {\r\n let exCl = view.columns.filter(cc => cc == c.id);\r\n\r\n // Se l'appsearch viene da uno stato precedente, uso le informaizoni sulle colonne che ha dentro, altrimenti sovrascrivo tutto **\r\n if (c.visible && view.columns.length == 0)\r\n newColset.push(c.id);\r\n\r\n // Se ho una colonna lato AppSearch e nella ColumnList non è visibile, allineo all'AppSearch\r\n else if (exCl.length == 1 && !c.visible)\r\n c.visible = true;\r\n\r\n // Allineamento sull'AppSearch per casistiche inverse al di sopra\r\n else if (exCl.length == 0 && c.visible)\r\n c.visible = false;\r\n });\r\n\r\n // Non ho colonne nella appsearch, vuol dire che sono al primo binding\r\n if (view.columns.length == 0)\r\n view.columns = newColset;\r\n\r\n if (view.savedstate && this.ColumnsOrdering && view.column_ordering.length > 0) {\r\n let newColList = [];\r\n // Scorro gli ordinamenti che avevo salvato e ricreo la ColumnsList in base a loro\r\n view.column_ordering.forEach(co => {\r\n this.ColumnsList.forEach(c => {\r\n if (c.id == co)\r\n newColList.push(c);\r\n });\r\n });\r\n\r\n this.ColumnsList = newColList;\r\n }\r\n\r\n // In ogni caso questo non mi serve più, lo resetto **\r\n view.savedstate = false;\r\n\r\n if (emitChanged)\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Metodo che gestisce il cambio di Ordinamento di una colonna\r\n *\r\n * @param {string} id ID della colonna il cui oridnamento è cambiato\r\n * @param {'DESC' | 'ASC'} order Nuovo ordine selezionato per la colonna\r\n */\r\n public thOrderChanged(id: string, order?: 'DESC' | 'ASC') {\r\n if (!this.viewMode) {\r\n console.warn('Order changed on a table not in viewMode. Operation not supported');\r\n return;\r\n }\r\n\r\n if (!this.OrderByColumn)\r\n return;\r\n\r\n let appSearch = this.View as AppSearch<any>;\r\n let orderToAdd = true;\r\n let orderToRemove: number = null;\r\n\r\n // Se per qualche motivo il costruttore non è passato (cache tarpate o simila) fixo\r\n if (!appSearch.orders)\r\n appSearch.orders = [];\r\n\r\n for (let i = 0; i < appSearch.orders.length; i++) {\r\n let t = appSearch.orders[i];\r\n if (t.id == id) {\r\n if (order) {\r\n t.order = order;\r\n orderToAdd = false;\r\n }\r\n else\r\n orderToRemove = i;\r\n }\r\n }\r\n\r\n if (orderToRemove != null) {\r\n appSearch.orders.splice(orderToRemove, 1);\r\n }\r\n else if (orderToAdd) {\r\n if (this.MultipleOrderingDirectives)\r\n appSearch.orders.push(new AppOrdering(id, order));\r\n else\r\n appSearch.orders = [new AppOrdering(id, order)];\r\n }\r\n\r\n this.onOrderChanged.emit({ id, order });\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Metodo da chiamare ogni volta che si vuole dare evidenza all'esterno del bisogno di rieffettuare la ricerca\r\n */\r\n private emitSearchRequest(value: boolean) {\r\n if (this.viewMode) {\r\n (this.View as AppSearch<any>).internalsearchrequest = true;\r\n this.changed();\r\n }\r\n this.researchInProgress = true;\r\n this.onSearchRequest.emit(value);\r\n }\r\n\r\n /**\r\n * In base alla visibilità registrata nelle **ColumnsList** questo metodo si occupa di prendere tutti i **EsThs** ed **EsTds** relativi e nasonderli/mostrarli\r\n *\r\n * Costo: 1 scan ColumnsList, 1 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[]} ths Header della tabella\r\n * @param {EsTd[]} tds Celle della tabella\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n private refreshColumnsVisibility(ths: EsTh[], tds: EsTd[], view: AppSearch<any>) {\r\n let columnsCache: { [index: string]: EsTableColumn } = {};\r\n let newColset = [];\r\n for (let coli = 0; coli < this.ColumnsList.length; coli++) {\r\n let col = this.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n if (col.visible) newColset.push(col.id);\r\n }\r\n view.columns = newColset;\r\n\r\n // Da qui in poi devono essere eseguiti SOLO in fase di writeValue quindi devo assicurarmi di passarli null in tutti i passaggi diversi da quello\r\n if (ths) {\r\n // Definisco se la colonna è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (th.Internal)\r\n continue;\r\n\r\n th.Visible = columnsCache[th.ID] ? columnsCache[th.ID].visible : th.Visible;\r\n }\r\n }\r\n\r\n if (tds) {\r\n // Definisco se la cella è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (td.Internal)\r\n continue;\r\n\r\n td.Visible = columnsCache[td.ID] ? columnsCache[td.ID].visible : td.Visible;\r\n }\r\n }\r\n\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Allinea gli ordinamenti dati fra le **EsThs** e le informazioni all'interno della View bindata\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {EsTh[]} ths Colonne della tabella\r\n */\r\n private alignHeadersOrdering(ths: EsTh[], view: AppSearch<any>) {\r\n let researchNeeded = false;\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (th.Internal)\r\n continue;\r\n\r\n th.Order = null;\r\n\r\n // Assegno tutti gli ordinamenti che mi vengono da AppSearch. Sono i più importanti. Non faccio cache o cose strano perché tanto questa\r\n // variabile sarà sempre massimo 3 elementi\r\n view.orders.forEach(or => {\r\n if (or.id == th.ID)\r\n th.Order = or.order;\r\n });\r\n }\r\n\r\n if (researchNeeded)\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsTds** bindati genera, all'interno del dizionario **TMPRowTDs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TD \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 2 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[]} ths Colonne della tabella\r\n * @param {EsTd[]} tds Celle della tabella\r\n */\r\n private evaluateRowTds(ths: EsTh[], tds: EsTd[]) {\r\n if (tds.length == 0)\r\n return;\r\n\r\n let thsCache: { [index: string]: EsTh } = {};\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (th.Internal)\r\n continue;\r\n thsCache[th.ID] = th;\r\n }\r\n\r\n this.TMPRowTDs = {};\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (td.Internal)\r\n continue;\r\n\r\n let hasTh = !!thsCache[td.ID];\r\n if (hasTh)\r\n thsCache[td.ID].Referenced = true;\r\n else\r\n throw \"ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: \" + td.ID;\r\n\r\n let itemToAdd = <any>{ ID: td.ID, Visible: td.Visible, Class: td.Class, Content: td.Content, RouterLink: td.RouterLink };\r\n if (this.TMPRowTDs[td.Context])\r\n this.TMPRowTDs[td.Context].push(itemToAdd);\r\n else {\r\n this.RowContexts.push(td.Context);\r\n this.TMPRowTDs[td.Context] = [itemToAdd];\r\n }\r\n }\r\n\r\n var errs: string[] = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (!th.Referenced)\r\n errs.push(th.ID);\r\n }\r\n\r\n if (errs.length > 0) {\r\n var errIds = errs.join(', ');\r\n throw \"L'ID di uno o più EsTh non hanno alcun EsTd associato: \" + errIds;\r\n }\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** bindati genera, all'interno del dizionario **TMPRowTHs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TH \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[]} ths Colonne della tabella\r\n */\r\n private evaluateRowThs(ths: EsTh[]) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n this.TMPRowTHs = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (th.Internal)\r\n continue;\r\n\r\n this.TMPRowTHs.push({ ID: th.ID, Visible: th.Visible, Class: th.Class, Content: th.Description, Order: th.Order, Orderable: th.Orderable });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che genera l'ordine di default delle colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n private generateDefaultOrder(view: AppSearch<any>) {\r\n if (this.TMPRowTHs.length == 0)\r\n return;\r\n\r\n // Genero ordinamento di default da 0 fino a dove deve arrivare. Situazione attuale senza hotpotato\r\n if (!view.column_ordering || view.column_ordering.length == 0) {\r\n for (let i = 0; i < this.TMPRowTHs.length; i++)\r\n this.OrderDirectives.push(this.TMPRowTHs[i].ID);\r\n }\r\n else\r\n this.OrderDirectives = view.column_ordering;\r\n }\r\n\r\n /**\r\n * Applica l'ordine specificato alle varie colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {boolean} finalize Se **true** significa che non mi aspetto di dover effettuare altre operazioni e posso renderizzare la situazione in base ai RowContext\r\n * Senza finalize significa che mi aspetto altre operazioni che prima o poi richiameranno questa funzione col finalize.\r\n *\r\n * Ad esempio, una volta selezionato ordinamento fisico/logico delle colonne so che parte un altra ricerca che mi rivalorizzera da \"writeValue\", che già chiama questa funzione.\r\n * Mettendo solo la chiamata da \"writeValue\" come \"finalizzante\" mi assicuro che smanattamenti a frontend non causino flickering fino a quando non servono\r\n */\r\n private applyOrdering(view: AppSearch<any>, finalize: boolean) {\r\n // Genero ordinamento per gli header\r\n let newHeaders = [];\r\n this.OrderDirectives.forEach(o => {\r\n let heaedrItem = this.TMPRowTHs.filter(t => t.ID == o)[0];\r\n newHeaders.push(heaedrItem);\r\n });\r\n this.TMPRowTHs = newHeaders;\r\n\r\n // Genero ordinamento per le celle\r\n for (let i = 0; i < this.RowContexts.length; i++) {\r\n let context = this.TMPRowTDs[this.RowContexts[i]];\r\n let newContext = [];\r\n\r\n this.OrderDirectives.forEach(o => {\r\n let contextItem = context.filter(t => t.ID == o)[0];\r\n newContext.push(contextItem);\r\n });\r\n\r\n this.TMPRowTDs[this.RowContexts[i]] = newContext;\r\n }\r\n\r\n // Se devo finalizzare attacco sia gli header che le celle\r\n if (finalize) {\r\n this.RowTDs = this.TMPRowTDs;\r\n this.RowTHs = this.TMPRowTHs;\r\n }\r\n\r\n view.column_ordering = this.OrderDirectives;\r\n this.changed();\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Operaizoni dialog ordinamento/visibilità colonne\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata prima della colonna precedente\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendUp(columnItem: EsTableColumn) {\r\n let itemIndex = this.TMPColumnsList.indexOf(columnItem);\r\n this.utiExts.swap(this.TMPColumnsList, itemIndex, itemIndex - 1);\r\n\r\n this.TMPColumnsList = JSON.parse(JSON.stringify(this.TMPColumnsList));\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata dopo la colonna successiva\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendDown(columnItem: EsTableColumn) {\r\n let itemIndex = this.TMPColumnsList.indexOf(columnItem);\r\n this.utiExts.swap(this.TMPColumnsList, itemIndex, itemIndex + 1);\r\n\r\n this.TMPColumnsList = JSON.parse(JSON.stringify(this.TMPColumnsList));\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" inverte le impostazioni di visibilità della colonna\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public columnClicked(item: EsTableColumn) {\r\n this.lastSelectedItemID = item.id;\r\n if (!this.HiddenColumns)\r\n return;\r\n\r\n item.visible = !item.visible;\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /**\r\n * All'apertura della dialog \"Ordinamento e Visibilità Colonne\" ricarica le informazioni attuali per permettere la modifica\r\n */\r\n public resetColumnVisSelection() {\r\n this.TMPColumnsList = JSON.parse(JSON.stringify(this.ColumnsList));\r\n let reorderedColList = [];\r\n\r\n if (this.ColumnsOrdering) {\r\n this.OrderDirectives.forEach(o => {\r\n let column = this.TMPColumnsList.filter(t => t.id == o)[0];\r\n // Potrei non averne nel caso ci sia il flag HiddenColumns a false, evito di inserire degli undefined\r\n if (column)\r\n reorderedColList.push(column);\r\n });\r\n\r\n this.TMPColumnsList = reorderedColList;\r\n }\r\n\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /**\r\n * Riaggiorna le **OrderDirectives** con le informazioni in **ColumnsList**\r\n */\r\n private refreshColumnOrdering() {\r\n this.OrderDirectives = [];\r\n\r\n for (let c = 0; c < this.ColumnsList.length; c++)\r\n this.OrderDirectives.push(this.ColumnsList[c].id);\r\n }\r\n\r\n /**\r\n * Effettua la selezione o meno del check globale (**globalColVisCheck**) di visibilità in base a se tutte le **TMPColumnsList** sono visibili o no\r\n */\r\n public updateGlobalColVisCheck() {\r\n // TMPColList viene riempita di undefined nel caso in cui sia disattivata la selezione delle colonne nascoste\r\n this.globalColVisCheck = this.TMPColumnsList.every(t => t.visible);\r\n }\r\n\r\n /**\r\n * Funzione che effettua la conferma della visibilità e dell'ordine delle colonne.\r\n *\r\n * Questa selezione viene inoltre salvata nelle preferenze (**@esfaenza/preferences**), qualora l'Input **SavePreferences** fosse valorizzato\r\n *\r\n * @returns {boolean} **true** se non ci sono problemi, **false** altrimenti\r\n */\r\n public confirmColumnVisibilitySelection(): boolean {\r\n // Non permetto di non selezionare nulla\r\n if (this.TMPColumnsList.every(t => !t.visible))\r\n return false;\r\n\r\n let castedView = this.View as AppSearch<any>;\r\n this.ColumnsList = JSON.parse(JSON.stringify(this.TMPColumnsList));\r\n this.refreshColumnOrdering();\r\n\r\n this.refreshColumnsVisibility(null, null, castedView);\r\n this.applyOrdering(castedView, false);\r\n\r\n //Salvo le preferences di questa view\r\n //Di default registro ordinamento e visibilità delle colonne nella vista. Solo le cose di UI\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name) {\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per la tabella\");\r\n return false;\r\n }\r\n\r\n if (!this.prefService) {\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n return false;\r\n }\r\n\r\n var toStore = { columns: <string[]>JSON.parse(JSON.stringify(castedView.columns)), column_ordering: <string[]>JSON.parse(JSON.stringify(castedView.column_ordering)) };\r\n this.prefService.store(<string>this.ngControl.name, toStore);\r\n }\r\n\r\n // Mi assicuro di farlo dopo l'espansione del changed o rischio che la ricerca mi ridia colonne che in realtà non esistono\r\n setTimeout(() => { this.emitSearchRequest(false); });\r\n\r\n // Lo vorrei mettere lato template ma no\r\n this.lastSelectedItemID = null;\r\n return true;\r\n }\r\n\r\n /**\r\n * Sul click nella checkbox di selezione globale si scorrono tutte le colonne e si impostano al valore della check globale\r\n */\r\n public globalColVisCheckChanged() {\r\n this.TMPColumnsList.forEach(t => { t.visible = this.globalColVisCheck; });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione data source gerarchici\r\n\r\n /**\r\n * Data una lista di oggetti assegno il livello gerarchico rispetto alla lista di oggetti passata\r\n *\r\n * @param {any[]} objs Lista di oggetti a cui aggiungere l'informazione del livello gerarchico\r\n */\r\n private assignHierarchyLevels(objs: any[]) {\r\n // Casistica input nullo\r\n if (!objs || !objs.length)\r\n return;\r\n\r\n //Se mancano entrambe le info le cerco di valorizzare in automatico coi default \"parentid\" e \"id\" (posto che le props esistano nell'oggetto)\r\n if (!this.ParentKey && !this.OwnKey) {\r\n if (objs[0]['parentid'] !== undefined)\r\n this.ParentKey = 'parentid';\r\n if (objs[0]['id'] !== undefined)\r\n this.OwnKey = 'id';\r\n }\r\n\r\n //Check finale per assicurarmi che le props ci siano\r\n if (!this.ParentKey || !this.OwnKey) {\r\n console.error('Per utilizzare il sistema in modalità gerarchica è obbligatorio specificare sia ParentKey che OwnKey. Fallback a sistema non gerarchico');\r\n return;\r\n }\r\n\r\n // Valorizzazione campi level, expanded, e visible per ogni item\r\n let currentLevel = 1;\r\n let assigned = 0;\r\n do {\r\n assigned = this.assignLevel(objs, currentLevel);\r\n currentLevel++;\r\n } while (assigned > 0);\r\n // butto su lato html e poi me la gioco là con padding = 20 * (level - 1) per far capire il diverso livello\r\n }\r\n\r\n /**\r\n * Per ognuno degli oggetti passati gli assegna un livello di gerarchia in base a **ParentKey** e **OwnKey**\r\n *\r\n * @param {any[]} objs Oggetti a cui assegnare il livello di gerarchia\r\n * @param {number} levelToAssign Livello che sta assegnando attualmente questa iterazione (dato che è ricorsiva)\r\n *\r\n * @returns {number} Numero di oggetti a cui è stato assegnato un livello gerarchico\r\n */\r\n private assignLevel(objs: any[], levelToAssign: number): number {\r\n let assigned = 0;\r\n for (let i = 0; i < objs.length; i++) {\r\n let obj = objs[i];\r\n\r\n // Se la parentKey non è valorizzata, questo è il livello 0 (1... perché gli 0 son perciolosi)\r\n if (!obj[this.ParentKey] && levelToAssign == 1) {\r\n obj.level = 1;\r\n obj.visible = true;\r\n obj.expanded = this.StartsExpanded;\r\n assigned++;\r\n continue;\r\n }\r\n\r\n // Per i livelli superiore al primo\r\n if (obj[this.ParentKey] && levelToAssign > 1) {\r\n // trovo il parent\r\n for (let p = 0; p < objs.length; p++) {\r\n let possibleParent = objs[p];\r\n\r\n // Trovato il parent dell'item, assegno all'item il livello giusto\r\n if (possibleParent[this.OwnKey] == obj[this.ParentKey] && possibleParent.level == levelToAssign - 1) {\r\n obj.level = levelToAssign;\r\n\r\n // So che questo item ha un parent. Ribadisco che il parent è espanso in base alle impostazione e stessa logica\r\n // per la visibilità del figlio\r\n possibleParent.expanded = this.StartsExpanded;\r\n possibleParent.parent = true;\r\n obj.visible = this.StartsExpanded;\r\n assigned++;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return assigned;\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare l'espansione di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da espandere\r\n */\r\n public expandParent(key: string) {\r\n for (let i = 0; i < this.boundSource.length; i++) {\r\n let obj = this.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo espando\r\n if (obj[this.OwnKey] == key) {\r\n obj.expanded = true;\r\n\r\n for (let ic = 0; ic < this.boundSource.length; ic++) {\r\n let child = this.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo visibili\r\n if (child[this.ParentKey] == key)\r\n child.visible = true;\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare il collapse di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da collassare\r\n */\r\n public collapseParent(key: string) {\r\n for (let i = 0; i < this.boundSource.length; i++) {\r\n let obj = this.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo collasso\r\n if (obj[this.OwnKey] == key) {\r\n obj.expanded = false;\r\n\r\n // Collasso/nascondo tutti i child del parent\r\n this.collapseChildOfParent(key);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collassa ricorsivamente tutti i figli di un parent identificato dalla **parentKey**\r\n *\r\n * @param {string} parentKey Chiave del parent di cui collassare i figli\r\n */\r\n private collapseChildOfParent(parentKey: string) {\r\n for (let ic = 0; ic < this.boundSource.length; ic++) {\r\n let child = this.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo invisibili. Se il child trovato è a sua volta un parent,\r\n // lo collasso e vado in ricorsione sui figli\r\n if (child[this.ParentKey] == parentKey && !child.parent)\r\n child.visible = false;\r\n else if (child[this.ParentKey] == parentKey && child.parent) {\r\n child.expanded = false;\r\n child.visible = false;\r\n this.collapseChildOfParent(child[this.OwnKey]);\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Selezione\r\n\r\n /**\r\n * Gestisce la selezione globale degli oggetti, sia per pagina che a livello di **SelectAll**\r\n *\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n */\r\n public globalCheckChanged(forcedVal: boolean = null) {\r\n\r\n let items = this.getItemsByMode();\r\n var itemSelection = this.handleItemsSelection(items, forcedVal, this.globalCheck);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n }\r\n\r\n /**\r\n * Helper per gestire la selezione di N elementi utilizzando la Cache di selezione ed eventualmente aggiornando il concetto di \"all selection\"\r\n *\r\n * Vunziona sia in modalità Array che in modalità View Semplice o View Avanzata (con le Custom Cells)\r\n *\r\n * @param {any[]} items Oggetti da selezionare o deselezionare\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n *\r\n * @returns {ItemsSelection<any>} Oggetto di selezione aggiornato con le informazioni sull'ultima operazione effettuata\r\n */\r\n private handleItemsSelection(items: any[], forcedVal: boolean = null, globalCheck: boolean = null): ItemsSelection<any> {\r\n let selectionItem = (this.View as AppSearch<any>)?.selection || this.arraymodeSelection;\r\n\r\n // Se sono in modalità di selezione singola e devo selezionare un'oggetto, per prima cosa devo deselezionare tutti gli altri\r\n if (this.SingleSelection && items[0]?._selected) {\r\n if (items.length > 1 && forcedVal == null)\r\n throw \"Tentativo di selezionare o deselezionare più di un elemento con SingleSelection attivo\";\r\n\r\n if (items.length == 1 && forcedVal == null){\r\n selectionItem = this.handleItemsSelection(this.getItemsByMode(), false, null);\r\n items[0]._selected = true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n let toChange = forcedVal != null ? item._selected != forcedVal : globalCheck != null ? item._selected != this.globalCheck : false;\r\n\r\n // Se dev'essere overridato il valore di check effettuo l'override o col valore forzato o col valore globale\r\n if (toChange && !item.locked)\r\n item._selected = forcedVal != null ? forcedVal : this.globalCheck;\r\n\r\n\r\n if (selectionItem.all) {\r\n // In caso di \"seleziona tutto\"...\r\n // N.B: la selOrDeselCache agisce come cache di DESELEZIONE in questo blocco di codice\r\n\r\n if (item._selected && this.selOrDeselCache[item.hash]) {\r\n // Oggetto selezionato: lo rimuovo dalle esclusioni di selezione\r\n selectionItem.exclusions.splice(selectionItem.exclusions.indexOf(this.selOrDeselCache[item.hash]), 1);\r\n delete this.selOrDeselCache[item.hash];\r\n }\r\n else if (!item._selected && !this.selOrDeselCache[item.hash]) {\r\n // Oggetto deselezionato: lo aggiungo alle esclusioni di selezione\r\n this.selOrDeselCache[item.hash] = item;\r\n selectionItem.exclusions.push(item);\r\n }\r\n }\r\n else {\r\n //In caso di non \"seleziona tutto\"...\r\n // N.B: la selOrDeselCache agisce come cache di SELEZIONE in questo blocco di codice\r\n\r\n if (item._selected && !this.selOrDeselCache[item.hash]) {\r\n // Oggetto selezionato: lo aggiungo alla selezione attuale\r\n this.selOrDeselCache[item.hash] = item;\r\n selectionItem.items.push(item);\r\n }\r\n else if (!item._selected && this.selOrDeselCache[item.hash]) {\r\n // Oggetto deselezionato: lo rimuovo dalla selezione attuale\r\n selectionItem.items.splice(selectionItem.items.indexOf(this.selOrDeselCache[item.hash]), 1);\r\n delete this.selOrDeselCache[item.hash];\r\n }\r\n }\r\n }\r\n\r\n // Imposto il check globale in base a se tutti gli elementi sono selezionati o meno.\r\n // Evito di fare queste operazioni se la selezione deriva proprio dal global Check\r\n // Non è ottimizzatissimo mettere 2 some ma scrivere questo codice a for sono tipo 25 righe....\r\n if (globalCheck == null)\r\n this.globalCheck = !items.some(t => !t._selected) && !this.getItemsByMode().some(t => !t._selected);\r\n\r\n this.finalizeSelectionInformations(selectionItem);\r\n\r\n return selectionItem;\r\n }\r\n\r\n /**\r\n * Finalizza le informazioni di selezione del **ItemsSelection** corrente\r\n */\r\n private finalizeSelectionInformations(selectionItem: ItemsSelection<any>) {\r\n selectionItem.count = this.evaluateSelected();\r\n\r\n // Se ho fatto selezione \"all\" ma poi mi sono messo a togliere tutti gli elementi fino a rimanerne 0 resetto l'oggetto di selezione\r\n if (selectionItem.count == 0 && selectionItem.all) {\r\n selectionItem.all = false;\r\n selectionItem.exclusions = [];\r\n selectionItem.items = [];\r\n\r\n // Ripulisco la cache altrimenti mi rimane piena di tutte le esclusioni\r\n this.selOrDeselCache = {};\r\n }\r\n\r\n // Se la possibilità di fare \"Seleziona tutto\" è abilitata allora la considero appena mi viene selezionato qualcosa\r\n this.canSelectAll = selectionItem.count > 0 && this.SelectAll;\r\n }\r\n\r\n /**\r\n * Gestisce i click sulla tabella, gestendo eventualmente anche gli Shift + Click per selezionare un range di oggetti\r\n *\r\n * @param {any} event Evento nativo HTML del click\r\n * @param {any} item Oggetto bindato su cui si è effettuato il click\r\n *\r\n * @returns {boolean} **true** se l'operaizone è andata a buon fine, **false** altrimenti\r\n */\r\n public handleClick(event: any, item: any): boolean {\r\n // Seleziono del testo ma non ho shift premuto -> ignoro la selezione\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && !event.shiftKey)\r\n return false;\r\n\r\n // Seleziono del testo e ho shift premuto -> annullo la selezione del testo\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && event.shiftKey)\r\n this.utiExts.clearTextSelection();\r\n\r\n let selecteditems: any[] = [];\r\n if (event.shiftKey && this.ShiftClick && !this.SingleSelection) {\r\n let startSelecting = false;\r\n\r\n let items = this.getItemsByMode();\r\n for (let i = 0; i < items.length; i++) {\r\n let t = items[i];\r\n if (startSelecting) {\r\n t._selected = true;\r\n selecteditems.push(t);\r\n }\r\n if ((t == item || t == this.lastSelected) && !startSelecting) {\r\n startSelecting = true;\r\n t._selected = true;\r\n selecteditems.push(t);\r\n } else if ((t == item || t == this.lastSelected) && startSelecting)\r\n startSelecting = false;\r\n }\r\n } else {\r\n item._selected = !item._selected;\r\n this.lastSelected = item;\r\n selecteditems.push(item);\r\n }\r\n\r\n var itemSelection = this.handleItemsSelection(selecteditems);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n return true;\r\n }\r\n\r\n /**\r\n * Valuta la quantità di oggetti che sono stati selezionati al termine di un evento di selezione\r\n *\r\n * @returns {number} Numero di oggetti selezionati\r\n */\r\n private evaluateSelected(): number {\r\n let selectionItem = (this.View as AppSearch<any>)?.selection || this.arraymodeSelection;\r\n this.selectedObjects = selectionItem.all ? (this.View.objectcount || this.View.length) - selectionItem.exclusions.length : selectionItem.items.length;\r\n return this.selectedObjects;\r\n }\r\n\r\n /**\r\n * Gestisce il comando di \"Seleziona tutto in tutte le pagine\" o il suo contrario, cioè \"Reimposta selezione\"\r\n */\r\n public selectAllOrResetSelection() {\r\n let selectionItem = this.View.selection || this.arraymodeSelection;\r\n this.selOrDeselCache = {};\r\n selectionItem.all = !selectionItem.all;\r\n selectionItem.exclusions = [];\r\n selectionItem.items = [];\r\n\r\n // Ripulisco gli stati UI di selezione globale se l'ho disattivata\r\n if (!selectionItem.all) {\r\n this.canSelectAll = false;\r\n this.globalCheck = false;\r\n }\r\n\r\n this.finalizeSelectionInformations(selectionItem);\r\n\r\n this.onSelectionChanged.emit(selectionItem);\r\n\r\n // Dopo aver resettato direttamente il solo oggetto this.View.selection devo anche riallineare a tutti gli oggetti bindati\r\n this.evaluateSelection(this.viewMode ? this.View.items : this.View, selectionItem);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Paginazione\r\n\r\n /**\r\n * Sposta la ricerca di una pagina in avanti (o indeitro)\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public addToPage(page: number) {\r\n if (!(this.View instanceof AppSearch) && !(this.SearchView instanceof AppSearch) && !(this.View instanceof ReportDefinition))\r\n return;\r\n\r\n this.goToPage((this.SearchView || this.View).page + page);\r\n }\r\n\r\n /**\r\n * Sposta la ricerca alla pagina specificata\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public goToPage(page: number) {\r\n\r\n if (!(this.View instanceof AppSearch) && !(this.SearchView instanceof AppSearch) && !(this.View instanceof ReportDefinition))\r\n return;\r\n\r\n let appSearchElement = this.SearchView || this.View;\r\n if (page === 0 || page > appSearchElement.pages)\r\n return;\r\n\r\n appSearchElement.page = page;\r\n this.arrayPulsanti = this.getPagesArray(6, appSearchElement.page, appSearchElement.pages);\r\n\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest**\r\n * per comunicare al componente che utilizza questa tabella che i dati sono da aggiornare\r\n */\r\n public onItemsPerPageChanged() {\r\n this.emitSearchRequest(true);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Export\r\n\r\n /**\r\n * Effettua l'esportazione dei dati\r\n *\r\n * @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella\r\n */\r\n public tryExport(format?: string) {\r\n if (!this.ExportFunction)\r\n return;\r\n\r\n if (this.reportMode)\r\n this.ExportFunction(format);\r\n else\r\n this.ExportFunction((data, cancel: boolean = false) => {\r\n if (cancel)\r\n return;\r\n this.setupExport(data);\r\n this.cdr.detectChanges();\r\n setTimeout(() => { this.exportDownloader.nativeElement.click(); });\r\n });\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n private setupExport(items: any[]) {\r\n let drcd = this.DynamicRowColumnsDefinition;\r\n\r\n this.headers = drcd && drcd.length > 0 ? this.expExts.setupForGenericExport(items, drcd.map(t => { return { label: t.description, key: t.propertyName, order: t.columnOrder } })) : this.expExts.setupForExport(items);\r\n this.data = items;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Modalità Report\r\n\r\n /**\r\n * Sul click dell'Header di una colonna questo metodo si occupa di applicare l'ordinamento successivo e di notificare con **emitSearchRequest**\r\n * il bisogno di aggiornare i dati da parte del componente che utilizza la tabella\r\n *\r\n * Utilizzato solo in modalità REport\r\n *\r\n * @param {ReportColumn} clm Colonna del report per cui ordinare\r\n */\r\n public setupNextOrderAndSearch(clm: ReportColumn) {\r\n if (!(this.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo setupNextOrderAndSearch');\r\n return;\r\n }\r\n\r\n let orderNext = { NONE: 'DESC', DESC: 'ASC', ASC: null };\r\n let nextOrder = orderNext[clm.order || 'NONE'];\r\n clm.order = nextOrder;\r\n\r\n let order: ReportOrder;\r\n let clmOrder = this.View.orders ? this.View.orders.filter(t => t.column == clm.id) : [];\r\n if (clmOrder.length == 0 && clm.order) {\r\n order = new ReportOrder();\r\n order.column = clm.id;\r\n order.order = clm.order;\r\n if (!this.View.orders)\r\n this.View.orders = [];\r\n\r\n this.View.orders.push(order);\r\n }\r\n else if (clmOrder.length == 1) {\r\n // Rimuovo l'ordinamento o aggiorno quello già esistente\r\n if(!clm.order)\r\n clmOrder = [];\r\n else\r\n clmOrder[0].order = clm.order;\r\n }\r\n else\r\n console.warn('Impossibile settare ordinamento. Colonna ' + clm.id + ' direttive di ordinamento ' + clmOrder.length + ' ordinamento scelto ' + clm.order);\r\n\r\n // Dopo aver aggiornato l'ordinamento rilancio la ricerca\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di gestire la grafica della tabella in base alle informazioni di ordinamento colonne e paginazione contenuti nel modello\r\n */\r\n private reviewReportBindings() {\r\n if (!(this.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo reviewReportBindings');\r\n return;\r\n }\r\n\r\n // Allineo le informazioni su eventuali ordinamenti fatti precedentemente\r\n if (this.View.orders && this.View.orders.length > 0) {\r\n this.View.orders.forEach(t => {\r\n this.ReportValues.columns.filter(c => c.id == t.column)[0].order = t.order;\r\n });\r\n }\r\n\r\n // Recupero il count precedente se serve\r\n if (this.ReportValues.count != -2)\r\n this.previousCount = this.ReportValues.count;\r\n else if (this.ReportValues.count == -2)\r\n this.ReportValues.count = this.previousCount;\r\n\r\n let ipp = (this.View.itemsperpageoverride || 15);\r\n this.View.pages = Math.ceil(this.ReportValues.count / ipp);\r\n this.arrayPulsanti = this.getPagesArray(6, this.View.page, this.View.pages);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione update automatico\r\n\r\n /**\r\n * Metodo che gestisce la modifica del tempo specificato per l'aggiornamento automatico\r\n */\r\n public autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n\r\n let secondsInMs = parseInt(this.seconds, null) * 1000;\r\n\r\n if (this.autoUpdate)\r\n this.updateTimer = setInterval(() => { this.emitSearchRequest(false); }, secondsInMs);\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione tabella dinamica\r\n\r\n /**\r\n * Metodo chiamato dal click su una delle colonne generate dall'Input **DynamicOperations**\r\n *\r\n * @param {any} item L'oggetto su cui va effettuata l'operazione\r\n * @param {string} opid Codice identificativo dell'operazione da effettuarsi\r\n */\r\n public dynamicOperation(item: any, opid: string) {\r\n this.onDynamicOperation.emit({ id: opid, item: item });\r\n }\r\n\r\n /**\r\n * Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n public generateRouterLink(path: string, parameterProps: string[], item: GenericItem): any {\r\n if (this.DynamicTableRouterLinkCache[item.hash + path]) {\r\n return this.DynamicTableRouterLinkCache[item.hash + path];\r\n } else {\r\n let link = this.getRouterLink(path, parameterProps, item);\r\n this.DynamicTableRouterLinkCache[item.hash + path] = link;\r\n return link;\r\n }\r\n }\r\n\r\n /**\r\n * Crea un router link\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n private getRouterLink(path: string, pars: string[], item: GenericItem): any {\r\n\r\n for (let i = 0; i < pars.length; i++)\r\n path = path.replace('{' + i + '}', item.properties[pars[i]]);\r\n\r\n path = path.replace(/'/g, '\"').replace(/ /g, '');\r\n return JSON.parse(path);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Paginazione in modalità Array\r\n\r\n /**\r\n * Equivalente del metodo **addToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public arrayAddToPage(page: number) {\r\n this.arrayGoToPage(this.arraymodePage + page)\r\n }\r\n\r\n /**\r\n * Equivalente del metodo **goToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public arrayGoToPage(page: number) {\r\n if (page === 0 || page > this.arraymodePages)\r\n return;\r\n this.arraymodePage = page;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Metodo per effettuare il refresh della paginazione sul cambiamento degli oggetti da visualizzare in una singola pagina.\r\n *\r\n * Vale solo per la modalità Array\r\n *\r\n * @param {number} pageSize Dimensione della pagina\r\n */\r\n public refreshPaging(pageSize: number) {\r\n this.ArraymodeItemsPerPage = pageSize;\r\n this.arraymodePages = Math.ceil((this.View as any[]).length / this.ArraymodeItemsPerPage);\r\n this.arraymodePage = 1;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Genera le informazioni di paginazione e taglia la View in modalità array per mostrare solo gli oggetti della pagina specificata\r\n */\r\n private adaptViewToPaging() {\r\n let tmpItems: any[] = [];\r\n this.arrayPulsanti = this.getPagesArray(6, this.arraymodePage, this.arraymodePages);\r\n\r\n // Poi per tutti i valori dopo compresi fra la pagina - 1 e la pagina\r\n for (let i = ((this.arraymodePage - 1) * this.ArraymodeItemsPerPage); i < this.arraymodePage * this.ArraymodeItemsPerPage; i++) {\r\n if (i <= (this.View as any[]).length - 1)\r\n tmpItems.push((this.View as any[])[i]);\r\n }\r\n return tmpItems;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione click sulle celle dinamiche e opzioni nel Corner Menu\r\n\r\n /**\r\n * Gestore dei click sulle celle per le quali era impostata una azione custom da **CustomCellActionsOn**\r\n *\r\n * @param {string} name Nome della cella su cui si è fatto click\r\n * @param {any} model Modello relativo alla cella cliccata\r\n *\r\n * @returns {boolean} **true** se il click è stato fatto su una cella cliccabile, **false** altrimenti\r\n */\r\n public cellClicked(name: string, model: any): boolean {\r\n if (this.UseCustomCellActions && this.CustomCellActionsOn.split('$').indexOf(name) != -1) {\r\n this.onCellClick.emit({ column: name, model: model });\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gestione dei click sulle opzioni del menù contestuale in alto a destra generato dall'Input **CornerMenuOptions**\r\n *\r\n * @param {string} cornerid Codice dell'operazione selezionata\r\n */\r\n public cornerActionClicked(cornerid: string) {\r\n this.onCornerAction.emit({ id: cornerid, estable: this });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Metodi di utilità\r\n\r\n /** Impostazione modalità dell'EsTable */\r\n private setMode(mode: 'array' | 'view' | 'report') {\r\n this.viewMode = mode == 'view';\r\n this.arrayMode = mode == 'array';\r\n this.reportMode = mode == 'report';\r\n\r\n if (this.reportMode) {\r\n // In modalità report ho di sicuro queste due\r\n this.XLSXExport = true;\r\n this.CSVExport = false;\r\n }\r\n }\r\n\r\n /**\r\n * Helper per effettuare chiamate interne di allineamento alla funzione **writeValue**, impostando prima **internalWriteCall** in modo da non effettuare operazioni inutili\r\n */\r\n private internalWriteValue() {\r\n this.internalWriteCall = true;\r\n this.writeValue(this.View);\r\n this.internalWriteCall = false;\r\n }\r\n\r\n /**\r\n * Date le informazioni di paginazione ottiene l'array dei pulsanti\r\n *\r\n * @param {number} maxBtns Numero massimo di pulsanti da visualizzare\r\n * @param {number} page Pagina corrente\r\n * @param {number} lastPage Ultima pagina disponibile\r\n *\r\n * @returns {any[]} Pseudo-array di pulsanti a cui ci si può bindare lato HTML\r\n */\r\n private getPagesArray(maxBtns: number, page: number, lastPage: number): any[] {\r\n let result = [];\r\n if (lastPage == -1)\r\n lastPage = page + 1;\r\n\r\n let min, max;\r\n if (lastPage <= maxBtns) {\r\n min = 1;\r\n max = lastPage - 1;\r\n } else {\r\n // tolgo la pagina selected è l'ultima pagina che è quella delle pagine totali\r\n let rangeOutside = (maxBtns - 2) / 2;\r\n\r\n min = page - rangeOutside;\r\n max = page + rangeOutside;\r\n\r\n if (min < 1) {\r\n min = 1;\r\n max = maxBtns - 1;\r\n } else if (max >= lastPage) {\r\n min = lastPage - maxBtns + 1;\r\n max = lastPage - 1;\r\n }\r\n }\r\n\r\n result.push({ val: 1, cssClass: (1 === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n if (max >= min) {\r\n for (let i = min; i <= max; i++)\r\n if (i !== 1)\r\n result.push({ val: i, cssClass: (i === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n result.push({\r\n val: lastPage,\r\n cssClass: (lastPage === page ? 'btn-main app-white-text' : 'app-white-button')\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Calcola l'hash di un oggetto qualsiasi\r\n *\r\n * @param {any[]} items Oggetti per cui calcolare l'hash\r\n */\r\n private calculateHash(items: any[]) {\r\n if (!items)\r\n return;\r\n\r\n // Supporto a hash duplicati di oggetti uguali\r\n let usedHashesCache: { [index: string]: number } = {};\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n\r\n // Prima di calcolare l'hash rimuovo le proprietà interne prima che mi scompensino i calcoli successivi\r\n delete item._selected;\r\n delete item.hash;\r\n\r\n let hash = this.hashExts.hashObject(item);\r\n usedHashesCache[hash] = usedHashesCache[hash] ? usedHashesCache[hash] + 1 : 1;\r\n item.hash = hash + (usedHashesCache[hash] > 1 ? \"_\" + usedHashesCache[hash] : \"\")\r\n }\r\n }\r\n\r\n /**\r\n * Metodo eventualmente richiamabile anche dal componente esterno che permette di forzare un refresh della tabella\r\n */\r\n public forceRefresh() {\r\n\r\n // Se sono in modalità View viene mantenuto in automatico il numero di pagina, ma per la modalità array devo prendere le info di paginazione prima e riapplicarle dopo\r\n let arrayPage: number;\r\n let arrayIpp: number;\r\n if (this.arrayMode) {\r\n arrayPage = this.arraymodePage;\r\n arrayIpp = this.ArraymodeItemsPerPage;\r\n }\r\n\r\n this.writeValue(this.View);\r\n this.cdr.detectChanges();\r\n\r\n if (this.arrayMode) {\r\n this.ArraymodeItemsPerPage = arrayIpp;\r\n this.arrayGoToPage(arrayPage);\r\n }\r\n }\r\n\r\n // #endregion\r\n}","/**\r\n * Modello di configurazione per L'EsTable\r\n */\r\nexport class EsTableModuleConfig{\r\n\r\n /**\r\n * Locale da utilizzare per i messaggi, supportati \"it-IT\" ed \"en-US\"\r\n */\r\n locale: string;\r\n}","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from '../tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **TablePagerComponent**\r\n */\r\n@Injectable()\r\nexport class TablePagerLoc extends LocalizationService {\r\n \r\n /**\r\n * @ignore\r\n */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE ?? 'it-IT');\r\n super.set(\"en->it\", \"All\", [\"Tutto\"]);\r\n super.set(\"en->it\", \"Are you sure you want to retrieve all results?\", [\"Si è sicuri di voler caricare tutti i risultati?\"]);\r\n super.set(\"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\"]);\r\n }\r\n}","// Angular\r\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { TablePagerLoc } from \"./table_pager.component.loc\";\r\n\r\n/**\r\n * Componente che si occupa della paginazione di una tabella\r\n */\r\n@Component({\r\n selector: \"app-paging\",\r\n viewProviders: [{ provide: LocalizationService, useClass: TablePagerLoc }],\r\n templateUrl: \"./table_pager.component.html\"\r\n})\r\nexport class TablePagerComponent {\r\n\r\n /**\r\n * Dimensione di pagina attuale\r\n */\r\n @Input() CurrentPageSize: any;\r\n\r\n /**\r\n * View gestita, che può essere un IAppSearch o una ReportView\r\n */\r\n @Input() View: any;\r\n\r\n /**\r\n * Indica se il componente di paginazione dev'essere nascosto o visibile\r\n */\r\n @Input() Hidden: boolean;\r\n\r\n /**\r\n * Indica se deve mostrare un warning quando si cercano di solezionare come elementi da visualizzare \"Tutti\"\r\n */\r\n @Input() WarnOnAll: boolean = true;\r\n\r\n /**\r\n * Indica se dare la possibilità o meno di selezionare \"Tutti\" nelle opzioni di paginazione\r\n */\r\n @Input() AllSearch: boolean = true;\r\n \r\n /**\r\n * Placeholder che identifica il \"Tutti\"\r\n */\r\n @Input() DefaultAll = 999999;\r\n\r\n /**\r\n * Output invocato quando il numero di elementi per pagina viene modificato da un click utente\r\n */\r\n @Output() pagingSelected = new EventEmitter<number>();\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgExts: MessageService, public lc: LocalizationService) { }\r\n\r\n /**\r\n * Funzione richiamata dal template quando un utente clicca su un numero di paginazione.\r\n * \r\n * Cliccare 2 volte sullo stesso numero causa comunque un refresh dei dati\r\n * \r\n * @param {number} pageSize Dimensione selezionata lato UI\r\n */\r\n public choice(pageSize: number) {\r\n if (pageSize == this.DefaultAll && this.WarnOnAll) {\r\n this.msgExts.simpleWarningWithChoice(\r\n this.lc.loc(\"Are you sure you want to retrieve all results?\"),\r\n this.lc.loc(\"This might slow down the page and possibly crash the entire application\"),\r\n () => { this.pagingSelected.emit(pageSize); });\r\n }\r\n else\r\n this.pagingSelected.emit(pageSize);\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { UtilityService, ExportService, HashingService, MessageService } from '@esfaenza/extensions';\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\n\r\nimport { EST_LOCALE } from './tokens';\r\nimport { EsTableModuleConfig } from './models/EsTableModuleConfig';\r\n\r\nimport { TablePagerComponent } from './pager/table_pager.component';\r\nimport { EsTableComponent } from './es_table.component';\r\nimport { EsTh } from './es_th.component';\r\nimport { EsTd } from './es_td.component';\r\n\r\nimport { ModalModule } from \"ngx-bootstrap/modal\";\r\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\r\nimport { CsvModule } from \"@ctrl/ngx-csv\";\r\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule, \r\n RouterModule, \r\n LocalizationModule, \r\n ModalModule, \r\n BsDropdownModule, \r\n CsvModule, \r\n ContextMenuModule\r\n ],\r\n declarations: [EsTh, EsTd, EsTableComponent, TablePagerComponent],\r\n providers: [UtilityService, ExportService, HashingService, MessageService],\r\n exports: [EsTh, EsTd, EsTableComponent, TablePagerComponent]\r\n})\r\nexport class EsTableModule {\r\n static forRoot(config?: EsTableModuleConfig): ModuleWithProviders<EsTableModule> {\r\n return {\r\n ngModule: EsTableModule,\r\n providers: [\r\n { provide: EST_LOCALE, useValue: config?.locale || 'it-IT' }\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of es-table\r\n */\r\n\r\nexport * from './lib/es_table.component';\r\nexport * from './lib/es_th.component';\r\nexport * from './lib/es_td.component';\r\nexport * from './lib/models/EsTableModuleConfig';\r\nexport * from './lib/es-table.module';\r\nexport * from './lib/domain';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {EsTableLoc as ɵa} from './lib/es_table.component.loc';\nexport {TablePagerComponent as ɵc} from './lib/pager/table_pager.component';\nexport {TablePagerLoc as ɵd} from './lib/pager/table_pager.component.loc';\nexport {EST_LOCALE as ɵb} from './lib/tokens';"],"names":["Component","ChangeDetectionStrategy","ElementRef","Renderer2","ViewContainerRef","DomSanitizer","Input","EventEmitter","Output","ViewChild","HostListener","InjectionToken","LocalizationService","Injectable","Optional","Inject","ViewEncapsulation","NgControl","Self","PreferencesService","ChangeDetectorRef","HashingService","UtilityService","ExportService","ContentChildren","forwardRef","ContentChild","MessageService","NgModule","CommonModule","FormsModule","RouterModule","LocalizationModule","ModalModule","BsDropdownModule","CsvModule","ContextMenuModule"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-es-table.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/es-table/src/lib/domain/classes/AppOrdering.ts","../../../projects/es-table/src/lib/domain/classes/AppSearch.ts","../../../projects/es-table/src/lib/domain/classes/EsTableColumnsDefinition.ts","../../../projects/es-table/src/lib/domain/classes/GenericItem.ts","../../../projects/es-table/src/lib/domain/classes/CornerMenuOption.ts","../../../projects/es-table/src/lib/domain/classes/ReportDefinition.ts","../../../projects/es-table/src/lib/domain/classes/ReportOrder.ts","../../../projects/es-table/src/lib/domain/classes/ReportColumn.ts","../../../projects/es-table/src/lib/domain/classes/ReportResult.ts","../../../projects/es-table/src/lib/domain/classes/ReportRow.ts","../../../projects/es-table/src/lib/domain/classes/ReportParam.ts","../../../projects/es-table/src/lib/domain/classes/EsTableOperationDefinition.ts","../../../projects/es-table/src/lib/domain/classes/EsTableColumn.ts","../../../projects/es-table/src/lib/domain/classes/ItemsSelection.ts","../../../projects/es-table/src/lib/es_td.component.ts","../../../projects/es-table/src/lib/es_th.component.ts","../../../projects/es-table/src/lib/tokens.ts","../../../projects/es-table/src/lib/es_table.component.loc.ts","../../../projects/es-table/src/lib/es_table.component.ts","../../../projects/es-table/src/lib/models/EsTableModuleConfig.ts","../../../projects/es-table/src/lib/pager/table_pager.component.loc.ts","../../../projects/es-table/src/lib/pager/table_pager.component.ts","../../../projects/es-table/src/lib/es-table.module.ts","../../../projects/es-table/src/public-api.ts","../../../projects/es-table/src/esfaenza-es-table.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**\r\n * Classe che identifica un ordinamento di una colonna\r\n */\r\nexport class AppOrdering {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id ID della colonna a cui si vogliono applicare ordinamenti, deve combaciare all'id messo nella dichiarazione dell'ES-TD/TH\r\n * @param {'DESC' | 'ASC' } order Ordinamento da applicare alla colonna, Discendente/Ascendente, default 'null' per indicare assenza di ordine\r\n */\r\n constructor(public id: string, public order?: 'DESC' | 'ASC') { }\r\n}","import { IAppSearch } from './IAppSearch';\r\nimport { AppOrdering } from './AppOrdering';\r\nimport { ItemsSelection } from './ItemsSelection';\r\n\r\n/**\r\n * Classe che identifica una ricerca paginata in tutte le sue sfumature (di grigio)\r\n */\r\nexport class AppSearch<T> implements IAppSearch<T> {\r\n\r\n /**\r\n * Costruttore che genera un'istanza coi valori di default e impostando **firstsearch** a **true**\r\n */\r\n constructor() {\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n this.searchinprogress = false;\r\n this.firstsearch = true;\r\n }\r\n\r\n /**\r\n * Indica se c'è una ricerca in corso\r\n */\r\n public searchinprogress: boolean;\r\n\r\n /**\r\n * Indica il numero totale di pagine trovate dalla ricerca. Ogni pagina è una lista di **itemsperpageoverride** oggetti\r\n */\r\n public pages: number;\r\n\r\n /**\r\n * Conteggio totale degli oggetti trovati (inclusi quelli in pagine non attualmente selezionate)\r\n */\r\n public objectcount: number;\r\n\r\n /**\r\n * Pagina attualmente in visualizzazione\r\n */\r\n public page: number;\r\n\r\n /**\r\n * Numero di oggetti da persentare in ogni pagina. Per convenzione si considera valorizzato a 15 se non fornito\r\n */\r\n public itemsperpageoverride: number;\r\n\r\n /**\r\n * Lista degli oggetti nella pagina attualmente in visualizzazione\r\n */\r\n public items: T[];\r\n\r\n /**\r\n * Lista di colonne per cui ordinare\r\n */\r\n public orders: AppOrdering[];\r\n\r\n /**\r\n * Lista di colonne da visualizzare\r\n */\r\n public columns: string[];\r\n\r\n /**\r\n * Lista di colonne nell'ordine corretto\r\n */\r\n public column_ordering: string[];\r\n\r\n /**\r\n * Indica se la ricerca era salvata. Qualora fosse questo il caso, al caricamento l'es-table si occuperà di ri-effettuare la ricerca ed aggiornare il modello\r\n */\r\n public savedstate: boolean;\r\n\r\n /**\r\n * Indica se bisogna ancora effettuare la prima ricerca\r\n */\r\n public firstsearch: boolean;\r\n\r\n /**\r\n * Oggetto che indica la selezione corrente. \r\n * \r\n * Se **all** è **true** vuole dire che è tutto selezionato ed eventualmente ci sono delle esclusioni (**exclusions**)\r\n * Se **all** è **false** vuol dire che sono selezionati **item** specifici\r\n * \r\n * In base all'Input **UseSelectionCache** le proprietà **exclusions** e **items** fanno riferimento o alla pagina corrente (se **false**) \r\n * o all'intera ricerca (se **true**)\r\n */\r\n public selection: ItemsSelection<T>;\r\n\r\n /**\r\n * Indica che la ricerca è stata richiesta dall'estable. Questa variabile NON deve essere toccata. È gestita al 100% dall'es-table. \r\n * \r\n * L'unica cosa che serve è che nel modello lato C# sia presente in modo da non perderla durante la serializzazione\r\n */\r\n public internalsearchrequest: boolean;\r\n\r\n /**\r\n * Permette di resettare questo oggetto ai valori di default\r\n */\r\n public reset() {\r\n this.pages = 1;\r\n this.objectcount = 0;\r\n this.searchinprogress = false;\r\n this.firstsearch = false;\r\n this.page = 1;\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n }\r\n}","/**\r\n * Classe che identifica una colonna. Utilizzata in modalità \"Colonne dinamiche\"\r\n */\r\nexport class EsTableColumnsDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} description Descrizione della colonna\r\n * @param {string} propertyName Nome della proprietà del modello in cui sono contenuti i dati da visualizzare per questa colonna\r\n * @param {string} routePath Route di navigazione. Es. \"['/pages/mod/mod_detail', { 'idItem': '{0}', 'idItem2' : '{1}' }]\"\r\n * @param {string[]} routeParameterProperties Proprietà da bindare a **routePath** per generare la route completa. \r\n * L'indice scritto in **routePath** è l'indice di accesso a questo array. Es. [\"iditem\", \"iditem2\"]\r\n * @param {'ASC' | 'DESC' } dataOrder Ordinamento dei dati presentati in questa colonna\r\n * @param {number} columnOrder Ordinamento di questa colonna\r\n * @param {boolean} visible Visibilità o meno della colonna\r\n * @param {string} clss Classe da applicare sia ai TD che ai TH relativi a questa colonna\r\n * @param {boolean} orderable Indica se la colonna è ordinabile o no (nel senso ASC / DESC / NONE)\r\n */\r\n constructor(public description: string,\r\n public propertyName: string,\r\n public routePath: string = null,\r\n public routeParameterProperties: string[] = null,\r\n public dataOrder: 'ASC' | 'DESC' = null,\r\n public columnOrder: number = null,\r\n public visible: boolean = true,\r\n public clss: string = null,\r\n public orderable: boolean = true) {\r\n\r\n }\r\n\r\n /**\r\n * Routerlink che verrà generato a runtime basandosi sulle informazioni di **routePath** e **routeParameterProperties**\r\n */\r\n public routerLink: any;\r\n}","/**\r\n * Classe che definisce un oggetto generico come lista di proprietà-valore\r\n */\r\nexport class GenericItem {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() {\r\n this._selected = false;\r\n this._rowClass = null;\r\n this.hash = null;\r\n this.properties = {};\r\n }\r\n\r\n /**\r\n * Dizionario delle proprietà dell'oggeto con il loro valore\r\n */\r\n properties: Record<string, string>;\r\n\r\n /**\r\n * Indica se l'oggetto in questione è selezionato o meno\r\n */\r\n _selected: boolean;\r\n\r\n /**\r\n * Viene valorizzato da un eventuale **RowClassAssigner** (o automaticamente se in modalità gerarchica) e serve applicare stili particolari alla intera riga\r\n */\r\n _rowClass: string;\r\n\r\n /**\r\n * Hash dell'oggetto per generare i contesti di bind all'interno dell'es-table (vedere eventualmente l'implementazione specifica)\r\n */\r\n hash: string;\r\n}","\r\n/**\r\n * Indica un'opzione cliccabile nel Corner Menù della tabella (il menù richiamabile dai 3 pallini verticli in alto a destra)\r\n */\r\nexport class CornerMenuOption {\r\n\r\n /**\r\n * Id dell'operazione. I callback relativi verranno effettuati con questo\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione dell'operazione da presentare all'utente\r\n */\r\n description: string;\r\n}","import { ReportParam, ReportOrder, ReportResult } from \"../\";\r\n\r\n/**\r\n * Definizione generica di un report che può o no disporre di paginazione/export e la cui richiesta è basata su uno o più parametri\r\n */\r\nexport class ReportDefinition {\r\n\r\n /**\r\n * Codice report\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione report\r\n */\r\n description: string;\r\n\r\n /**\r\n * Indica se questo report dispone/può disporre di paginazione\r\n */\r\n pagingavailable: boolean;\r\n\r\n /**\r\n * Pagina attualmente in visualizzazione\r\n */\r\n page: number;\r\n\r\n /**\r\n * Numero massimo di pagine\r\n */\r\n pages: number;\r\n\r\n /**\r\n * Numero di elementi per pagina, si consideri 15 in caso questo parametro non fosse assegnato\r\n */\r\n itemsperpageoverride: number;\r\n\r\n /**\r\n * Formato di Export disponibile\r\n */\r\n expformat: string;\r\n\r\n /**\r\n * Parametri del report\r\n */\r\n pars: ReportParam[];\r\n\r\n /**\r\n * Informazioni di ordinamento dati delle colonne relative al report\r\n */\r\n orders: ReportOrder[];\r\n\r\n /**\r\n * Risultato della ricerca di un report, equivalente all'**items** dell'AppSearch e nel formato specifico dei report\r\n */\r\n result: ReportResult;\r\n}","\r\n/**\r\n * Classe che identifica una direttiva di ordinamento per un report\r\n */\r\nexport class ReportOrder {\r\n\r\n /**\r\n * Ordine\r\n */\r\n order: string;\r\n\r\n /**\r\n * Colonna relativa\r\n */\r\n column: string;\r\n}","/**\r\n * Classe che rappresenta una colonna di un report\r\n */\r\nexport class ReportColumn {\r\n\r\n /**\r\n * Id della colonna\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione della colonna (Header)\r\n */\r\n description: string;\r\n\r\n /**\r\n * Colore in notazione HTML\r\n */\r\n color: string;\r\n\r\n /**\r\n * Tipo di campo contenuto in questa colonna\r\n */\r\n type: number;\r\n\r\n /**\r\n * Sequenza per eventuali ordinamenti\r\n */\r\n seq: number;\r\n\r\n /**\r\n * Ordinamento dei dati presentati\r\n */\r\n order: string;\r\n}","import { ReportColumn, ReportRow } from \"..\";\r\n\r\n/**\r\n * Classe che rappresenta una lista di oggetti generati da un report\r\n */\r\nexport class ReportResult {\r\n\r\n /**\r\n * Numero di oggetti generati\r\n */\r\n count: number;\r\n\r\n /**\r\n * Se il report è vuoto o no (essenzialmente è un **count == 0**)\r\n */\r\n empty: boolean;\r\n\r\n /**\r\n * Colonne del report (indicazione delle varie proprietà da mostrare e Header con cui mostrarli)\r\n */\r\n columns: ReportColumn[];\r\n\r\n /**\r\n * Righe del report: 1 riga = 1 oggetto\r\n */\r\n rows: ReportRow[];\r\n}\r\n","/**\r\n * Classe che rappresenta i valori delle proprietà di un oggetto Report\r\n */\r\nexport class ReportRow {\r\n \r\n /**\r\n * Valori dell'oggetto in ordine sequenziale\r\n */\r\n values: string[];\r\n}\r\n\r\n","\r\n/**\r\n * Classe che identifica un parametro generico per un report\r\n */\r\nexport class ReportParam {\r\n\r\n /**\r\n * Codice del parametro\r\n */\r\n id: string;\r\n\r\n /**\r\n * Descrizione del parametro\r\n */\r\n description: string;\r\n\r\n /**\r\n * Tipo enumerabile del parametro (qualora fosse un dizionario di valori)\r\n */\r\n enumtype: string;\r\n\r\n /**\r\n * Colonna relativa e questo parametro\r\n */\r\n column: string;\r\n\r\n /**\r\n * Tipo del dizionario\r\n */\r\n dictype: string;\r\n\r\n /**\r\n * Sequenza del parametro per ordinarlo logicamente rispetto agli altri\r\n */\r\n seq: number;\r\n\r\n /**\r\n * Typecode C# della tipologia di parametro\r\n */\r\n typecode: number;\r\n\r\n /**\r\n * Indica se i parametro è richiesto o meno\r\n */\r\n required: boolean;\r\n\r\n /**\r\n * Valore del parametro, offerto sia come valore di default o in alternativa riempito lato UI\r\n */\r\n value: any;\r\n\r\n /**\r\n * Indica se questo parametro si basa su un enum. Se questa proprietà è true mi aspetto che almeno **enumtype** sia valorizzato\r\n */\r\n isenum: boolean;\r\n\r\n /**\r\n * Indica se questo parametro si basa su un dizionario. Se questa proprietà è true mi aspetto che almeno **dictype** sia valorizzato\r\n */\r\n isdictionary: boolean;\r\n\r\n /**\r\n * Indica se il parametro è di tipo data\r\n */\r\n isdate: boolean;\r\n\r\n /**\r\n * Indica se il parametro è di tipo boolean\r\n */\r\n isboolean: boolean;\r\n\r\n /**\r\n * Indica un filtro da applicare nei confronti del Backend qualora si vogliano caricare solo le possibilità logicamente accettabili per questo parametro\r\n */\r\n dictionaryfilter: string;\r\n\r\n /**\r\n * Valori disponibili per questo parametro, da valorizzare in caso **enumtype** o **dictype** fossero valorizzati\r\n */\r\n availablevalues: {\r\n id: string;\r\n description: string;\r\n }[];\r\n\r\n /**\r\n * Tipologia lato \"typescript\" di questo parametro, dev'essere sempre logicamente congruente al **typecode**\r\n */\r\n type: \"string\" | \"number\" | \"date\" | \"boolean\";\r\n\r\n /**\r\n * Eventuale pattern di validazione per questo parametro\r\n */\r\n pattern: string;\r\n}","\r\n/**\r\n * Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella\r\n */\r\nexport class EsTableOperationDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice dell'operazione\r\n * @param {string} title Titolo dell'operazione, da presentare all'utente su hover della cella\r\n * @param {string} iconClass Classe che fornisca un iconcina Es. \"fa fa-remove\"\r\n * @param {string} text Eventuale testo presentato nella cella, genericamente va in alternativa a **iconClass**\r\n * @param {string} conditionField Indica il campo dell'oggetto sottostante su cui verificare la visibilità o meno di questa icona\r\n * @param {string} conditionValue Indica il valore che la proprietà **conditionField** dell'oggetto sottostante deve assumere affinché questa opzione si veda\r\n */\r\n constructor(public id: string, \r\n public title: string, \r\n public iconClass?: string, \r\n public text?: string, \r\n public conditionField?: string, \r\n public conditionValue?: string) {\r\n }\r\n}","\r\n/**\r\n * Definizione di una colonna\r\n */\r\nexport class EsTableColumn {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Id colonna\r\n * @param {string} description Descrizione (Header)\r\n * @param {boolean} visible Indica se di default mostrarla o meno\r\n */\r\n constructor(public id: string, public description: string, public visible: boolean) { }\r\n}\r\n","/**\r\n * Identifica una selezione applicabile agli oggetti presentati in una tabella\r\n */\r\nexport class ItemsSelection<T> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {T[]} selected Oggetti da considerare selezionati\r\n */\r\n constructor(selected: T[]) { \r\n this.count = selected.length;\r\n this.items = selected;\r\n this.all = false;\r\n this.exclusions = [];\r\n }\r\n\r\n /**\r\n * Conteggio degli oggetti selezionati\r\n */\r\n public count: number;\r\n\r\n /**\r\n * Se **all** + **false** indica gli elementi da includere, altrimenti è insensato\r\n */\r\n public items: T[]\r\n\r\n /**\r\n * Indica se tutti gli elementi sono da considerarsi selezionati (anche quelli di altre pagine)\r\n */\r\n public all: boolean = false;\r\n\r\n /**\r\n * Se **all** è **true**, indica gli elementi da escludere, altrimenti è insensato\r\n */\r\n public exclusions: T[] = [];\r\n}\r\n","//Angular\r\nimport { Component, Input, Renderer2, ElementRef, ViewContainerRef, ChangeDetectionStrategy } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n/**\r\n * Componente rappresentante una singola cella del body della tabella\r\n */\r\n@Component({\r\n selector: \"[es-td]\",\r\n templateUrl: \"./es_td.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTd {\r\n \r\n /**\r\n * Id della cella, dev'essere lo stesso della colonna **EsTh** relativa\r\n */\r\n @Input('es-td') ID: string = \"\";\r\n\r\n /**\r\n * Indica se è una cella interna (rigenerata programmaticamente) o no\r\n */\r\n @Input() Internal?: boolean;\r\n\r\n /**\r\n * RouterLink qualora il click su questa cella debba navigare da qualche parte\r\n */\r\n @Input() RouterLink?: any;\r\n\r\n /**\r\n * Valore da mostrare all'interno della cella. Se omesso verrà proiettato il contenuto dal template in cui è stata usata\r\n */\r\n @Input() Display?: string = null;\r\n\r\n /**\r\n * Template Angular da istanziare per questo TD\r\n */\r\n @Input() Template?: any = null;\r\n\r\n /**\r\n * Classi da applicare alla cella\r\n */\r\n public Class?: string;\r\n\r\n /**\r\n * Contenuto da mostrare proiettato dal componente padre\r\n */\r\n public Content?: SafeHtml;\r\n\r\n /**\r\n * Contesto dell'oggetto a cui si riferisce il dato visualizzato. Contiene l'hash dell'oggetto in questione\r\n */\r\n public Context: string;\r\n\r\n /**\r\n * Indicazioni sulla visibilità della cella\r\n */\r\n private _Visible?: boolean;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private myself: ElementRef, private renderer: Renderer2, private _viewContainer: ViewContainerRef, protected sanitizer: DomSanitizer) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della cella, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della cella in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngAfterViewInit() {\r\n // Se è Internal significa che è gestita internamente da ES-TABLE quindi evito di fare sti due passaggi di lettura del DOM\r\n if (this.Internal)\r\n return;\r\n\r\n // 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\r\n let vc = (<any>this._viewContainer);\r\n\r\n let context;\r\n // Primo giro di recupero del contesto, supponendo di non avere a che fare col compilatore IVY\r\n if (vc._view == null)\r\n context = null;\r\n else if (vc._view.parent && !vc._view.context.$implicit && vc._view.parent.context && vc._view.parent.context.$implicit)\r\n context = vc._view.parent.context.$implicit;\r\n else if (vc._view.context && vc._view.context.ngIf)\r\n context = vc._view.viewContainerParent.context.$implicit;\r\n else\r\n context = vc._view.context.$implicit;\r\n\r\n // Se non ho ancora trovato il contesto probabilmente sono in IVY e devo fare dei lookup un po' incasinati per beccarlo\r\n if (context == null) {\r\n var array = (<any>this._viewContainer)._hostLView;\r\n for (let i = 0; i < array.length; i++) {\r\n let item = array[i];\r\n if (item && item.$implicit && !item.ngIf) {\r\n context = item.$implicit;\r\n break;\r\n }\r\n\r\n // Second level search for the real context in case the first one we find is an ngIf\r\n if(item && item.length && item.length > 0)\r\n {\r\n for (let ii = 0; ii < item.length; ii++) {\r\n let iitem = item[ii];\r\n if (iitem && iitem.$implicit && !iitem.ngIf) {\r\n context = iitem.$implicit;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(context)\r\n break;\r\n }\r\n }\r\n\r\n // Calcolato dalla ES-table in fase di binding\r\n let hash = context.hash;\r\n\r\n this.Context = hash;\r\n this.Content = this.Display === null || this.Display === \"\" ? this.sanitizer.bypassSecurityTrustHtml(this.myself.nativeElement.innerHTML) : this.sanitizer.bypassSecurityTrustHtml(this.Display);\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n }\r\n}","//Angular\r\nimport { Component, Input, Output, EventEmitter, ElementRef, ViewChild, Renderer2, HostListener, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/**\r\n * Componente rappresentante una Colonna della tabella\r\n */\r\n@Component({\r\n selector: \"[es-th]\",\r\n templateUrl: \"./es_th.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTh {\r\n\r\n /**\r\n * Dizionario di mappatura con ordinamento attuale e ordinamento successivo per gestire i passaggi di stato\r\n */\r\n private orderNext: { [index: string]: 'DESC' | 'ASC' | null } = { \"NONE\": \"DESC\", \"DESC\": \"ASC\", \"ASC\": null };\r\n\r\n /**\r\n * Indicazione sulla visibilità della colonna\r\n */\r\n private _Visible: boolean;\r\n\r\n /**\r\n * Indica se si sta effettuando un'operazione di resize su questa colonna\r\n */\r\n private resizingThis: boolean = false;\r\n\r\n /**\r\n * Storicizza l'offset di partenza del resize dell'elemento HTML per poter calcolare la nuova dimensione richiesta durente il resize \r\n * \r\n * nuova width = startOffset + posizione X del mouse\r\n */\r\n private startOffset: number = null;\r\n\r\n /**\r\n * Id della colonna, dev'essere lo stesso per tutti gli **EsTd** relativi\r\n */\r\n @Input('es-th') ID: string = \"\";\r\n\r\n /**\r\n * Ordinamento attuale della colonna\r\n */\r\n @Input() Order?: 'DESC' | 'ASC';\r\n \r\n /**\r\n * Indica se questa colonna è ordinabile o meno\r\n */\r\n @Input() Orderable: boolean = true;\r\n\r\n /**\r\n * Valore da mostrare all'interno della colonna. Se omesso verrà proiettato il contenuto dal template in cui è stata usata\r\n */\r\n @Input() Display: string =\"\";\r\n\r\n /**\r\n * Indica se le dimnsioni di questa colonna sono modificabili o meno\r\n */\r\n @Input() Resizable: boolean = false;\r\n\r\n /**\r\n * Indica se è una colonna interna (rigenerata programmaticamente) o no\r\n */\r\n @Input() Internal: boolean;\r\n\r\n /**\r\n * Indica se sta venendo eseguita una operazione di ricerca o meno, serve per evitare l'esecuzione di eventuale codice che potrebbe dare fastidio \r\n * come ad esempio l'escuzione di un ordinamento durante il caricamento di dati nuovi\r\n */\r\n @Input() SearchInProgress: boolean = false;\r\n\r\n /**\r\n * Impostato dall'**EsTable**, serve per permettere o meno di effettuare ordinamenti dati su questa colonna\r\n */\r\n @Input() OrderBy: boolean;\r\n\r\n /**\r\n * Evento emesso al cambio di ordinamento effettuato su questa colonna\r\n */\r\n @Output() public onOrderChange: EventEmitter<'DESC' | 'ASC' | null> = new EventEmitter<'DESC' | 'ASC' | null>();\r\n\r\n /**\r\n * Proiezione del contenuto di questa colonna\r\n */\r\n @ViewChild(\"content\", { static: false }) content: ElementRef;\r\n\r\n /**\r\n * Classi da applicare alla colonna\r\n */\r\n public Class: string;\r\n\r\n /**\r\n * Impostato dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header\r\n */\r\n public Referenced: boolean = false;\r\n\r\n /**\r\n * Variabile finale su cui è bindato il contenuto della cella. Sarà valorizzato a **Display** se specificato, all'**innerHTML** dell'elemento proiettato altrimenti\r\n */\r\n public Description: string;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private myself: ElementRef, private renderer: Renderer2) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della colonna, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della colonna in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngAfterViewInit() {\r\n //Assegnare direttamente il content è più veloce che passare dal native element per qualche motivo\r\n this.Description = this.Display === null || this.Display === \"\" ? this.content.nativeElement.innerText : this.Display;\r\n\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n\r\n //Resize\r\n if (this.Resizable)\r\n this.renderer.addClass(this.myself.nativeElement, \"app-relative\");\r\n }\r\n\r\n /**\r\n * Gestisce la modifica dell'ordinamento qualora venisse cliccato su questa colonna\r\n */\r\n setupNextOrderAndNotify() {\r\n if (!this.ID) {\r\n console.log(\"Attempt to order a column without ID. Operation ignored\");\r\n return;\r\n }\r\n\r\n if(this.SearchInProgress)\r\n {\r\n console.log(\"Attempt to order a column during a search. Operation ignored\");\r\n return;\r\n }\r\n\r\n if (!this.OrderBy || !this.Orderable)\r\n return;\r\n\r\n var nextOrder = this.orderNext[this.Order || \"NONE\"];\r\n this.Order = nextOrder;\r\n\r\n this.onOrderChange.emit(this.Order);\r\n }\r\n\r\n /**\r\n * Evento di inizio resize della colonna\r\n * \r\n * @param {any} ev Evento MouseDown\r\n */\r\n onResizeStart(ev) {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = true;\r\n this.startOffset = this.myself.nativeElement.offsetWidth - ev.pageX;\r\n }\r\n\r\n /**\r\n * Listener per la fine dell'operazione di resize\r\n */\r\n @HostListener('window:mouseup.out-zone')\r\n public onMouseUp(): void {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = false;\r\n }\r\n\r\n /**\r\n * Listener per gestire il movimento del mouse qualora un'operazione di resize fosse in esecuzione\r\n * \r\n * @param {$event} ev Evento MouseMove\r\n */\r\n @HostListener('window:mousemove.out-zone', ['$event'])\r\n public onMouseMove($event): void {\r\n if (!this.Resizable || !this.resizingThis)\r\n return;\r\n\r\n //Uso jquery per non dover far partire un intero ciclo di change detection solo per fare un resize del cazzo\r\n //(anche perché viene lanciato ogni 0.1 secondo quindi not a good idea)\r\n this.myself.nativeElement.style.width = (this.startOffset + $event.pageX) + \"px\";\r\n\r\n //Fermo il bubbling per non fare cose strane\r\n $event.preventDefault();\r\n }\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il locale da utilizzare all'interno del componente. Supportati solo \"it-IT\" ed \"en-US\"\r\n */\r\nexport const EST_LOCALE: InjectionToken<string> = new InjectionToken<string>('EST_LOCALE');","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from './tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsTableComponent**\r\n */\r\n@Injectable()\r\nexport class EsTableLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) { \r\n super(LOC_LOCALE ?? 'it-IT');\r\n \r\n super.set(\"en->it\", \"Performing Table bootstrap\", [\"Sto caricando la Tabella\"]);\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Export View\", [\"Esporta Vista\"]);\r\n super.set(\"en->it\", \"Column Name\", [\"Nome Colonna\"]);\r\n super.set(\"en->it\", \"Columns Order\", [\"Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Columns Visibility\", [\"Visibilità Colonne\"]);\r\n super.set(\"en->it\", \"There are no columns configured to be hidden/shown in this view\", [\"Non ci sono colonne configurate per essere visualizzate/nascoste in questa vista dati\"]);\r\n super.set(\"en->it\", \"Columns Visibility and Order\", [\"Visibilità e Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Objects Selected\", [\"Oggetti Selezionati\"]);\r\n super.set(\"en->it\", \"Object Selected\", [\"Oggetto Selezionato\"]);\r\n super.set(\"en->it\", \"Select Everything\", [\"Seleziona Tutto\"]);\r\n super.set(\"en->it\", \"Reset Selection\", [\"Resetta Selezione\"]);\r\n super.set(\"en->it\", \"No operations available\", [\"Nessuna operazione disponibile\"]);\r\n super.set(\"en->it\", \"Paging options are not available for this report\", [\"Le opzioni di paginazione non sono disponibili per questo report\"]);\r\n }\r\n}","// Angular\r\nimport {\r\n Component, forwardRef, ContentChildren, QueryList, ChangeDetectorRef, ChangeDetectionStrategy, Input,\r\n EventEmitter, Output, ContentChild, OnChanges, SimpleChanges, ViewChild, ElementRef, ViewEncapsulation, Optional, Self\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\n// Configurazioni\r\nimport { HashingService, UtilityService, ExportService } from '@esfaenza/extensions';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\nimport { PreferencesService } from '@esfaenza/preferences';\r\n\r\n// Plugins\r\nimport { ContextMenuComponent } from '@esfaenza/ngx-contextmenu';\r\n\r\n// Modelli\r\nimport {\r\n IAppSearch, AppSearch, AppOrdering, GenericItem, EsTableColumnsDefinition, CornerMenuOption,\r\n ReportDefinition, ReportResult, ReportOrder, ReportColumn, EsTableOperationDefinition, EsTableColumn\r\n} from './domain';\r\n\r\n// Componenti e Localizzazione\r\nimport { EsTd } from './es_td.component';\r\nimport { EsTh } from './es_th.component';\r\nimport { EsTableLoc } from './es_table.component.loc';\r\nimport { ItemsSelection } from './domain/classes/ItemsSelection';\r\n\r\n/** Componente che permette di rappresentare una griglia di valori */\r\n@Component({\r\n selector: 'es-table',\r\n viewProviders: [{ provide: LocalizationService, useClass: EsTableLoc }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: ['./es_table.component.scss'],\r\n templateUrl: './es_table.component.html'\r\n})\r\nexport class EsTableComponent implements ControlValueAccessor, OnChanges {\r\n\r\n /** @ignore */\r\n constructor(@Self() @Optional() public ngControl: NgControl, @Optional() private prefService: PreferencesService, public lc: LocalizationService, private cdr: ChangeDetectorRef, private hashExts: HashingService, private utiExts: UtilityService, private expExts: ExportService) {\r\n if (ngControl)\r\n ngControl.valueAccessor = this;\r\n }\r\n\r\n /** View finale su cui bindarsi lato Frontend, il tipo può essere IAppSearch<any> (per la **viewMode**), any[] (per l'**arrayMode**) e ReportDefinition per la **reportMode** */\r\n public View: any = null;\r\n\r\n /** Modello da cui l'es-table mostra i pulsanti di paginazione in basso a destra */\r\n public arrayPulsanti: any;\r\n\r\n /** Indica se l'es-table deve mostrare il check globale nell'header per fare il \"seleziona tutto\" */\r\n public globalCheck = false;\r\n\r\n /**\r\n * Tiene da conto l'ultimo elemento selezionato in modo da fare ragionamenti del tipo\r\n * \"Ho selezionato questo, l'ultimo selezionato era **lastSelected**, devo selezionare tutti quelli in mezzo\", ad esempio per la selezione multipla\r\n */\r\n private lastSelected: any = null;\r\n\r\n /** Conteggio interno per il numero di elementi selezionati */\r\n public selectedObjects = 0;\r\n\r\n /** Indica se è possibile effettuare una selezione massiva */\r\n public canSelectAll = false;\r\n\r\n /** Indica se il componente sta gestendo un IAppSearch<any> */\r\n public viewMode = false;\r\n\r\n /** Indica se il componente sta gestendo un any[] */\r\n public arrayMode = false;\r\n\r\n /** Indica se il componente sta gestendo un ReportDefinition */\r\n public reportMode = false;\r\n\r\n /**\r\n * Contenitore degli elementi da listare lato interfaccia dopo tutte le elaborazioni del caso,\r\n * generalmente non sono altro che tutti gli oggetti da presentare con in più l'hash calcolato per identificare 1 oggetto con la propria riga\r\n */\r\n public boundSource: any[] = [];\r\n\r\n /** Stessa cosa della **boundSource**, utilizzata come appoggio temporaneo interno */\r\n public TMPBoundSource: any[] = [];\r\n\r\n /** \"Fetta\" di oggetti utilizzata nell'endless scroll, ogni elemento di questo array è un blocchetto di 100 elementi */\r\n public boundSubSources: any[] = [];\r\n\r\n /** Questa funge da indicatore per gli slice inseriti, la lunghezza dovrebbe essere corrispondente a **boundSubSources** */\r\n public addedSlices: number[] = [];\r\n\r\n /** Variabile che identifica il valore del \"seleziona Tutto\" nella paginazione */\r\n public defaultAllPageOverride = 999999;\r\n\r\n /** Indica se utilizzare il sistema di Endless Scroll */\r\n public UseEndlessscroll: boolean;\r\n\r\n /** Valori dell'eventuale report in visualizzazione */\r\n public ReportValues: ReportResult;\r\n\r\n /** Serve per tenere in memoria il conteggio precedente e recuperarlo in caso diventi -2 (verificare con Ale perché la logica del -2) */\r\n public previousCount: number;\r\n\r\n /** Indica se utilizzare il sistema di autoupdate, cioè un trigger time-izzato in alto a destra della tabella che ripete le ricerche ogni X **seconds** */\r\n public autoUpdate = false;\r\n\r\n /** Numero di secondi da fare trascorrere fra una ricerca e l'altra */\r\n public seconds = '10';\r\n\r\n /** Riferimento all'Interval che viene generato se **autoUpdate** è impostata a true in modo da poterlo ripulire */\r\n public updateTimer: any;\r\n\r\n /** Impostata a true ogni volta che viene avviata una ricerca, e a false ogni volta che un nuovo valore viene ricevuto */\r\n public researchInProgress: boolean = false;\r\n\r\n /** Modello rappresentante un singolo td della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTDs: { [context: string]: EsTd[] } = null;\r\n\r\n /** Modello di appoggio temporaneo per i **RowTDs** */\r\n public TMPRowTDs: { [context: string]: EsTd[] } = null;\r\n\r\n /** Modello rappresentante un singolo th della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTHs: { ID: string, Visible: boolean, Class: string, Content: string, Order: string, Orderable: boolean }[] = null;\r\n\r\n /** Modello di appoggio temporaneo per i **RowTHs** */\r\n public TMPRowTHs: { ID: string, Visible: boolean, Class: string, Content: string, Order: string, Orderable: boolean }[] = null;\r\n\r\n /** Cache per i routerLink generati nelle tabelle dinamiche */\r\n public DynamicTableRouterLinkCache: {} = {};\r\n\r\n /**\r\n * Lista dei contesti. Un contesto non è altro che un hash particolare calcolato su un oggetto che identifica univocamente tale oggetto.\r\n *\r\n * Ognuno di questi contesti rappresenterà a sua volta, univocamente, una riga all'interno della tabella\r\n */\r\n public RowContexts: any[] = [];\r\n\r\n /** Direttive di ordinamento delle colonne (non ordinamento dei dati ma delle colonne in se) */\r\n public OrderDirectives: string[] = [];\r\n\r\n /** Codice dell'ultimo oggetto solezionato */\r\n public lastSelectedItemID = null;\r\n\r\n /**\r\n * Indica se oltre alle colonne dinamiche specifiche di un tipo di oggetto ci sono anche colonne dinamiche aggiunte dall'utente\r\n *\r\n * Es. una colonna in cui mostrare sempre un iconcina\r\n */\r\n public UserDefinedDynamicCols: boolean = false;\r\n\r\n /** Indica che questo è il primo Bind della tabella, viene settato a false non appena il primo bind viene terminato con successo */\r\n public FirstBind: boolean = true;\r\n\r\n /** Lista di colonne che si possono visualizzare/ordinare fra di loro */\r\n public ColumnsList: EsTableColumn[] = [];\r\n\r\n /** Variabile d'appoggio usata dalla dialog di selezione/nascondimento, per evitare di danneggiare **ColumnsList** in caso di modifiche poi annullate */\r\n public TMPColumnsList: EsTableColumn[] = [];\r\n\r\n /** Valore del check globale di visibilità valido per tutte le colonne in **ColumnsList** */\r\n public globalColVisCheck = false;\r\n\r\n /** Contenitore di tutte le sottoscrizioni alle variazioni di ordine dei th che vengono create, registrate e gestite automaticamente dall'es-table */\r\n private EsThsOrderChangeSubscriptions: any[] = [];\r\n\r\n /** Query per recuperare tutti gli es-th */\r\n @ContentChildren(forwardRef(() => EsTh)) private EsThs: QueryList<EsTh>;\r\n\r\n /** Query per recuperare tutti gli es-td */\r\n @ContentChildren(forwardRef(() => EsTd)) private EsTds: QueryList<EsTd>;\r\n\r\n /** Query per recuperare le informazioni del body (punto della tabella dove vengono mostrate le righe) */\r\n @ContentChild('body', { static: false }) public templateRef: any;\r\n\r\n /** Query per recuperare le informazioni dell'header (punto della tabella dove vengono mostrate le intestazioni delle righe) */\r\n @ContentChild('header', { static: false }) public templateRefHeader: any;\r\n\r\n /** Query per recuperare le informazioni sul raggruppamento degli header */\r\n @ContentChild('headerGroup', { static: false }) public templateRefHeaderGroup: any;\r\n\r\n /** Query per recuperare le informazioni sul raggruppamento di secondo livello degli header */\r\n @ContentChild('secondaryHeaderGroup', { static: false }) public templateRefSecondaryHeaderGroup: any;\r\n\r\n /** Opzioni extra che devono apparire nel Menù contestuale in alto a destra, richiamato dai 3 pallini verticali */\r\n @Input() CornerMenuOptions: CornerMenuOption[] = null;\r\n\r\n /** Indica se dev'essere possibile effettuare il resize delle colonne */\r\n @Input() ColumnsResizable = false;\r\n\r\n /** Indica se dev'essere disponibile il sistema di aggiornamento automatico */\r\n @Input() AutoUpdate = false;\r\n\r\n /** Indica se la tabella (configurata con **UseCustomCells**) deve mettersi in ascolto per i click sulle celle desiderate\r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() UseCustomCellActions = false;\r\n\r\n /**\r\n * Indica le celle desiderate su cui intercettare i click. Attiva solo quando **UseCustomCellActions** è true.\r\n * Ogni cella dev'essere separata dalla successiva dal carattere del Simoleon:\r\n *\r\n * Es, \"MiaCella1§MiaCella2\"\r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() CustomCellActionsOn = '';\r\n\r\n /** Serve per decidere di lanciare o meno il **event.stopPropagation()** al termine della gestione dell'evento */\r\n @Input() CellActionPropagates = true;\r\n\r\n /**\r\n * Decide se utilizzare o meno le CustomCells. Impostandolo a **true** l'es-table diventa in grado di gestire nativamente:\r\n *\r\n * 1) Ordinamento e visibilità delle colonne\r\n *\r\n * 2) Ordinamento dei dati\r\n *\r\n * 3) Modalità Gerarchica\r\n *\r\n * ecc...\r\n */\r\n @Input() UseCustomCells = false;\r\n\r\n /** Permette di impostare l'altezza massima della tabella. Se null la dimensione si adatta al numero di elementi attualmente in visualizzazione */\r\n @Input() MaxHeight: number = null;\r\n\r\n /** Classi da applicare alla tabella oltre a quelle gestite autonomamente dalla libreria */\r\n @Input() Class = '';\r\n\r\n /** Permette o meno l'export in formato XLSX */\r\n @Input() XLSXExport = false;\r\n\r\n /** Permette o meno l'export in formato CSV */\r\n @Input() CSVExport = true;\r\n\r\n /** Permette di visualizzare o meno l'opzione di paginazione \"Tutti\" */\r\n @Input() AllSearch = true;\r\n\r\n /** Diminuisce gli spazi fra una cella e l'altra, e internamente il padding del font in modo da presentare molti più dati in un'unica pagina */\r\n @Input() HighCellDensity = false;\r\n\r\n /** Abilita o meno la possibilità di selezionare oggetti */\r\n @Input() Selection = false;\r\n\r\n /** Mostra o meno un messaggio di Loading al primo caricamento della tabella */\r\n @Input() ShowLoadingOnBootstrap = false;\r\n\r\n /** Se impostato a **true** aggiunge una colonna con pulsante di eliminazione per effettuare l'elimina dell'oggetto relativo */\r\n @Input() Removal = false;\r\n\r\n /**\r\n * Condizione che nasconde l'icona di eliminazione inserita impostando **Removal** a true qualora la condizione non venisse rispettata\r\n *\r\n * Come condizione si considera un semplice campo su cui effettuare un controllo booleano, come ad esempio \"canremove\"\r\n */\r\n @Input() RemovalCondition = '';\r\n\r\n /** Indica se abilitare la possibilità di esportare la vista dati attuale */\r\n @Input() Export = false;\r\n\r\n /** Indica se permettere la selezione multipla Windows-like cliccando un oggetto e facendo poi Shift + click su un oggetto successivo */\r\n @Input() ShiftClick = false;\r\n\r\n /** Mostra o nasconde le informazioni di paginazione, sia i pulsanti, sia il selettore degli oggetti per pagina */\r\n @Input() ShowPaging = true;\r\n\r\n /** Indica se nascondere o mostrare il componente di paginazione */\r\n @Input() HidePaging = false;\r\n\r\n /** Indica se nascondere o mostrare il conteggio degli elementi trovati */\r\n @Input() HidePagingCount = false;\r\n\r\n /** Indica se nascondere o mostrare i pulsanti di paginazione */\r\n @Input() HidePagingButtons = false;\r\n\r\n /** Riferimento al ContextMenu (ngx-contextmenu) associato al click destro di uno o più elementi selezionati nella tabella */\r\n @Input() ContextMenu: ContextMenuComponent = null;\r\n\r\n /** Nome dell'esportazione generata da questa tabella */\r\n @Input() ExportFileName = 'Export.csv';\r\n\r\n /** Classe (HTML) di default della tabella */\r\n @Input() TableClass = 'table table-striped table-hover table-sm';\r\n\r\n /** Testo da visualizzare nel conteggio. Di default: \"Oggetti selezionati\" */\r\n @Input() CountLabel: string = this.lc.loc('Found objects');\r\n\r\n /**\r\n * Funzione da utilizzare in esportazione. Nel formato \"Report\" avrà un unico parametro \"Formato\" e nessun valore di ritorno.\r\n *\r\n * Nel formato \"View\" ha come parametro una callback con i dati completi da esportare (dato che di default la ricerca è paginata)\r\n */\r\n @Input() ExportFunction: any;\r\n\r\n /** Indica la presenza di raggruppamenti a livello di header */\r\n @Input() HasHeaderGroup = false;\r\n\r\n /** Indica la presenza di raggruppamenti a livello del raggruppamento precedentemente esistente, chiaramente è insensata senza **HasHeaderGroup** */\r\n @Input() HasSecondaryHeaderGroup = false;\r\n\r\n /** Utilizzato per dividere la sorgente in modalità EndlessScroll */\r\n @Input() SliceSize = 100;\r\n\r\n /** Decide se utilizzare la modalità di EndlessScroll */\r\n @Input() EndlessScroll = false;\r\n\r\n /** Qualora **EndlessScroll** fosse true, indica se utilizzare questa modalità solo quando si cerca per \"Tutti\" o in generale */\r\n @Input() EndlessScrollOnlyForAll = true;\r\n\r\n /** Indica se nascondere gli Header della tabella */\r\n @Input() HeaderHidden = false;\r\n\r\n /** Indica se nascondere il Body della tabella */\r\n @Input() BodyHidden = false;\r\n\r\n /**\r\n * Indica se la selezione è temporaneamente disabilitata. Rispetto all'Input **Selection** che visivamente gestisce se ci sono o no gli input di selezione,\r\n * questo Input gestisce se questi input sono abilitati o meno\r\n */\r\n @Input() SelectionDisabled = false;\r\n\r\n /**\r\n * Indica se forzare il sistema di selezione a gestire un elemento per volta.\r\n * Selezionare un'altra riga con una già selezionata applicherà la selezione alla nuova riga, rimuovendola dall'attuale\r\n */\r\n @Input() SingleSelection = false;\r\n\r\n /** Callback che dato un oggetto resituisce l'eventuale classe da applicare alla riga collegata all'oggetto */\r\n @Input() RowClassAssigner: any = null;\r\n\r\n /** Permette di ordinare i dati in maniera discendente o ascendente */\r\n @Input() OrderByColumn = false;\r\n\r\n /** Permette di avere più direttive di ordinamento dei dati */\r\n @Input() MultipleOrderingDirectives = true;\r\n\r\n /** Permette di nascondere le colonne in base alle selezioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() HiddenColumns = false;\r\n\r\n /** Permette di riordinare le colonne in base alle impostazioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() ColumnsOrdering = false;\r\n\r\n /**\r\n * Eventuale supporto alle ricerche applicate alla modalità Array\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() SearchView = null as IAppSearch<any>;\r\n\r\n /** Abilita o disabilita il sistema che permette di selezionare tutti gli elementi nella vista */\r\n @Input() SelectAll = false;\r\n\r\n /** Simula la paginazione anche per le tabelle che funzionano in modalità Array */\r\n @Input() UseArrayModePaging = true;\r\n\r\n /** Definizione di colonne dinamche per la modalità, appunto, dinamica */\r\n @Input() DynamicRowColumnsDefinition: EsTableColumnsDefinition[] = null;\r\n\r\n /** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */\r\n @Input() DynamicOperations: EsTableOperationDefinition[] = [];\r\n\r\n /** Indica se visualizzare i dati in maniera gerarchica */\r\n @Input() Hierarchy = false;\r\n\r\n /** Nome della proprietà che contiene l'ID del padre. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() ParentKey = '';\r\n\r\n /** Nome della proprietà che contiene l'ID dell'oggetto attuale. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() OwnKey = '';\r\n\r\n /** Indica se partire con un albero espanso. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() StartsExpanded = true;\r\n\r\n /** Indica se effettuare il salvataggio delle preferenze di ricerca */\r\n @Input() SavePreferences = false;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() SecondarySource = false;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() TertiarySource = false;\r\n\r\n /** Indica se utilizzare la cache di selezione che permette di mantenere gli stati di selezione dei vari oggetti navigando da una pagina all'altra */\r\n @Input() UseSelectionCache = true;\r\n\r\n /** Evento che viene richiamato al cambio di oridnamento di una colonna */\r\n @Output() onOrderChanged: EventEmitter<AppOrdering> = new EventEmitter<AppOrdering>();\r\n\r\n /**\r\n * Evento che viene richiamato quando l'es-table ritiene sia necessario ri-effettuare la ricerca.\r\n * Il booleano dell'evento indica se viene suggerito di resettare la pagina o meno\r\n */\r\n @Output() onSearchRequest: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n /** Evento che parte ad ogni modifica di \"checkaggio\" in forma di comodo array. Espone l'oggetto con lo stato di check attuale */\r\n @Output() onSelectionChanged: EventEmitter<ItemsSelection<any>> = new EventEmitter<ItemsSelection<any>>();\r\n\r\n /** Evento richiamato all'eliminazione di un oggetto */\r\n @Output() onRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento richiamato all'annullamento di un'eliminazione */\r\n @Output() onAbortRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento richiamato al click su una cella quando **UseCustomCellActions** è attivo \r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Output() onCellClick: EventEmitter<{ column: string, model: any }> = new EventEmitter<{ column: string, model: any }>();\r\n\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **CornerMenuOptions** */\r\n @Output() onCornerAction: EventEmitter<{ id: string, estable: any }> = new EventEmitter<{ id: string, estable: any }>();\r\n\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **DynamicOperations** */\r\n @Output() onDynamicOperation: EventEmitter<{ id: string, item: any }> = new EventEmitter<{ id: string, item: any }>();\r\n\r\n /** Dati esportati da ngx-csv */\r\n public data: any[];\r\n /** Header dei dati esportati da ngx-csv */\r\n public headers: any[];\r\n /** Elemento HTML da cliccare per l'esportazione */\r\n @ViewChild('exportDownloader', { static: false }) public exportDownloader: ElementRef;\r\n\r\n /** Placeholder di menù contestuale per quando non ci sono opzioni nel placeholder \"Vero\" */\r\n @ViewChild('emptyMenu', { static: true }) public tableEmptyMenu: ContextMenuComponent;\r\n\r\n /** Subscription sull'apertura del context menu da ripulire al destroy della classe */\r\n private ctxMenuSubscription: any;\r\n\r\n /** Pagina in visualizzazione (durante la paginazione in modalità Array) */\r\n public arraymodePage = 1;\r\n /** Numero di pagine (durante la paginazione in modalità Array) */\r\n public arraymodePages = 1;\r\n /** Oggetti per ogni pagina (durante la paginazione in modalità Array) */\r\n @Input() ArraymodeItemsPerPage = 15;\r\n /** Oggetto di selezione per la modalità Array, che deve comportarsi come la controparte in modalità View */\r\n public arraymodeSelection: ItemsSelection<any>;\r\n\r\n /**\r\n * Variabile che serve a gestire il momento in cui l'es-table aggiorna la paginazione (pulsanti ecc).\r\n * Essendo operazioni comunque costose le effettuo solo su binding esterni, non su rewrite generati internamente\r\n */\r\n private internalWriteCall = false;\r\n\r\n /** Cache di selezione Hash - Oggetto */\r\n private selOrDeselCache: { [hash: string]: any } = {};\r\n\r\n /** @ignore */\r\n public ngOnInit() {\r\n //Per poter cambiare il layout in base al livello gerarchico il componente deva avere il pieno controllo di ogni cella,\r\n //che con solo la proiezione (senza celle cusotm) non è disponibile\r\n if (this.Hierarchy && !this.UseCustomCells)\r\n throw \"Es-table error: Per poter utilizzare l'es-table con [Hierarchy]=\\\"true\\\" è richiesto anche [UseCustomCells]=\\\"true\\\"\";\r\n\r\n // click destro su una riga con selezione attiva: Tiro fuori il context menu e selezione l'elemento corrente\r\n this.ctxMenuSubscription = (this.ContextMenu || this.tableEmptyMenu).open.subscribe(t => {\r\n let shouldEmit = !t.item._selected;\r\n\r\n t.item._selected = true;\r\n var itemSelection = this.handleItemsSelection([t.item]);\r\n this.changed();\r\n\r\n if (shouldEmit)\r\n this.onSelectionChanged.emit(itemSelection);\r\n });\r\n }\r\n\r\n /** @ignore */\r\n public ngOnDestroy() {\r\n if (this.ctxMenuSubscription)\r\n this.ctxMenuSubscription.unsubscribe();\r\n this.EsThsOrderChangeSubscriptions.forEach(t => { t.unsubscribe(); });\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n let newSearchView = changes['SearchView'];\r\n if (newSearchView && this.SearchView)\r\n this.arrayPulsanti = this.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1);\r\n }\r\n\r\n // #region Implementazione ControlValueAccessor ignorabile\r\n\r\n /** @ignore */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n /** @ignore */\r\n public registerOnTouched(fn): void { }\r\n /** @ignore */\r\n changed() { this.propagateChange(this.View); }\r\n /** @ignore */\r\n propagateChange = (_: any) => { };\r\n\r\n // #endregion\r\n\r\n /** @ignore */\r\n public writeValue(obj): void {\r\n this.View = obj ? obj : null;\r\n\r\n //Mi è arrivata l'AppSearch quindi di sicuro non ho una ricerca in progress\r\n this.researchInProgress = false;\r\n\r\n if (!this.View && !this.SearchView) {\r\n // Su view nulla evito di fare pressoché qualsiasi cosa. Se arriva un null devo anche assicurarmi di non mostrare nulla\r\n this.boundSource = this.TMPBoundSource || [];\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n // Se per sbaglio l'oggetto che mi arriva non è tipizzato (instanceof AppSearch restituisce false anche se è del tipo giusto)\r\n // lo correggo--------------------------------------------------------------------------------------------------------------\r\n if (this.View && typeof (this.View as any).result != 'undefined' && !(this.View instanceof ReportDefinition)) {\r\n (this.View as any).__proto__ = new ReportDefinition();\r\n }\r\n else if (this.View && typeof (this.View as any).itemsperpageoverride != 'undefined' && !(this.View instanceof AppSearch)) {\r\n (this.View as any).__proto__ = new AppSearch();\r\n }\r\n else if (this.SearchView && typeof (this.SearchView as any).itemsperpageoverride != 'undefined' && !(this.SearchView instanceof AppSearch)) {\r\n (this.SearchView as any).__proto__ = new AppSearch();\r\n }\r\n // -------------------------------------------------------------------------------------------------------------------------\r\n\r\n if (this.View && this.View instanceof ReportDefinition) {\r\n // Se mi arriva una report definition vuol dire che potrei avere dei risultati da visualizzare\r\n this.setMode('report');\r\n\r\n this.ReportValues = this.View.result;\r\n if (this.ReportValues)\r\n this.reviewReportBindings();\r\n }\r\n else if (this.View && this.View instanceof AppSearch) {\r\n // Se cambia l'oggetto intero significa che ho rimandato la ricerca\r\n this.setMode('view');\r\n\r\n // Se vengo da una ricerca interna mantengo lo stato di selezione precedente (quindi su cambio pagina, cambio ipp, ecc...)\r\n // se invece l'utente ha fatto una ricerca lui (quindi cambiando filtri), secco le info di selezione\r\n if (!this.View.selection || !this.View.internalsearchrequest || !this.UseSelectionCache) {\r\n this.selOrDeselCache = {};\r\n this.View.selection = new ItemsSelection([]);\r\n this.onSelectionChanged.emit(this.View.selection);\r\n }\r\n\r\n this.View.internalsearchrequest = false;\r\n\r\n // Recupero Preference\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name)\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per questa tabella\");\r\n else if (!this.prefService)\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n else {\r\n var prefs = this.prefService.retrieve<{ columns: string[], column_ordering: string[] }>(<string>this.ngControl.name);\r\n if (prefs) {\r\n this.View.columns = prefs.columns;\r\n this.View.column_ordering = prefs.column_ordering;\r\n }\r\n }\r\n }\r\n\r\n this.arrayPulsanti = this.getPagesArray(6, this.View.page, this.View.pages || 1);\r\n }\r\n else if (this.View && (this.View.length != null && this.View.length != undefined)) {\r\n this.setMode('array');\r\n\r\n if (!this.UseSelectionCache || !this.arraymodeSelection) {\r\n this.selOrDeselCache = {};\r\n this.arraymodeSelection = new ItemsSelection([]);;\r\n this.onSelectionChanged.emit(this.arraymodeSelection);\r\n }\r\n\r\n if (this.SearchView)\r\n this.arrayPulsanti = this.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1);\r\n }\r\n\r\n if (this.View && !(this.View instanceof ReportDefinition)) {\r\n /*\r\n *Uso la tecnica di EndlessScroll se la variabile relativa è attiva e se\r\n * 1) Ho un Array, oppure\r\n * 2) Ho un AppSearch che sta cercando con paginazione \"Tutto\", oppure\r\n * 3) Ho un AppSearch che sta cercando con paginazione diversa da \"Tutto\" ma con la variabile EndlessScrollOnlyForAll a false\r\n */\r\n let viewCasted = this.View as AppSearch<any>;\r\n let isAppSearchWithIppMax = this.viewMode && viewCasted.itemsperpageoverride == this.defaultAllPageOverride;\r\n let isAppSearchNoMaxIpp = this.viewMode && viewCasted.itemsperpageoverride != this.defaultAllPageOverride;\r\n this.UseEndlessscroll = this.EndlessScroll && (this.arrayMode || isAppSearchWithIppMax || (isAppSearchNoMaxIpp && !this.EndlessScrollOnlyForAll));\r\n\r\n if (this.UseEndlessscroll) {\r\n this.addedSlices = [];\r\n this.boundSubSources = this.getItemSlices();\r\n\r\n this.TMPBoundSource = this.boundSubSources[0] ? this.boundSubSources[0] : [];\r\n if (this.boundSubSources[0])\r\n this.addedSlices.push(0);\r\n }\r\n else\r\n this.TMPBoundSource = this.getItemsByMode(false, !this.internalWriteCall);\r\n\r\n if (this.Hierarchy)\r\n this.assignHierarchyLevels(this.TMPBoundSource);\r\n\r\n this.calculateHash(this.TMPBoundSource);\r\n\r\n // Assegno a una variabile mia l'eventuale override per la classe della riga\r\n // Se poi sono in modalità gerarchica inietto anche la classe per la configurazione del livello della riga\r\n if ((this.TMPBoundSource && this.RowClassAssigner) || this.Hierarchy) {\r\n for (let i = 0; i < this.TMPBoundSource.length; i++) {\r\n let item = this.TMPBoundSource[i];\r\n item._rowClass = this.RowClassAssigner ? this.RowClassAssigner(item) : \"\";\r\n item._rowClass += this.Hierarchy ? \" est-row-lvl-\" + item.level : \"\";\r\n }\r\n }\r\n }\r\n\r\n this.postBoundSourceCalculation();\r\n }\r\n\r\n // #region Gestione retrieve degli oggetti da mostrare in tabella, considerando eventuali Endless Scrolls\r\n\r\n /**\r\n * In base alla modalità specificata (ArrayMode, ViewMode, ecc...) questo metodo recupera l'array di oggetti da bindare ad interfaccia\r\n *\r\n * @param {boolean} onlyselected [false] Indica di prendere solo gli oggetti selezionati\r\n * @param {boolean} refreshPaging [false] Indica se aggiornare le informazioni di paginazione o meno\r\n * @param {boolean} allIfPossible [false] Indica se prendere tutti gli oggetti quaora possibile, usato solo in ArrayMode\r\n *\r\n * @returns {any[]} Lista degli oggetti su cui effettuare il bind lato interfaccia\r\n */\r\n private getItemsByMode(onlyselected: boolean = false, refreshPaging: boolean = false, allIfPossible: boolean = false): any[] {\r\n let items: any[] = [];\r\n\r\n if ((this.viewMode && this.View instanceof AppSearch)) {\r\n items = this.getViewItemsBySource();\r\n }\r\n else if (this.arrayMode) {\r\n if (this.UseArrayModePaging && !allIfPossible) {\r\n\r\n // Se sono in modalità array ma la ricerca dipende da una view devo riallineare gli itemperpage\r\n if (this.SearchView)\r\n this.ArraymodeItemsPerPage = this.SearchView.itemsperpageoverride;\r\n\r\n // Devo chiamare il refresh page solo se vengo richiamato da un binding esterno\r\n if (refreshPaging)\r\n this.refreshPaging(this.ArraymodeItemsPerPage);\r\n\r\n items = this.adaptViewToPaging();\r\n } else {\r\n items = this.View as any[];\r\n }\r\n }\r\n\r\n // Se voglio solo i selezionati filtro\r\n if (onlyselected)\r\n return items.filter(t => t._selected);\r\n\r\n return items;\r\n }\r\n\r\n /** @ignore */\r\n private getViewItemsBySource(): any[] {\r\n return this.SecondarySource ? (this.View as any).items2 : this.TertiarySource ? (this.View as any).items3 : (this.View as any).items;\r\n }\r\n\r\n /**\r\n * Metodo che prende tutti gli oggetti di cui dispone divisi in bucket da 100 elementi\r\n *\r\n * @returns {any[][]} Matrice di array Nx100\r\n */\r\n private getItemSlices(): any[][] {\r\n let items = this.getItemsByMode();\r\n if (!items)\r\n return [];\r\n let arrayBy100 = [];\r\n\r\n let slices = Math.ceil(items.length / this.SliceSize);\r\n for (let i = 0; i < slices; i++) {\r\n let arraySlice = items.slice(i * this.SliceSize, i * this.SliceSize + this.SliceSize);\r\n arrayBy100.push(arraySlice);\r\n }\r\n return arrayBy100;\r\n }\r\n\r\n /**\r\n * Metodo che gestisce l'endless scroll e in base a quanto la tabella è stata scrollata aggiunge degli elementi extra a **TMPBoundSource**\r\n *\r\n * @param {any} e Evento di scroll del browser\r\n */\r\n public onScroll(e: any) {\r\n let tableViewHeight = e.target.offsetHeight;\r\n let tableScrollHeight = e.target.scrollHeight;\r\n let scrollLocation = e.target.scrollTop;\r\n let buffer = 200;\r\n\r\n let limit = tableScrollHeight - tableViewHeight - buffer;\r\n if (scrollLocation > limit) {\r\n let indexToAdd = Math.floor(this.TMPBoundSource.length / 100);\r\n if (this.boundSubSources[indexToAdd] && this.addedSlices.indexOf(indexToAdd) == -1) {\r\n // Devo ricordarmi di fare l'hash del nuovo pezzo\r\n this.calculateHash(this.boundSubSources[indexToAdd]);\r\n this.TMPBoundSource = this.TMPBoundSource.concat(this.boundSubSources[indexToAdd]);\r\n this.addedSlices.push(indexToAdd);\r\n\r\n setTimeout(() => { this.postBoundSourceCalculation(); });\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione di tutto il ciclo di vita post binding oggetti\r\n\r\n /**\r\n * Metodo lanciato dopo che la sorgente dati è stata correttamente bindata, si occupa di ricalcolare tutto ciò che serve\r\n * all'es-table per renderizzare i valori da mostrare\r\n */\r\n private postBoundSourceCalculation() {\r\n // Resetto tutto tranne RowTDs e RowTHs per evitare flickering. RowTDs e RowTHs saranno modificate all'interno del prossimo ciclo di CD\r\n this.RowContexts = [];\r\n this.OrderDirectives = [];\r\n this.lastSelectedItemID = null;\r\n\r\n // Set timeout e basta funzionerebbe per la modalità JIT, ma per AOT servono sia quello che detectChanges\r\n this.cdr.detectChanges();\r\n setTimeout(() => {\r\n // Se non ho colonne dinamiche ma sono in modalità dinamica (lo capisco perché c'è una view piena di genericitem) metto il default delle colonne\r\n this.eventuallyReviewDynamicColumns();\r\n // Molte cose sono ovviamente disponibili solo in modalità View\r\n if (this.viewMode && this.UseCustomCells) {\r\n let view = this.View as AppSearch<any>\r\n let ths = this.EsThs ? this.EsThs.toArray() : [];\r\n let tds = this.EsTds ? this.EsTds.toArray() : [];\r\n\r\n // N.B: Rispettare l'ordine di queste 3 macrocategorie è VITALE\r\n\r\n // ************************************* Sistemazioni di TH, TD, e visibilità varie *************************************\r\n\r\n this.alignColumnsIfLoadedView(view); // Se sto caricando una View da hotpotato (quindi con savedstate = true) riallineo la visibilità delle colonne e il loro ordine.\r\n this.refreshColumnsVisibility(ths, tds, view); // Lavoro sui TH ed eventualmente modifico la visibilità anche dei TD.\r\n this.alignHeadersOrdering(ths, view); // Allineo gli ordinamenti agli header\r\n this.reviewColumnsList(ths); // Aggiorna la lista delle colonne da mostrare nella dialog per ordinamento ecc\r\n\r\n // ************************************* Generazione binding per righe e colonne *************************************\r\n\r\n this.evaluateRowThs(ths); // Raccolgo i TH\r\n this.evaluateRowTds(ths, tds); // Raccolgo i TD in contesti separati, un contesto per ogni item\r\n\r\n // ************************************* Ultimi aggiustmaenti dei binding *************************************\r\n\r\n this.generateDefaultOrder(view); // Genero le direttive di ordinamento, che siano default o derivanti dalla AppSearch\r\n this.applyOrdering(view, true); // Applico l'ordinamento sulle colonne (non ASC DESC, ma \"prima questa o quella colonna\")\r\n this.evaluateSelection(view.items, view.selection); // Riallineo le info di selezione degli elementi della View\r\n }\r\n else if (this.viewMode && !this.UseCustomCells) {\r\n // Riallineo le info di selezione degli elementi della View\r\n let view = this.View as AppSearch<any>;\r\n this.evaluateSelection(view.items, view.selection);\r\n }\r\n else if (this.arrayMode) {\r\n // Riallineo le info di selezione degli elementi dell'array\r\n this.arrayModeEvaluateSelection(this.View as any[]);\r\n }\r\n\r\n // Collego gli oggetti da mostrare\r\n this.boundSource = this.TMPBoundSource;\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n this.FirstBind = false;\r\n });\r\n }\r\n\r\n /**\r\n * Valuta quali elementi devono essere marcati come selezionati nella vista attuale. Si basa sull'oggetto **selection** interno all'AppSearch\r\n *\r\n * @param {any[]} items Oggetti di cui valutare la selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetti di selezione derivante dalla view o dall'oggetto per Array\r\n */\r\n private evaluateSelection(items: any[], selectionItem: ItemsSelection<any>) {\r\n if (!selectionItem)\r\n return;\r\n\r\n this.handleSelectionEvaluation(items, selectionItem);\r\n }\r\n\r\n /**\r\n * Valuta quali elementi devono essere marcati come selezionati nella vista attuale. Si basa sull'oggetto **arraymodeSelection** dell'es-table\r\n *\r\n * @param {any[]} array Lista di oggetti di cui valutare la selezione in modalità array\r\n */\r\n private arrayModeEvaluateSelection(array: any[]) {\r\n if (array.length == 0)\r\n return;\r\n\r\n this.handleSelectionEvaluation(array, this.arraymodeSelection);\r\n }\r\n\r\n /**\r\n * Implementazione agnostica della valutazione delle selezioni degli oggetti. Richiede gli oggetti della vista attuale e l'itemSelector\r\n *\r\n * @param {any[]} items Oggetti di cui aggiornare lo stato di selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetto contenente lo stato attuale di selezione\r\n */\r\n private handleSelectionEvaluation(items: any[], selectionItem: ItemsSelection<any>) {\r\n let allSelected = true;\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let itm = items[i];\r\n\r\n // Reidrato la cache di selezione coi nuovi oggetti altrimenti non riuscirei a beccare gli indici giusti\r\n // Dopodiché la uso per calcolare istantaneamente se gli oggetti sono selezionati o no\r\n if (this.selOrDeselCache[itm.hash])\r\n this.selOrDeselCache[itm.hash] = itm;\r\n\r\n if (selectionItem.all)\r\n itm._selected = !this.selOrDeselCache[itm.hash];\r\n else\r\n itm._selected = !!this.selOrDeselCache[itm.hash];\r\n\r\n allSelected = allSelected && itm._selected;\r\n }\r\n\r\n // Se tutti gli oggetti di questa pagina sono solezionati allora posso mettere il global check a true\r\n // Se sono in situazione di all-select anche metto la global checkbox, nonostante ci possano essere delle esclusioni\r\n this.globalCheck = allSelected || selectionItem.all;\r\n this.canSelectAll = selectionItem.count > 0 && this.SelectAll;\r\n\r\n // Potrebbe cambiare qualora qualcuno inserisse dati a manazza in modalità Array e desse il refresh manuale alla tabella\r\n // Comunque costa 0 quindi mi permetto di refreshare\r\n if (this.arrayMode) {\r\n let prevSelected = this.selectedObjects;\r\n this.finalizeSelectionInformations(selectionItem);\r\n if (this.selectedObjects != prevSelected)\r\n this.onSelectionChanged.emit(selectionItem);\r\n }\r\n }\r\n\r\n /**\r\n * Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna\r\n */\r\n private eventuallyReviewDynamicColumns() {\r\n // Senza oggetti esco\r\n if (!this.TMPBoundSource || this.TMPBoundSource.length == 0)\r\n return;\r\n\r\n var useGenericItems = !!this.TMPBoundSource[0][\"properties\"];\r\n if (!useGenericItems || (!this.FirstBind && this.DynamicRowColumnsDefinition && this.DynamicRowColumnsDefinition.length > 0))\r\n return;\r\n\r\n if ((!this.DynamicRowColumnsDefinition || this.DynamicRowColumnsDefinition.length == 0)) {\r\n var props = <Record<string, string>>this.TMPBoundSource[0][\"properties\"];\r\n this.DynamicRowColumnsDefinition = [];\r\n for (let key in props)\r\n this.DynamicRowColumnsDefinition.push(new EsTableColumnsDefinition(key, key))\r\n this.UserDefinedDynamicCols = false;\r\n }\r\n else\r\n this.UserDefinedDynamicCols = true;\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** estrappolo la lista di **EsTableColumn** che questa tabella dovrà eventualmente gestire per Visibilità e Ordine\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[]} ths Colonne della tabella\r\n */\r\n private reviewColumnsList(ths: EsTh[]) {\r\n this.ColumnsList = [];\r\n if (ths.length == 0)\r\n return;\r\n\r\n // Appena il contentChildren è valorizzato scorro tutti gli header\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n // Se non ho un id il th è considerato inerte\r\n if (!th.ID || th.Internal)\r\n continue;\r\n\r\n th.OrderBy = this.OrderByColumn;\r\n\r\n if (this.OrderByColumn && th.Orderable) {\r\n // Collego ogni header all'evento di cambio ordinamento\r\n let sbscr = th.onOrderChange.subscribe(order => { this.thOrderChanged(th.ID, order); });\r\n this.EsThsOrderChangeSubscriptions.push(sbscr);\r\n }\r\n\r\n // Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere\r\n // Di default la visibilità è quella impostata nel componente\r\n if (this.HiddenColumns || th.Visible) {\r\n this.ColumnsList.push(new EsTableColumn(th.ID, th.Description, th.Visible));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Terminato il binding delle colonne da **reviewColumnsList** e della **View** dal **writeValue** questo metodo si occupa\r\n * dell'allineamento delle informazioni fra le colonne calcolate internamente e le informazioni sulle colonne che arrivano dall'AppSearch\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n private alignColumnsIfLoadedView(view: AppSearch<any>) {\r\n let emitChanged = view.savedstate;\r\n let newColset = [];\r\n\r\n if (!this.ColumnsList || this.ColumnsList.length == 0)\r\n return;\r\n\r\n this.ColumnsList.forEach(c => {\r\n let exCl = view.columns.filter(cc => cc == c.id);\r\n\r\n // Se l'appsearch viene da uno stato precedente, uso le informaizoni sulle colonne che ha dentro, altrimenti sovrascrivo tutto **\r\n if (c.visible && view.columns.length == 0)\r\n newColset.push(c.id);\r\n\r\n // Se ho una colonna lato AppSearch e nella ColumnList non è visibile, allineo all'AppSearch\r\n else if (exCl.length == 1 && !c.visible)\r\n c.visible = true;\r\n\r\n // Allineamento sull'AppSearch per casistiche inverse al di sopra\r\n else if (exCl.length == 0 && c.visible)\r\n c.visible = false;\r\n });\r\n\r\n // Non ho colonne nella appsearch, vuol dire che sono al primo binding\r\n if (view.columns.length == 0)\r\n view.columns = newColset;\r\n\r\n if (view.savedstate && this.ColumnsOrdering && view.column_ordering.length > 0) {\r\n let newColList = [];\r\n // Scorro gli ordinamenti che avevo salvato e ricreo la ColumnsList in base a loro\r\n view.column_ordering.forEach(co => {\r\n this.ColumnsList.forEach(c => {\r\n if (c.id == co)\r\n newColList.push(c);\r\n });\r\n });\r\n\r\n this.ColumnsList = newColList;\r\n }\r\n\r\n // In ogni caso questo non mi serve più, lo resetto **\r\n view.savedstate = false;\r\n\r\n if (emitChanged)\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Metodo che gestisce il cambio di Ordinamento di una colonna\r\n *\r\n * @param {string} id ID della colonna il cui oridnamento è cambiato\r\n * @param {'DESC' | 'ASC'} order Nuovo ordine selezionato per la colonna\r\n */\r\n public thOrderChanged(id: string, order?: 'DESC' | 'ASC') {\r\n if (!this.viewMode) {\r\n console.warn('Order changed on a table not in viewMode. Operation not supported');\r\n return;\r\n }\r\n\r\n if (!this.OrderByColumn)\r\n return;\r\n\r\n let appSearch = this.View as AppSearch<any>;\r\n let orderToAdd = true;\r\n let orderToRemove: number = null;\r\n\r\n // Se per qualche motivo il costruttore non è passato (cache tarpate o simila) fixo\r\n if (!appSearch.orders)\r\n appSearch.orders = [];\r\n\r\n for (let i = 0; i < appSearch.orders.length; i++) {\r\n let t = appSearch.orders[i];\r\n if (t.id == id) {\r\n if (order) {\r\n t.order = order;\r\n orderToAdd = false;\r\n }\r\n else\r\n orderToRemove = i;\r\n }\r\n }\r\n\r\n if (orderToRemove != null) {\r\n appSearch.orders.splice(orderToRemove, 1);\r\n }\r\n else if (orderToAdd) {\r\n if (this.MultipleOrderingDirectives)\r\n appSearch.orders.push(new AppOrdering(id, order));\r\n else\r\n appSearch.orders = [new AppOrdering(id, order)];\r\n }\r\n\r\n this.onOrderChanged.emit({ id, order });\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Metodo da chiamare ogni volta che si vuole dare evidenza all'esterno del bisogno di rieffettuare la ricerca\r\n */\r\n private emitSearchRequest(value: boolean) {\r\n if (this.viewMode) {\r\n (this.View as AppSearch<any>).internalsearchrequest = true;\r\n this.changed();\r\n }\r\n this.researchInProgress = true;\r\n this.onSearchRequest.emit(value);\r\n }\r\n\r\n /**\r\n * In base alla visibilità registrata nelle **ColumnsList** questo metodo si occupa di prendere tutti i **EsThs** ed **EsTds** relativi e nasonderli/mostrarli\r\n *\r\n * Costo: 1 scan ColumnsList, 1 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[]} ths Header della tabella\r\n * @param {EsTd[]} tds Celle della tabella\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n private refreshColumnsVisibility(ths: EsTh[], tds: EsTd[], view: AppSearch<any>) {\r\n let columnsCache: { [index: string]: EsTableColumn } = {};\r\n let newColset = [];\r\n for (let coli = 0; coli < this.ColumnsList.length; coli++) {\r\n let col = this.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n if (col.visible) newColset.push(col.id);\r\n }\r\n view.columns = newColset;\r\n\r\n // Da qui in poi devono essere eseguiti SOLO in fase di writeValue quindi devo assicurarmi di passarli null in tutti i passaggi diversi da quello\r\n if (ths) {\r\n // Definisco se la colonna è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (th.Internal)\r\n continue;\r\n\r\n th.Visible = columnsCache[th.ID] ? columnsCache[th.ID].visible : th.Visible;\r\n }\r\n }\r\n\r\n if (tds) {\r\n // Definisco se la cella è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (td.Internal)\r\n continue;\r\n\r\n td.Visible = columnsCache[td.ID] ? columnsCache[td.ID].visible : td.Visible;\r\n }\r\n }\r\n\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Allinea gli ordinamenti dati fra le **EsThs** e le informazioni all'interno della View bindata\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {EsTh[]} ths Colonne della tabella\r\n */\r\n private alignHeadersOrdering(ths: EsTh[], view: AppSearch<any>) {\r\n let researchNeeded = false;\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (th.Internal)\r\n continue;\r\n\r\n th.Order = null;\r\n\r\n // Assegno tutti gli ordinamenti che mi vengono da AppSearch. Sono i più importanti. Non faccio cache o cose strano perché tanto questa\r\n // variabile sarà sempre massimo 3 elementi\r\n view.orders.forEach(or => {\r\n if (or.id == th.ID)\r\n th.Order = or.order;\r\n });\r\n }\r\n\r\n if (researchNeeded)\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsTds** bindati genera, all'interno del dizionario **TMPRowTDs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TD \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 2 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[]} ths Colonne della tabella\r\n * @param {EsTd[]} tds Celle della tabella\r\n */\r\n private evaluateRowTds(ths: EsTh[], tds: EsTd[]) {\r\n if (tds.length == 0)\r\n return;\r\n\r\n let thsCache: { [index: string]: EsTh } = {};\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (th.Internal)\r\n continue;\r\n thsCache[th.ID] = th;\r\n }\r\n\r\n this.TMPRowTDs = {};\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (td.Internal)\r\n continue;\r\n\r\n let hasTh = !!thsCache[td.ID];\r\n if (hasTh)\r\n thsCache[td.ID].Referenced = true;\r\n else\r\n throw \"ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: \" + td.ID;\r\n\r\n let itemToAdd = <any>{ ID: td.ID, Visible: td.Visible, Class: td.Class, Content: td.Content, RouterLink: td.RouterLink, Template: td.Template };\r\n if (this.TMPRowTDs[td.Context])\r\n this.TMPRowTDs[td.Context].push(itemToAdd);\r\n else {\r\n this.RowContexts.push(td.Context);\r\n this.TMPRowTDs[td.Context] = [itemToAdd];\r\n }\r\n }\r\n\r\n var errs: string[] = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (!th.Referenced)\r\n errs.push(th.ID);\r\n }\r\n\r\n if (errs.length > 0) {\r\n var errIds = errs.join(', ');\r\n throw \"L'ID di uno o più EsTh non hanno alcun EsTd associato: \" + errIds;\r\n }\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** bindati genera, all'interno del dizionario **TMPRowTHs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TH \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[]} ths Colonne della tabella\r\n */\r\n private evaluateRowThs(ths: EsTh[]) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n this.TMPRowTHs = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (th.Internal)\r\n continue;\r\n\r\n this.TMPRowTHs.push({ ID: th.ID, Visible: th.Visible, Class: th.Class, Content: th.Description, Order: th.Order, Orderable: th.Orderable });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che genera l'ordine di default delle colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n private generateDefaultOrder(view: AppSearch<any>) {\r\n if (this.TMPRowTHs.length == 0)\r\n return;\r\n\r\n // Genero ordinamento di default da 0 fino a dove deve arrivare. Situazione attuale senza hotpotato\r\n if (!view.column_ordering || view.column_ordering.length == 0) {\r\n for (let i = 0; i < this.TMPRowTHs.length; i++)\r\n this.OrderDirectives.push(this.TMPRowTHs[i].ID);\r\n }\r\n else\r\n this.OrderDirectives = view.column_ordering;\r\n }\r\n\r\n /**\r\n * Applica l'ordine specificato alle varie colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {boolean} finalize Se **true** significa che non mi aspetto di dover effettuare altre operazioni e posso renderizzare la situazione in base ai RowContext\r\n * Senza finalize significa che mi aspetto altre operazioni che prima o poi richiameranno questa funzione col finalize.\r\n *\r\n * Ad esempio, una volta selezionato ordinamento fisico/logico delle colonne so che parte un altra ricerca che mi rivalorizzera da \"writeValue\", che già chiama questa funzione.\r\n * Mettendo solo la chiamata da \"writeValue\" come \"finalizzante\" mi assicuro che smanattamenti a frontend non causino flickering fino a quando non servono\r\n */\r\n private applyOrdering(view: AppSearch<any>, finalize: boolean) {\r\n // Genero ordinamento per gli header\r\n let newHeaders = [];\r\n this.OrderDirectives.forEach(o => {\r\n let heaedrItem = this.TMPRowTHs.filter(t => t.ID == o)[0];\r\n newHeaders.push(heaedrItem);\r\n });\r\n this.TMPRowTHs = newHeaders;\r\n\r\n // Genero ordinamento per le celle\r\n for (let i = 0; i < this.RowContexts.length; i++) {\r\n let context = this.TMPRowTDs[this.RowContexts[i]];\r\n let newContext = [];\r\n\r\n this.OrderDirectives.forEach(o => {\r\n let contextItem = context.filter(t => t.ID == o)[0];\r\n newContext.push(contextItem);\r\n });\r\n\r\n this.TMPRowTDs[this.RowContexts[i]] = newContext;\r\n }\r\n\r\n // Se devo finalizzare attacco sia gli header che le celle\r\n if (finalize) {\r\n this.RowTDs = this.TMPRowTDs;\r\n this.RowTHs = this.TMPRowTHs;\r\n }\r\n\r\n view.column_ordering = this.OrderDirectives;\r\n this.changed();\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Operaizoni dialog ordinamento/visibilità colonne\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata prima della colonna precedente\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendUp(columnItem: EsTableColumn) {\r\n let itemIndex = this.TMPColumnsList.indexOf(columnItem);\r\n this.utiExts.swap(this.TMPColumnsList, itemIndex, itemIndex - 1);\r\n\r\n this.TMPColumnsList = JSON.parse(JSON.stringify(this.TMPColumnsList));\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata dopo la colonna successiva\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendDown(columnItem: EsTableColumn) {\r\n let itemIndex = this.TMPColumnsList.indexOf(columnItem);\r\n this.utiExts.swap(this.TMPColumnsList, itemIndex, itemIndex + 1);\r\n\r\n this.TMPColumnsList = JSON.parse(JSON.stringify(this.TMPColumnsList));\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" inverte le impostazioni di visibilità della colonna\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public columnClicked(item: EsTableColumn) {\r\n this.lastSelectedItemID = item.id;\r\n if (!this.HiddenColumns)\r\n return;\r\n\r\n item.visible = !item.visible;\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /**\r\n * All'apertura della dialog \"Ordinamento e Visibilità Colonne\" ricarica le informazioni attuali per permettere la modifica\r\n */\r\n public resetColumnVisSelection() {\r\n this.TMPColumnsList = JSON.parse(JSON.stringify(this.ColumnsList));\r\n let reorderedColList = [];\r\n\r\n if (this.ColumnsOrdering) {\r\n this.OrderDirectives.forEach(o => {\r\n let column = this.TMPColumnsList.filter(t => t.id == o)[0];\r\n // Potrei non averne nel caso ci sia il flag HiddenColumns a false, evito di inserire degli undefined\r\n if (column)\r\n reorderedColList.push(column);\r\n });\r\n\r\n this.TMPColumnsList = reorderedColList;\r\n }\r\n\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /**\r\n * Riaggiorna le **OrderDirectives** con le informazioni in **ColumnsList**\r\n */\r\n private refreshColumnOrdering() {\r\n this.OrderDirectives = [];\r\n\r\n for (let c = 0; c < this.ColumnsList.length; c++)\r\n this.OrderDirectives.push(this.ColumnsList[c].id);\r\n }\r\n\r\n /**\r\n * Effettua la selezione o meno del check globale (**globalColVisCheck**) di visibilità in base a se tutte le **TMPColumnsList** sono visibili o no\r\n */\r\n public updateGlobalColVisCheck() {\r\n // TMPColList viene riempita di undefined nel caso in cui sia disattivata la selezione delle colonne nascoste\r\n this.globalColVisCheck = this.TMPColumnsList.every(t => t.visible);\r\n }\r\n\r\n /**\r\n * Funzione che effettua la conferma della visibilità e dell'ordine delle colonne.\r\n *\r\n * Questa selezione viene inoltre salvata nelle preferenze (**@esfaenza/preferences**), qualora l'Input **SavePreferences** fosse valorizzato\r\n *\r\n * @returns {boolean} **true** se non ci sono problemi, **false** altrimenti\r\n */\r\n public confirmColumnVisibilitySelection(): boolean {\r\n // Non permetto di non selezionare nulla\r\n if (this.TMPColumnsList.every(t => !t.visible))\r\n return false;\r\n\r\n let castedView = this.View as AppSearch<any>;\r\n this.ColumnsList = JSON.parse(JSON.stringify(this.TMPColumnsList));\r\n this.refreshColumnOrdering();\r\n\r\n this.refreshColumnsVisibility(null, null, castedView);\r\n this.applyOrdering(castedView, false);\r\n\r\n //Salvo le preferences di questa view\r\n //Di default registro ordinamento e visibilità delle colonne nella vista. Solo le cose di UI\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name) {\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per la tabella\");\r\n return false;\r\n }\r\n\r\n if (!this.prefService) {\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n return false;\r\n }\r\n\r\n var toStore = { columns: <string[]>JSON.parse(JSON.stringify(castedView.columns)), column_ordering: <string[]>JSON.parse(JSON.stringify(castedView.column_ordering)) };\r\n this.prefService.store(<string>this.ngControl.name, toStore);\r\n }\r\n\r\n // Mi assicuro di farlo dopo l'espansione del changed o rischio che la ricerca mi ridia colonne che in realtà non esistono\r\n setTimeout(() => { this.emitSearchRequest(false); });\r\n\r\n // Lo vorrei mettere lato template ma no\r\n this.lastSelectedItemID = null;\r\n return true;\r\n }\r\n\r\n /**\r\n * Sul click nella checkbox di selezione globale si scorrono tutte le colonne e si impostano al valore della check globale\r\n */\r\n public globalColVisCheckChanged() {\r\n this.TMPColumnsList.forEach(t => { t.visible = this.globalColVisCheck; });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione data source gerarchici\r\n\r\n /**\r\n * Data una lista di oggetti assegno il livello gerarchico rispetto alla lista di oggetti passata\r\n *\r\n * @param {any[]} objs Lista di oggetti a cui aggiungere l'informazione del livello gerarchico\r\n */\r\n private assignHierarchyLevels(objs: any[]) {\r\n // Casistica input nullo\r\n if (!objs || !objs.length)\r\n return;\r\n\r\n //Se mancano entrambe le info le cerco di valorizzare in automatico coi default \"parentid\" e \"id\" (posto che le props esistano nell'oggetto)\r\n if (!this.ParentKey && !this.OwnKey) {\r\n if (objs[0]['parentid'] !== undefined)\r\n this.ParentKey = 'parentid';\r\n if (objs[0]['id'] !== undefined)\r\n this.OwnKey = 'id';\r\n }\r\n\r\n //Check finale per assicurarmi che le props ci siano\r\n if (!this.ParentKey || !this.OwnKey) {\r\n console.error('Per utilizzare il sistema in modalità gerarchica è obbligatorio specificare sia ParentKey che OwnKey. Fallback a sistema non gerarchico');\r\n return;\r\n }\r\n\r\n // Valorizzazione campi level, expanded, e visible per ogni item\r\n let currentLevel = 1;\r\n let assigned = 0;\r\n do {\r\n assigned = this.assignLevel(objs, currentLevel);\r\n currentLevel++;\r\n } while (assigned > 0);\r\n // butto su lato html e poi me la gioco là con padding = 20 * (level - 1) per far capire il diverso livello\r\n }\r\n\r\n /**\r\n * Per ognuno degli oggetti passati gli assegna un livello di gerarchia in base a **ParentKey** e **OwnKey**\r\n *\r\n * @param {any[]} objs Oggetti a cui assegnare il livello di gerarchia\r\n * @param {number} levelToAssign Livello che sta assegnando attualmente questa iterazione (dato che è ricorsiva)\r\n *\r\n * @returns {number} Numero di oggetti a cui è stato assegnato un livello gerarchico\r\n */\r\n private assignLevel(objs: any[], levelToAssign: number): number {\r\n let assigned = 0;\r\n for (let i = 0; i < objs.length; i++) {\r\n let obj = objs[i];\r\n\r\n // Se la parentKey non è valorizzata, questo è il livello 0 (1... perché gli 0 son perciolosi)\r\n if (!obj[this.ParentKey] && levelToAssign == 1) {\r\n obj.level = 1;\r\n obj.visible = true;\r\n obj.expanded = this.StartsExpanded;\r\n assigned++;\r\n continue;\r\n }\r\n\r\n // Per i livelli superiore al primo\r\n if (obj[this.ParentKey] && levelToAssign > 1) {\r\n // trovo il parent\r\n for (let p = 0; p < objs.length; p++) {\r\n let possibleParent = objs[p];\r\n\r\n // Trovato il parent dell'item, assegno all'item il livello giusto\r\n if (possibleParent[this.OwnKey] == obj[this.ParentKey] && possibleParent.level == levelToAssign - 1) {\r\n obj.level = levelToAssign;\r\n\r\n // So che questo item ha un parent. Ribadisco che il parent è espanso in base alle impostazione e stessa logica\r\n // per la visibilità del figlio\r\n possibleParent.expanded = this.StartsExpanded;\r\n possibleParent.parent = true;\r\n obj.visible = this.StartsExpanded;\r\n assigned++;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return assigned;\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare l'espansione di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da espandere\r\n */\r\n public expandParent(key: string) {\r\n for (let i = 0; i < this.boundSource.length; i++) {\r\n let obj = this.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo espando\r\n if (obj[this.OwnKey] == key) {\r\n obj.expanded = true;\r\n\r\n for (let ic = 0; ic < this.boundSource.length; ic++) {\r\n let child = this.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo visibili\r\n if (child[this.ParentKey] == key)\r\n child.visible = true;\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare il collapse di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da collassare\r\n */\r\n public collapseParent(key: string) {\r\n for (let i = 0; i < this.boundSource.length; i++) {\r\n let obj = this.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo collasso\r\n if (obj[this.OwnKey] == key) {\r\n obj.expanded = false;\r\n\r\n // Collasso/nascondo tutti i child del parent\r\n this.collapseChildOfParent(key);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collassa ricorsivamente tutti i figli di un parent identificato dalla **parentKey**\r\n *\r\n * @param {string} parentKey Chiave del parent di cui collassare i figli\r\n */\r\n private collapseChildOfParent(parentKey: string) {\r\n for (let ic = 0; ic < this.boundSource.length; ic++) {\r\n let child = this.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo invisibili. Se il child trovato è a sua volta un parent,\r\n // lo collasso e vado in ricorsione sui figli\r\n if (child[this.ParentKey] == parentKey && !child.parent)\r\n child.visible = false;\r\n else if (child[this.ParentKey] == parentKey && child.parent) {\r\n child.expanded = false;\r\n child.visible = false;\r\n this.collapseChildOfParent(child[this.OwnKey]);\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Selezione\r\n\r\n /**\r\n * Gestisce la selezione globale degli oggetti, sia per pagina che a livello di **SelectAll**\r\n *\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n */\r\n public globalCheckChanged(forcedVal: boolean = null) {\r\n\r\n let items = this.getItemsByMode();\r\n var itemSelection = this.handleItemsSelection(items, forcedVal, this.globalCheck);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n }\r\n\r\n /**\r\n * Helper per gestire la selezione di N elementi utilizzando la Cache di selezione ed eventualmente aggiornando il concetto di \"all selection\"\r\n *\r\n * Vunziona sia in modalità Array che in modalità View Semplice o View Avanzata (con le Custom Cells)\r\n *\r\n * @param {any[]} items Oggetti da selezionare o deselezionare\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n *\r\n * @returns {ItemsSelection<any>} Oggetto di selezione aggiornato con le informazioni sull'ultima operazione effettuata\r\n */\r\n private handleItemsSelection(items: any[], forcedVal: boolean = null, globalCheck: boolean = null): ItemsSelection<any> {\r\n let selectionItem = (this.View as AppSearch<any>)?.selection || this.arraymodeSelection;\r\n\r\n // Se sono in modalità di selezione singola e devo selezionare un'oggetto, per prima cosa devo deselezionare tutti gli altri\r\n if (this.SingleSelection && items[0]?._selected) {\r\n if (items.length > 1 && forcedVal == null)\r\n throw \"Tentativo di selezionare o deselezionare più di un elemento con SingleSelection attivo\";\r\n\r\n if (items.length == 1 && forcedVal == null){\r\n selectionItem = this.handleItemsSelection(this.getItemsByMode(), false, null);\r\n items[0]._selected = true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n let toChange = forcedVal != null ? item._selected != forcedVal : globalCheck != null ? item._selected != this.globalCheck : false;\r\n\r\n // Se dev'essere overridato il valore di check effettuo l'override o col valore forzato o col valore globale\r\n if (toChange && !item.locked)\r\n item._selected = forcedVal != null ? forcedVal : this.globalCheck;\r\n\r\n\r\n if (selectionItem.all) {\r\n // In caso di \"seleziona tutto\"...\r\n // N.B: la selOrDeselCache agisce come cache di DESELEZIONE in questo blocco di codice\r\n\r\n if (item._selected && this.selOrDeselCache[item.hash]) {\r\n // Oggetto selezionato: lo rimuovo dalle esclusioni di selezione\r\n selectionItem.exclusions.splice(selectionItem.exclusions.indexOf(this.selOrDeselCache[item.hash]), 1);\r\n delete this.selOrDeselCache[item.hash];\r\n }\r\n else if (!item._selected && !this.selOrDeselCache[item.hash]) {\r\n // Oggetto deselezionato: lo aggiungo alle esclusioni di selezione\r\n this.selOrDeselCache[item.hash] = item;\r\n selectionItem.exclusions.push(item);\r\n }\r\n }\r\n else {\r\n //In caso di non \"seleziona tutto\"...\r\n // N.B: la selOrDeselCache agisce come cache di SELEZIONE in questo blocco di codice\r\n\r\n if (item._selected && !this.selOrDeselCache[item.hash]) {\r\n // Oggetto selezionato: lo aggiungo alla selezione attuale\r\n this.selOrDeselCache[item.hash] = item;\r\n selectionItem.items.push(item);\r\n }\r\n else if (!item._selected && this.selOrDeselCache[item.hash]) {\r\n // Oggetto deselezionato: lo rimuovo dalla selezione attuale\r\n selectionItem.items.splice(selectionItem.items.indexOf(this.selOrDeselCache[item.hash]), 1);\r\n delete this.selOrDeselCache[item.hash];\r\n }\r\n }\r\n }\r\n\r\n // Imposto il check globale in base a se tutti gli elementi sono selezionati o meno.\r\n // Evito di fare queste operazioni se la selezione deriva proprio dal global Check\r\n // Non è ottimizzatissimo mettere 2 some ma scrivere questo codice a for sono tipo 25 righe....\r\n if (globalCheck == null)\r\n this.globalCheck = !items.some(t => !t._selected) && !this.getItemsByMode().some(t => !t._selected);\r\n\r\n this.finalizeSelectionInformations(selectionItem);\r\n\r\n return selectionItem;\r\n }\r\n\r\n /**\r\n * Finalizza le informazioni di selezione del **ItemsSelection** corrente\r\n */\r\n private finalizeSelectionInformations(selectionItem: ItemsSelection<any>) {\r\n selectionItem.count = this.evaluateSelected();\r\n\r\n // Se ho fatto selezione \"all\" ma poi mi sono messo a togliere tutti gli elementi fino a rimanerne 0 resetto l'oggetto di selezione\r\n if (selectionItem.count == 0 && selectionItem.all) {\r\n selectionItem.all = false;\r\n selectionItem.exclusions = [];\r\n selectionItem.items = [];\r\n\r\n // Ripulisco la cache altrimenti mi rimane piena di tutte le esclusioni\r\n this.selOrDeselCache = {};\r\n }\r\n\r\n // Se la possibilità di fare \"Seleziona tutto\" è abilitata allora la considero appena mi viene selezionato qualcosa\r\n this.canSelectAll = selectionItem.count > 0 && this.SelectAll;\r\n }\r\n\r\n /**\r\n * Gestisce i click sulla tabella, gestendo eventualmente anche gli Shift + Click per selezionare un range di oggetti\r\n *\r\n * @param {any} event Evento nativo HTML del click\r\n * @param {any} item Oggetto bindato su cui si è effettuato il click\r\n *\r\n * @returns {boolean} **true** se l'operaizone è andata a buon fine, **false** altrimenti\r\n */\r\n public handleClick(event: any, item: any): boolean {\r\n // Seleziono del testo ma non ho shift premuto -> ignoro la selezione\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && !event.shiftKey)\r\n return false;\r\n\r\n // Seleziono del testo e ho shift premuto -> annullo la selezione del testo\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && event.shiftKey)\r\n this.utiExts.clearTextSelection();\r\n\r\n let selecteditems: any[] = [];\r\n if (event.shiftKey && this.ShiftClick && !this.SingleSelection) {\r\n let startSelecting = false;\r\n\r\n let items = this.getItemsByMode();\r\n for (let i = 0; i < items.length; i++) {\r\n let t = items[i];\r\n if (startSelecting) {\r\n t._selected = true;\r\n selecteditems.push(t);\r\n }\r\n if ((t == item || t == this.lastSelected) && !startSelecting) {\r\n startSelecting = true;\r\n t._selected = true;\r\n selecteditems.push(t);\r\n } else if ((t == item || t == this.lastSelected) && startSelecting)\r\n startSelecting = false;\r\n }\r\n } else {\r\n item._selected = !item._selected;\r\n this.lastSelected = item;\r\n selecteditems.push(item);\r\n }\r\n\r\n var itemSelection = this.handleItemsSelection(selecteditems);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n return true;\r\n }\r\n\r\n /**\r\n * Valuta la quantità di oggetti che sono stati selezionati al termine di un evento di selezione\r\n *\r\n * @returns {number} Numero di oggetti selezionati\r\n */\r\n private evaluateSelected(): number {\r\n let selectionItem = (this.View as AppSearch<any>)?.selection || this.arraymodeSelection;\r\n this.selectedObjects = selectionItem.all ? (this.View.objectcount || this.View.length) - selectionItem.exclusions.length : selectionItem.items.length;\r\n return this.selectedObjects;\r\n }\r\n\r\n /**\r\n * Gestisce il comando di \"Seleziona tutto in tutte le pagine\" o il suo contrario, cioè \"Reimposta selezione\"\r\n */\r\n public selectAllOrResetSelection() {\r\n let selectionItem = this.View.selection || this.arraymodeSelection;\r\n this.selOrDeselCache = {};\r\n selectionItem.all = !selectionItem.all;\r\n selectionItem.exclusions = [];\r\n selectionItem.items = [];\r\n\r\n // Ripulisco gli stati UI di selezione globale se l'ho disattivata\r\n if (!selectionItem.all) {\r\n this.canSelectAll = false;\r\n this.globalCheck = false;\r\n }\r\n\r\n this.finalizeSelectionInformations(selectionItem);\r\n\r\n this.onSelectionChanged.emit(selectionItem);\r\n\r\n // Dopo aver resettato direttamente il solo oggetto this.View.selection devo anche riallineare a tutti gli oggetti bindati\r\n this.evaluateSelection(this.viewMode ? this.View.items : this.View, selectionItem);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Paginazione\r\n\r\n /**\r\n * Sposta la ricerca di una pagina in avanti (o indeitro)\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public addToPage(page: number) {\r\n if (!(this.View instanceof AppSearch) && !(this.SearchView instanceof AppSearch) && !(this.View instanceof ReportDefinition))\r\n return;\r\n\r\n this.goToPage((this.SearchView || this.View).page + page);\r\n }\r\n\r\n /**\r\n * Sposta la ricerca alla pagina specificata\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public goToPage(page: number) {\r\n\r\n if (!(this.View instanceof AppSearch) && !(this.SearchView instanceof AppSearch) && !(this.View instanceof ReportDefinition))\r\n return;\r\n\r\n let appSearchElement = this.SearchView || this.View;\r\n if (page === 0 || page > appSearchElement.pages)\r\n return;\r\n\r\n appSearchElement.page = page;\r\n this.arrayPulsanti = this.getPagesArray(6, appSearchElement.page, appSearchElement.pages);\r\n\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest**\r\n * per comunicare al componente che utilizza questa tabella che i dati sono da aggiornare\r\n */\r\n public onItemsPerPageChanged() {\r\n this.emitSearchRequest(true);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Export\r\n\r\n /**\r\n * Effettua l'esportazione dei dati\r\n *\r\n * @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella\r\n */\r\n public tryExport(format?: string) {\r\n if (!this.ExportFunction)\r\n return;\r\n\r\n if (this.reportMode)\r\n this.ExportFunction(format);\r\n else\r\n this.ExportFunction((data, cancel: boolean = false) => {\r\n if (cancel)\r\n return;\r\n this.setupExport(data);\r\n this.cdr.detectChanges();\r\n setTimeout(() => { this.exportDownloader.nativeElement.click(); });\r\n });\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n private setupExport(items: any[]) {\r\n let drcd = this.DynamicRowColumnsDefinition;\r\n\r\n this.headers = drcd && drcd.length > 0 ? this.expExts.setupForGenericExport(items, drcd.map(t => { return { label: t.description, key: t.propertyName, order: t.columnOrder } })) : this.expExts.setupForExport(items);\r\n this.data = items;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione Modalità Report\r\n\r\n /**\r\n * Sul click dell'Header di una colonna questo metodo si occupa di applicare l'ordinamento successivo e di notificare con **emitSearchRequest**\r\n * il bisogno di aggiornare i dati da parte del componente che utilizza la tabella\r\n *\r\n * Utilizzato solo in modalità REport\r\n *\r\n * @param {ReportColumn} clm Colonna del report per cui ordinare\r\n */\r\n public setupNextOrderAndSearch(clm: ReportColumn) {\r\n if (!(this.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo setupNextOrderAndSearch');\r\n return;\r\n }\r\n\r\n let orderNext = { NONE: 'DESC', DESC: 'ASC', ASC: null };\r\n let nextOrder = orderNext[clm.order || 'NONE'];\r\n clm.order = nextOrder;\r\n\r\n let order: ReportOrder;\r\n let clmOrder = this.View.orders ? this.View.orders.filter(t => t.column == clm.id) : [];\r\n if (clmOrder.length == 0 && clm.order) {\r\n order = new ReportOrder();\r\n order.column = clm.id;\r\n order.order = clm.order;\r\n if (!this.View.orders)\r\n this.View.orders = [];\r\n\r\n this.View.orders.push(order);\r\n }\r\n else if (clmOrder.length == 1) {\r\n // Rimuovo l'ordinamento o aggiorno quello già esistente\r\n if(!clm.order)\r\n clmOrder = [];\r\n else\r\n clmOrder[0].order = clm.order;\r\n }\r\n else\r\n console.warn('Impossibile settare ordinamento. Colonna ' + clm.id + ' direttive di ordinamento ' + clmOrder.length + ' ordinamento scelto ' + clm.order);\r\n\r\n // Dopo aver aggiornato l'ordinamento rilancio la ricerca\r\n this.emitSearchRequest(false);\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di gestire la grafica della tabella in base alle informazioni di ordinamento colonne e paginazione contenuti nel modello\r\n */\r\n private reviewReportBindings() {\r\n if (!(this.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo reviewReportBindings');\r\n return;\r\n }\r\n\r\n // Allineo le informazioni su eventuali ordinamenti fatti precedentemente\r\n if (this.View.orders && this.View.orders.length > 0) {\r\n this.View.orders.forEach(t => {\r\n this.ReportValues.columns.filter(c => c.id == t.column)[0].order = t.order;\r\n });\r\n }\r\n\r\n // Recupero il count precedente se serve\r\n if (this.ReportValues.count != -2)\r\n this.previousCount = this.ReportValues.count;\r\n else if (this.ReportValues.count == -2)\r\n this.ReportValues.count = this.previousCount;\r\n\r\n let ipp = (this.View.itemsperpageoverride || 15);\r\n this.View.pages = Math.ceil(this.ReportValues.count / ipp);\r\n this.arrayPulsanti = this.getPagesArray(6, this.View.page, this.View.pages);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione update automatico\r\n\r\n /**\r\n * Metodo che gestisce la modifica del tempo specificato per l'aggiornamento automatico\r\n */\r\n public autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n\r\n let secondsInMs = parseInt(this.seconds, null) * 1000;\r\n\r\n if (this.autoUpdate)\r\n this.updateTimer = setInterval(() => { this.emitSearchRequest(false); }, secondsInMs);\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione tabella dinamica\r\n\r\n /**\r\n * Metodo chiamato dal click su una delle colonne generate dall'Input **DynamicOperations**\r\n *\r\n * @param {any} item L'oggetto su cui va effettuata l'operazione\r\n * @param {string} opid Codice identificativo dell'operazione da effettuarsi\r\n */\r\n public dynamicOperation(item: any, opid: string) {\r\n this.onDynamicOperation.emit({ id: opid, item: item });\r\n }\r\n\r\n /**\r\n * Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n public generateRouterLink(path: string, parameterProps: string[], item: GenericItem): any {\r\n if (this.DynamicTableRouterLinkCache[item.hash + path]) {\r\n return this.DynamicTableRouterLinkCache[item.hash + path];\r\n } else {\r\n let link = this.getRouterLink(path, parameterProps, item);\r\n this.DynamicTableRouterLinkCache[item.hash + path] = link;\r\n return link;\r\n }\r\n }\r\n\r\n /**\r\n * Crea un router link\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n private getRouterLink(path: string, pars: string[], item: GenericItem): any {\r\n\r\n for (let i = 0; i < pars.length; i++)\r\n path = path.replace('{' + i + '}', item.properties[pars[i]]);\r\n\r\n path = path.replace(/'/g, '\"').replace(/ /g, '');\r\n return JSON.parse(path);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Paginazione in modalità Array\r\n\r\n /**\r\n * Equivalente del metodo **addToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public arrayAddToPage(page: number) {\r\n this.arrayGoToPage(this.arraymodePage + page)\r\n }\r\n\r\n /**\r\n * Equivalente del metodo **goToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public arrayGoToPage(page: number) {\r\n if (page === 0 || page > this.arraymodePages)\r\n return;\r\n this.arraymodePage = page;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Metodo per effettuare il refresh della paginazione sul cambiamento degli oggetti da visualizzare in una singola pagina.\r\n *\r\n * Vale solo per la modalità Array\r\n *\r\n * @param {number} pageSize Dimensione della pagina\r\n */\r\n public refreshPaging(pageSize: number) {\r\n this.ArraymodeItemsPerPage = pageSize;\r\n this.arraymodePages = Math.ceil((this.View as any[]).length / this.ArraymodeItemsPerPage);\r\n this.arraymodePage = 1;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Genera le informazioni di paginazione e taglia la View in modalità array per mostrare solo gli oggetti della pagina specificata\r\n */\r\n private adaptViewToPaging() {\r\n let tmpItems: any[] = [];\r\n this.arrayPulsanti = this.getPagesArray(6, this.arraymodePage, this.arraymodePages);\r\n\r\n // Poi per tutti i valori dopo compresi fra la pagina - 1 e la pagina\r\n for (let i = ((this.arraymodePage - 1) * this.ArraymodeItemsPerPage); i < this.arraymodePage * this.ArraymodeItemsPerPage; i++) {\r\n if (i <= (this.View as any[]).length - 1)\r\n tmpItems.push((this.View as any[])[i]);\r\n }\r\n return tmpItems;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Gestione click sulle celle dinamiche e opzioni nel Corner Menu\r\n\r\n /**\r\n * Gestore dei click sulle celle per le quali era impostata una azione custom da **CustomCellActionsOn**\r\n *\r\n * @param {string} name Nome della cella su cui si è fatto click\r\n * @param {any} model Modello relativo alla cella cliccata\r\n *\r\n * @returns {boolean} **true** se il click è stato fatto su una cella cliccabile, **false** altrimenti\r\n */\r\n public cellClicked(name: string, model: any): boolean {\r\n if (this.UseCustomCellActions && this.CustomCellActionsOn.split('$').indexOf(name) != -1) {\r\n this.onCellClick.emit({ column: name, model: model });\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gestione dei click sulle opzioni del menù contestuale in alto a destra generato dall'Input **CornerMenuOptions**\r\n *\r\n * @param {string} cornerid Codice dell'operazione selezionata\r\n */\r\n public cornerActionClicked(cornerid: string) {\r\n this.onCornerAction.emit({ id: cornerid, estable: this });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Metodi di utilità\r\n\r\n /** Impostazione modalità dell'EsTable */\r\n private setMode(mode: 'array' | 'view' | 'report') {\r\n this.viewMode = mode == 'view';\r\n this.arrayMode = mode == 'array';\r\n this.reportMode = mode == 'report';\r\n\r\n if (this.reportMode) {\r\n // In modalità report ho di sicuro queste due\r\n this.XLSXExport = true;\r\n this.CSVExport = false;\r\n }\r\n }\r\n\r\n /**\r\n * Helper per effettuare chiamate interne di allineamento alla funzione **writeValue**, impostando prima **internalWriteCall** in modo da non effettuare operazioni inutili\r\n */\r\n private internalWriteValue() {\r\n this.internalWriteCall = true;\r\n this.writeValue(this.View);\r\n this.internalWriteCall = false;\r\n }\r\n\r\n /**\r\n * Date le informazioni di paginazione ottiene l'array dei pulsanti\r\n *\r\n * @param {number} maxBtns Numero massimo di pulsanti da visualizzare\r\n * @param {number} page Pagina corrente\r\n * @param {number} lastPage Ultima pagina disponibile\r\n *\r\n * @returns {any[]} Pseudo-array di pulsanti a cui ci si può bindare lato HTML\r\n */\r\n private getPagesArray(maxBtns: number, page: number, lastPage: number): any[] {\r\n let result = [];\r\n if (lastPage == -1)\r\n lastPage = page + 1;\r\n\r\n let min, max;\r\n if (lastPage <= maxBtns) {\r\n min = 1;\r\n max = lastPage - 1;\r\n } else {\r\n // tolgo la pagina selected è l'ultima pagina che è quella delle pagine totali\r\n let rangeOutside = (maxBtns - 2) / 2;\r\n\r\n min = page - rangeOutside;\r\n max = page + rangeOutside;\r\n\r\n if (min < 1) {\r\n min = 1;\r\n max = maxBtns - 1;\r\n } else if (max >= lastPage) {\r\n min = lastPage - maxBtns + 1;\r\n max = lastPage - 1;\r\n }\r\n }\r\n\r\n result.push({ val: 1, cssClass: (1 === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n if (max >= min) {\r\n for (let i = min; i <= max; i++)\r\n if (i !== 1)\r\n result.push({ val: i, cssClass: (i === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n result.push({\r\n val: lastPage,\r\n cssClass: (lastPage === page ? 'btn-main app-white-text' : 'app-white-button')\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Calcola l'hash di un oggetto qualsiasi\r\n *\r\n * @param {any[]} items Oggetti per cui calcolare l'hash\r\n */\r\n private calculateHash(items: any[]) {\r\n if (!items)\r\n return;\r\n\r\n // Supporto a hash duplicati di oggetti uguali\r\n let usedHashesCache: { [index: string]: number } = {};\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n\r\n // Prima di calcolare l'hash rimuovo le proprietà interne prima che mi scompensino i calcoli successivi\r\n delete item._selected;\r\n delete item.hash;\r\n\r\n let hash = this.hashExts.hashObject(item);\r\n usedHashesCache[hash] = usedHashesCache[hash] ? usedHashesCache[hash] + 1 : 1;\r\n item.hash = hash + (usedHashesCache[hash] > 1 ? \"_\" + usedHashesCache[hash] : \"\")\r\n }\r\n }\r\n\r\n /**\r\n * Metodo eventualmente richiamabile anche dal componente esterno che permette di forzare un refresh della tabella\r\n */\r\n public forceRefresh() {\r\n\r\n // Se sono in modalità View viene mantenuto in automatico il numero di pagina, ma per la modalità array devo prendere le info di paginazione prima e riapplicarle dopo\r\n let arrayPage: number;\r\n let arrayIpp: number;\r\n if (this.arrayMode) {\r\n arrayPage = this.arraymodePage;\r\n arrayIpp = this.ArraymodeItemsPerPage;\r\n }\r\n\r\n this.writeValue(this.View);\r\n this.cdr.detectChanges();\r\n\r\n if (this.arrayMode) {\r\n this.ArraymodeItemsPerPage = arrayIpp;\r\n this.arrayGoToPage(arrayPage);\r\n }\r\n }\r\n\r\n // #endregion\r\n}","/**\r\n * Modello di configurazione per L'EsTable\r\n */\r\nexport class EsTableModuleConfig{\r\n\r\n /**\r\n * Locale da utilizzare per i messaggi, supportati \"it-IT\" ed \"en-US\"\r\n */\r\n locale: string;\r\n}","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from '../tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **TablePagerComponent**\r\n */\r\n@Injectable()\r\nexport class TablePagerLoc extends LocalizationService {\r\n \r\n /**\r\n * @ignore\r\n */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE ?? 'it-IT');\r\n super.set(\"en->it\", \"All\", [\"Tutto\"]);\r\n super.set(\"en->it\", \"Are you sure you want to retrieve all results?\", [\"Si è sicuri di voler caricare tutti i risultati?\"]);\r\n super.set(\"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\"]);\r\n }\r\n}","// Angular\r\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { TablePagerLoc } from \"./table_pager.component.loc\";\r\n\r\n/**\r\n * Componente che si occupa della paginazione di una tabella\r\n */\r\n@Component({\r\n selector: \"app-paging\",\r\n viewProviders: [{ provide: LocalizationService, useClass: TablePagerLoc }],\r\n templateUrl: \"./table_pager.component.html\"\r\n})\r\nexport class TablePagerComponent {\r\n\r\n /**\r\n * Dimensione di pagina attuale\r\n */\r\n @Input() CurrentPageSize: any;\r\n\r\n /**\r\n * View gestita, che può essere un IAppSearch o una ReportView\r\n */\r\n @Input() View: any;\r\n\r\n /**\r\n * Indica se il componente di paginazione dev'essere nascosto o visibile\r\n */\r\n @Input() Hidden: boolean;\r\n\r\n /**\r\n * Indica se deve mostrare un warning quando si cercano di solezionare come elementi da visualizzare \"Tutti\"\r\n */\r\n @Input() WarnOnAll: boolean = true;\r\n\r\n /**\r\n * Indica se dare la possibilità o meno di selezionare \"Tutti\" nelle opzioni di paginazione\r\n */\r\n @Input() AllSearch: boolean = true;\r\n \r\n /**\r\n * Placeholder che identifica il \"Tutti\"\r\n */\r\n @Input() DefaultAll = 999999;\r\n\r\n /**\r\n * Output invocato quando il numero di elementi per pagina viene modificato da un click utente\r\n */\r\n @Output() pagingSelected = new EventEmitter<number>();\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgExts: MessageService, public lc: LocalizationService) { }\r\n\r\n /**\r\n * Funzione richiamata dal template quando un utente clicca su un numero di paginazione.\r\n * \r\n * Cliccare 2 volte sullo stesso numero causa comunque un refresh dei dati\r\n * \r\n * @param {number} pageSize Dimensione selezionata lato UI\r\n */\r\n public choice(pageSize: number) {\r\n if (pageSize == this.DefaultAll && this.WarnOnAll) {\r\n this.msgExts.simpleWarningWithChoice(\r\n this.lc.loc(\"Are you sure you want to retrieve all results?\"),\r\n this.lc.loc(\"This might slow down the page and possibly crash the entire application\"),\r\n () => { this.pagingSelected.emit(pageSize); });\r\n }\r\n else\r\n this.pagingSelected.emit(pageSize);\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { UtilityService, ExportService, HashingService, MessageService } from '@esfaenza/extensions';\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\n\r\nimport { EST_LOCALE } from './tokens';\r\nimport { EsTableModuleConfig } from './models/EsTableModuleConfig';\r\n\r\nimport { TablePagerComponent } from './pager/table_pager.component';\r\nimport { EsTableComponent } from './es_table.component';\r\nimport { EsTh } from './es_th.component';\r\nimport { EsTd } from './es_td.component';\r\n\r\nimport { ModalModule } from \"ngx-bootstrap/modal\";\r\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\r\nimport { CsvModule } from \"@ctrl/ngx-csv\";\r\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule, \r\n RouterModule, \r\n LocalizationModule, \r\n ModalModule, \r\n BsDropdownModule, \r\n CsvModule, \r\n ContextMenuModule\r\n ],\r\n declarations: [EsTh, EsTd, EsTableComponent, TablePagerComponent],\r\n providers: [UtilityService, ExportService, HashingService, MessageService],\r\n exports: [EsTh, EsTd, EsTableComponent, TablePagerComponent]\r\n})\r\nexport class EsTableModule {\r\n static forRoot(config?: EsTableModuleConfig): ModuleWithProviders<EsTableModule> {\r\n return {\r\n ngModule: EsTableModule,\r\n providers: [\r\n { provide: EST_LOCALE, useValue: config?.locale || 'it-IT' }\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of es-table\r\n */\r\n\r\nexport * from './lib/es_table.component';\r\nexport * from './lib/es_th.component';\r\nexport * from './lib/es_td.component';\r\nexport * from './lib/models/EsTableModuleConfig';\r\nexport * from './lib/es-table.module';\r\nexport * from './lib/domain';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {EsTableLoc as ɵa} from './lib/es_table.component.loc';\nexport {TablePagerComponent as ɵc} from './lib/pager/table_pager.component';\nexport {TablePagerLoc as ɵd} from './lib/pager/table_pager.component.loc';\nexport {EST_LOCALE as ɵb} from './lib/tokens';"],"names":["Component","ChangeDetectionStrategy","ElementRef","Renderer2","ViewContainerRef","DomSanitizer","Input","EventEmitter","Output","ViewChild","HostListener","InjectionToken","LocalizationService","Injectable","Optional","Inject","ViewEncapsulation","NgControl","Self","PreferencesService","ChangeDetectorRef","HashingService","UtilityService","ExportService","ContentChildren","forwardRef","ContentChild","MessageService","NgModule","CommonModule","FormsModule","RouterModule","LocalizationModule","ModalModule","BsDropdownModule","CsvModule","ContextMenuModule"],"mappings":"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"}