@sme.up/doc-alchemist 1.3.0 → 1.4.0-CommonJS-20251015134706

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 (91) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/gfx-data.js +4 -1
  3. package/dist/assets/gfx-data.js.map +1 -1
  4. package/dist/converters/excel/commons.d.ts +2 -2
  5. package/dist/converters/excel/commons.js +49 -33
  6. package/dist/converters/excel/commons.js.map +1 -1
  7. package/dist/converters/excel/excel-converter.types.js +14 -11
  8. package/dist/converters/excel/excel-converter.types.js.map +1 -1
  9. package/dist/converters/excel/matrix-converter.d.ts +3 -3
  10. package/dist/converters/excel/matrix-converter.js +46 -36
  11. package/dist/converters/excel/matrix-converter.js.map +1 -1
  12. package/dist/converters/excel/tree-converter.d.ts +2 -2
  13. package/dist/converters/excel/tree-converter.js +33 -25
  14. package/dist/converters/excel/tree-converter.js.map +1 -1
  15. package/dist/converters/excel-converter.d.ts +3 -3
  16. package/dist/converters/excel-converter.js +18 -13
  17. package/dist/converters/excel-converter.js.map +1 -1
  18. package/dist/converters/images/charts-generator.d.ts +2 -2
  19. package/dist/converters/images/charts-generator.js +41 -4
  20. package/dist/converters/images/charts-generator.js.map +1 -1
  21. package/dist/converters/pdf/autotable-renderer.d.ts +2 -2
  22. package/dist/converters/pdf/autotable-renderer.js +7 -3
  23. package/dist/converters/pdf/autotable-renderer.js.map +1 -1
  24. package/dist/converters/pdf/cover-renderer.js +41 -4
  25. package/dist/converters/pdf/cover-renderer.js.map +1 -1
  26. package/dist/converters/pdf/formulas-helper.d.ts +2 -2
  27. package/dist/converters/pdf/formulas-helper.js +37 -28
  28. package/dist/converters/pdf/formulas-helper.js.map +1 -1
  29. package/dist/converters/pdf/matrix-converter.d.ts +2 -2
  30. package/dist/converters/pdf/matrix-converter.js +52 -12
  31. package/dist/converters/pdf/matrix-converter.js.map +1 -1
  32. package/dist/converters/pdf/pdf-converter.types.js +2 -1
  33. package/dist/converters/pdf/pdf-converter.types.js.map +1 -1
  34. package/dist/converters/pdf/sch-converter.d.ts +1 -1
  35. package/dist/converters/pdf/sch-converter.js +43 -6
  36. package/dist/converters/pdf/sch-converter.js.map +1 -1
  37. package/dist/converters/pdf-converter.d.ts +3 -3
  38. package/dist/converters/pdf-converter.js +23 -18
  39. package/dist/converters/pdf-converter.js.map +1 -1
  40. package/dist/index.d.ts +7 -7
  41. package/dist/index.js +13 -4
  42. package/dist/index.js.map +1 -1
  43. package/dist/types/component-props.js +5 -2
  44. package/dist/types/component-props.js.map +1 -1
  45. package/dist/types/component.js +7 -4
  46. package/dist/types/component.js.map +1 -1
  47. package/dist/types/converter.js +2 -1
  48. package/dist/types/converter.js.map +1 -1
  49. package/dist/types/data-structures/smeupDataStructure.d.ts +4 -4
  50. package/dist/types/data-structures/smeupDataStructure.js +16 -12
  51. package/dist/types/data-structures/smeupDataStructure.js.map +1 -1
  52. package/dist/types/data-structures/smeupDataTable.d.ts +1 -1
  53. package/dist/types/data-structures/smeupDataTable.js +4 -1
  54. package/dist/types/data-structures/smeupDataTable.js.map +1 -1
  55. package/dist/types/data-structures/smeupDataTree.d.ts +2 -2
  56. package/dist/types/data-structures/smeupDataTree.js +2 -1
  57. package/dist/types/data-structures/smeupDataTree.js.map +1 -1
  58. package/dist/types/data-structures/smeupSch.d.ts +6 -6
  59. package/dist/types/data-structures/smeupSch.js +5 -2
  60. package/dist/types/data-structures/smeupSch.js.map +1 -1
  61. package/dist/types/dynamism.d.ts +1 -1
  62. package/dist/types/dynamism.js +7 -4
  63. package/dist/types/dynamism.js.map +1 -1
  64. package/dist/types/general.js +7 -2
  65. package/dist/types/general.js.map +1 -1
  66. package/dist/types/helpers.js +5 -2
  67. package/dist/types/helpers.js.map +1 -1
  68. package/dist/types/index.d.ts +3 -2
  69. package/dist/types/index.js +7 -4
  70. package/dist/types/index.js.map +1 -1
  71. package/dist/utils/commons-utility.d.ts +4 -3
  72. package/dist/utils/commons-utility.js +136 -43
  73. package/dist/utils/commons-utility.js.map +1 -1
  74. package/dist/utils/datastructure-utility.d.ts +1 -1
  75. package/dist/utils/datastructure-utility.js +5 -1
  76. package/dist/utils/datastructure-utility.js.map +1 -1
  77. package/dist/utils/dates-utility.js +37 -27
  78. package/dist/utils/dates-utility.js.map +1 -1
  79. package/dist/utils/formatter-utility.d.ts +1 -1
  80. package/dist/utils/formatter-utility.js +9 -3
  81. package/dist/utils/formatter-utility.js.map +1 -1
  82. package/dist/utils/image-utils.js +10 -3
  83. package/dist/utils/image-utils.js.map +1 -1
  84. package/dist/utils/math-utility.js +46 -29
  85. package/dist/utils/math-utility.js.map +1 -1
  86. package/dist/utils/objects-utility.d.ts +1 -1
  87. package/dist/utils/objects-utility.js +9 -3
  88. package/dist/utils/objects-utility.js.map +1 -1
  89. package/dist/utils/regex-utility.js +4 -1
  90. package/dist/utils/regex-utility.js.map +1 -1
  91. package/package.json +1 -2
@@ -1,21 +1,28 @@
1
- import ExcelJS from "exceljs";
2
- import { allowedTotals, footerStyleFill, headerStyleFill, } from "./excel-converter.types.js";
3
- import { objectsIsDate } from "../../utils/objects-utility.js";
4
- import { getExcelNumFormatForGroupedRow } from "./matrix-converter.js";
5
- import { calculateExpression } from "../../utils/math-utility.js";
6
- const { ValueType } = ExcelJS;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isGroupedCell = exports.groupedCellFormatAttributes = exports.getCellsFromRange = exports.getDistinctCount = exports.smeupFormulaToExcelValue = exports.smeupFormulaToExcelFormula = exports.getTotalFormula = exports.getExcelColumnLetter = exports.addFooterTotalsRow = exports.setHeaderStyling = exports.initializeWorksheet = void 0;
7
+ const exceljs_1 = __importDefault(require("exceljs"));
8
+ const excel_converter_types_1 = require("./excel-converter.types");
9
+ const objects_utility_1 = require("../../utils/objects-utility");
10
+ const matrix_converter_1 = require("./matrix-converter");
11
+ const math_utility_1 = require("../../utils/math-utility");
12
+ const { ValueType } = exceljs_1.default;
7
13
  /**
8
14
  * Adds creator, creation date to the workbook and creates a sheet
9
15
  * @param workbook
10
16
  * @returns void
11
17
  */
12
- export const initializeWorksheet = (workbook) => {
18
+ const initializeWorksheet = (workbook) => {
13
19
  workbook.creator = "/doc-alchemist - dataTable excel generator";
14
20
  workbook.created = new Date();
15
21
  const worksheet = workbook.addWorksheet("Export");
16
22
  return worksheet;
17
23
  };
18
- export const setHeaderStyling = (worksheet, background = false) => {
24
+ exports.initializeWorksheet = initializeWorksheet;
25
+ const setHeaderStyling = (worksheet, background = false) => {
19
26
  const headerRow = worksheet.getRow(1);
20
27
  headerRow.font = { bold: true };
21
28
  headerRow.alignment = {
@@ -26,11 +33,12 @@ export const setHeaderStyling = (worksheet, background = false) => {
26
33
  if (background) {
27
34
  for (let col = 1; col <= worksheet.columns.length; col++) {
28
35
  const cell = headerRow.getCell(col);
29
- cell.fill = headerStyleFill;
36
+ cell.fill = excel_converter_types_1.headerStyleFill;
30
37
  }
31
38
  }
32
39
  };
33
- export const addFooterTotalsRow = (worksheet, columns, props, webupManagerData) => {
40
+ exports.setHeaderStyling = setHeaderStyling;
41
+ const addFooterTotalsRow = (worksheet, columns, props, webupManagerData) => {
34
42
  if (!props?.totals || typeof props.totals !== "object") {
35
43
  return;
36
44
  }
@@ -40,7 +48,7 @@ export const addFooterTotalsRow = (worksheet, columns, props, webupManagerData)
40
48
  const totalOperation = totals[column.name];
41
49
  if (!totalOperation)
42
50
  return;
43
- const formula = getTotalFormula(worksheet, totalOperation, columnIndex + 1, // from base 0 to base 1
51
+ const formula = (0, exports.getTotalFormula)(worksheet, totalOperation, columnIndex + 1, // from base 0 to base 1
44
52
  worksheet.rowCount, columns, totalOperation.startsWith("MATH"));
45
53
  return formula ? { formula: formula, type: ValueType.Formula } : " ";
46
54
  });
@@ -50,19 +58,20 @@ export const addFooterTotalsRow = (worksheet, columns, props, webupManagerData)
50
58
  footerRow.alignment = { horizontal: "right" };
51
59
  columns.map((column, index) => {
52
60
  const exceljsCell = footerRow.getCell(index + 1); // Convert base 0 index to base 1
53
- exceljsCell.fill = footerStyleFill;
61
+ exceljsCell.fill = excel_converter_types_1.footerStyleFill;
54
62
  if (column.obj &&
55
- objectsIsDate(column.obj) &&
56
- (exceljsCell.formula?.startsWith(allowedTotals.Min) ||
57
- exceljsCell.formula?.startsWith(allowedTotals.Max))) {
63
+ (0, objects_utility_1.objectsIsDate)(column.obj) &&
64
+ (exceljsCell.formula?.startsWith(excel_converter_types_1.allowedTotals.Min) ||
65
+ exceljsCell.formula?.startsWith(excel_converter_types_1.allowedTotals.Max))) {
58
66
  const dateFormat = webupManagerData.datesLocale === "it" ? "dd/mm/yyyy" : "mm/dd/yyyy";
59
67
  exceljsCell.numFmt = dateFormat;
60
68
  return;
61
69
  }
62
- exceljsCell.numFmt = getExcelNumFormatForGroupedRow(column, totals);
70
+ exceljsCell.numFmt = (0, matrix_converter_1.getExcelNumFormatForGroupedRow)(column, totals);
63
71
  });
64
72
  };
65
- export const getExcelColumnLetter = (index) => {
73
+ exports.addFooterTotalsRow = addFooterTotalsRow;
74
+ const getExcelColumnLetter = (index) => {
66
75
  let columnLetter = "";
67
76
  while (index > 0) {
68
77
  index--; // Excel columns are 1-based, but calculations work better with 0-based
@@ -71,6 +80,7 @@ export const getExcelColumnLetter = (index) => {
71
80
  }
72
81
  return columnLetter;
73
82
  };
83
+ exports.getExcelColumnLetter = getExcelColumnLetter;
74
84
  /**
75
85
  * Returns the formula used in the footer to add Totals at the end of the table
76
86
  * @param totalOperation string
@@ -78,29 +88,30 @@ export const getExcelColumnLetter = (index) => {
78
88
  * @param rowNumber number
79
89
  * @returns
80
90
  */
81
- export const getTotalFormula = (worksheet, totalOperation, colIndex, rowNumber, filteredColumns, isSmeupFormula) => {
91
+ const getTotalFormula = (worksheet, totalOperation, colIndex, rowNumber, filteredColumns, isSmeupFormula) => {
82
92
  const startRow = 2;
83
- const columnExcelLetter = getExcelColumnLetter(colIndex);
93
+ const columnExcelLetter = (0, exports.getExcelColumnLetter)(colIndex);
84
94
  if (isSmeupFormula) {
85
- return smeupFormulaToExcelFormula(totalOperation, rowNumber, filteredColumns);
95
+ return (0, exports.smeupFormulaToExcelFormula)(totalOperation, rowNumber, filteredColumns);
86
96
  }
87
- if (!allowedTotals[totalOperation]) {
97
+ if (!excel_converter_types_1.allowedTotals[totalOperation]) {
88
98
  console.warn(`Total operation [' ${totalOperation} '] is not supported`, "exportUtils.ts");
89
99
  return "";
90
100
  }
91
101
  if (totalOperation === "Distinct") {
92
- return getDistinctCount(`${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber}`, worksheet);
102
+ return (0, exports.getDistinctCount)(`${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber}`, worksheet);
93
103
  }
94
104
  else {
95
- return `${allowedTotals[totalOperation]}${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber})`;
105
+ return `${excel_converter_types_1.allowedTotals[totalOperation]}${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber})`;
96
106
  }
97
107
  };
98
- export const smeupFormulaToExcelFormula = (formula, rowNumber, filteredColumns) => {
108
+ exports.getTotalFormula = getTotalFormula;
109
+ const smeupFormulaToExcelFormula = (formula, rowNumber, filteredColumns) => {
99
110
  const result = formula
100
111
  .replace("MATH", "")
101
112
  .replace(/\[([^\]]+)\]/g, (_, key) => {
102
113
  const columnIndex = filteredColumns.findIndex(col => col.name === key) + 1;
103
- const columnLetter = getExcelColumnLetter(columnIndex);
114
+ const columnLetter = (0, exports.getExcelColumnLetter)(columnIndex);
104
115
  return columnLetter && columnIndex
105
116
  ? `${columnLetter}${rowNumber + 1}`
106
117
  : key;
@@ -108,7 +119,8 @@ export const smeupFormulaToExcelFormula = (formula, rowNumber, filteredColumns)
108
119
  .replaceAll(",", "."); // Replace eventual , to . => The excel accepted decimal separator
109
120
  return result;
110
121
  };
111
- export const smeupFormulaToExcelValue = (column, filteredColumns, cells) => {
122
+ exports.smeupFormulaToExcelFormula = smeupFormulaToExcelFormula;
123
+ const smeupFormulaToExcelValue = (column, filteredColumns, cells) => {
112
124
  let resultValue = "";
113
125
  if (!column.formula) {
114
126
  return "";
@@ -128,7 +140,7 @@ export const smeupFormulaToExcelValue = (column, filteredColumns, cells) => {
128
140
  resultValue = applySUMFormula(column, filteredColumns, cells);
129
141
  }
130
142
  else {
131
- resultValue = calculateExpression(result);
143
+ resultValue = (0, math_utility_1.calculateExpression)(result);
132
144
  }
133
145
  }
134
146
  catch {
@@ -136,6 +148,7 @@ export const smeupFormulaToExcelValue = (column, filteredColumns, cells) => {
136
148
  }
137
149
  return resultValue.toString();
138
150
  };
151
+ exports.smeupFormulaToExcelValue = smeupFormulaToExcelValue;
139
152
  const applySUMFormula = (column, filteredColumns, cells) => {
140
153
  let resultValue = 0;
141
154
  resultValue = 0;
@@ -144,7 +157,7 @@ const applySUMFormula = (column, filteredColumns, cells) => {
144
157
  if (col.obj && col.obj.t === "NR") {
145
158
  let cellValue = 0;
146
159
  if (col.formula) {
147
- cellValue = Number(smeupFormulaToExcelValue(col, filteredColumns, cells));
160
+ cellValue = Number((0, exports.smeupFormulaToExcelValue)(col, filteredColumns, cells));
148
161
  }
149
162
  else {
150
163
  cellValue = Number(cells[col.name]?.value);
@@ -156,7 +169,7 @@ const applySUMFormula = (column, filteredColumns, cells) => {
156
169
  });
157
170
  return resultValue;
158
171
  };
159
- export const getDistinctCount = (range, worksheet) => {
172
+ const getDistinctCount = (range, worksheet) => {
160
173
  const column = range.split(":")[0].replace(/[0-9]/g, ""); // Extract column letter
161
174
  const startRow = parseInt(range.split(":")[0].replace(/\D/g, ""), 10);
162
175
  const endRow = parseInt(range.split(":")[1].replace(/\D/g, ""), 10);
@@ -173,6 +186,7 @@ export const getDistinctCount = (range, worksheet) => {
173
186
  }
174
187
  return uniqueValues.size.toString();
175
188
  };
189
+ exports.getDistinctCount = getDistinctCount;
176
190
  /**
177
191
  * Estrae tutte le celle (ExcelJS.Cell) da un intervallo rettangolare specificato in un worksheet ExcelJS.
178
192
  *
@@ -184,7 +198,7 @@ export const getDistinctCount = (range, worksheet) => {
184
198
  * @param endRef - Il riferimento della cella finale (es. "C3").
185
199
  * @returns Un array di ExcelJS.Cell dall'intervallo specificato, in ordine riga-major.
186
200
  */
187
- export const getCellsFromRange = (worksheet, startRef, endRef) => {
201
+ const getCellsFromRange = (worksheet, startRef, endRef) => {
188
202
  const parseCellRef = (ref) => {
189
203
  const match = ref.match(/^([A-Z]+)(\d+)$/i);
190
204
  if (!match)
@@ -213,7 +227,8 @@ export const getCellsFromRange = (worksheet, startRef, endRef) => {
213
227
  }
214
228
  return cells;
215
229
  };
216
- export const groupedCellFormatAttributes = {
230
+ exports.getCellsFromRange = getCellsFromRange;
231
+ exports.groupedCellFormatAttributes = {
217
232
  font: { bold: true },
218
233
  alignment: { horizontal: "left" },
219
234
  fill: {
@@ -222,11 +237,12 @@ export const groupedCellFormatAttributes = {
222
237
  fgColor: { argb: "ffe0e0e0" },
223
238
  },
224
239
  };
225
- export const isGroupedCell = (cell) => {
240
+ const isGroupedCell = (cell) => {
226
241
  return (JSON.stringify({
227
242
  font: cell.font,
228
243
  alignment: cell.alignment,
229
244
  fill: cell.fill,
230
- }) === JSON.stringify(groupedCellFormatAttributes));
245
+ }) === JSON.stringify(exports.groupedCellFormatAttributes));
231
246
  };
247
+ exports.isGroupedCell = isGroupedCell;
232
248
  //# sourceMappingURL=commons.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commons.js","sourceRoot":"","sources":["../../../src/converters/excel/commons.ts"],"names":[],"mappings":"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","sourcesContent":["import ExcelJS, { Alignment, Fill, Worksheet } from \"exceljs\";\nimport {\n allowedTotals,\n footerStyleFill,\n headerStyleFill,\n} from \"./excel-converter.types.js\";\nimport { GenericObject, WebupManagerData } from \"../../types/index.js\";\nimport { objectsIsDate } from \"../../utils/objects-utility.js\";\nimport { getExcelNumFormatForGroupedRow } from \"./matrix-converter.js\";\nimport {\n SmeupDataCell,\n SmeupDataColumn,\n} from \"../../types/data-structures/smeupDataTable.js\";\nimport { calculateExpression } from \"../../utils/math-utility.js\";\nconst { ValueType } = ExcelJS;\n\n/**\n * Adds creator, creation date to the workbook and creates a sheet\n * @param workbook\n * @returns void\n */\nexport const initializeWorksheet = (workbook: ExcelJS.Workbook) => {\n workbook.creator = \"/doc-alchemist - dataTable excel generator\";\n workbook.created = new Date();\n\n const worksheet = workbook.addWorksheet(\"Export\");\n return worksheet;\n};\n\nexport const setHeaderStyling = (\n worksheet: Worksheet,\n background = false,\n): void => {\n const headerRow = worksheet.getRow(1);\n headerRow.font = { bold: true };\n headerRow.alignment = {\n horizontal: \"center\",\n vertical: \"middle\",\n wrapText: true,\n };\n\n if (background) {\n for (let col = 1; col <= worksheet.columns.length; col++) {\n const cell = headerRow.getCell(col);\n cell.fill = headerStyleFill;\n }\n }\n};\n\nexport const addFooterTotalsRow = (\n worksheet: ExcelJS.Worksheet,\n columns: SmeupDataColumn[],\n props: GenericObject,\n webupManagerData: WebupManagerData,\n) => {\n if (!props?.totals || typeof props.totals !== \"object\") {\n return;\n }\n\n const totals = props.totals as Record<string, string>;\n\n // Set footer total formulas\n const footerRowData = columns.map((column, columnIndex) => {\n const totalOperation: string = totals[column.name];\n if (!totalOperation) return;\n\n const formula = getTotalFormula(\n worksheet,\n totalOperation,\n columnIndex + 1, // from base 0 to base 1\n worksheet.rowCount,\n columns,\n totalOperation.startsWith(\"MATH\"),\n );\n\n return formula ? { formula: formula, type: ValueType.Formula } : \" \";\n });\n const footerRow = worksheet.addRow(footerRowData);\n\n // Format excel footer cells\n footerRow.font = { bold: true };\n footerRow.alignment = { horizontal: \"right\" };\n columns.map((column, index) => {\n const exceljsCell = footerRow.getCell(index + 1); // Convert base 0 index to base 1\n exceljsCell.fill = footerStyleFill;\n\n if (\n column.obj &&\n objectsIsDate(column.obj) &&\n (exceljsCell.formula?.startsWith(allowedTotals.Min) ||\n exceljsCell.formula?.startsWith(allowedTotals.Max))\n ) {\n const dateFormat =\n webupManagerData.datesLocale === \"it\" ? \"dd/mm/yyyy\" : \"mm/dd/yyyy\";\n exceljsCell.numFmt = dateFormat;\n return;\n }\n\n exceljsCell.numFmt = getExcelNumFormatForGroupedRow(column, totals);\n });\n};\n\nexport const getExcelColumnLetter = (index: number): string => {\n let columnLetter = \"\";\n while (index > 0) {\n index--; // Excel columns are 1-based, but calculations work better with 0-based\n columnLetter = String.fromCharCode((index % 26) + 65) + columnLetter;\n index = Math.floor(index / 26);\n }\n return columnLetter;\n};\n\n/**\n * Returns the formula used in the footer to add Totals at the end of the table\n * @param totalOperation string\n * @param colIndex string\n * @param rowNumber number\n * @returns\n */\nexport const getTotalFormula = (\n worksheet: ExcelJS.Worksheet,\n totalOperation: string,\n colIndex: number,\n rowNumber: number,\n filteredColumns: SmeupDataColumn[],\n isSmeupFormula: boolean,\n): string => {\n const startRow = 2;\n const columnExcelLetter = getExcelColumnLetter(colIndex);\n\n if (isSmeupFormula) {\n return smeupFormulaToExcelFormula(\n totalOperation,\n rowNumber,\n filteredColumns,\n );\n }\n\n if (!allowedTotals[totalOperation]) {\n console.warn(\n `Total operation [' ${totalOperation} '] is not supported`,\n \"exportUtils.ts\",\n );\n return \"\";\n }\n\n if (totalOperation === \"Distinct\") {\n return getDistinctCount(\n `${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber}`,\n worksheet,\n );\n } else {\n return `${allowedTotals[totalOperation]}${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber})`;\n }\n};\n\nexport const smeupFormulaToExcelFormula = (\n formula: string,\n rowNumber: number,\n filteredColumns: SmeupDataColumn[],\n): string => {\n const result = formula\n .replace(\"MATH\", \"\")\n .replace(/\\[([^\\]]+)\\]/g, (_, key) => {\n const columnIndex =\n filteredColumns.findIndex(col => col.name === key) + 1;\n const columnLetter = getExcelColumnLetter(columnIndex);\n return columnLetter && columnIndex\n ? `${columnLetter}${rowNumber + 1}`\n : key;\n })\n .replaceAll(\",\", \".\"); // Replace eventual , to . => The excel accepted decimal separator\n return result;\n};\n\nexport const smeupFormulaToExcelValue = (\n column: SmeupDataColumn,\n filteredColumns: SmeupDataColumn[],\n cells: Record<string, SmeupDataCell>,\n): string => {\n let resultValue: string | number = \"\";\n if (!column.formula) {\n return \"\";\n }\n const result = column.formula\n .replace(\"MATH\", \"\")\n .replace(/\\[([^\\]]+)\\]/g, (match, key) => {\n const columnIndex = filteredColumns.findIndex(col => col.name === key);\n return columnIndex >= 0\n ? (cells[key]?.value ?? \"\")\n : match === \"[SUM]\"\n ? match\n : key;\n });\n try {\n if (result === \"[SUM]\") {\n resultValue = applySUMFormula(column, filteredColumns, cells);\n } else {\n resultValue = calculateExpression(result);\n }\n } catch {\n resultValue = result; // If the formula fails, return the original formula\n }\n return resultValue.toString();\n};\n\nconst applySUMFormula = (\n column: SmeupDataColumn,\n filteredColumns: SmeupDataColumn[],\n cells: Record<string, SmeupDataCell>,\n): number => {\n let resultValue: number = 0;\n resultValue = 0;\n const index = filteredColumns.findIndex(col => col.name === column.name);\n filteredColumns.slice(0, index).forEach(col => {\n if (col.obj && col.obj.t === \"NR\") {\n let cellValue = 0;\n if (col.formula) {\n cellValue = Number(\n smeupFormulaToExcelValue(col, filteredColumns, cells),\n );\n } else {\n cellValue = Number(cells[col.name]?.value);\n }\n if (!isNaN(cellValue)) {\n resultValue = (resultValue as number) + cellValue;\n }\n }\n });\n return resultValue;\n};\n\nexport const getDistinctCount = (\n range: string,\n worksheet: ExcelJS.Worksheet,\n): string => {\n const column = range.split(\":\")[0].replace(/[0-9]/g, \"\"); // Extract column letter\n const startRow = parseInt(range.split(\":\")[0].replace(/\\D/g, \"\"), 10);\n const endRow = parseInt(range.split(\":\")[1].replace(/\\D/g, \"\"), 10);\n\n // Create a set to store unique values\n const uniqueValues = new Set<string>();\n\n for (let rowIndex = startRow; rowIndex <= endRow; rowIndex++) {\n const cell = worksheet.getCell(`${column}${rowIndex}`);\n if (cell.formula) continue;\n const cellValue = cell.value;\n if (cellValue !== null && cellValue !== undefined) {\n uniqueValues.add(cellValue.toString());\n }\n }\n\n return uniqueValues.size.toString();\n};\n\n/**\n * Estrae tutte le celle (ExcelJS.Cell) da un intervallo rettangolare specificato in un worksheet ExcelJS.\n *\n * L'intervallo è definito dai riferimenti di cella iniziale e finale (es. \"A1\" a \"C3\").\n * Restituisce le celle in ordine riga-major.\n *\n * @param worksheet - Il worksheet ExcelJS da cui estrarre le celle.\n * @param startRef - Il riferimento della cella iniziale (es. \"A1\").\n * @param endRef - Il riferimento della cella finale (es. \"C3\").\n * @returns Un array di ExcelJS.Cell dall'intervallo specificato, in ordine riga-major.\n */\nexport const getCellsFromRange = (\n worksheet: ExcelJS.Worksheet,\n startRef: string,\n endRef: string,\n): ExcelJS.Cell[] => {\n const parseCellRef = (ref: string) => {\n const match = ref.match(/^([A-Z]+)(\\d+)$/i);\n if (!match) return null;\n const col = match[1].toUpperCase();\n const row = parseInt(match[2], 10);\n return { col, row };\n };\n const colToIndex = (col: string) => {\n let idx = 0;\n for (let i = 0; i < col.length; i++) {\n idx = idx * 26 + (col.charCodeAt(i) - 64);\n }\n return idx;\n };\n const start = parseCellRef(startRef);\n const end = parseCellRef(endRef);\n if (!start || !end) return [];\n const cells: ExcelJS.Cell[] = [];\n for (let r = start.row; r <= end.row; r++) {\n for (let c = colToIndex(start.col); c <= colToIndex(end.col); c++) {\n const cell = worksheet.getRow(r).getCell(c);\n cells.push(cell);\n }\n }\n return cells;\n};\n\nexport const groupedCellFormatAttributes = {\n font: { bold: true },\n alignment: { horizontal: \"left\" } as Partial<Alignment>,\n fill: {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"ffe0e0e0\" },\n } as Fill,\n};\n\nexport const isGroupedCell = (cell: ExcelJS.Cell): boolean => {\n return (\n JSON.stringify({\n font: cell.font,\n alignment: cell.alignment,\n fill: cell.fill,\n }) === JSON.stringify(groupedCellFormatAttributes)\n );\n};\n"]}
1
+ {"version":3,"file":"commons.js","sourceRoot":"","sources":["../../../src/converters/excel/commons.ts"],"names":[],"mappings":"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","sourcesContent":["import ExcelJS, { Alignment, Fill, Worksheet } from \"exceljs\";\nimport {\n allowedTotals,\n footerStyleFill,\n headerStyleFill,\n} from \"./excel-converter.types\";\nimport { GenericObject, WebupManagerData } from \"../../types/index\";\nimport { objectsIsDate } from \"../../utils/objects-utility\";\nimport { getExcelNumFormatForGroupedRow } from \"./matrix-converter\";\nimport {\n SmeupDataCell,\n SmeupDataColumn,\n} from \"../../types/data-structures/smeupDataTable\";\nimport { calculateExpression } from \"../../utils/math-utility\";\nconst { ValueType } = ExcelJS;\n\n/**\n * Adds creator, creation date to the workbook and creates a sheet\n * @param workbook\n * @returns void\n */\nexport const initializeWorksheet = (workbook: ExcelJS.Workbook) => {\n workbook.creator = \"/doc-alchemist - dataTable excel generator\";\n workbook.created = new Date();\n\n const worksheet = workbook.addWorksheet(\"Export\");\n return worksheet;\n};\n\nexport const setHeaderStyling = (\n worksheet: Worksheet,\n background = false,\n): void => {\n const headerRow = worksheet.getRow(1);\n headerRow.font = { bold: true };\n headerRow.alignment = {\n horizontal: \"center\",\n vertical: \"middle\",\n wrapText: true,\n };\n\n if (background) {\n for (let col = 1; col <= worksheet.columns.length; col++) {\n const cell = headerRow.getCell(col);\n cell.fill = headerStyleFill;\n }\n }\n};\n\nexport const addFooterTotalsRow = (\n worksheet: ExcelJS.Worksheet,\n columns: SmeupDataColumn[],\n props: GenericObject,\n webupManagerData: WebupManagerData,\n) => {\n if (!props?.totals || typeof props.totals !== \"object\") {\n return;\n }\n\n const totals = props.totals as Record<string, string>;\n\n // Set footer total formulas\n const footerRowData = columns.map((column, columnIndex) => {\n const totalOperation: string = totals[column.name];\n if (!totalOperation) return;\n\n const formula = getTotalFormula(\n worksheet,\n totalOperation,\n columnIndex + 1, // from base 0 to base 1\n worksheet.rowCount,\n columns,\n totalOperation.startsWith(\"MATH\"),\n );\n\n return formula ? { formula: formula, type: ValueType.Formula } : \" \";\n });\n const footerRow = worksheet.addRow(footerRowData);\n\n // Format excel footer cells\n footerRow.font = { bold: true };\n footerRow.alignment = { horizontal: \"right\" };\n columns.map((column, index) => {\n const exceljsCell = footerRow.getCell(index + 1); // Convert base 0 index to base 1\n exceljsCell.fill = footerStyleFill;\n\n if (\n column.obj &&\n objectsIsDate(column.obj) &&\n (exceljsCell.formula?.startsWith(allowedTotals.Min) ||\n exceljsCell.formula?.startsWith(allowedTotals.Max))\n ) {\n const dateFormat =\n webupManagerData.datesLocale === \"it\" ? \"dd/mm/yyyy\" : \"mm/dd/yyyy\";\n exceljsCell.numFmt = dateFormat;\n return;\n }\n\n exceljsCell.numFmt = getExcelNumFormatForGroupedRow(column, totals);\n });\n};\n\nexport const getExcelColumnLetter = (index: number): string => {\n let columnLetter = \"\";\n while (index > 0) {\n index--; // Excel columns are 1-based, but calculations work better with 0-based\n columnLetter = String.fromCharCode((index % 26) + 65) + columnLetter;\n index = Math.floor(index / 26);\n }\n return columnLetter;\n};\n\n/**\n * Returns the formula used in the footer to add Totals at the end of the table\n * @param totalOperation string\n * @param colIndex string\n * @param rowNumber number\n * @returns\n */\nexport const getTotalFormula = (\n worksheet: ExcelJS.Worksheet,\n totalOperation: string,\n colIndex: number,\n rowNumber: number,\n filteredColumns: SmeupDataColumn[],\n isSmeupFormula: boolean,\n): string => {\n const startRow = 2;\n const columnExcelLetter = getExcelColumnLetter(colIndex);\n\n if (isSmeupFormula) {\n return smeupFormulaToExcelFormula(\n totalOperation,\n rowNumber,\n filteredColumns,\n );\n }\n\n if (!allowedTotals[totalOperation]) {\n console.warn(\n `Total operation [' ${totalOperation} '] is not supported`,\n \"exportUtils.ts\",\n );\n return \"\";\n }\n\n if (totalOperation === \"Distinct\") {\n return getDistinctCount(\n `${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber}`,\n worksheet,\n );\n } else {\n return `${allowedTotals[totalOperation]}${columnExcelLetter}${startRow}:${columnExcelLetter}${rowNumber})`;\n }\n};\n\nexport const smeupFormulaToExcelFormula = (\n formula: string,\n rowNumber: number,\n filteredColumns: SmeupDataColumn[],\n): string => {\n const result = formula\n .replace(\"MATH\", \"\")\n .replace(/\\[([^\\]]+)\\]/g, (_, key) => {\n const columnIndex =\n filteredColumns.findIndex(col => col.name === key) + 1;\n const columnLetter = getExcelColumnLetter(columnIndex);\n return columnLetter && columnIndex\n ? `${columnLetter}${rowNumber + 1}`\n : key;\n })\n .replaceAll(\",\", \".\"); // Replace eventual , to . => The excel accepted decimal separator\n return result;\n};\n\nexport const smeupFormulaToExcelValue = (\n column: SmeupDataColumn,\n filteredColumns: SmeupDataColumn[],\n cells: Record<string, SmeupDataCell>,\n): string => {\n let resultValue: string | number = \"\";\n if (!column.formula) {\n return \"\";\n }\n const result = column.formula\n .replace(\"MATH\", \"\")\n .replace(/\\[([^\\]]+)\\]/g, (match, key) => {\n const columnIndex = filteredColumns.findIndex(col => col.name === key);\n return columnIndex >= 0\n ? (cells[key]?.value ?? \"\")\n : match === \"[SUM]\"\n ? match\n : key;\n });\n try {\n if (result === \"[SUM]\") {\n resultValue = applySUMFormula(column, filteredColumns, cells);\n } else {\n resultValue = calculateExpression(result);\n }\n } catch {\n resultValue = result; // If the formula fails, return the original formula\n }\n return resultValue.toString();\n};\n\nconst applySUMFormula = (\n column: SmeupDataColumn,\n filteredColumns: SmeupDataColumn[],\n cells: Record<string, SmeupDataCell>,\n): number => {\n let resultValue: number = 0;\n resultValue = 0;\n const index = filteredColumns.findIndex(col => col.name === column.name);\n filteredColumns.slice(0, index).forEach(col => {\n if (col.obj && col.obj.t === \"NR\") {\n let cellValue = 0;\n if (col.formula) {\n cellValue = Number(\n smeupFormulaToExcelValue(col, filteredColumns, cells),\n );\n } else {\n cellValue = Number(cells[col.name]?.value);\n }\n if (!isNaN(cellValue)) {\n resultValue = (resultValue as number) + cellValue;\n }\n }\n });\n return resultValue;\n};\n\nexport const getDistinctCount = (\n range: string,\n worksheet: ExcelJS.Worksheet,\n): string => {\n const column = range.split(\":\")[0].replace(/[0-9]/g, \"\"); // Extract column letter\n const startRow = parseInt(range.split(\":\")[0].replace(/\\D/g, \"\"), 10);\n const endRow = parseInt(range.split(\":\")[1].replace(/\\D/g, \"\"), 10);\n\n // Create a set to store unique values\n const uniqueValues = new Set<string>();\n\n for (let rowIndex = startRow; rowIndex <= endRow; rowIndex++) {\n const cell = worksheet.getCell(`${column}${rowIndex}`);\n if (cell.formula) continue;\n const cellValue = cell.value;\n if (cellValue !== null && cellValue !== undefined) {\n uniqueValues.add(cellValue.toString());\n }\n }\n\n return uniqueValues.size.toString();\n};\n\n/**\n * Estrae tutte le celle (ExcelJS.Cell) da un intervallo rettangolare specificato in un worksheet ExcelJS.\n *\n * L'intervallo è definito dai riferimenti di cella iniziale e finale (es. \"A1\" a \"C3\").\n * Restituisce le celle in ordine riga-major.\n *\n * @param worksheet - Il worksheet ExcelJS da cui estrarre le celle.\n * @param startRef - Il riferimento della cella iniziale (es. \"A1\").\n * @param endRef - Il riferimento della cella finale (es. \"C3\").\n * @returns Un array di ExcelJS.Cell dall'intervallo specificato, in ordine riga-major.\n */\nexport const getCellsFromRange = (\n worksheet: ExcelJS.Worksheet,\n startRef: string,\n endRef: string,\n): ExcelJS.Cell[] => {\n const parseCellRef = (ref: string) => {\n const match = ref.match(/^([A-Z]+)(\\d+)$/i);\n if (!match) return null;\n const col = match[1].toUpperCase();\n const row = parseInt(match[2], 10);\n return { col, row };\n };\n const colToIndex = (col: string) => {\n let idx = 0;\n for (let i = 0; i < col.length; i++) {\n idx = idx * 26 + (col.charCodeAt(i) - 64);\n }\n return idx;\n };\n const start = parseCellRef(startRef);\n const end = parseCellRef(endRef);\n if (!start || !end) return [];\n const cells: ExcelJS.Cell[] = [];\n for (let r = start.row; r <= end.row; r++) {\n for (let c = colToIndex(start.col); c <= colToIndex(end.col); c++) {\n const cell = worksheet.getRow(r).getCell(c);\n cells.push(cell);\n }\n }\n return cells;\n};\n\nexport const groupedCellFormatAttributes = {\n font: { bold: true },\n alignment: { horizontal: \"left\" } as Partial<Alignment>,\n fill: {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"ffe0e0e0\" },\n } as Fill,\n};\n\nexport const isGroupedCell = (cell: ExcelJS.Cell): boolean => {\n return (\n JSON.stringify({\n font: cell.font,\n alignment: cell.alignment,\n fill: cell.fill,\n }) === JSON.stringify(groupedCellFormatAttributes)\n );\n};\n\n"]}
@@ -1,18 +1,21 @@
1
- import { SupportedExportFormats } from "../../types/index.js";
2
- export const headerStyleFill = {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.footerStyleFill = exports.allowedTotals = exports.exportTypeSupportsFormatting = exports.headerStyleFill = void 0;
4
+ const index_1 = require("../../types/index");
5
+ exports.headerStyleFill = {
3
6
  type: "pattern",
4
7
  pattern: "solid",
5
8
  fgColor: { argb: "E0E0E0" },
6
9
  };
7
- export const exportTypeSupportsFormatting = {
8
- [SupportedExportFormats.XLSX]: true,
9
- [SupportedExportFormats.CSV]: false,
10
- [SupportedExportFormats.TXT]: false,
11
- [SupportedExportFormats.FILE]: false,
12
- [SupportedExportFormats.PDF_SCHEDA]: false,
13
- [SupportedExportFormats.PDF]: false,
10
+ exports.exportTypeSupportsFormatting = {
11
+ [index_1.SupportedExportFormats.XLSX]: true,
12
+ [index_1.SupportedExportFormats.CSV]: false,
13
+ [index_1.SupportedExportFormats.TXT]: false,
14
+ [index_1.SupportedExportFormats.FILE]: false,
15
+ [index_1.SupportedExportFormats.PDF_SCHEDA]: false,
16
+ [index_1.SupportedExportFormats.PDF]: false,
14
17
  };
15
- export const allowedTotals = {
18
+ exports.allowedTotals = {
16
19
  // The different initial number indicates the specific subtotal action
17
20
  ["Count"]: "SUBTOTAL(3,", // COUNTA
18
21
  ["Sum"]: "SUBTOTAL(9,", // SUM
@@ -21,7 +24,7 @@ export const allowedTotals = {
21
24
  ["Average"]: "SUBTOTAL(1,", // AVERAGE
22
25
  ["Distinct"]: "COUNTA(UNIQUE(", // It is computed in JavaScript, when the Excel is localized in italian, it does not work
23
26
  };
24
- export const footerStyleFill = {
27
+ exports.footerStyleFill = {
25
28
  type: "pattern",
26
29
  pattern: "solid",
27
30
  fgColor: { argb: "EEEEEE" },
@@ -1 +1 @@
1
- {"version":3,"file":"excel-converter.types.js","sourceRoot":"","sources":["../../../src/converters/excel/excel-converter.types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAY9D,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,IAAI;IACnC,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,KAAK;IACnC,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,KAAK;IACnC,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,KAAK;IACpC,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,KAAK;IAC1C,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,KAAK;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,sEAAsE;IACtE,CAAC,OAAoB,CAAC,EAAE,aAAa,EAAE,SAAS;IAChD,CAAC,KAAkB,CAAC,EAAE,aAAa,EAAE,MAAM;IAC3C,CAAC,KAAkB,CAAC,EAAE,aAAa,EAAE,MAAM;IAC3C,CAAC,KAAkB,CAAC,EAAE,aAAa,EAAE,MAAM;IAC3C,CAAC,SAAsB,CAAC,EAAE,aAAa,EAAE,UAAU;IACnD,CAAC,UAAuB,CAAC,EAAE,gBAAgB,EAAE,yFAAyF;CACvI,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;CAC5B,CAAC","sourcesContent":["import { Fill } from \"exceljs\";\nimport { SupportedExportFormats } from \"../../types/index.js\";\n\nexport declare enum TotalMode {\n COUNT = \"Count\",\n SUM = \"Sum\",\n MIN = \"Min\",\n MAX = \"Max\",\n DISTINCT = \"Distinct\",\n AVERAGE = \"Average\",\n MATH = \"MATH\",\n}\n\nexport const headerStyleFill: Fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"E0E0E0\" },\n};\n\nexport const exportTypeSupportsFormatting = {\n [SupportedExportFormats.XLSX]: true,\n [SupportedExportFormats.CSV]: false,\n [SupportedExportFormats.TXT]: false,\n [SupportedExportFormats.FILE]: false,\n [SupportedExportFormats.PDF_SCHEDA]: false,\n [SupportedExportFormats.PDF]: false,\n};\n\nexport const allowedTotals = {\n // The different initial number indicates the specific subtotal action\n [\"Count\" as TotalMode]: \"SUBTOTAL(3,\", // COUNTA\n [\"Sum\" as TotalMode]: \"SUBTOTAL(9,\", // SUM\n [\"Max\" as TotalMode]: \"SUBTOTAL(4,\", // MAX\n [\"Min\" as TotalMode]: \"SUBTOTAL(5,\", // MIN\n [\"Average\" as TotalMode]: \"SUBTOTAL(1,\", // AVERAGE\n [\"Distinct\" as TotalMode]: \"COUNTA(UNIQUE(\", // It is computed in JavaScript, when the Excel is localized in italian, it does not work\n};\n\nexport const footerStyleFill: Fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"EEEEEE\" },\n};\n"]}
1
+ {"version":3,"file":"excel-converter.types.js","sourceRoot":"","sources":["../../../src/converters/excel/excel-converter.types.ts"],"names":[],"mappings":";;;AACA,6CAA2D;AAY9C,QAAA,eAAe,GAAS;IACnC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;CAC5B,CAAC;AAEW,QAAA,4BAA4B,GAAG;IAC1C,CAAC,8BAAsB,CAAC,IAAI,CAAC,EAAE,IAAI;IACnC,CAAC,8BAAsB,CAAC,GAAG,CAAC,EAAE,KAAK;IACnC,CAAC,8BAAsB,CAAC,GAAG,CAAC,EAAE,KAAK;IACnC,CAAC,8BAAsB,CAAC,IAAI,CAAC,EAAE,KAAK;IACpC,CAAC,8BAAsB,CAAC,UAAU,CAAC,EAAE,KAAK;IAC1C,CAAC,8BAAsB,CAAC,GAAG,CAAC,EAAE,KAAK;CACpC,CAAC;AAEW,QAAA,aAAa,GAAG;IAC3B,sEAAsE;IACtE,CAAC,OAAoB,CAAC,EAAE,aAAa,EAAE,SAAS;IAChD,CAAC,KAAkB,CAAC,EAAE,aAAa,EAAE,MAAM;IAC3C,CAAC,KAAkB,CAAC,EAAE,aAAa,EAAE,MAAM;IAC3C,CAAC,KAAkB,CAAC,EAAE,aAAa,EAAE,MAAM;IAC3C,CAAC,SAAsB,CAAC,EAAE,aAAa,EAAE,UAAU;IACnD,CAAC,UAAuB,CAAC,EAAE,gBAAgB,EAAE,yFAAyF;CACvI,CAAC;AAEW,QAAA,eAAe,GAAS;IACnC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;CAC5B,CAAC","sourcesContent":["import { Fill } from \"exceljs\";\nimport { SupportedExportFormats } from \"../../types/index\";\n\nexport declare enum TotalMode {\n COUNT = \"Count\",\n SUM = \"Sum\",\n MIN = \"Min\",\n MAX = \"Max\",\n DISTINCT = \"Distinct\",\n AVERAGE = \"Average\",\n MATH = \"MATH\",\n}\n\nexport const headerStyleFill: Fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"E0E0E0\" },\n};\n\nexport const exportTypeSupportsFormatting = {\n [SupportedExportFormats.XLSX]: true,\n [SupportedExportFormats.CSV]: false,\n [SupportedExportFormats.TXT]: false,\n [SupportedExportFormats.FILE]: false,\n [SupportedExportFormats.PDF_SCHEDA]: false,\n [SupportedExportFormats.PDF]: false,\n};\n\nexport const allowedTotals = {\n // The different initial number indicates the specific subtotal action\n [\"Count\" as TotalMode]: \"SUBTOTAL(3,\", // COUNTA\n [\"Sum\" as TotalMode]: \"SUBTOTAL(9,\", // SUM\n [\"Max\" as TotalMode]: \"SUBTOTAL(4,\", // MAX\n [\"Min\" as TotalMode]: \"SUBTOTAL(5,\", // MIN\n [\"Average\" as TotalMode]: \"SUBTOTAL(1,\", // AVERAGE\n [\"Distinct\" as TotalMode]: \"COUNTA(UNIQUE(\", // It is computed in JavaScript, when the Excel is localized in italian, it does not work\n};\n\nexport const footerStyleFill: Fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"EEEEEE\" },\n};\n\n"]}
@@ -1,7 +1,7 @@
1
1
  import ExcelJS from "exceljs";
2
- import { GenericObject, WebupManagerData, SupportedExportFormats } from "../../types/index.js";
3
- import { SmeupDataColumn, SmeupDataRow, SmeupDataTable } from "../../types/data-structures/smeupDataTable.js";
4
- import { SmeupDataNode } from "../../types/data-structures/smeupDataTree.js";
2
+ import { GenericObject, WebupManagerData, SupportedExportFormats } from "../../types/index";
3
+ import { SmeupDataColumn, SmeupDataRow, SmeupDataTable } from "../../types/data-structures/smeupDataTable";
4
+ import { SmeupDataNode } from "../../types/data-structures/smeupDataTree";
5
5
  export declare const dataTableToExcelWorkbook: (component: {
6
6
  smeupDataTable: SmeupDataTable;
7
7
  props: GenericObject;
@@ -1,28 +1,34 @@
1
- import ExcelJS from "exceljs";
2
- import { getFilteredColumns, filterRows, updateMaxValueLength, calculateCellValue, hexToArgb, calculateValue, sortRows, } from "../../utils/commons-utility.js";
3
- import { exportTypeSupportsFormatting, allowedTotals, } from "./excel-converter.types.js";
4
- import { isColumnHidden } from "../../utils/datastructure-utility.js";
5
- import { addFooterTotalsRow, getDistinctCount, getExcelColumnLetter, groupedCellFormatAttributes, initializeWorksheet, setHeaderStyling, smeupFormulaToExcelFormula, smeupFormulaToExcelValue, } from "./commons.js";
6
- export const dataTableToExcelWorkbook = (component, fileFormat, webupManagerData) => {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getExcelNumFormat = exports.getExcelNumFormatForGroupedRow = exports.addStyleToExceljsRow = exports.dataTableToExcelWorkbook = void 0;
7
+ const exceljs_1 = __importDefault(require("exceljs"));
8
+ const commons_utility_1 = require("../../utils/commons-utility");
9
+ const excel_converter_types_1 = require("./excel-converter.types");
10
+ const datastructure_utility_1 = require("../../utils/datastructure-utility");
11
+ const commons_1 = require("./commons");
12
+ const dataTableToExcelWorkbook = (component, fileFormat, webupManagerData) => {
7
13
  // Create a new ExcelJS.Workbook and return it as a resolved Promise
8
14
  const { smeupDataTable: smeupDataTable, props } = component;
9
- const workbook = new ExcelJS.Workbook();
10
- const worksheet = initializeWorksheet(workbook);
15
+ const workbook = new exceljs_1.default.Workbook();
16
+ const worksheet = (0, commons_1.initializeWorksheet)(workbook);
11
17
  const groupsArray = Array.isArray(props?.groups)
12
18
  ? props.groups
13
19
  : [];
14
20
  // Visible attribute is used only to determine if the column is visible,
15
21
  // ant not to determine if the group is active
16
22
  const activeGroups = groupsArray.map((group) => group.column);
17
- const filteredColumns = getFilteredColumns(smeupDataTable.columns, props, groupsArray);
23
+ const filteredColumns = (0, commons_utility_1.getFilteredColumns)(smeupDataTable.columns, props, groupsArray);
18
24
  const maxColumnValueLenght = {};
19
25
  let rowNumber = 1; // Start row number
20
26
  // Headers setup
21
27
  setDataTableHeaderRow(worksheet, filteredColumns, maxColumnValueLenght);
22
28
  // Filter and sort rows (if filters are available)
23
- const rows = filterRows(smeupDataTable, filteredColumns, props?.filters);
29
+ const rows = (0, commons_utility_1.filterRows)(smeupDataTable, filteredColumns, props?.filters);
24
30
  if (activeGroups?.length > 0) {
25
- sortRows(rows, component.props.sort, activeGroups);
31
+ (0, commons_utility_1.sortRows)(rows, component.props.sort, activeGroups);
26
32
  // Recursive grouping
27
33
  rowNumber = insertDataTableGroupedRows(worksheet, rows, activeGroups, filteredColumns, smeupDataTable.columns, rowNumber, fileFormat, webupManagerData, 1, maxColumnValueLenght, (props?.totals ?? {}));
28
34
  //INTERACTIVE GROUPS MANAGING
@@ -36,12 +42,12 @@ export const dataTableToExcelWorkbook = (component, fileFormat, webupManagerData
36
42
  };
37
43
  }
38
44
  else {
39
- sortRows(rows, component.props.sort);
45
+ (0, commons_utility_1.sortRows)(rows, component.props.sort);
40
46
  // Process rows normally if no grouping
41
47
  rowNumber = insertDataTableRows(worksheet, rows, filteredColumns, rowNumber, fileFormat, webupManagerData, maxColumnValueLenght);
42
48
  }
43
- if (exportTypeSupportsFormatting[fileFormat] && props?.totals) {
44
- addFooterTotalsRow(worksheet, filteredColumns, props, webupManagerData);
49
+ if (excel_converter_types_1.exportTypeSupportsFormatting[fileFormat] && props?.totals) {
50
+ (0, commons_1.addFooterTotalsRow)(worksheet, filteredColumns, props, webupManagerData);
45
51
  }
46
52
  // Apply column width
47
53
  worksheet.columns.forEach(col => {
@@ -65,6 +71,7 @@ export const dataTableToExcelWorkbook = (component, fileFormat, webupManagerData
65
71
  };
66
72
  return workbook;
67
73
  };
74
+ exports.dataTableToExcelWorkbook = dataTableToExcelWorkbook;
68
75
  /**
69
76
  * Creates the first row of the table by looking at dataTable columns.
70
77
  * Also updates column width calculations
@@ -74,15 +81,15 @@ export const dataTableToExcelWorkbook = (component, fileFormat, webupManagerData
74
81
  */
75
82
  const setDataTableHeaderRow = (worksheet, filteredColumns, maxValueLengthMap) => {
76
83
  worksheet.columns = filteredColumns.map(col => {
77
- updateMaxValueLength(maxValueLengthMap, col.title, col.name);
84
+ (0, commons_utility_1.updateMaxValueLength)(maxValueLengthMap, col.title, col.name);
78
85
  return {
79
86
  header: col.title,
80
87
  key: col.name,
81
88
  width: maxValueLengthMap[col.name], // Set the width to the updated value
82
- hidden: isColumnHidden(col),
89
+ hidden: (0, datastructure_utility_1.isColumnHidden)(col),
83
90
  };
84
91
  });
85
- setHeaderStyling(worksheet);
92
+ (0, commons_1.setHeaderStyling)(worksheet);
86
93
  };
87
94
  const insertDataTableGroupedRows = (worksheet, rows, groups, filteredColumns, unfilteredColumns, rowNumber, fileFormat, webupManagerData, currentOutlineLevel = 1, maxColumnValueLength, totals) => {
88
95
  if (!groups.length) {
@@ -109,7 +116,7 @@ const insertDataTableGroupedRows = (worksheet, rows, groups, filteredColumns, un
109
116
  // Compute totals and format cells
110
117
  for (const [colIndex, col] of filteredColumns.entries()) {
111
118
  const cell = headerRow.getCell(colIndex + 1);
112
- cell.numFmt = getExcelNumFormatForGroupedRow(col, totals);
119
+ cell.numFmt = (0, exports.getExcelNumFormatForGroupedRow)(col, totals);
113
120
  decorateHeaderRow(cell);
114
121
  if (!totals)
115
122
  continue;
@@ -118,7 +125,7 @@ const insertDataTableGroupedRows = (worksheet, rows, groups, filteredColumns, un
118
125
  cell.alignment = { horizontal: "right" };
119
126
  cell.value = totalFormula.startsWith("MATH")
120
127
  ? {
121
- formula: smeupFormulaToExcelFormula(totalFormula.replace("MATH", ""), headerRowNumber - 1, filteredColumns),
128
+ formula: (0, commons_1.smeupFormulaToExcelFormula)(totalFormula.replace("MATH", ""), headerRowNumber - 1, filteredColumns),
122
129
  }
123
130
  : {
124
131
  formula: getSubGroupTotalFormula(worksheet, totalFormula, colIndex + 1, headerRowNumber + 1, lastDataRow),
@@ -135,20 +142,20 @@ const insertDataTableRows = (worksheet, rows, filteredColumns, rowNumber, fileFo
135
142
  for (const row of rows) {
136
143
  const rowData = filteredColumns.map(column => {
137
144
  const cell = (row?.cells ?? {})[column.name];
138
- updateMaxValueLength(maxColumnValueLenght, cell?.value, column.name);
145
+ (0, commons_utility_1.updateMaxValueLength)(maxColumnValueLenght, cell?.value, column.name);
139
146
  return column.formula
140
- ? calculateValue(smeupFormulaToExcelValue(column, filteredColumns, row?.cells ?? {}), cell.obj ?? { t: "", p: "", k: "" }, fileFormat, webupManagerData)
141
- : calculateCellValue(cell, fileFormat, webupManagerData);
147
+ ? (0, commons_utility_1.calculateValue)((0, commons_1.smeupFormulaToExcelValue)(column, filteredColumns, row?.cells ?? {}), cell.obj ?? { t: "", p: "", k: "" }, fileFormat, webupManagerData)
148
+ : (0, commons_utility_1.calculateCellValue)(cell, fileFormat, webupManagerData);
142
149
  });
143
150
  const newRow = worksheet.addRow(rowData);
144
- if (exportTypeSupportsFormatting[fileFormat]) {
145
- addStyleToExceljsRow(newRow, filteredColumns, row);
151
+ if (excel_converter_types_1.exportTypeSupportsFormatting[fileFormat]) {
152
+ (0, exports.addStyleToExceljsRow)(newRow, filteredColumns, row);
146
153
  }
147
154
  rowNumber++;
148
155
  }
149
156
  return rowNumber;
150
157
  };
151
- export const addStyleToExceljsRow = (exceljsRow, columns, row) => {
158
+ const addStyleToExceljsRow = (exceljsRow, columns, row) => {
152
159
  exceljsRow.eachCell((cell, cellIndex) => {
153
160
  const columnIndex = cellIndex - 1;
154
161
  const columnName = columns[columnIndex]?.name;
@@ -167,9 +174,10 @@ export const addStyleToExceljsRow = (exceljsRow, columns, row) => {
167
174
  }
168
175
  });
169
176
  };
177
+ exports.addStyleToExceljsRow = addStyleToExceljsRow;
170
178
  const applyDefaultXlsxCellStyle = (cell, xlsxCell) => {
171
179
  if (typeof xlsxCell.value === "number" || xlsxCell.formula) {
172
- xlsxCell.numFmt = getExcelNumFormat(cell.data?.decimals ?? 0, cell.data?.integers ?? 0);
180
+ xlsxCell.numFmt = (0, exports.getExcelNumFormat)(cell.data?.decimals ?? 0, cell.data?.integers ?? 0);
173
181
  }
174
182
  };
175
183
  /**
@@ -192,7 +200,7 @@ const cellToXlsxStyleConverter = (cell, xlsxCell, optionalRowStyles) => {
192
200
  xlsxCell.fill = {
193
201
  type: "pattern",
194
202
  pattern: "solid",
195
- fgColor: { argb: hexToArgb(cellStyle.backgroundColor) },
203
+ fgColor: { argb: (0, commons_utility_1.hexToArgb)(cellStyle.backgroundColor) },
196
204
  };
197
205
  }
198
206
  if (cellStyle.fontWeight == "bold") {
@@ -204,20 +212,21 @@ const cellToXlsxStyleConverter = (cell, xlsxCell, optionalRowStyles) => {
204
212
  if (cellStyle.color) {
205
213
  xlsxCell.font = {
206
214
  ...xlsxCell.font,
207
- color: { argb: hexToArgb(cellStyle.color) },
215
+ color: { argb: (0, commons_utility_1.hexToArgb)(cellStyle.color) },
208
216
  };
209
217
  }
210
218
  };
211
- export const getExcelNumFormatForGroupedRow = (column, totals) => {
219
+ const getExcelNumFormatForGroupedRow = (column, totals) => {
212
220
  const totalOperation = totals?.[column.name];
213
221
  if (totalOperation === "Distinct") {
214
222
  return "0"; // Distinct count does not require decimals
215
223
  }
216
224
  else {
217
- return getExcelNumFormat(column.decimals ?? 0, column.integers ?? 0);
225
+ return (0, exports.getExcelNumFormat)(column.decimals ?? 0, column.integers ?? 0);
218
226
  }
219
227
  };
220
- export const getExcelNumFormat = (cellDecimals, cellIntegers) => {
228
+ exports.getExcelNumFormatForGroupedRow = getExcelNumFormatForGroupedRow;
229
+ const getExcelNumFormat = (cellDecimals, cellIntegers) => {
221
230
  // Step 1: Build the integer part with necessary '#' and '0'
222
231
  let integerPart = cellIntegers ? "#".repeat(cellIntegers - 1) + "0" : "0";
223
232
  // Step 2: Insert commas every three digits from the right
@@ -236,20 +245,21 @@ export const getExcelNumFormat = (cellDecimals, cellIntegers) => {
236
245
  numFmt += `;[Red]-${numFmt}`;
237
246
  return numFmt;
238
247
  };
248
+ exports.getExcelNumFormat = getExcelNumFormat;
239
249
  const decorateHeaderRow = (headerCell) => {
240
- Object.assign(headerCell, groupedCellFormatAttributes);
250
+ Object.assign(headerCell, commons_1.groupedCellFormatAttributes);
241
251
  };
242
252
  const getSubGroupTotalFormula = (worksheet, totalOperation, colIndex, firstDataRow, lastDataRow) => {
243
- const columnExcelLetter = getExcelColumnLetter(colIndex);
244
- if (!allowedTotals[totalOperation]) {
253
+ const columnExcelLetter = (0, commons_1.getExcelColumnLetter)(colIndex);
254
+ if (!excel_converter_types_1.allowedTotals[totalOperation]) {
245
255
  console.warn(`Total operation [' ${totalOperation} '] is not supported`, "exportUtils.ts");
246
256
  return "";
247
257
  }
248
258
  if (totalOperation === "Distinct") {
249
- return getDistinctCount(`${columnExcelLetter}${firstDataRow}:${columnExcelLetter}${lastDataRow}`, worksheet);
259
+ return (0, commons_1.getDistinctCount)(`${columnExcelLetter}${firstDataRow}:${columnExcelLetter}${lastDataRow}`, worksheet);
250
260
  }
251
261
  else {
252
- return `${allowedTotals[totalOperation]}${columnExcelLetter}${firstDataRow}:${columnExcelLetter}${lastDataRow})`;
262
+ return `${excel_converter_types_1.allowedTotals[totalOperation]}${columnExcelLetter}${firstDataRow}:${columnExcelLetter}${lastDataRow})`;
253
263
  }
254
264
  };
255
265
  const ensureGroupRowHasDescription = (worksheet) => {