@esfaenza/es-table 11.2.39 → 11.2.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/bundles/esfaenza-es-table.umd.js +486 -501
  2. package/bundles/esfaenza-es-table.umd.js.map +1 -1
  3. package/bundles/esfaenza-es-table.umd.min.js +1 -1
  4. package/bundles/esfaenza-es-table.umd.min.js.map +1 -1
  5. package/esfaenza-es-table.d.ts +1 -1
  6. package/esfaenza-es-table.metadata.json +1 -1
  7. package/esm2015/esfaenza-es-table.js +2 -2
  8. package/esm2015/lib/components/es-table/es_table.component.js +22 -8
  9. package/esm2015/lib/core/handlers/ColumnMetadataHandler.js +669 -0
  10. package/esm2015/lib/core/handlers/DynamicModeHandler.js +63 -0
  11. package/esm2015/lib/core/handlers/ExportHandler.js +106 -0
  12. package/esm2015/lib/core/handlers/HierarchyModeHandler.js +136 -0
  13. package/esm2015/lib/core/handlers/ItemsHandler.js +112 -0
  14. package/esm2015/lib/core/handlers/ReportModeHandler.js +70 -0
  15. package/esm2015/lib/core/handlers/RowGroupingHandler.js +481 -0
  16. package/esm2015/lib/core/handlers/SelectionHandler.js +526 -0
  17. package/esm2015/lib/core/handlers/UtilitiesHandler.js +155 -0
  18. package/esm2015/lib/directives/es_th.directive.js +4 -1
  19. package/esm2015/lib/domain/configuration/EsTableDefaultable.js +1 -1
  20. package/esm2015/lib/domain/externals/CornerMenuOption.js +4 -0
  21. package/esm2015/lib/domain/externals/EsTableColumnsDefinition.js +31 -0
  22. package/esm2015/lib/domain/externals/EsTableOperationDefinition.js +22 -0
  23. package/esm2015/lib/domain/externals/appsearch/AppOrdering.js +16 -0
  24. package/esm2015/lib/domain/externals/appsearch/AppSearch.js +35 -0
  25. package/esm2015/lib/domain/externals/appsearch/GenericItem.js +11 -0
  26. package/esm2015/lib/domain/externals/appsearch/Group.js +17 -0
  27. package/esm2015/lib/domain/externals/appsearch/GroupAggregation.js +16 -0
  28. package/esm2015/lib/domain/externals/appsearch/GroupFilter.js +14 -0
  29. package/esm2015/lib/domain/externals/appsearch/GroupOrAggregation.js +16 -0
  30. package/esm2015/lib/domain/externals/appsearch/ItemsSelection.js +23 -0
  31. package/esm2015/lib/domain/externals/report/ReportColumn.js +4 -0
  32. package/esm2015/lib/domain/externals/report/ReportDefinition.js +4 -0
  33. package/esm2015/lib/domain/externals/report/ReportOrder.js +4 -0
  34. package/esm2015/lib/domain/externals/report/ReportParam.js +4 -0
  35. package/esm2015/lib/domain/externals/report/ReportResult.js +4 -0
  36. package/esm2015/lib/domain/externals/report/ReportRow.js +4 -0
  37. package/esm2015/lib/domain/internals/CacheTriptic.js +16 -0
  38. package/esm2015/lib/domain/internals/EsTableColumn.js +27 -0
  39. package/esm2015/lib/domain/internals/GroupPager.js +22 -0
  40. package/esm2015/lib/domain/internals/GroupRouteFragment.js +17 -0
  41. package/esm2015/lib/domain/internals/TdElement.js +2 -0
  42. package/esm2015/lib/domain/internals/ThAggregation.js +16 -0
  43. package/esm2015/lib/domain/internals/ThElement.js +2 -0
  44. package/esm2015/public-api.js +18 -5
  45. package/fesm2015/esfaenza-es-table.js +436 -452
  46. package/fesm2015/esfaenza-es-table.js.map +1 -1
  47. package/lib/components/es-table/es_table.component.d.ts +25 -5
  48. package/lib/core/handlers/{classes/ColumnMetadataHandler.d.ts → ColumnMetadataHandler.d.ts} +9 -7
  49. package/lib/core/handlers/{classes/DynamicModeHandler.d.ts → DynamicModeHandler.d.ts} +2 -2
  50. package/lib/core/handlers/{classes/ExportHandler.d.ts → ExportHandler.d.ts} +1 -1
  51. package/lib/core/handlers/{classes/HierarchyModeHandler.d.ts → HierarchyModeHandler.d.ts} +1 -1
  52. package/lib/core/handlers/{classes/ItemsHandler.d.ts → ItemsHandler.d.ts} +1 -1
  53. package/lib/core/handlers/{classes/ReportModeHandler.d.ts → ReportModeHandler.d.ts} +2 -2
  54. package/lib/core/handlers/{classes/RowGroupingHandler.d.ts → RowGroupingHandler.d.ts} +8 -3
  55. package/lib/core/handlers/{classes/SelectionHandler.d.ts → SelectionHandler.d.ts} +3 -3
  56. package/lib/core/handlers/{classes/UtilitiesHandler.d.ts → UtilitiesHandler.d.ts} +0 -0
  57. package/lib/directives/es_th.directive.d.ts +3 -1
  58. package/lib/domain/configuration/EsTableDefaultable.d.ts +1 -0
  59. package/lib/domain/externals/{classes/CornerMenuOption.d.ts → CornerMenuOption.d.ts} +0 -0
  60. package/lib/domain/externals/{classes/EsTableColumnsDefinition.d.ts → EsTableColumnsDefinition.d.ts} +0 -0
  61. package/lib/domain/externals/{classes/EsTableOperationDefinition.d.ts → EsTableOperationDefinition.d.ts} +0 -0
  62. package/lib/domain/externals/{classes/appsearch → appsearch}/AppOrdering.d.ts +0 -0
  63. package/lib/domain/externals/{classes/appsearch → appsearch}/AppSearch.d.ts +0 -0
  64. package/lib/domain/externals/{classes/appsearch → appsearch}/GenericItem.d.ts +0 -0
  65. package/lib/domain/externals/{classes/appsearch → appsearch}/Group.d.ts +0 -0
  66. package/lib/domain/externals/{classes/appsearch → appsearch}/GroupAggregation.d.ts +0 -0
  67. package/lib/domain/externals/{classes/appsearch → appsearch}/GroupFilter.d.ts +0 -0
  68. package/lib/domain/externals/{classes/appsearch → appsearch}/GroupOrAggregation.d.ts +0 -0
  69. package/lib/domain/externals/{classes/appsearch → appsearch}/ItemsSelection.d.ts +1 -1
  70. package/lib/domain/externals/{classes/report → report}/ReportColumn.d.ts +0 -0
  71. package/lib/domain/externals/{classes/report → report}/ReportDefinition.d.ts +3 -1
  72. package/lib/domain/externals/{classes/report → report}/ReportOrder.d.ts +0 -0
  73. package/lib/domain/externals/{classes/report → report}/ReportParam.d.ts +0 -0
  74. package/lib/domain/externals/{classes/report → report}/ReportResult.d.ts +2 -1
  75. package/lib/domain/externals/{classes/report → report}/ReportRow.d.ts +0 -0
  76. package/lib/domain/internals/{classes/CacheTriptic.d.ts → CacheTriptic.d.ts} +0 -0
  77. package/lib/domain/internals/{classes/EsTableColumn.d.ts → EsTableColumn.d.ts} +2 -1
  78. package/lib/domain/internals/{classes/GroupPager.d.ts → GroupPager.d.ts} +2 -1
  79. package/lib/domain/internals/{classes/GroupRouteFragment.d.ts → GroupRouteFragment.d.ts} +0 -0
  80. package/lib/domain/internals/{classes/TdElement.d.ts → TdElement.d.ts} +17 -1
  81. package/lib/domain/internals/{classes/ThAggregation.d.ts → ThAggregation.d.ts} +0 -0
  82. package/lib/domain/internals/{classes/ThElement.d.ts → ThElement.d.ts} +0 -0
  83. package/package.json +1 -1
  84. package/public-api.d.ts +17 -1
  85. package/esm2015/lib/core/handlers/classes/ColumnMetadataHandler.js +0 -667
  86. package/esm2015/lib/core/handlers/classes/DynamicModeHandler.js +0 -64
  87. package/esm2015/lib/core/handlers/classes/ExportHandler.js +0 -106
  88. package/esm2015/lib/core/handlers/classes/HierarchyModeHandler.js +0 -136
  89. package/esm2015/lib/core/handlers/classes/ItemsHandler.js +0 -112
  90. package/esm2015/lib/core/handlers/classes/ReportModeHandler.js +0 -70
  91. package/esm2015/lib/core/handlers/classes/RowGroupingHandler.js +0 -478
  92. package/esm2015/lib/core/handlers/classes/SelectionHandler.js +0 -527
  93. package/esm2015/lib/core/handlers/classes/UtilitiesHandler.js +0 -155
  94. package/esm2015/lib/core/handlers/index.js +0 -10
  95. package/esm2015/lib/domain/externals/classes/CornerMenuOption.js +0 -4
  96. package/esm2015/lib/domain/externals/classes/EsTableColumnsDefinition.js +0 -31
  97. package/esm2015/lib/domain/externals/classes/EsTableOperationDefinition.js +0 -22
  98. package/esm2015/lib/domain/externals/classes/appsearch/AppOrdering.js +0 -16
  99. package/esm2015/lib/domain/externals/classes/appsearch/AppSearch.js +0 -35
  100. package/esm2015/lib/domain/externals/classes/appsearch/GenericItem.js +0 -11
  101. package/esm2015/lib/domain/externals/classes/appsearch/Group.js +0 -17
  102. package/esm2015/lib/domain/externals/classes/appsearch/GroupAggregation.js +0 -16
  103. package/esm2015/lib/domain/externals/classes/appsearch/GroupFilter.js +0 -14
  104. package/esm2015/lib/domain/externals/classes/appsearch/GroupOrAggregation.js +0 -16
  105. package/esm2015/lib/domain/externals/classes/appsearch/ItemsSelection.js +0 -23
  106. package/esm2015/lib/domain/externals/classes/report/ReportColumn.js +0 -4
  107. package/esm2015/lib/domain/externals/classes/report/ReportDefinition.js +0 -4
  108. package/esm2015/lib/domain/externals/classes/report/ReportOrder.js +0 -4
  109. package/esm2015/lib/domain/externals/classes/report/ReportParam.js +0 -4
  110. package/esm2015/lib/domain/externals/classes/report/ReportResult.js +0 -4
  111. package/esm2015/lib/domain/externals/classes/report/ReportRow.js +0 -4
  112. package/esm2015/lib/domain/externals/index.js +0 -18
  113. package/esm2015/lib/domain/index.js +0 -3
  114. package/esm2015/lib/domain/internals/classes/CacheTriptic.js +0 -16
  115. package/esm2015/lib/domain/internals/classes/EsTableColumn.js +0 -26
  116. package/esm2015/lib/domain/internals/classes/GroupPager.js +0 -22
  117. package/esm2015/lib/domain/internals/classes/GroupRouteFragment.js +0 -17
  118. package/esm2015/lib/domain/internals/classes/TdElement.js +0 -2
  119. package/esm2015/lib/domain/internals/classes/ThAggregation.js +0 -16
  120. package/esm2015/lib/domain/internals/classes/ThElement.js +0 -2
  121. package/esm2015/lib/domain/internals/index.js +0 -8
  122. package/lib/core/handlers/index.d.ts +0 -9
  123. package/lib/domain/externals/index.d.ts +0 -17
  124. package/lib/domain/index.d.ts +0 -2
  125. package/lib/domain/internals/index.d.ts +0 -7
@@ -0,0 +1,63 @@
1
+ import { EsTableColumnsDefinition } from "../../domain/externals/EsTableColumnsDefinition";
2
+ /** Classe contenente le gestioni particolari della modalità dinamica dell'es-table */
3
+ export class DynamicModeHandler {
4
+ /** @ignore Costruttore*/
5
+ constructor(est) {
6
+ this.est = est;
7
+ }
8
+ /**
9
+ * Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica
10
+ *
11
+ * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
12
+ * @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
13
+ * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
14
+ * @param {GenericItem} item Oggetto generico collegato a questo contesto
15
+ *
16
+ * @returns {any} Router link generato in base al parametri
17
+ */
18
+ generateRouterLink(path, parameterProps, item) {
19
+ if (this.est.DynamicTableRouterLinkCache[item._hash + path]) {
20
+ return this.est.DynamicTableRouterLinkCache[item._hash + path];
21
+ }
22
+ else {
23
+ let link = this.getRouterLink(path, parameterProps, item);
24
+ this.est.DynamicTableRouterLinkCache[item._hash + path] = link;
25
+ return link;
26
+ }
27
+ }
28
+ /**
29
+ * Crea un router link
30
+ *
31
+ * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...
32
+ * @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**
33
+ * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**
34
+ * @param {GenericItem} item Oggetto generico collegato a questo contesto
35
+ *
36
+ * @returns {any} Router link generato in base al parametri
37
+ */
38
+ getRouterLink(path, pars, item) {
39
+ for (let i = 0; i < pars.length; i++)
40
+ path = path.replace('{' + i + '}', item.properties[pars[i]]);
41
+ path = path.replace(/'/g, '"').replace(/ /g, '');
42
+ return JSON.parse(path);
43
+ }
44
+ /** Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna */
45
+ eventuallyReviewDynamicColumns() {
46
+ // Senza oggetti esco
47
+ if (!this.est.TMPBoundSource || this.est.TMPBoundSource.length == 0)
48
+ return;
49
+ var useGenericItems = !!this.est.TMPBoundSource[0]["properties"];
50
+ if (!useGenericItems || (!this.est.FirstBind && this.est.DynamicRowColumnsDefinition && this.est.DynamicRowColumnsDefinition.length > 0))
51
+ return;
52
+ if ((!this.est.DynamicRowColumnsDefinition || this.est.DynamicRowColumnsDefinition.length == 0)) {
53
+ var props = this.est.TMPBoundSource[0]["properties"];
54
+ this.est.DynamicRowColumnsDefinition = [];
55
+ for (let key in props)
56
+ this.est.DynamicRowColumnsDefinition.push(new EsTableColumnsDefinition(key, key));
57
+ this.est.UserDefinedDynamicCols = false;
58
+ }
59
+ else
60
+ this.est.UserDefinedDynamicCols = true;
61
+ }
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY01vZGVIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL0R5bmFtaWNNb2RlSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUUzRixzRkFBc0Y7QUFDdEYsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQix5QkFBeUI7SUFDekIsWUFBb0IsR0FBcUI7UUFBckIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7SUFBSSxDQUFDO0lBRTlDOzs7Ozs7Ozs7T0FTRztJQUNJLGtCQUFrQixDQUFDLElBQVksRUFBRSxjQUF3QixFQUFFLElBQWlCO1FBQy9FLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ3pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ2xFO2FBQU07WUFDSCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMvRCxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNLLGFBQWEsQ0FBQyxJQUFZLEVBQUUsSUFBYyxFQUFFLElBQWlCO1FBRWpFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxnSkFBZ0o7SUFDekksOEJBQThCO1FBQ2pDLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDL0QsT0FBTztRQUVYLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNwSSxPQUFPO1FBRVgsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRTtZQUM3RixJQUFJLEtBQUssR0FBMkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDMUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLO2dCQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1NBQzNDOztZQUdHLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvbXBvbmVudGlcclxuaW1wb3J0IHsgRXNUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudFwiXHJcblxyXG4vLyBEb21pbmlvXHJcbmltcG9ydCB7IEdlbmVyaWNJdGVtIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0dlbmVyaWNJdGVtXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0VzVGFibGVDb2x1bW5zRGVmaW5pdGlvblwiO1xyXG5cclxuLyoqIENsYXNzZSBjb250ZW5lbnRlIGxlIGdlc3Rpb25pIHBhcnRpY29sYXJpIGRlbGxhIG1vZGFsaXTDoCBkaW5hbWljYSBkZWxsJ2VzLXRhYmxlICovXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kZUhhbmRsZXIge1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZXN0OiBFc1RhYmxlQ29tcG9uZW50KSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBkaSBzdXBwb3J0byBhbGxhIGNyZWF6aW9uZSBkaSB1biByb3V0ZXIgbGluayBwYXJhbWV0cml6emF0byBhbGwnb2dnZXR0byBjb3JyZW50ZSB1dGlsaXp6YXRvIG5lbGxhIG1vZGFsaXTDoCBkaW5hbWljYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3UgY3VpIG5hdmlnYXJlIGNvbiBldmVudHVhbGkgcGFyYW1ldHJpIHJpZmVyaXRpIGFsbCdvZ2dldHRvIGNvdG5lc3R1YWxlIGNvbWUgezB9LCB7MX0sIGVjYy4uLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGFyYW1ldGVyUHJvcHMgTGlzdGEgcG9zaXppb25hbGUgZGVsbGUgcHJvcHJpZXTDoCBhIGN1aSBiaW5kYXJlIGkgcmlmZXJpbWVudGkgZGVsIHBhcmFtZXRybyAqKnBhdGgqKlxyXG4gICAgICogRXMuIElsIHZhbG9yZSBkZWxhIHByb3ByaWV0w6AgYWxsJ2luZGljZSAwIGRpIHF1ZXN0byBhcnJheSB2ZXJyw6Agc29zdGl0dWl0YSBhbCB2YWxvcmUgezB9IGRlbCBwYXJhbWV0cm8gKipwYXRoKipcclxuICAgICAqIEBwYXJhbSB7R2VuZXJpY0l0ZW19IGl0ZW0gT2dnZXR0byBnZW5lcmljbyBjb2xsZWdhdG8gYSBxdWVzdG8gY29udGVzdG9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7YW55fSBSb3V0ZXIgbGluayBnZW5lcmF0byBpbiBiYXNlIGFsIHBhcmFtZXRyaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVSb3V0ZXJMaW5rKHBhdGg6IHN0cmluZywgcGFyYW1ldGVyUHJvcHM6IHN0cmluZ1tdLCBpdGVtOiBHZW5lcmljSXRlbSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LkR5bmFtaWNUYWJsZVJvdXRlckxpbmtDYWNoZVtpdGVtLl9oYXNoICsgcGF0aF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXN0LkR5bmFtaWNUYWJsZVJvdXRlckxpbmtDYWNoZVtpdGVtLl9oYXNoICsgcGF0aF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGxpbmsgPSB0aGlzLmdldFJvdXRlckxpbmsocGF0aCwgcGFyYW1ldGVyUHJvcHMsIGl0ZW0pO1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5EeW5hbWljVGFibGVSb3V0ZXJMaW5rQ2FjaGVbaXRlbS5faGFzaCArIHBhdGhdID0gbGluaztcclxuICAgICAgICAgICAgcmV0dXJuIGxpbms7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYSB1biByb3V0ZXIgbGlua1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3UgY3VpIG5hdmlnYXJlIGNvbiBldmVudHVhbGkgcGFyYW1ldHJpIHJpZmVyaXRpIGFsbCdvZ2dldHRvIGNvdG5lc3R1YWxlIGNvbWUgezB9LCB7MX0sIGVjYy4uLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGFycyBMaXN0YSBwb3NpemlvbmFsZSBkZWxsZSBwcm9wcmlldMOgIGEgY3VpIGJpbmRhcmUgaSByaWZlcmltZW50aSBkZWwgcGFyYW1ldHJvICoqcGF0aCoqXHJcbiAgICAgKiBFcy4gSWwgdmFsb3JlIGRlbGEgcHJvcHJpZXTDoCBhbGwnaW5kaWNlIDAgZGkgcXVlc3RvIGFycmF5IHZlcnLDoCBzb3N0aXR1aXRhIGFsIHZhbG9yZSB7MH0gZGVsIHBhcmFtZXRybyAqKnBhdGgqKlxyXG4gICAgICogQHBhcmFtIHtHZW5lcmljSXRlbX0gaXRlbSBPZ2dldHRvIGdlbmVyaWNvIGNvbGxlZ2F0byBhIHF1ZXN0byBjb250ZXN0b1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHthbnl9IFJvdXRlciBsaW5rIGdlbmVyYXRvIGluIGJhc2UgYWwgcGFyYW1ldHJpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0Um91dGVyTGluayhwYXRoOiBzdHJpbmcsIHBhcnM6IHN0cmluZ1tdLCBpdGVtOiBHZW5lcmljSXRlbSk6IGFueSB7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFycy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgneycgKyBpICsgJ30nLCBpdGVtLnByb3BlcnRpZXNbcGFyc1tpXV0pO1xyXG5cclxuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC8nL2csICdcIicpLnJlcGxhY2UoLyAvZywgJycpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTZSBub24gaG8gbCdJbnB1dCAqKkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbioqIGluIG1vZGFsaXTDoCBkaW5hbWljYSBsbyByaWVtcGlvIGNvbiBpbCBkZWZhdWx0IG5vbWUgZGVsbGEgY29sb25uYSA9IHRlc3RvIGRlbGxhIGNvbG9ubmEgKi9cclxuICAgIHB1YmxpYyBldmVudHVhbGx5UmV2aWV3RHluYW1pY0NvbHVtbnMoKSB7XHJcbiAgICAgICAgLy8gU2VuemEgb2dnZXR0aSBlc2NvXHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5UTVBCb3VuZFNvdXJjZSB8fCB0aGlzLmVzdC5UTVBCb3VuZFNvdXJjZS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgdXNlR2VuZXJpY0l0ZW1zID0gISF0aGlzLmVzdC5UTVBCb3VuZFNvdXJjZVswXVtcInByb3BlcnRpZXNcIl07XHJcbiAgICAgICAgaWYgKCF1c2VHZW5lcmljSXRlbXMgfHwgKCF0aGlzLmVzdC5GaXJzdEJpbmQgJiYgdGhpcy5lc3QuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uICYmIHRoaXMuZXN0LkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbi5sZW5ndGggPiAwKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAoKCF0aGlzLmVzdC5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24gfHwgdGhpcy5lc3QuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcHMgPSA8UmVjb3JkPHN0cmluZywgc3RyaW5nPj50aGlzLmVzdC5UTVBCb3VuZFNvdXJjZVswXVtcInByb3BlcnRpZXNcIl07XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbiA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gcHJvcHMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24ucHVzaChuZXcgRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uKGtleSwga2V5KSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlVzZXJEZWZpbmVkRHluYW1pY0NvbHMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5lc3QuVXNlckRlZmluZWREeW5hbWljQ29scyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,106 @@
1
+ import { __awaiter } from "tslib";
2
+ /** Classe contenente la gestione delle importazioni */
3
+ export class ExportHandler {
4
+ /** @ignore Costruttore*/
5
+ constructor(est, expExts, msgExts, utiExts, dateExts) {
6
+ this.est = est;
7
+ this.expExts = expExts;
8
+ this.msgExts = msgExts;
9
+ this.utiExts = utiExts;
10
+ this.dateExts = dateExts;
11
+ }
12
+ /**
13
+ * Effettua l'esportazione dei dati
14
+ *
15
+ * @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella
16
+ */
17
+ tryExport(format) {
18
+ if (!this.est.ExportFunction)
19
+ return;
20
+ if (this.est.reportMode)
21
+ this.est.ExportFunction(format);
22
+ else
23
+ this.est.ExportFunction((data, cancel = false) => __awaiter(this, void 0, void 0, function* () {
24
+ if (cancel)
25
+ return;
26
+ if (data.length == 0) {
27
+ this.msgExts.simpleWarning(this.est.lc.loc("Cannot export an empty dataset"));
28
+ return;
29
+ }
30
+ this.setupExport(data);
31
+ if (format == "CSV") {
32
+ this.est.cdr.detectChanges();
33
+ setTimeout(() => { this.est.exportDownloader.nativeElement.click(); });
34
+ }
35
+ else if (format == "XLSX") {
36
+ if (this.ExcelJS != null) {
37
+ this.exportExcel();
38
+ return;
39
+ }
40
+ try {
41
+ this.ExcelJS = yield import("exceljs");
42
+ this.exportExcel();
43
+ }
44
+ catch (_a) {
45
+ throw "Impossibile caricare la libreria per l'esportazione in Excel";
46
+ }
47
+ }
48
+ else
49
+ throw "Formato di esportazione non riconosciuto";
50
+ }));
51
+ }
52
+ /** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **this.est.headers** e sui dati **this.est.data** */
53
+ exportExcel() {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ let iFix = 1;
56
+ let workbook = new this.ExcelJS.Workbook();
57
+ workbook.creator = "Ema's big Es-Table";
58
+ workbook.created = new Date();
59
+ let sheet = workbook.addWorksheet('Data');
60
+ let header = sheet.getRow(1);
61
+ header.font = { bold: true };
62
+ this.est.headers = this.est.headers.sort((a, b) => a.order - b.order);
63
+ for (let i = 0; i < this.est.headers.length; i++) {
64
+ let h = this.est.headers[i];
65
+ header.getCell(i + iFix).value = h.label;
66
+ }
67
+ for (let i = 0; i < this.est.data.length; i++) {
68
+ let row = sheet.getRow(i + iFix + 1);
69
+ let item = this.est.data[i];
70
+ for (let i = 0; i < this.est.headers.length; i++) {
71
+ let h = this.est.headers[i];
72
+ let cell = row.getCell(i + 1);
73
+ let val = item[h.key];
74
+ if (val == null || val == undefined)
75
+ cell.value = "";
76
+ else {
77
+ switch (h.type) {
78
+ case 'date':
79
+ cell.value = this.dateExts.getDateConvertion(val).toDate();
80
+ case 'number':
81
+ cell.value = parseFloat(val.replace(',', '.'));
82
+ default:
83
+ cell.value = val;
84
+ }
85
+ }
86
+ }
87
+ }
88
+ let buffer = yield workbook.xlsx.writeBuffer();
89
+ let blob = new Blob([buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;" });
90
+ let objectUrl = window.URL.createObjectURL(blob);
91
+ let fn = this.est.ExportFileName;
92
+ this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + ".xlsx");
93
+ });
94
+ }
95
+ /**
96
+ * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**
97
+ *
98
+ * @param {any[]} items Oggetti da esportare
99
+ */
100
+ setupExport(items) {
101
+ let drcd = this.est.DynamicRowColumnsDefinition;
102
+ this.est.headers = drcd && drcd.length > 0 ? this.expExts.setupForGenericExport(items, drcd.map(t => { return { label: t.description, key: t.propertyName, order: t.columnOrder, type: 'string' }; })) : this.expExts.setupForExport(items);
103
+ this.est.data = items;
104
+ }
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwb3J0SGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9FeHBvcnRIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFNQSx1REFBdUQ7QUFDdkQsTUFBTSxPQUFPLGFBQWE7SUFLdEIseUJBQXlCO0lBQ3pCLFlBQW9CLEdBQXFCLEVBQVUsT0FBc0IsRUFBVSxPQUF1QixFQUFVLE9BQXVCLEVBQVUsUUFBcUI7UUFBdEosUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWE7SUFBSSxDQUFDO0lBRS9LOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsTUFBZTtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjO1lBQ3hCLE9BQU87UUFFWCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVTtZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFHaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBTyxJQUFXLEVBQUUsU0FBa0IsS0FBSyxFQUFFLEVBQUU7Z0JBQ25FLElBQUksTUFBTTtvQkFDTixPQUFPO2dCQUVYLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7b0JBQzlFLE9BQU87aUJBQ1Y7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxN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Q0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZJLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSyxXQUFXLENBQUMsS0FBWTtRQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1FBRWhELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1TyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGlicmVyaWVcclxuaW1wb3J0IHsgQ3N2SGVhZGVycywgRGF0ZVNlcnZpY2UsIEV4cG9ydFNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5cclxuLy8gQ29tcG9uZW50aVxyXG5pbXBvcnQgeyBFc1RhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZXMtdGFibGUvZXNfdGFibGUuY29tcG9uZW50XCJcclxuXHJcbi8qKiBDbGFzc2UgY29udGVuZW50ZSBsYSBnZXN0aW9uZSBkZWxsZSBpbXBvcnRhemlvbmkgKi9cclxuZXhwb3J0IGNsYXNzIEV4cG9ydEhhbmRsZXIge1xyXG5cclxuICAgIC8qKiBDYWNoZSBkZWwgbW9kdWxvIHBlciBsJ2VzcG9ydGF6aW9uZSBFeGNlbCAqL1xyXG4gICAgcHJpdmF0ZSBFeGNlbEpTOiBhbnk7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgZXhwRXh0czogRXhwb3J0U2VydmljZSwgcHJpdmF0ZSBtc2dFeHRzOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBkYXRlRXh0czogRGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgbCdlc3BvcnRhemlvbmUgZGVpIGRhdGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IEZvcm1hdG8gZGkgZXNwb3J0YXppb25lLiBMZXR0byBzb2xvIGluIG1vZGFsaXTDoCBSZXBvcnQgZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHJ5RXhwb3J0KGZvcm1hdD86IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5lc3QuRXhwb3J0RnVuY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnJlcG9ydE1vZGUpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LkV4cG9ydEZ1bmN0aW9uKGZvcm1hdCk7XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5lc3QuRXhwb3J0RnVuY3Rpb24oYXN5bmMgKGRhdGE6IGFueVtdLCBjYW5jZWw6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlV2FybmluZyh0aGlzLmVzdC5sYy5sb2MoXCJDYW5ub3QgZXhwb3J0IGFuIGVtcHR5IGRhdGFzZXRcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwRXhwb3J0KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBcIkNTVlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc3QuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5lc3QuZXhwb3J0RG93bmxvYWRlci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IFwiWExTWFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuRXhjZWxKUyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0RXhjZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5FeGNlbEpTID0gYXdhaXQgaW1wb3J0KFwiZXhjZWxqc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBvcnRFeGNlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFwiSW1wb3NzaWJpbGUgY2FyaWNhcmUgbGEgbGlicmVyaWEgcGVyIGwnZXNwb3J0YXppb25lIGluIEV4Y2VsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiRm9ybWF0byBkaSBlc3BvcnRhemlvbmUgbm9uIHJpY29ub3NjaXV0b1wiO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWZmZXR0dWEgbCdlc3BvcnRhemlvbmUgZGVsIGZpbGUgRXhjZWwgYmFzYW5kb3NpIHN1bCBtb2R1bG8gKipFeGNlbEpTKiosIHN1Z2xpIGhlYWRlciAqKnRoaXMuZXN0LmhlYWRlcnMqKiBlIHN1aSBkYXRpICoqdGhpcy5lc3QuZGF0YSoqICovXHJcbiAgICBwcml2YXRlIGFzeW5jIGV4cG9ydEV4Y2VsKCkge1xyXG4gICAgICAgIGxldCBpRml4ID0gMTtcclxuICAgICAgICBsZXQgd29ya2Jvb2sgPSBuZXcgdGhpcy5FeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICAgICAgd29ya2Jvb2suY3JlYXRvciA9IFwiRW1hJ3MgYmlnIEVzLVRhYmxlXCI7XHJcbiAgICAgICAgd29ya2Jvb2suY3JlYXRlZCA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgIGxldCBzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgnRGF0YScpO1xyXG4gICAgICAgIGxldCBoZWFkZXIgPSBzaGVldC5nZXRSb3coMSk7XHJcbiAgICAgICAgaGVhZGVyLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICB0aGlzLmVzdC5oZWFkZXJzID0gdGhpcy5lc3QuaGVhZGVycy5zb3J0KChhOiBDc3ZIZWFkZXJzLCBiOiBDc3ZIZWFkZXJzKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaCA9IHRoaXMuZXN0LmhlYWRlcnNbaV07XHJcbiAgICAgICAgICAgIGhlYWRlci5nZXRDZWxsKGkgKyBpRml4KS52YWx1ZSA9IGgubGFiZWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LmRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHJvdyA9IHNoZWV0LmdldFJvdyhpICsgaUZpeCArIDEpO1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZXN0LmRhdGFbaV07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGggPSB0aGlzLmVzdC5oZWFkZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXRlbVtoLmtleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IHRoaXMuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odmFsKS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBwYXJzZUZsb2F0KHZhbC5yZXBsYWNlKCcsJywgJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJ1ZmZlciA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7dHlwZTogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtcIn0pO1xyXG4gICAgICAgIGxldCBvYmplY3RVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICBsZXQgZm4gPSB0aGlzLmVzdC5FeHBvcnRGaWxlTmFtZTtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuZmlsZURvd25sb2FkKG9iamVjdFVybCwgZm4uZW5kc1dpdGgoJy5jc3YnKSA/IGZuLnJlcGxhY2UoJy5jc3YnLCAnLnhsc3gnKSA6IGZuLmVuZHNXaXRoKCcueGxzeCcpID8gZm4gOiBmbiArIFwiLnhsc3hcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGVmZmV0dGl2YW1lbnRlIGdlbmVyYSBnbGkgaGVhZGVyIGUgaSBkYXRpIHBlciBsJ2VzcG9ydGF6aW9uZSBjb24gKipuZ3gtY3N2KipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIGVzcG9ydGFyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldHVwRXhwb3J0KGl0ZW1zOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBkcmNkID0gdGhpcy5lc3QuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uO1xyXG5cclxuICAgICAgICB0aGlzLmVzdC5oZWFkZXJzID0gZHJjZCAmJiBkcmNkLmxlbmd0aCA+IDAgPyB0aGlzLmV4cEV4dHMuc2V0dXBGb3JHZW5lcmljRXhwb3J0KGl0ZW1zLCBkcmNkLm1hcCh0ID0+IHsgcmV0dXJuIHsgbGFiZWw6IHQuZGVzY3JpcHRpb24sIGtleTogdC5wcm9wZXJ0eU5hbWUsIG9yZGVyOiB0LmNvbHVtbk9yZGVyLCB0eXBlOiAnc3RyaW5nJyB9OyB9KSkgOiB0aGlzLmV4cEV4dHMuc2V0dXBGb3JFeHBvcnQoaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuZXN0LmRhdGEgPSBpdGVtcztcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,136 @@
1
+ /** Classe contenente la gestione della modalità gerarchica */
2
+ export class HierarchyModeHandler {
3
+ /** @ignore Costruttore*/
4
+ constructor(est) {
5
+ this.est = est;
6
+ }
7
+ /**
8
+ * Data una lista di oggetti assegno il livello gerarchico rispetto alla lista di oggetti passata
9
+ *
10
+ * @param {any[]} objs Lista di oggetti a cui aggiungere l'informazione del livello gerarchico
11
+ */
12
+ assignHierarchyLevels(objs) {
13
+ // Casistica input nullo
14
+ if (!objs || !objs.length)
15
+ return;
16
+ //Se mancano entrambe le info le cerco di valorizzare in automatico coi default "parentid" e "id" (posto che le props esistano nell'oggetto)
17
+ if (!this.est.ParentKey && !this.est.OwnKey) {
18
+ if (objs[0]['parentid'] !== undefined)
19
+ this.est.ParentKey = 'parentid';
20
+ if (objs[0]['id'] !== undefined)
21
+ this.est.OwnKey = 'id';
22
+ }
23
+ //Check finale per assicurarmi che le props ci siano
24
+ if (!this.est.ParentKey || !this.est.OwnKey) {
25
+ console.error('Per utilizzare il sistema in modalità gerarchica è obbligatorio specificare sia ParentKey che OwnKey. Fallback a sistema non gerarchico');
26
+ return;
27
+ }
28
+ // Valorizzazione campi level, expanded, e visible per ogni item
29
+ let currentLevel = 1;
30
+ let assigned = 0;
31
+ do {
32
+ assigned = this.assignLevel(objs, currentLevel);
33
+ currentLevel++;
34
+ } while (assigned > 0);
35
+ // butto su lato html e poi me la gioco là con padding = 20 * (level - 1) per far capire il diverso livello
36
+ }
37
+ /**
38
+ * Per ognuno degli oggetti passati gli assegna un livello di gerarchia in base a **ParentKey** e **OwnKey**
39
+ *
40
+ * @param {any[]} objs Oggetti a cui assegnare il livello di gerarchia
41
+ * @param {number} levelToAssign Livello che sta assegnando attualmente questa iterazione (dato che è ricorsiva)
42
+ *
43
+ * @returns {number} Numero di oggetti a cui è stato assegnato un livello gerarchico
44
+ */
45
+ assignLevel(objs, levelToAssign) {
46
+ let assigned = 0;
47
+ for (let i = 0; i < objs.length; i++) {
48
+ let obj = objs[i];
49
+ // Se la parentKey non è valorizzata, questo è il livello 0 (1... perché gli 0 son perciolosi)
50
+ if (!obj[this.est.ParentKey] && levelToAssign == 1) {
51
+ obj._level = 1;
52
+ obj._visible = true;
53
+ obj._expanded = this.est.StartsExpanded;
54
+ assigned++;
55
+ continue;
56
+ }
57
+ // Per i livelli superiore al primo
58
+ if (obj[this.est.ParentKey] && levelToAssign > 1) {
59
+ // trovo il parent
60
+ for (let p = 0; p < objs.length; p++) {
61
+ let possibleParent = objs[p];
62
+ // Trovato il parent dell'item, assegno all'item il livello giusto
63
+ if (possibleParent[this.est.OwnKey] == obj[this.est.ParentKey] && possibleParent._level == levelToAssign - 1) {
64
+ obj._level = levelToAssign;
65
+ // So che questo item ha un parent. Ribadisco che il parent è espanso in base alle impostazione e stessa logica
66
+ // per la visibilità del figlio
67
+ possibleParent._expanded = this.est.StartsExpanded;
68
+ possibleParent.parent = true;
69
+ obj._visible = this.est.StartsExpanded;
70
+ assigned++;
71
+ break;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ return assigned;
77
+ }
78
+ /**
79
+ * Funzione che permette di effettuare l'espansione di un parent quando la tabella funziona in modalità gerarchica
80
+ *
81
+ * @param {string} key Chiave del parent da espandere
82
+ */
83
+ expandParent(key) {
84
+ for (let i = 0; i < this.est.boundSource.length; i++) {
85
+ let obj = this.est.boundSource[i];
86
+ // Trovo il parent con quell'id e lo espando
87
+ if (obj[this.est.OwnKey] == key) {
88
+ obj._expanded = true;
89
+ for (let ic = 0; ic < this.est.boundSource.length; ic++) {
90
+ let child = this.est.boundSource[ic];
91
+ // Trovo tutti i child di quel parent e li rendo visibili
92
+ if (child[this.est.ParentKey] == key)
93
+ child._visible = true;
94
+ }
95
+ return;
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Funzione che permette di effettuare il collapse di un parent quando la tabella funziona in modalità gerarchica
101
+ *
102
+ * @param {string} key Chiave del parent da collassare
103
+ */
104
+ collapseParent(key) {
105
+ for (let i = 0; i < this.est.boundSource.length; i++) {
106
+ let obj = this.est.boundSource[i];
107
+ // Trovo il parent con quell'id e lo collasso
108
+ if (obj[this.est.OwnKey] == key) {
109
+ obj._expanded = false;
110
+ // Collasso/nascondo tutti i child del parent
111
+ this.collapseChildOfParent(key);
112
+ return;
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Collassa ricorsivamente tutti i figli di un parent identificato dalla **parentKey**
118
+ *
119
+ * @param {string} parentKey Chiave del parent di cui collassare i figli
120
+ */
121
+ collapseChildOfParent(parentKey) {
122
+ for (let ic = 0; ic < this.est.boundSource.length; ic++) {
123
+ let child = this.est.boundSource[ic];
124
+ // Trovo tutti i child di quel parent e li rendo invisibili. Se il child trovato è a sua volta un parent,
125
+ // lo collasso e vado in ricorsione sui figli
126
+ if (child[this.est.ParentKey] == parentKey && !child.parent)
127
+ child._visible = false;
128
+ else if (child[this.est.ParentKey] == parentKey && child.parent) {
129
+ child._expanded = false;
130
+ child._visible = false;
131
+ this.collapseChildOfParent(child[this.est.OwnKey]);
132
+ }
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGllcmFyY2h5TW9kZUhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy10YWJsZS9zcmMvbGliL2NvcmUvaGFuZGxlcnMvSGllcmFyY2h5TW9kZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsOERBQThEO0FBQzlELE1BQU0sT0FBTyxvQkFBb0I7SUFFN0IseUJBQXlCO0lBQ3pCLFlBQW9CLEdBQXFCO1FBQXJCLFFBQUcsR0FBSCxHQUFHLENBQWtCO0lBQUksQ0FBQztJQUU5Qzs7OztPQUlHO0lBQ0kscUJBQXFCLENBQUMsSUFBVztRQUNwQyx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ3JCLE9BQU87UUFFWCw0SUFBNEk7UUFDNUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUztnQkFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVM7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUM5QjtRQUVELG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLHlJQUF5SSxDQUFDLENBQUM7WUFDekosT0FBTztTQUNWO1FBRUQsZ0VBQWdFO1FBQ2hFLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJ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QVEsR0FBRyxLQUFLLENBQUM7aUJBQ3RCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQzdELEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDdEQ7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5cclxuLyoqIENsYXNzZSBjb250ZW5lbnRlIGxhIGdlc3Rpb25lIGRlbGxhIG1vZGFsaXTDoCBnZXJhcmNoaWNhICovXHJcbmV4cG9ydCBjbGFzcyBIaWVyYXJjaHlNb2RlSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0YSB1bmEgbGlzdGEgZGkgb2dnZXR0aSBhc3NlZ25vIGlsIGxpdmVsbG8gZ2VyYXJjaGljbyByaXNwZXR0byBhbGxhIGxpc3RhIGRpIG9nZ2V0dGkgcGFzc2F0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IG9ianMgTGlzdGEgZGkgb2dnZXR0aSBhIGN1aSBhZ2dpdW5nZXJlIGwnaW5mb3JtYXppb25lIGRlbCBsaXZlbGxvIGdlcmFyY2hpY29cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzc2lnbkhpZXJhcmNoeUxldmVscyhvYmpzOiBhbnlbXSkge1xyXG4gICAgICAgIC8vIENhc2lzdGljYSBpbnB1dCBudWxsb1xyXG4gICAgICAgIGlmICghb2JqcyB8fCAhb2Jqcy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy9TZSBtYW5jYW5vIGVudHJhbWJlIGxlIGluZm8gbGUgY2VyY28gZGkgdmFsb3JpenphcmUgaW4gYXV0b21hdGljbyBjb2kgZGVmYXVsdCBcInBhcmVudGlkXCIgZSBcImlkXCIgKHBvc3RvIGNoZSBsZSBwcm9wcyBlc2lzdGFubyBuZWxsJ29nZ2V0dG8pXHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5QYXJlbnRLZXkgJiYgIXRoaXMuZXN0Lk93bktleSkge1xyXG4gICAgICAgICAgICBpZiAob2Jqc1swXVsncGFyZW50aWQnXSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuUGFyZW50S2V5ID0gJ3BhcmVudGlkJztcclxuICAgICAgICAgICAgaWYgKG9ianNbMF1bJ2lkJ10gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0Lk93bktleSA9ICdpZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0NoZWNrIGZpbmFsZSBwZXIgYXNzaWN1cmFybWkgY2hlIGxlIHByb3BzIGNpIHNpYW5vXHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5QYXJlbnRLZXkgfHwgIXRoaXMuZXN0Lk93bktleSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQZXIgdXRpbGl6emFyZSBpbCBzaXN0ZW1hIGluIG1vZGFsaXTDoCBnZXJhcmNoaWNhIMOoIG9iYmxpZ2F0b3JpbyBzcGVjaWZpY2FyZSBzaWEgUGFyZW50S2V5IGNoZSBPd25LZXkuIEZhbGxiYWNrIGEgc2lzdGVtYSBub24gZ2VyYXJjaGljbycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWYWxvcml6emF6aW9uZSBjYW1waSBsZXZlbCwgZXhwYW5kZWQsIGUgdmlzaWJsZSBwZXIgb2duaSBpdGVtXHJcbiAgICAgICAgbGV0IGN1cnJlbnRMZXZlbCA9IDE7XHJcbiAgICAgICAgbGV0IGFzc2lnbmVkID0gMDtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdGhpcy5hc3NpZ25MZXZlbChvYmpzLCBjdXJyZW50TGV2ZWwpO1xyXG4gICAgICAgICAgICBjdXJyZW50TGV2ZWwrKztcclxuICAgICAgICB9IHdoaWxlIChhc3NpZ25lZCA+IDApO1xyXG4gICAgICAgIC8vIGJ1dHRvIHN1IGxhdG8gaHRtbCBlIHBvaSBtZSBsYSBnaW9jbyBsw6AgY29uIHBhZGRpbmcgPSAyMCAqIChsZXZlbCAtIDEpIHBlciBmYXIgY2FwaXJlIGlsIGRpdmVyc28gbGl2ZWxsb1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyIG9nbnVubyBkZWdsaSBvZ2dldHRpIHBhc3NhdGkgZ2xpIGFzc2VnbmEgdW4gbGl2ZWxsbyBkaSBnZXJhcmNoaWEgaW4gYmFzZSBhICoqUGFyZW50S2V5KiogZSAqKk93bktleSoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gb2JqcyBPZ2dldHRpIGEgY3VpIGFzc2VnbmFyZSBpbCBsaXZlbGxvIGRpIGdlcmFyY2hpYVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsVG9Bc3NpZ24gTGl2ZWxsbyBjaGUgc3RhIGFzc2VnbmFuZG8gYXR0dWFsbWVudGUgcXVlc3RhIGl0ZXJhemlvbmUgKGRhdG8gY2hlIMOoIHJpY29yc2l2YSlcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1lcm8gZGkgb2dnZXR0aSBhIGN1aSDDqCBzdGF0byBhc3NlZ25hdG8gdW4gbGl2ZWxsbyBnZXJhcmNoaWNvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYXNzaWduTGV2ZWwob2JqczogYW55W10sIGxldmVsVG9Bc3NpZ246IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGFzc2lnbmVkID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IG9iaiA9IG9ianNbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBsYSBwYXJlbnRLZXkgbm9uIMOoIHZhbG9yaXp6YXRhLCBxdWVzdG8gw6ggaWwgbGl2ZWxsbyAwICgxLi4uIHBlcmNow6kgZ2xpIDAgc29uIHBlcmNpb2xvc2kpXHJcbiAgICAgICAgICAgIGlmICghb2JqW3RoaXMuZXN0LlBhcmVudEtleV0gJiYgbGV2ZWxUb0Fzc2lnbiA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBvYmouX2xldmVsID0gMTtcclxuICAgICAgICAgICAgICAgIG9iai5fdmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBvYmouX2V4cGFuZGVkID0gdGhpcy5lc3QuU3RhcnRzRXhwYW5kZWQ7XHJcbiAgICAgICAgICAgICAgICBhc3NpZ25lZCsrO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFBlciBpIGxpdmVsbGkgc3VwZXJpb3JlIGFsIHByaW1vXHJcbiAgICAgICAgICAgIGlmIChvYmpbdGhpcy5lc3QuUGFyZW50S2V5XSAmJiBsZXZlbFRvQXNzaWduID4gMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gdHJvdm8gaWwgcGFyZW50XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG9ianMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVQYXJlbnQgPSBvYmpzW3BdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUcm92YXRvIGlsIHBhcmVudCBkZWxsJ2l0ZW0sIGFzc2Vnbm8gYWxsJ2l0ZW0gaWwgbGl2ZWxsbyBnaXVzdG9cclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVQYXJlbnRbdGhpcy5lc3QuT3duS2V5XSA9PSBvYmpbdGhpcy5lc3QuUGFyZW50S2V5XSAmJiBwb3NzaWJsZVBhcmVudC5fbGV2ZWwgPT0gbGV2ZWxUb0Fzc2lnbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9sZXZlbCA9IGxldmVsVG9Bc3NpZ247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTbyBjaGUgcXVlc3RvIGl0ZW0gaGEgdW4gcGFyZW50LiBSaWJhZGlzY28gY2hlIGlsIHBhcmVudCDDqCBlc3BhbnNvIGluIGJhc2UgYWxsZSBpbXBvc3RhemlvbmUgZSBzdGVzc2EgbG9naWNhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlciBsYSB2aXNpYmlsaXTDoCBkZWwgZmlnbGlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUGFyZW50Ll9leHBhbmRlZCA9IHRoaXMuZXN0LlN0YXJ0c0V4cGFuZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVBhcmVudC5wYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmouX3Zpc2libGUgPSB0aGlzLmVzdC5TdGFydHNFeHBhbmRlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduZWQrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NpZ25lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bnppb25lIGNoZSBwZXJtZXR0ZSBkaSBlZmZldHR1YXJlIGwnZXNwYW5zaW9uZSBkaSB1biBwYXJlbnQgcXVhbmRvIGxhIHRhYmVsbGEgZnVuemlvbmEgaW4gbW9kYWxpdMOgIGdlcmFyY2hpY2FcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkZWwgcGFyZW50IGRhIGVzcGFuZGVyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhwYW5kUGFyZW50KGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVzdC5ib3VuZFNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgb2JqID0gdGhpcy5lc3QuYm91bmRTb3VyY2VbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBUcm92byBpbCBwYXJlbnQgY29uIHF1ZWxsJ2lkIGUgbG8gZXNwYW5kb1xyXG4gICAgICAgICAgICBpZiAob2JqW3RoaXMuZXN0Lk93bktleV0gPT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBvYmouX2V4cGFuZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpYyA9IDA7IGljIDwgdGhpcy5lc3QuYm91bmRTb3VyY2UubGVuZ3RoOyBpYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkID0gdGhpcy5lc3QuYm91bmRTb3VyY2VbaWNdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUcm92byB0dXR0aSBpIGNoaWxkIGRpIHF1ZWwgcGFyZW50IGUgbGkgcmVuZG8gdmlzaWJpbGlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRbdGhpcy5lc3QuUGFyZW50S2V5XSA9PSBrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLl92aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bnppb25lIGNoZSBwZXJtZXR0ZSBkaSBlZmZldHR1YXJlIGlsIGNvbGxhcHNlIGRpIHVuIHBhcmVudCBxdWFuZG8gbGEgdGFiZWxsYSBmdW56aW9uYSBpbiBtb2RhbGl0w6AgZ2VyYXJjaGljYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRlbCBwYXJlbnQgZGEgY29sbGFzc2FyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29sbGFwc2VQYXJlbnQoa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LmJvdW5kU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLmVzdC5ib3VuZFNvdXJjZVtpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyb3ZvIGlsIHBhcmVudCBjb24gcXVlbGwnaWQgZSBsbyBjb2xsYXNzb1xyXG4gICAgICAgICAgICBpZiAob2JqW3RoaXMuZXN0Lk93bktleV0gPT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBvYmouX2V4cGFuZGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29sbGFzc28vbmFzY29uZG8gdHV0dGkgaSBjaGlsZCBkZWwgcGFyZW50XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlQ2hpbGRPZlBhcmVudChrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29sbGFzc2Egcmljb3JzaXZhbWVudGUgdHV0dGkgaSBmaWdsaSBkaSB1biBwYXJlbnQgaWRlbnRpZmljYXRvIGRhbGxhICoqcGFyZW50S2V5KipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50S2V5IENoaWF2ZSBkZWwgcGFyZW50IGRpIGN1aSBjb2xsYXNzYXJlIGkgZmlnbGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb2xsYXBzZUNoaWxkT2ZQYXJlbnQocGFyZW50S2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBpYyA9IDA7IGljIDwgdGhpcy5lc3QuYm91bmRTb3VyY2UubGVuZ3RoOyBpYysrKSB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IHRoaXMuZXN0LmJvdW5kU291cmNlW2ljXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyb3ZvIHR1dHRpIGkgY2hpbGQgZGkgcXVlbCBwYXJlbnQgZSBsaSByZW5kbyBpbnZpc2liaWxpLiBTZSBpbCBjaGlsZCB0cm92YXRvIMOoIGEgc3VhIHZvbHRhIHVuIHBhcmVudCxcclxuICAgICAgICAgICAgLy8gbG8gY29sbGFzc28gZSB2YWRvIGluIHJpY29yc2lvbmUgc3VpIGZpZ2xpXHJcbiAgICAgICAgICAgIGlmIChjaGlsZFt0aGlzLmVzdC5QYXJlbnRLZXldID09IHBhcmVudEtleSAmJiAhY2hpbGQucGFyZW50KVxyXG4gICAgICAgICAgICAgICAgY2hpbGQuX3Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRbdGhpcy5lc3QuUGFyZW50S2V5XSA9PSBwYXJlbnRLZXkgJiYgY2hpbGQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5fZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNoaWxkLl92aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlQ2hpbGRPZlBhcmVudChjaGlsZFt0aGlzLmVzdC5Pd25LZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,112 @@
1
+ // Modelli
2
+ import { AppSearch } from "../../domain/externals/appsearch/AppSearch";
3
+ /** Classe che si occupa della gestione del recupero degli oggetti, paginazione e tutto ciò in cui gli elementi caricati vengono manipolati direttamente */
4
+ export class ItemsHandler {
5
+ /** @ignore Costruttore */
6
+ constructor(est, utilities) {
7
+ this.est = est;
8
+ this.utilities = utilities;
9
+ }
10
+ /**
11
+ * In base alla modalità specificata (ArrayMode, ViewMode, ecc...) questo metodo recupera l'array di oggetti da bindare ad interfaccia
12
+ *
13
+ * @param {boolean} onlyselected [false] Indica di prendere solo gli oggetti selezionati
14
+ * @param {boolean} refreshPaging [false] Indica se aggiornare le informazioni di paginazione o meno
15
+ * @param {boolean} allIfPossible [false] Indica se prendere tutti gli oggetti quaora possibile, usato solo in ArrayMode
16
+ *
17
+ * @returns {any[]} Lista degli oggetti su cui effettuare il bind lato interfaccia
18
+ */
19
+ getItemsByMode(onlyselected = false, refreshPaging = false, allIfPossible = false) {
20
+ let items = [];
21
+ if ((this.est.viewMode && this.est.View instanceof AppSearch)) {
22
+ items = this.getViewItemsBySource();
23
+ }
24
+ else if (this.est.arrayMode) {
25
+ this.est.View.forEach(itm => { itm._item = true; });
26
+ // Se faccio dei raggruppamenti ignoro la paginazione
27
+ if (this.est.UseArrayModePaging && !allIfPossible) {
28
+ // Se sono in modalità array ma la ricerca dipende da una view devo riallineare gli itemperpage
29
+ if (this.est.SearchView) {
30
+ this.est.ArraymodeItemsPerPage = this.est.SearchView.itemsperpageoverride;
31
+ this.est.arraymodePage = this.est.SearchView.page;
32
+ this.est.arraymodePages = this.est.SearchView.pages;
33
+ }
34
+ // Devo chiamare il refresh page solo se vengo richiamato da un binding esterno
35
+ else if (refreshPaging)
36
+ this.refreshPaging(this.est.ArraymodeItemsPerPage);
37
+ items = this.adaptViewToPaging();
38
+ }
39
+ else {
40
+ items = this.est.View;
41
+ }
42
+ }
43
+ // Se voglio solo i selezionati filtro
44
+ if (onlyselected)
45
+ return items.filter(t => t._selected);
46
+ return items;
47
+ }
48
+ /**
49
+ * Metodo per effettuare il refresh della paginazione sul cambiamento degli oggetti da visualizzare in una singola pagina.
50
+ *
51
+ * Vale solo per la modalità Array
52
+ *
53
+ * @param {number} pageSize Dimensione della pagina
54
+ */
55
+ refreshPaging(pageSize) {
56
+ this.est.ArraymodeItemsPerPage = pageSize;
57
+ this.est.arraymodePages = Math.ceil(this.est.View.length / this.est.ArraymodeItemsPerPage);
58
+ this.est.arraymodePage = 1;
59
+ // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca
60
+ this.est.internalWriteValue();
61
+ }
62
+ /**
63
+ * Ottiene gli oggetti in base alla sorgente
64
+ */
65
+ getViewItemsBySource() {
66
+ var _a, _b;
67
+ let castedView = this.est.View;
68
+ let groupKeys = castedView.groupings ? castedView.groupings.filter(t => !t.aggregation).length : 0;
69
+ //Gruppi intermedi
70
+ if ((((_a = castedView.requestedgroups) === null || _a === void 0 ? void 0 : _a.length) != groupKeys || ((_b = castedView.requestedgroups) === null || _b === void 0 ? void 0 : _b.length) == 0) && groupKeys > 0) {
71
+ let ret = castedView.groups;
72
+ ret.forEach(itm => {
73
+ // Setto variabile interna per capire che questo è in realtà un gruppo
74
+ itm._group = true;
75
+ // Le informazioni passate come lista le metto dentro a una cache per velocizzarne l'accesso quando devo tirare fuori il display della proprietà
76
+ this.utilities.cacheAggregations(itm);
77
+ });
78
+ return ret;
79
+ }
80
+ else {
81
+ let ret = this.est.SecondarySource ? this.est.View.items2 : this.est.TertiarySource ? this.est.View.items3 : this.est.View.items;
82
+ if (!ret)
83
+ ret = [];
84
+ // Setto variabile interna per specificare che questo è un elemento normale, non un gruppo o altro
85
+ ret.forEach(itm => { itm._item = true; });
86
+ return ret;
87
+ }
88
+ }
89
+ /** Genera le informazioni di paginazione e taglia la View in modalità array per mostrare solo gli oggetti della pagina specificata */
90
+ adaptViewToPaging() {
91
+ let tmpItems = [];
92
+ // Se ho una search view l'array pulsanti viene calcolato da lei, non devo prendere quello della modalità array,
93
+ // inoltre non ho bisogno di fare ragionamenti su quanti elementi ci sono e sulla pagina, dato che viene tutto gestito esternamente,
94
+ // unendo al risultato della view tutti gli oggetti addizionali
95
+ if (!this.est.SearchView)
96
+ this.est.arrayPulsanti = this.utilities.getPagesArray(6, this.est.arraymodePage, this.est.arraymodePages);
97
+ else
98
+ return this.est.View;
99
+ // Poi per tutti i valori dopo compresi fra la pagina - 1 e la pagina
100
+ for (let i = ((this.est.arraymodePage - 1) * this.est.ArraymodeItemsPerPage); i < this.est.arraymodePage * this.est.ArraymodeItemsPerPage; i++) {
101
+ if (i <= this.est.View.length - 1)
102
+ tmpItems.push(this.est.View[i]);
103
+ }
104
+ return tmpItems;
105
+ }
106
+ /** Se in modalità array applica gli ordinamenti ASC-DESC delle colonne */
107
+ arrayModeReviewOrderings() {
108
+ if (this.est.arrayOrders.length > 0)
109
+ this.est.arrayOrders.forEach(t => { this.est.boundSource = this.est.boundSource.sort((a, b) => (a[t.id] > b[t.id] ? 1 : -1) * (t.order == 'DESC' ? -1 : 1)); });
110
+ }
111
+ }
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbXNIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL0l0ZW1zSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBS3ZFLDJKQUEySjtBQUMzSixNQUFNLE9BQU8sWUFBWTtJQUVyQiwwQkFBMEI7SUFDMUIsWUFBb0IsR0FBcUIsRUFBVSxTQUEyQjtRQUExRCxRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUksQ0FBQztJQUVuRjs7Ozs7Ozs7T0FRRztJQUNJLGNBQWMsQ0FBQyxlQUF3QixLQUFLLEVBQUUsZ0JBQXlCLEtBQUssRUFBRSxnQkFBeUIsS0FBSztRQUMvRyxJQUFJLEtBQUssR0FBVSxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLFNBQVMsQ0FBQyxFQUFFO1lBQzNELEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUN2QzthQUNJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRCxxREFBcUQ7WUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUUvQywrRkFBK0Y7Z0JBQy9GLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQ3ZCO29CQUNJLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUM7b0JBQzFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2lCQUN2RDtnQkFDRCwrRUFBK0U7cUJBQzFFLElBQUksYUFBYTtvQkFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBRXZELEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUNwQztpQkFBTTtnQkFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFhLENBQUM7YUFDbEM7U0FDSjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLFlBQVk7WUFDWixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWEsQ0FBQyxRQUFnQjtRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLDZHQUE2RztRQUM3RyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9COztRQUN4QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQXNCLENBQUM7UUFDakQsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRyxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLE9BQUEsVUFBVSxDQUFDLGVBQWUsMENBQUUsTUFBTSxLQUFJLFNBQVMsSUFBSSxPQUFBLFVBQVUsQ0FBQyxlQUFlLDBDQUFFLE1BQU0sS0FBSSxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQy9HLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDNUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFFZCxzRUFBc0U7Z0JBQ2hFLEdBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUV6QixnSkFBZ0o7Z0JBQ2hKLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztTQUNkO2FBQ0k7WUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQVksQ0FBQyxLQUFLLENBQUM7WUFDNUosSUFBSSxDQUFDLEdBQUc7Z0JBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNuQixrR0FBa0c7WUFDbEcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFTLEdBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsT0FBTyxHQUFHLENBQUM7U0FDZDtJQUNMLENBQUM7SUFFRCxzSUFBc0k7SUFDOUgsaUJBQWlCO1FBQ3JCLElBQUksUUFBUSxHQUFVLEVBQUUsQ0FBQztRQUV6QixnSEFBZ0g7UUFDaEgscUlBQXFJO1FBQ3JJLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztZQUUxRyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBYSxDQUFDO1FBRWxDLHFFQUFxRTtRQUNyRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUksSUFBSSxDQUFDLElBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCwwRUFBMEU7SUFDbkUsd0JBQXdCO1FBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hLLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvbXBvbmVudGlcclxuaW1wb3J0IHsgRXNUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudFwiXHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFwcFNlYXJjaCB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2hcIjtcclxuXHJcbi8vIFV0aWxpdGllc1xyXG5pbXBvcnQgeyBVdGlsaXRpZXNIYW5kbGVyIH0gZnJvbSBcIi4vVXRpbGl0aWVzSGFuZGxlclwiO1xyXG5cclxuLyoqIENsYXNzZSBjaGUgc2kgb2NjdXBhIGRlbGxhIGdlc3Rpb25lIGRlbCByZWN1cGVybyBkZWdsaSBvZ2dldHRpLCBwYWdpbmF6aW9uZSBlIHR1dHRvIGNpw7IgaW4gY3VpIGdsaSBlbGVtZW50aSBjYXJpY2F0aSB2ZW5nb25vIG1hbmlwb2xhdGkgZGlyZXR0YW1lbnRlICovXHJcbmV4cG9ydCBjbGFzcyBJdGVtc0hhbmRsZXIge1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSB1dGlsaXRpZXM6IFV0aWxpdGllc0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW4gYmFzZSBhbGxhIG1vZGFsaXTDoCBzcGVjaWZpY2F0YSAoQXJyYXlNb2RlLCBWaWV3TW9kZSwgZWNjLi4uKSBxdWVzdG8gbWV0b2RvIHJlY3VwZXJhIGwnYXJyYXkgZGkgb2dnZXR0aSBkYSBiaW5kYXJlIGFkIGludGVyZmFjY2lhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvbmx5c2VsZWN0ZWQgW2ZhbHNlXSBJbmRpY2EgZGkgcHJlbmRlcmUgc29sbyBnbGkgb2dnZXR0aSBzZWxlemlvbmF0aVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZWZyZXNoUGFnaW5nIFtmYWxzZV0gSW5kaWNhIHNlIGFnZ2lvcm5hcmUgbGUgaW5mb3JtYXppb25pIGRpIHBhZ2luYXppb25lIG8gbWVub1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhbGxJZlBvc3NpYmxlIFtmYWxzZV0gSW5kaWNhIHNlIHByZW5kZXJlIHR1dHRpIGdsaSBvZ2dldHRpIHF1YW9yYSBwb3NzaWJpbGUsIHVzYXRvIHNvbG8gaW4gQXJyYXlNb2RlXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2FueVtdfSBMaXN0YSBkZWdsaSBvZ2dldHRpIHN1IGN1aSBlZmZldHR1YXJlIGlsIGJpbmQgbGF0byBpbnRlcmZhY2NpYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SXRlbXNCeU1vZGUob25seXNlbGVjdGVkOiBib29sZWFuID0gZmFsc2UsIHJlZnJlc2hQYWdpbmc6IGJvb2xlYW4gPSBmYWxzZSwgYWxsSWZQb3NzaWJsZTogYm9vbGVhbiA9IGZhbHNlKTogYW55W10ge1xyXG4gICAgICAgIGxldCBpdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLmVzdC52aWV3TW9kZSAmJiB0aGlzLmVzdC5WaWV3IGluc3RhbmNlb2YgQXBwU2VhcmNoKSkge1xyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuZ2V0Vmlld0l0ZW1zQnlTb3VyY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlZpZXcuZm9yRWFjaChpdG0gPT4geyBpdG0uX2l0ZW0gPSB0cnVlOyB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGZhY2NpbyBkZWkgcmFnZ3J1cHBhbWVudGkgaWdub3JvIGxhIHBhZ2luYXppb25lXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVzdC5Vc2VBcnJheU1vZGVQYWdpbmcgJiYgIWFsbElmUG9zc2libGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZSBzb25vIGluIG1vZGFsaXTDoCBhcnJheSBtYSBsYSByaWNlcmNhIGRpcGVuZGUgZGEgdW5hIHZpZXcgZGV2byByaWFsbGluZWFyZSBnbGkgaXRlbXBlcnBhZ2VcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzdC5TZWFyY2hWaWV3KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LkFycmF5bW9kZUl0ZW1zUGVyUGFnZSA9IHRoaXMuZXN0LlNlYXJjaFZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXltb2RlUGFnZSA9IHRoaXMuZXN0LlNlYXJjaFZpZXcucGFnZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5hcnJheW1vZGVQYWdlcyA9IHRoaXMuZXN0LlNlYXJjaFZpZXcucGFnZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBEZXZvIGNoaWFtYXJlIGlsIHJlZnJlc2ggcGFnZSBzb2xvIHNlIHZlbmdvIHJpY2hpYW1hdG8gZGEgdW4gYmluZGluZyBlc3Rlcm5vXHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZyZXNoUGFnaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFBhZ2luZyh0aGlzLmVzdC5BcnJheW1vZGVJdGVtc1BlclBhZ2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5hZGFwdFZpZXdUb1BhZ2luZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbXMgPSB0aGlzLmVzdC5WaWV3IGFzIGFueVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSB2b2dsaW8gc29sbyBpIHNlbGV6aW9uYXRpIGZpbHRyb1xyXG4gICAgICAgIGlmIChvbmx5c2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIodCA9PiB0Ll9zZWxlY3RlZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBwZXIgZWZmZXR0dWFyZSBpbCByZWZyZXNoIGRlbGxhIHBhZ2luYXppb25lIHN1bCBjYW1iaWFtZW50byBkZWdsaSBvZ2dldHRpIGRhIHZpc3VhbGl6emFyZSBpbiB1bmEgc2luZ29sYSBwYWdpbmEuXHJcbiAgICAgKlxyXG4gICAgICogVmFsZSBzb2xvIHBlciBsYSBtb2RhbGl0w6AgQXJyYXlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZVNpemUgRGltZW5zaW9uZSBkZWxsYSBwYWdpbmFcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZnJlc2hQYWdpbmcocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZXN0LkFycmF5bW9kZUl0ZW1zUGVyUGFnZSA9IHBhZ2VTaXplO1xyXG4gICAgICAgIHRoaXMuZXN0LmFycmF5bW9kZVBhZ2VzID0gTWF0aC5jZWlsKCh0aGlzLmVzdC5WaWV3IGFzIGFueVtdKS5sZW5ndGggLyB0aGlzLmVzdC5BcnJheW1vZGVJdGVtc1BlclBhZ2UpO1xyXG4gICAgICAgIHRoaXMuZXN0LmFycmF5bW9kZVBhZ2UgPSAxO1xyXG5cclxuICAgICAgICAvLyBSaWZvcnpvIGlsIHdyaXRldmFsdWUgaW4gbW9kbyBjaGUgaWwgY29kaWNlIHBhc3NpIGRhbGxhIGdlc3Rpb25lIGNvbWUgc2UgZm9zc2UgZmF0dGEgcmlwYXJ0aXJlIHVuYSByaWNlcmNhXHJcbiAgICAgICAgdGhpcy5lc3QuaW50ZXJuYWxXcml0ZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGdsaSBvZ2dldHRpIGluIGJhc2UgYWxsYSBzb3JnZW50ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFZpZXdJdGVtc0J5U291cmNlKCk6IGFueVtdIHtcclxuICAgICAgICBsZXQgY2FzdGVkVmlldyA9IHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT47XHJcbiAgICAgICAgbGV0IGdyb3VwS2V5cyA9IGNhc3RlZFZpZXcuZ3JvdXBpbmdzID8gY2FzdGVkVmlldy5ncm91cGluZ3MuZmlsdGVyKHQgPT4gIXQuYWdncmVnYXRpb24pLmxlbmd0aCA6IDA7XHJcblxyXG4gICAgICAgIC8vR3J1cHBpIGludGVybWVkaVxyXG4gICAgICAgIGlmICgoY2FzdGVkVmlldy5yZXF1ZXN0ZWRncm91cHM/Lmxlbmd0aCAhPSBncm91cEtleXMgfHwgY2FzdGVkVmlldy5yZXF1ZXN0ZWRncm91cHM/Lmxlbmd0aCA9PSAwKSAmJiBncm91cEtleXMgPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBjYXN0ZWRWaWV3Lmdyb3VwcztcclxuICAgICAgICAgICAgcmV0LmZvckVhY2goaXRtID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZXR0byB2YXJpYWJpbGUgaW50ZXJuYSBwZXIgY2FwaXJlIGNoZSBxdWVzdG8gw6ggaW4gcmVhbHTDoCB1biBncnVwcG9cclxuICAgICAgICAgICAgICAgICg8YW55Pml0bSkuX2dyb3VwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBMZSBpbmZvcm1hemlvbmkgcGFzc2F0ZSBjb21lIGxpc3RhIGxlIG1ldHRvIGRlbnRybyBhIHVuYSBjYWNoZSBwZXIgdmVsb2Npenphcm5lIGwnYWNjZXNzbyBxdWFuZG8gZGV2byB0aXJhcmUgZnVvcmkgaWwgZGlzcGxheSBkZWxsYSBwcm9wcmlldMOgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5jYWNoZUFnZ3JlZ2F0aW9ucyhpdG0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSB0aGlzLmVzdC5TZWNvbmRhcnlTb3VyY2UgPyAodGhpcy5lc3QuVmlldyBhcyBhbnkpLml0ZW1zMiA6IHRoaXMuZXN0LlRlcnRpYXJ5U291cmNlID8gKHRoaXMuZXN0LlZpZXcgYXMgYW55KS5pdGVtczMgOiAodGhpcy5lc3QuVmlldyBhcyBhbnkpLml0ZW1zO1xyXG4gICAgICAgICAgICBpZiAoIXJldCkgcmV0ID0gW107XHJcbiAgICAgICAgICAgIC8vIFNldHRvIHZhcmlhYmlsZSBpbnRlcm5hIHBlciBzcGVjaWZpY2FyZSBjaGUgcXVlc3RvIMOoIHVuIGVsZW1lbnRvIG5vcm1hbGUsIG5vbiB1biBncnVwcG8gbyBhbHRyb1xyXG4gICAgICAgICAgICByZXQuZm9yRWFjaChpdG0gPT4geyAoPGFueT5pdG0pLl9pdGVtID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZW5lcmEgbGUgaW5mb3JtYXppb25pIGRpIHBhZ2luYXppb25lIGUgdGFnbGlhIGxhIFZpZXcgaW4gbW9kYWxpdMOgIGFycmF5IHBlciBtb3N0cmFyZSBzb2xvIGdsaSBvZ2dldHRpIGRlbGxhIHBhZ2luYSBzcGVjaWZpY2F0YSAqL1xyXG4gICAgcHJpdmF0ZSBhZGFwdFZpZXdUb1BhZ2luZygpIHtcclxuICAgICAgICBsZXQgdG1wSXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gICAgICAgIC8vIFNlIGhvIHVuYSBzZWFyY2ggdmlldyBsJ2FycmF5IHB1bHNhbnRpIHZpZW5lIGNhbGNvbGF0byBkYSBsZWksIG5vbiBkZXZvIHByZW5kZXJlIHF1ZWxsbyBkZWxsYSBtb2RhbGl0w6AgYXJyYXksXHJcbiAgICAgICAgLy8gaW5vbHRyZSBub24gaG8gYmlzb2dubyBkaSBmYXJlIHJhZ2lvbmFtZW50aSBzdSBxdWFudGkgZWxlbWVudGkgY2kgc29ubyBlIHN1bGxhIHBhZ2luYSwgZGF0byBjaGUgdmllbmUgdHV0dG8gZ2VzdGl0byBlc3Rlcm5hbWVudGUsIFxyXG4gICAgICAgIC8vIHVuZW5kbyBhbCByaXN1bHRhdG8gZGVsbGEgdmlldyB0dXR0aSBnbGkgb2dnZXR0aSBhZGRpemlvbmFsaVxyXG4gICAgICAgIGlmICghdGhpcy5lc3QuU2VhcmNoVmlldylcclxuICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXlQdWxzYW50aSA9IHRoaXMudXRpbGl0aWVzLmdldFBhZ2VzQXJyYXkoNiwgdGhpcy5lc3QuYXJyYXltb2RlUGFnZSwgdGhpcy5lc3QuYXJyYXltb2RlUGFnZXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXN0LlZpZXcgYXMgYW55W107XHJcblxyXG4gICAgICAgIC8vIFBvaSBwZXIgdHV0dGkgaSB2YWxvcmkgZG9wbyBjb21wcmVzaSBmcmEgbGEgcGFnaW5hIC0gMSBlIGxhIHBhZ2luYVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAoKHRoaXMuZXN0LmFycmF5bW9kZVBhZ2UgLSAxKSAqIHRoaXMuZXN0LkFycmF5bW9kZUl0ZW1zUGVyUGFnZSk7IGkgPCB0aGlzLmVzdC5hcnJheW1vZGVQYWdlICogdGhpcy5lc3QuQXJyYXltb2RlSXRlbXNQZXJQYWdlOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgPD0gKHRoaXMuZXN0LlZpZXcgYXMgYW55W10pLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgICAgICAgICB0bXBJdGVtcy5wdXNoKCh0aGlzLmVzdC5WaWV3IGFzIGFueVtdKVtpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG1wSXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNlIGluIG1vZGFsaXTDoCBhcnJheSBhcHBsaWNhIGdsaSBvcmRpbmFtZW50aSBBU0MtREVTQyBkZWxsZSBjb2xvbm5lICovXHJcbiAgICBwdWJsaWMgYXJyYXlNb2RlUmV2aWV3T3JkZXJpbmdzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVzdC5hcnJheU9yZGVycy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheU9yZGVycy5mb3JFYWNoKHQgPT4geyB0aGlzLmVzdC5ib3VuZFNvdXJjZSA9IHRoaXMuZXN0LmJvdW5kU291cmNlLnNvcnQoKGEsIGIpID0+IChhW3QuaWRdID4gYlt0LmlkXSA/IDEgOiAtMSkgKiAodC5vcmRlciA9PSAnREVTQycgPyAtMSA6IDEpKTsgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,70 @@
1
+ import { ReportDefinition } from "../../domain/externals/report/ReportDefinition";
2
+ import { ReportOrder } from "../../domain/externals/report/ReportOrder";
3
+ /** Classe che gestisce la modalità Report dell'es-table utilizzata nel Metering */
4
+ export class ReportModeHandler {
5
+ /** @ignore Costruttore */
6
+ constructor(est, utilities) {
7
+ this.est = est;
8
+ this.utilities = utilities;
9
+ }
10
+ /**
11
+ * Sul click dell'Header di una colonna questo metodo si occupa di applicare l'ordinamento successivo e di notificare con **emitSearchRequest**
12
+ * il bisogno di aggiornare i dati da parte del componente che utilizza la tabella
13
+ *
14
+ * Utilizzato solo in modalità REport
15
+ *
16
+ * @param {ReportColumn} clm Colonna del report per cui ordinare
17
+ */
18
+ setupNextOrderAndSearch(clm) {
19
+ if (!(this.est.View instanceof ReportDefinition)) {
20
+ console.error('View diversa da reportdefinition entrata nel metodo setupNextOrderAndSearch');
21
+ return;
22
+ }
23
+ let orderNext = { NONE: 'DESC', DESC: 'ASC', ASC: null };
24
+ let nextOrder = orderNext[clm.order || 'NONE'];
25
+ clm.order = nextOrder;
26
+ let order;
27
+ let clmOrder = this.est.View.orders ? this.est.View.orders.filter(t => t.column == clm.id) : [];
28
+ if (clmOrder.length == 0 && clm.order) {
29
+ order = new ReportOrder();
30
+ order.column = clm.id;
31
+ order.order = clm.order;
32
+ if (!this.est.View.orders)
33
+ this.est.View.orders = [];
34
+ this.est.View.orders.push(order);
35
+ }
36
+ else if (clmOrder.length == 1) {
37
+ // Rimuovo l'ordinamento o aggiorno quello già esistente
38
+ if (!clm.order)
39
+ clmOrder = [];
40
+ else
41
+ clmOrder[0].order = clm.order;
42
+ }
43
+ else
44
+ console.warn('Impossibile settare ordinamento. Colonna ' + clm.id + ' direttive di ordinamento ' + clmOrder.length + ' ordinamento scelto ' + clm.order);
45
+ // Dopo aver aggiornato l'ordinamento rilancio la ricerca
46
+ this.est.emitSearchRequest(false);
47
+ }
48
+ /** Metodo che si occupa di gestire la grafica della tabella in base alle informazioni di ordinamento colonne e paginazione contenuti nel modello */
49
+ reviewReportBindings() {
50
+ if (!(this.est.View instanceof ReportDefinition)) {
51
+ console.error('View diversa da reportdefinition entrata nel metodo reviewReportBindings');
52
+ return;
53
+ }
54
+ // Allineo le informazioni su eventuali ordinamenti fatti precedentemente
55
+ if (this.est.View.orders && this.est.View.orders.length > 0) {
56
+ this.est.View.orders.forEach(t => {
57
+ this.est.ReportValues.columns.filter(c => c.id == t.column)[0].order = t.order;
58
+ });
59
+ }
60
+ // Recupero il count precedente se serve
61
+ if (this.est.ReportValues.count != -2)
62
+ this.est.previousCount = this.est.ReportValues.count;
63
+ else if (this.est.ReportValues.count == -2)
64
+ this.est.ReportValues.count = this.est.previousCount;
65
+ let ipp = (this.est.View.itemsperpageoverride || 15);
66
+ this.est.View.pages = Math.ceil(this.est.ReportValues.count / ipp);
67
+ this.est.arrayPulsanti = this.utilities.getPagesArray(6, this.est.View.page, this.est.View.pages);
68
+ }
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3J0TW9kZUhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy10YWJsZS9zcmMvbGliL2NvcmUvaGFuZGxlcnMvUmVwb3J0TW9kZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhFLG1GQUFtRjtBQUNuRixNQUFNLE9BQU8saUJBQWlCO0lBRTFCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTJCO1FBQTFELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBSSxDQUFDO0lBRW5GOzs7Ozs7O09BT0c7SUFDSSx1QkFBdUIsQ0FBQyxHQUFpQjtRQUM1QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztZQUM3RixPQUFPO1NBQ1Y7UUFFRCxJQUFJLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekQsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUM7UUFDL0MsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFFdEIsSUFBSSxLQUFrQixDQUFDO1FBQ3ZCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0s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SUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIYW5kbGVyc1xyXG5pbXBvcnQgeyBVdGlsaXRpZXNIYW5kbGVyIH0gZnJvbSBcIi4vVXRpbGl0aWVzSGFuZGxlclwiO1xyXG5cclxuLy8gQ29tcG9uZW50aVxyXG5pbXBvcnQgeyBFc1RhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZXMtdGFibGUvZXNfdGFibGUuY29tcG9uZW50XCJcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgUmVwb3J0Q29sdW1uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvcmVwb3J0L1JlcG9ydENvbHVtblwiO1xyXG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvcmVwb3J0L1JlcG9ydERlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgUmVwb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9yZXBvcnQvUmVwb3J0T3JkZXJcIjtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIGdlc3Rpc2NlIGxhIG1vZGFsaXTDoCBSZXBvcnQgZGVsbCdlcy10YWJsZSB1dGlsaXp6YXRhIG5lbCBNZXRlcmluZyAqL1xyXG5leHBvcnQgY2xhc3MgUmVwb3J0TW9kZUhhbmRsZXIge1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSB1dGlsaXRpZXM6IFV0aWxpdGllc0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VsIGNsaWNrIGRlbGwnSGVhZGVyIGRpIHVuYSBjb2xvbm5hIHF1ZXN0byBtZXRvZG8gc2kgb2NjdXBhIGRpIGFwcGxpY2FyZSBsJ29yZGluYW1lbnRvIHN1Y2Nlc3Npdm8gZSBkaSBub3RpZmljYXJlIGNvbiAqKmVtaXRTZWFyY2hSZXF1ZXN0KipcclxuICAgICAqIGlsIGJpc29nbm8gZGkgYWdnaW9ybmFyZSBpIGRhdGkgZGEgcGFydGUgZGVsIGNvbXBvbmVudGUgY2hlIHV0aWxpenphIGxhIHRhYmVsbGFcclxuICAgICAqXHJcbiAgICAgKiBVdGlsaXp6YXRvIHNvbG8gaW4gbW9kYWxpdMOgIFJFcG9ydFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVwb3J0Q29sdW1ufSBjbG0gQ29sb25uYSBkZWwgcmVwb3J0IHBlciBjdWkgb3JkaW5hcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldHVwTmV4dE9yZGVyQW5kU2VhcmNoKGNsbTogUmVwb3J0Q29sdW1uKSB7XHJcbiAgICAgICAgaWYgKCEodGhpcy5lc3QuVmlldyBpbnN0YW5jZW9mIFJlcG9ydERlZmluaXRpb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1ZpZXcgZGl2ZXJzYSBkYSByZXBvcnRkZWZpbml0aW9uIGVudHJhdGEgbmVsIG1ldG9kbyBzZXR1cE5leHRPcmRlckFuZFNlYXJjaCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb3JkZXJOZXh0ID0geyBOT05FOiAnREVTQycsIERFU0M6ICdBU0MnLCBBU0M6IG51bGwgfTtcclxuICAgICAgICBsZXQgbmV4dE9yZGVyID0gb3JkZXJOZXh0W2NsbS5vcmRlciB8fCAnTk9ORSddO1xyXG4gICAgICAgIGNsbS5vcmRlciA9IG5leHRPcmRlcjtcclxuXHJcbiAgICAgICAgbGV0IG9yZGVyOiBSZXBvcnRPcmRlcjtcclxuICAgICAgICBsZXQgY2xtT3JkZXIgPSB0aGlzLmVzdC5WaWV3Lm9yZGVycyA/IHRoaXMuZXN0LlZpZXcub3JkZXJzLmZpbHRlcih0ID0+IHQuY29sdW1uID09IGNsbS5pZCkgOiBbXTtcclxuICAgICAgICBpZiAoY2xtT3JkZXIubGVuZ3RoID09IDAgJiYgY2xtLm9yZGVyKSB7XHJcbiAgICAgICAgICAgIG9yZGVyID0gbmV3IFJlcG9ydE9yZGVyKCk7XHJcbiAgICAgICAgICAgIG9yZGVyLmNvbHVtbiA9IGNsbS5pZDtcclxuICAgICAgICAgICAgb3JkZXIub3JkZXIgPSBjbG0ub3JkZXI7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lc3QuVmlldy5vcmRlcnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5WaWV3Lm9yZGVycyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lc3QuVmlldy5vcmRlcnMucHVzaChvcmRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNsbU9yZGVyLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIFJpbXVvdm8gbCdvcmRpbmFtZW50byBvIGFnZ2lvcm5vIHF1ZWxsbyBnacOgIGVzaXN0ZW50ZVxyXG4gICAgICAgICAgICBpZiAoIWNsbS5vcmRlcilcclxuICAgICAgICAgICAgICAgIGNsbU9yZGVyID0gW107XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBjbG1PcmRlclswXS5vcmRlciA9IGNsbS5vcmRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbXBvc3NpYmlsZSBzZXR0YXJlIG9yZGluYW1lbnRvLiBDb2xvbm5hICcgKyBjbG0uaWQgKyAnIGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50byAnICsgY2xtT3JkZXIubGVuZ3RoICsgJyBvcmRpbmFtZW50byBzY2VsdG8gJyArIGNsbS5vcmRlcik7XHJcblxyXG4gICAgICAgIC8vIERvcG8gYXZlciBhZ2dpb3JuYXRvIGwnb3JkaW5hbWVudG8gcmlsYW5jaW8gbGEgcmljZXJjYVxyXG4gICAgICAgIHRoaXMuZXN0LmVtaXRTZWFyY2hSZXF1ZXN0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgZ2VzdGlyZSBsYSBncmFmaWNhIGRlbGxhIHRhYmVsbGEgaW4gYmFzZSBhbGxlIGluZm9ybWF6aW9uaSBkaSBvcmRpbmFtZW50byBjb2xvbm5lIGUgcGFnaW5hemlvbmUgY29udGVudXRpIG5lbCBtb2RlbGxvICovXHJcbiAgICBwdWJsaWMgcmV2aWV3UmVwb3J0QmluZGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCEodGhpcy5lc3QuVmlldyBpbnN0YW5jZW9mIFJlcG9ydERlZmluaXRpb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1ZpZXcgZGl2ZXJzYSBkYSByZXBvcnRkZWZpbml0aW9uIGVudHJhdGEgbmVsIG1ldG9kbyByZXZpZXdSZXBvcnRCaW5kaW5ncycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBbGxpbmVvIGxlIGluZm9ybWF6aW9uaSBzdSBldmVudHVhbGkgb3JkaW5hbWVudGkgZmF0dGkgcHJlY2VkZW50ZW1lbnRlXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlZpZXcub3JkZXJzICYmIHRoaXMuZXN0LlZpZXcub3JkZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuVmlldy5vcmRlcnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LlJlcG9ydFZhbHVlcy5jb2x1bW5zLmZpbHRlcihjID0+IGMuaWQgPT0gdC5jb2x1bW4pWzBdLm9yZGVyID0gdC5vcmRlcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZWN1cGVybyBpbCBjb3VudCBwcmVjZWRlbnRlIHNlIHNlcnZlXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlJlcG9ydFZhbHVlcy5jb3VudCAhPSAtMilcclxuICAgICAgICAgICAgdGhpcy5lc3QucHJldmlvdXNDb3VudCA9IHRoaXMuZXN0LlJlcG9ydFZhbHVlcy5jb3VudDtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5SZXBvcnRWYWx1ZXMuY291bnQgPT0gLTIpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlJlcG9ydFZhbHVlcy5jb3VudCA9IHRoaXMuZXN0LnByZXZpb3VzQ291bnQ7XHJcblxyXG4gICAgICAgIGxldCBpcHAgPSAodGhpcy5lc3QuVmlldy5pdGVtc3BlcnBhZ2VvdmVycmlkZSB8fCAxNSk7XHJcbiAgICAgICAgdGhpcy5lc3QuVmlldy5wYWdlcyA9IE1hdGguY2VpbCh0aGlzLmVzdC5SZXBvcnRWYWx1ZXMuY291bnQgLyBpcHApO1xyXG4gICAgICAgIHRoaXMuZXN0LmFycmF5UHVsc2FudGkgPSB0aGlzLnV0aWxpdGllcy5nZXRQYWdlc0FycmF5KDYsIHRoaXMuZXN0LlZpZXcucGFnZSwgdGhpcy5lc3QuVmlldy5wYWdlcyk7XHJcbiAgICB9XHJcbn1cclxuIl19