@isoftdata/utility-dashboard-backend 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -6
- package/dist/chart-helper.d.ts +32 -0
- package/dist/chart-helper.js +240 -0
- package/dist/formatting-templates.d.ts +3 -0
- package/dist/formatting-templates.js +17 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.js +321 -0
- package/dist/style-templates.d.ts +4 -0
- package/dist/style-templates.js +33 -0
- package/dist/types/chart.d.ts +91 -0
- package/dist/types/chart.js +3 -0
- package/dist/types/parameter.d.ts +37 -0
- package/dist/types/parameter.js +3 -0
- package/dist/types/report.d.ts +24 -0
- package/dist/types/report.js +3 -0
- package/dist/types/session.d.ts +9 -0
- package/dist/types/session.js +3 -0
- package/package.json +26 -5
- package/.gitattributes +0 -2
- package/chart-helper.js +0 -268
- package/empty dashboard schema.sql +0 -65
- package/formatter-templates.json +0 -15
- package/index.js +0 -284
- package/schema.md +0 -125
- package/style-templates.js +0 -31
- package/stylingTest.jsonc +0 -37
package/README.md
CHANGED
|
@@ -17,16 +17,16 @@ This function returns data in the format expected for the `loadReportMetadata` f
|
|
|
17
17
|
#### Function signature
|
|
18
18
|
|
|
19
19
|
```js
|
|
20
|
-
async formatReportMetadata(mysqlConnection, { report, chartsInReport })
|
|
20
|
+
async formatReportMetadata(mysqlConnection, { report, chartsInReport, session })
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
#### Example Usage (From Pro Web `server/chart-loader.js`)
|
|
24
24
|
|
|
25
25
|
```js
|
|
26
|
-
async function loadReportMetadata({ dashboardReportId, chartId }) {
|
|
26
|
+
async function loadReportMetadata({ dashboardReportId, chartId, session }) {
|
|
27
27
|
const report = await db.dashboardReport.loadById({ dashboardReportId }) // gets a report by its id
|
|
28
28
|
const chartsInReport = await db.dashboardChart.loadByReport({ dashboardReportId, chartId }) // gets all charts for a specified report, or if `chartId` is specified, only gets that chart for that report.
|
|
29
|
-
return await formatReportMetadata(db.pool, { report, chartsInReport })
|
|
29
|
+
return await formatReportMetadata(db.pool, { report, chartsInReport, session })
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
@@ -93,6 +93,16 @@ Example:
|
|
|
93
93
|
]
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
+
#### session
|
|
97
|
+
Session object from the Auth Module
|
|
98
|
+
|
|
99
|
+
#### site (optional)
|
|
100
|
+
The 'type' of site for the product this is used in. Determines the MySQL table to query for site selection parameters, and used to calculate `siteIdColumn` if that is not specified.
|
|
101
|
+
#### siteIdColumn (optional)
|
|
102
|
+
The name of the column that stores the site id in the site table. Defaults to `${site}id`.
|
|
103
|
+
#### siteNameColumn (optional)
|
|
104
|
+
The store name column.
|
|
105
|
+
|
|
96
106
|
### formatChartDataForReport
|
|
97
107
|
|
|
98
108
|
This function returns data in the format expected for the `loadChartDataForReport` function on the dashboard client component, including applying any report-specific chart options overrides and running the chart's query.
|
|
@@ -100,18 +110,18 @@ This function returns data in the format expected for the `loadChartDataForRepor
|
|
|
100
110
|
#### Function signature
|
|
101
111
|
|
|
102
112
|
```js
|
|
103
|
-
async formatChartDataForReport(mysqlConnection, { reportParameters, chart, reportChart, parameterSelectionList })
|
|
113
|
+
async formatChartDataForReport(mysqlConnection, { reportParameters, chart, reportChart, parameterSelectionList, session })
|
|
104
114
|
```
|
|
105
115
|
|
|
106
116
|
#### Example usage: (from Pro Web `server/chart-loader.js`)
|
|
107
117
|
|
|
108
118
|
```js
|
|
109
|
-
async function loadChartDataForReport ({ dashboardReportId, chartId, parameterSelectionList }) {
|
|
119
|
+
async function loadChartDataForReport ({ dashboardReportId, chartId, parameterSelectionList, session }) {
|
|
110
120
|
const report = await db.dashboardReport.loadById({ dashboardReportId }) // get the report object
|
|
111
121
|
const chart = await db.dashboardChart.loadById({ chartId }) // get the chart object
|
|
112
122
|
const reportChart = await db.dashboardReportChart.loadByReportAndChartId({ chartId, dashboardReportId }) // get the report chart for the rank/overrides
|
|
113
123
|
try {
|
|
114
|
-
const chartData = await formatChartDataForReport(db.pool, { reportParameters: report.parameters, chart, reportChart, parameterSelectionList })
|
|
124
|
+
const chartData = await formatChartDataForReport(db.pool, { reportParameters: report.parameters, chart, reportChart, parameterSelectionList, session })
|
|
115
125
|
return chartData
|
|
116
126
|
} catch (err) {
|
|
117
127
|
console.error(err)
|
|
@@ -132,6 +142,9 @@ The id of a chart row in `wa_dashboard_chart`.
|
|
|
132
142
|
#### parameterSelectionList
|
|
133
143
|
The array of selected parameters sent from the client dashboard.
|
|
134
144
|
|
|
145
|
+
#### session
|
|
146
|
+
Session object from the Auth Module
|
|
147
|
+
|
|
135
148
|
### loadOutputParameterValues
|
|
136
149
|
|
|
137
150
|
This function outputs the report's parameter values in the format expected by the dashboard client and backend. When sending to the client, including `forClient: true` will not include the properties only needed by the backend.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Connection, OkPacket, ResultSetHeader, RowDataPacket } from "mysql";
|
|
2
|
+
import { Formatting, GoogleDataTable, MultiSeriesOptions, ProcessedFormatting, Table } from "./types/chart";
|
|
3
|
+
export type QueryFieldsObject = Record<string, string>;
|
|
4
|
+
declare function queryWithFields(connection: Connection, query: {
|
|
5
|
+
sql: string;
|
|
6
|
+
values: unknown[];
|
|
7
|
+
}): Promise<{
|
|
8
|
+
results: RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader;
|
|
9
|
+
fields: QueryFieldsObject;
|
|
10
|
+
}>;
|
|
11
|
+
interface getMultiSeriesDataInput {
|
|
12
|
+
data: RowDataPacket[];
|
|
13
|
+
seriesOptions: MultiSeriesOptions;
|
|
14
|
+
formatting?: Formatting;
|
|
15
|
+
fields: QueryFieldsObject;
|
|
16
|
+
}
|
|
17
|
+
declare function getMultiSeriesData({ data: queryResult, seriesOptions, formatting, fields }: getMultiSeriesDataInput): {
|
|
18
|
+
data: RowDataPacket[];
|
|
19
|
+
formatting: Formatting;
|
|
20
|
+
fields: Record<string, string>;
|
|
21
|
+
};
|
|
22
|
+
declare function makeNegativeNumbericValuesZero(resultSet: RowDataPacket[]): RowDataPacket[];
|
|
23
|
+
declare function coerceNullColumn(columnProp: string, data: RowDataPacket[], destinationType?: unknown): RowDataPacket[];
|
|
24
|
+
declare function handleFormattingTemplates(formatting?: Formatting): ProcessedFormatting;
|
|
25
|
+
declare function getDataTableFormat(data: RowDataPacket[], fields: {
|
|
26
|
+
[key: string]: string;
|
|
27
|
+
}, multiSeries?: MultiSeriesOptions): GoogleDataTable;
|
|
28
|
+
declare function makeDataCumulative(dataTable: GoogleDataTable, cumulative?: boolean): GoogleDataTable;
|
|
29
|
+
declare function getRactiveTableDataFormat(rows: RowDataPacket[], fields: {
|
|
30
|
+
[key: string]: string;
|
|
31
|
+
}, formatting: ProcessedFormatting, styleTemplates?: {}): Table;
|
|
32
|
+
export { queryWithFields, getMultiSeriesData, makeNegativeNumbericValuesZero, makeNegativeNumbericValuesZero as makeNegativeNumericValuesZero, coerceNullColumn, handleFormattingTemplates, getDataTableFormat, makeDataCumulative, getRactiveTableDataFormat, };
|
|
@@ -0,0 +1,240 @@
|
|
|
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.getRactiveTableDataFormat = exports.makeDataCumulative = exports.getDataTableFormat = exports.handleFormattingTemplates = exports.coerceNullColumn = exports.makeNegativeNumericValuesZero = exports.makeNegativeNumbericValuesZero = exports.getMultiSeriesData = exports.queryWithFields = void 0;
|
|
7
|
+
const formatting_templates_1 = __importDefault(require("./formatting-templates"));
|
|
8
|
+
const toSnakeCase = require('to-snake-case');
|
|
9
|
+
const mysqlDataTypes = require('mysql/lib/protocol/constants/types');
|
|
10
|
+
const style_templates_1 = __importDefault(require("./style-templates"));
|
|
11
|
+
function mysqlToGoogleChartsDataTypeMap(mysqlDataType) {
|
|
12
|
+
switch (mysqlDataType) {
|
|
13
|
+
case 'VAR_STRING':
|
|
14
|
+
case 'STRING':
|
|
15
|
+
case 'ENUM':
|
|
16
|
+
case 'VARCHAR':
|
|
17
|
+
return 'string';
|
|
18
|
+
case 'DECIMAL':
|
|
19
|
+
case 'NEWDECIMAL':
|
|
20
|
+
case 'BIT':
|
|
21
|
+
case 'TINY':
|
|
22
|
+
case 'SHORT':
|
|
23
|
+
case 'LONG':
|
|
24
|
+
case 'FLOAT':
|
|
25
|
+
case 'DOUBLE':
|
|
26
|
+
case 'LONGLONG':
|
|
27
|
+
case 'INT24':
|
|
28
|
+
case 'YEAR':
|
|
29
|
+
return 'number';
|
|
30
|
+
case 'TIMESTAMP':
|
|
31
|
+
case 'DATETIME':
|
|
32
|
+
case 'TIMESTAMP2':
|
|
33
|
+
case 'DATETIME2':
|
|
34
|
+
return 'datetime';
|
|
35
|
+
case 'DATE':
|
|
36
|
+
case 'NEWDATE':
|
|
37
|
+
return 'date';
|
|
38
|
+
case 'TIME':
|
|
39
|
+
case 'TIME2':
|
|
40
|
+
return 'timeofday';
|
|
41
|
+
default:
|
|
42
|
+
return 'string';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function makeDataTableCol(key, fields, role = null) {
|
|
46
|
+
return {
|
|
47
|
+
id: toSnakeCase(key).toLowerCase(),
|
|
48
|
+
label: key,
|
|
49
|
+
type: mysqlToGoogleChartsDataTypeMap(fields[key]),
|
|
50
|
+
role,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function queryWithFields(connection, query) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
connection.query(query, (err, results, fields) => {
|
|
56
|
+
if (err) {
|
|
57
|
+
console.error('Error running query for dashboard chart', err);
|
|
58
|
+
reject(err);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
resolve({
|
|
62
|
+
results,
|
|
63
|
+
fields: fields?.reduce((sum, field) => {
|
|
64
|
+
return {
|
|
65
|
+
...sum,
|
|
66
|
+
[field.name]: mysqlDataTypes[field.type] || field.type,
|
|
67
|
+
};
|
|
68
|
+
}, {}) ?? {},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
exports.queryWithFields = queryWithFields;
|
|
75
|
+
function getMultiSeriesData({ data: queryResult, seriesOptions, formatting, fields }) {
|
|
76
|
+
const { groupXAxisBy, series, value, tooltip } = seriesOptions;
|
|
77
|
+
const allOfTheKeysInTheSeries = new Set(queryResult.map(row => row[series]));
|
|
78
|
+
const objectOfAllKeysWithNullValues = {};
|
|
79
|
+
for (const key of allOfTheKeysInTheSeries) {
|
|
80
|
+
objectOfAllKeysWithNullValues[key] = null;
|
|
81
|
+
if (tooltip) {
|
|
82
|
+
objectOfAllKeysWithNullValues[`${tooltip} ${key}`] = null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const grouped = {};
|
|
86
|
+
for (const row of queryResult) {
|
|
87
|
+
if (!grouped[row[groupXAxisBy]]) {
|
|
88
|
+
grouped[row[groupXAxisBy]] = { ...objectOfAllKeysWithNullValues };
|
|
89
|
+
}
|
|
90
|
+
grouped[row[groupXAxisBy]][row[series]] = row[value];
|
|
91
|
+
if (tooltip) {
|
|
92
|
+
grouped[row[groupXAxisBy]][`${tooltip} ${row[series]}`] = row[tooltip];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const seriesFields = { [groupXAxisBy]: fields[groupXAxisBy] };
|
|
96
|
+
const seriesFormatting = {};
|
|
97
|
+
for (const key of allOfTheKeysInTheSeries) {
|
|
98
|
+
seriesFields[key] = fields[value];
|
|
99
|
+
if (tooltip) {
|
|
100
|
+
seriesFields[`${tooltip} ${key}`] = fields[tooltip];
|
|
101
|
+
}
|
|
102
|
+
if (formatting && value in formatting) {
|
|
103
|
+
seriesFormatting[key] = formatting[value];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const multiSeriesData = [];
|
|
107
|
+
for (const key in grouped) {
|
|
108
|
+
multiSeriesData.push({
|
|
109
|
+
[groupXAxisBy]: key,
|
|
110
|
+
...grouped[key],
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
data: multiSeriesData,
|
|
115
|
+
formatting: {
|
|
116
|
+
...formatting,
|
|
117
|
+
...seriesFormatting,
|
|
118
|
+
},
|
|
119
|
+
fields: seriesFields,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
exports.getMultiSeriesData = getMultiSeriesData;
|
|
123
|
+
function makeNegativeNumbericValuesZero(resultSet) {
|
|
124
|
+
const numberCols = Object.keys(resultSet[0]).filter(key => typeof resultSet[0][key] === 'number');
|
|
125
|
+
return resultSet.map(row => {
|
|
126
|
+
numberCols.forEach(col => {
|
|
127
|
+
if (row[col] < 0) {
|
|
128
|
+
row[col] = 0;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return row;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
exports.makeNegativeNumbericValuesZero = makeNegativeNumbericValuesZero;
|
|
135
|
+
exports.makeNegativeNumericValuesZero = makeNegativeNumbericValuesZero;
|
|
136
|
+
function coerceNullColumn(columnProp, data, destinationType) {
|
|
137
|
+
const hasNullValue = data.find(row => row[columnProp] === null);
|
|
138
|
+
if (hasNullValue) {
|
|
139
|
+
const rowWithValidValue = data.find(row => row[columnProp] !== null);
|
|
140
|
+
let nullReplacement = '';
|
|
141
|
+
if ((destinationType && destinationType === 'number') || (rowWithValidValue && typeof rowWithValidValue[columnProp] === 'number')) {
|
|
142
|
+
nullReplacement = 0;
|
|
143
|
+
}
|
|
144
|
+
return data.map(row => {
|
|
145
|
+
return {
|
|
146
|
+
...row,
|
|
147
|
+
[columnProp]: row[columnProp] ?? nullReplacement,
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
return data;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.coerceNullColumn = coerceNullColumn;
|
|
156
|
+
function handleFormattingTemplates(formatting) {
|
|
157
|
+
const formattingOutput = {};
|
|
158
|
+
if (formatting && typeof formatting === 'object') {
|
|
159
|
+
for (const key in formatting) {
|
|
160
|
+
formattingOutput[key] = { type: formatting[key].type, format: null };
|
|
161
|
+
if (typeof formatting[key].format === 'string') {
|
|
162
|
+
if (formatting[key].format in formatting_templates_1.default) {
|
|
163
|
+
formattingOutput[key].format = formatting_templates_1.default[formatting[key].format];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return formattingOutput;
|
|
169
|
+
}
|
|
170
|
+
exports.handleFormattingTemplates = handleFormattingTemplates;
|
|
171
|
+
function getDataTableFormat(data, fields, multiSeries) {
|
|
172
|
+
let cols = [];
|
|
173
|
+
if (multiSeries) {
|
|
174
|
+
cols = [makeDataTableCol(multiSeries.groupXAxisBy, fields)];
|
|
175
|
+
}
|
|
176
|
+
for (const key in fields) {
|
|
177
|
+
if (!multiSeries || key !== multiSeries.groupXAxisBy) {
|
|
178
|
+
if (multiSeries?.tooltip && key.includes(multiSeries.tooltip)) {
|
|
179
|
+
cols.push(makeDataTableCol(key, fields, 'tooltip'));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
cols.push(makeDataTableCol(key, fields));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const rows = data.map(row => {
|
|
187
|
+
const items = [];
|
|
188
|
+
for (const column in row) {
|
|
189
|
+
items.push({ v: row[column] });
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
c: items,
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
return { cols, rows };
|
|
196
|
+
}
|
|
197
|
+
exports.getDataTableFormat = getDataTableFormat;
|
|
198
|
+
function makeDataCumulative(dataTable, cumulative = true) {
|
|
199
|
+
dataTable.rows.forEach((row, rowIndex) => {
|
|
200
|
+
if (rowIndex > 0) {
|
|
201
|
+
row.c.forEach((col, colIndex) => {
|
|
202
|
+
if (colIndex > 0 && col.v == null) {
|
|
203
|
+
col.v = Number(dataTable.rows[rowIndex - 1].c[colIndex].v);
|
|
204
|
+
}
|
|
205
|
+
else if (cumulative && colIndex > 0) {
|
|
206
|
+
col.v = Number(col.v) + Number(dataTable.rows[rowIndex - 1].c[colIndex].v);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return dataTable;
|
|
212
|
+
}
|
|
213
|
+
exports.makeDataCumulative = makeDataCumulative;
|
|
214
|
+
function getRactiveTableDataFormat(rows, fields, formatting, styleTemplates = {}) {
|
|
215
|
+
const columns = Object.keys(fields).map(field => {
|
|
216
|
+
if (formatting?.[field]?.type === 'NumberFormat' && formatting?.[field]?.format?.prefix === '$') {
|
|
217
|
+
return {
|
|
218
|
+
property: `${field}[value]`,
|
|
219
|
+
name: field,
|
|
220
|
+
class: 'text-right border-top-0',
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
property: `${field}[value]`,
|
|
225
|
+
name: field,
|
|
226
|
+
class: 'border-top-0',
|
|
227
|
+
};
|
|
228
|
+
});
|
|
229
|
+
if (styleTemplates) {
|
|
230
|
+
rows = rows.map(row => {
|
|
231
|
+
return (0, style_templates_1.default)(row, styleTemplates);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
columns,
|
|
236
|
+
rows,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
exports.getRactiveTableDataFormat = getRactiveTableDataFormat;
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NoYXJ0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxrRkFBdUQ7QUFDdkQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBQzVDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFBO0FBRXBFLHdFQUE2QztBQUc3QyxTQUFTLDhCQUE4QixDQUFDLGFBQXFCO0lBQzVELFFBQVEsYUFBYSxFQUFFO1FBQ3RCLEtBQUssWUFBWSxDQUFDO1FBQ2xCLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLFNBQVM7WUFDYixPQUFPLFFBQVEsQ0FBQTtRQUNoQixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssWUFBWSxDQUFDO1FBQ2xCLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssVUFBVSxDQUFDO1FBQ2hCLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxNQUFNO1lBQ1YsT0FBTyxRQUFRLENBQUE7UUFDaEIsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxXQUFXO1lBQ2YsT0FBTyxVQUFVLENBQUE7UUFDbEIsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLFNBQVM7WUFDYixPQUFPLE1BQU0sQ0FBQTtRQUNkLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxPQUFPO1lBQ1gsT0FBTyxXQUFXLENBQUE7UUFDbkI7WUFDQyxPQUFPLFFBQVEsQ0FBQTtLQUNoQjtBQUNGLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxNQUF5QixFQUFFLE9BQXNCLElBQUk7SUFDM0YsT0FBTztRQUNOLEVBQUUsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFO1FBQ2xDLEtBQUssRUFBRSxHQUFHO1FBQ1YsSUFBSSxFQUFFLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFJO0tBQ0osQ0FBQTtBQUNGLENBQUM7QUFJRCxTQUFTLGVBQWUsQ0FBQyxVQUFzQixFQUFFLEtBQXlDO0lBQ3pGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdEMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2hELElBQUksR0FBRyxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQzdELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNYO2lCQUFNO2dCQUNOLE9BQU8sQ0FBQztvQkFDUCxPQUFPO29CQUNQLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBcUIsRUFBRTt3QkFDeEQsT0FBTzs0QkFDTixHQUFHLEdBQUc7NEJBQ04sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSTt5QkFDdEQsQ0FBQTtvQkFDRixDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRTtpQkFDWixDQUFDLENBQUE7YUFDRjtRQUNGLENBQUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSCxDQUFDO0FBb05BLDBDQUFlO0FBM01oQixTQUFTLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBMkI7SUFLNUcsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQTtJQUU5RCxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFTLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXBGLE1BQU0sNkJBQTZCLEdBQTRCLEVBQUUsQ0FBQTtJQUNqRSxLQUFLLE1BQU0sR0FBRyxJQUFJLHVCQUF1QixFQUFFO1FBQzFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUV6QyxJQUFJLE9BQU8sRUFBRTtZQUNaLDZCQUE2QixDQUFDLEdBQUcsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFBO1NBQ3pEO0tBQ0Q7SUFFRCxNQUFNLE9BQU8sR0FBaUUsRUFBRSxDQUFBO0lBSWhGLEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFO1FBRTlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUU7WUFFaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyw2QkFBNkIsRUFBRSxDQUFBO1NBQ2pFO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVwRCxJQUFJLE9BQU8sRUFBRTtZQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUN0RTtLQUNEO0lBSUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFBO0lBQzdELE1BQU0sZ0JBQWdCLEdBQXNDLEVBQUUsQ0FBQTtJQUM5RCxLQUFLLE1BQU0sR0FBRyxJQUFJLHVCQUF1QixFQUFFO1FBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFakMsSUFBSSxPQUFPLEVBQUU7WUFDWixZQUFZLENBQUMsR0FBRyxPQUFPLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDbkQ7UUFFRCxJQUFJLFVBQVUsSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFO1lBQ3RDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUN6QztLQUNEO0lBSUQsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFBO0lBQzFCLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1FBQzFCLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDcEIsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHO1lBQ25CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUNmLENBQUMsQ0FBQTtLQUNGO0lBR0QsT0FBTztRQUNOLElBQUksRUFBRSxlQUFrQztRQUN4QyxVQUFVLEVBQUU7WUFDWCxHQUFHLFVBQVU7WUFDYixHQUFHLGdCQUFnQjtTQUNMO1FBQ2YsTUFBTSxFQUFFLFlBQXNDO0tBQzlDLENBQUE7QUFDRixDQUFDO0FBcUlBLGdEQUFrQjtBQXBJbkIsU0FBUyw4QkFBOEIsQ0FBQyxTQUEwQjtJQUNqRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFBO0lBRWpHLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMxQixVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNaO1FBQ0YsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLEdBQUcsQ0FBQTtJQUNYLENBQUMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQXlIQSx3RUFBOEI7QUFDSSx1RUFBNkI7QUF4SGhFLFNBQVMsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxJQUFxQixFQUFFLGVBQXlCO0lBQzdGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7SUFFL0QsSUFBSSxZQUFZLEVBQUU7UUFDakIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFBO1FBQ3BFLElBQUksZUFBZSxHQUFXLEVBQUUsQ0FBQTtRQUVoQyxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLE9BQU8saUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDbEksZUFBZSxHQUFHLENBQUMsQ0FBQTtTQUNuQjtRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQixPQUFPO2dCQUNOLEdBQUcsR0FBRztnQkFDTixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxlQUFlO2FBQ2hELENBQUE7UUFDRixDQUFDLENBQUMsQ0FBQTtLQUNGO1NBQU07UUFDTixPQUFPLElBQUksQ0FBQTtLQUNYO0FBQ0YsQ0FBQztBQXFHQSw0Q0FBZ0I7QUFwR2pCLFNBQVMseUJBQXlCLENBQUMsVUFBdUI7SUFDekQsTUFBTSxnQkFBZ0IsR0FBd0IsRUFBRSxDQUFBO0lBQ2hELElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUNqRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTtZQUM3QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQTtZQUNwRSxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQy9DLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSw4QkFBa0IsRUFBRTtvQkFDakQsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLDhCQUFrQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtpQkFDekU7YUFDRDtTQUNEO0tBQ0Q7SUFFRCxPQUFPLGdCQUFnQixDQUFBO0FBQ3hCLENBQUM7QUF1RkEsOERBQXlCO0FBdEYxQixTQUFTLGtCQUFrQixDQUFDLElBQXFCLEVBQUUsTUFBaUMsRUFBRSxXQUFnQztJQUNySCxJQUFJLElBQUksR0FBNEIsRUFBRSxDQUFBO0lBRXRDLElBQUksV0FBVyxFQUFFO1FBQ2hCLElBQUksR0FBRyxDQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUUsQ0FBQTtLQUM3RDtJQUVELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFO1FBQ3pCLElBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxZQUFZLEVBQUU7WUFDckQsSUFBSSxXQUFXLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUU5RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQTthQUNuRDtpQkFBTTtnQkFFTixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO2FBQ3hDO1NBQ0Q7S0FDRDtJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFBO1FBRWhCLEtBQUssTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtTQUM5QjtRQUVELE9BQU87WUFDTixDQUFDLEVBQUUsS0FBSztTQUNSLENBQUE7SUFDRixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFDdEIsQ0FBQztBQXVEQSxnREFBa0I7QUFoRG5CLFNBQVMsa0JBQWtCLENBQUMsU0FBMEIsRUFBRSxVQUFVLEdBQUcsSUFBSTtJQUN4RSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUN4QyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQy9CLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtvQkFDbEMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2lCQUMxRDtxQkFBTSxJQUFJLFVBQVUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUN0QyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtpQkFDMUU7WUFDRixDQUFDLENBQUMsQ0FBQTtTQUNGO0lBQ0YsQ0FBQyxDQUFDLENBQUE7SUFDRixPQUFPLFNBQVMsQ0FBQTtBQUNqQixDQUFDO0FBb0NBLGdEQUFrQjtBQW5DbkIsU0FBUyx5QkFBeUIsQ0FBQyxJQUFxQixFQUFFLE1BQWlDLEVBQUUsVUFBK0IsRUFBRSxjQUFjLEdBQUcsRUFBRTtJQUNoSixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUUvQyxJQUFJLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxjQUFjLElBQUksVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUU7WUFDaEcsT0FBTztnQkFDTixRQUFRLEVBQUUsR0FBRyxLQUFLLFNBQVM7Z0JBQzNCLElBQUksRUFBRSxLQUFLO2dCQUNYLEtBQUssRUFBRSx5QkFBeUI7YUFDaEMsQ0FBQTtTQUNEO1FBQ0QsT0FBTztZQUNOLFFBQVEsRUFBRSxHQUFHLEtBQUssU0FBUztZQUMzQixJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUssRUFBRSxjQUFjO1NBQ3JCLENBQUE7SUFDRixDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksY0FBYyxFQUFFO1FBQ25CLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sSUFBQSx5QkFBYSxFQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUMxQyxDQUFDLENBQUMsQ0FBQTtLQUNGO0lBQ0QsT0FBTztRQUNOLE9BQU87UUFDUCxJQUFJO0tBQ0osQ0FBQTtBQUNGLENBQUM7QUFXQSw4REFBeUIifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const formattingTemplates = {
|
|
4
|
+
"CURRENCY": {
|
|
5
|
+
"prefix": "$",
|
|
6
|
+
"fractionDigits": 2,
|
|
7
|
+
"groupingSymbol": ",",
|
|
8
|
+
},
|
|
9
|
+
"MEDIUMDATE": {
|
|
10
|
+
"format": "medium",
|
|
11
|
+
},
|
|
12
|
+
"LONGDATE": {
|
|
13
|
+
"format": "long",
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
exports.default = formattingTemplates;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGluZy10ZW1wbGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZm9ybWF0dGluZy10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxNQUFNLG1CQUFtQixHQUF3QjtJQUNoRCxVQUFVLEVBQUU7UUFDWCxRQUFRLEVBQUUsR0FBRztRQUNiLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsZ0JBQWdCLEVBQUUsR0FBRztLQUNyQjtJQUNELFlBQVksRUFBRTtRQUNiLFFBQVEsRUFBRSxRQUFRO0tBQ2xCO0lBQ0QsVUFBVSxFQUFFO1FBQ1gsUUFBUSxFQUFFLE1BQU07S0FDaEI7Q0FDRCxDQUFBO0FBQ0Qsa0JBQWUsbUJBQW1CLENBQUEifQ==
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { handleFormattingTemplates } from './chart-helper.js';
|
|
2
|
+
import * as formatterTemplates from './formatting-templates';
|
|
3
|
+
import { DashboardReportParameter } from './types/parameter';
|
|
4
|
+
import { Session, SiteType } from './types/session';
|
|
5
|
+
import { MultiSeriesOptions, Formatting, Chart, Table, GoogleDataTable, ProcessedFormatting } from './types/chart';
|
|
6
|
+
import { Connection } from 'mysql';
|
|
7
|
+
import { Report, ReportInput } from './types/report';
|
|
8
|
+
type LoadDataTableAndProcessedFormattingOptions = {
|
|
9
|
+
query: {
|
|
10
|
+
sql: string;
|
|
11
|
+
values: unknown[];
|
|
12
|
+
};
|
|
13
|
+
multiSeries?: MultiSeriesOptions;
|
|
14
|
+
formatting?: Formatting;
|
|
15
|
+
chartType: string;
|
|
16
|
+
cumulative?: boolean;
|
|
17
|
+
table?: Table;
|
|
18
|
+
};
|
|
19
|
+
declare function loadDataTableAndProcessedFormatting(mysqlConnection: Connection, { query: queryObject, multiSeries, formatting, chartType, cumulative, table }: LoadDataTableAndProcessedFormattingOptions): Promise<{
|
|
20
|
+
dataTable: GoogleDataTable | Table;
|
|
21
|
+
processedFormatting: ProcessedFormatting;
|
|
22
|
+
}>;
|
|
23
|
+
type loadDataTableOptions = {
|
|
24
|
+
query: {
|
|
25
|
+
sql: string;
|
|
26
|
+
values: unknown[];
|
|
27
|
+
};
|
|
28
|
+
multiSeries: MultiSeriesOptions;
|
|
29
|
+
formatting: Formatting;
|
|
30
|
+
chartType: string;
|
|
31
|
+
};
|
|
32
|
+
declare function loadDataTable(mysqlConnection: Connection, { query: queryObject, multiSeries, formatting, chartType }: loadDataTableOptions): Promise<GoogleDataTable>;
|
|
33
|
+
type loadOutputParameterValuesOptions = {
|
|
34
|
+
definitionList: DashboardReportParameter[];
|
|
35
|
+
selectionList?: Array<Partial<DashboardReportParameter> & Pick<DashboardReportParameter, 'name'>>;
|
|
36
|
+
forClient?: boolean;
|
|
37
|
+
session: Session;
|
|
38
|
+
site?: SiteType;
|
|
39
|
+
siteIdColumn?: string;
|
|
40
|
+
siteNameColumn?: string;
|
|
41
|
+
};
|
|
42
|
+
declare function loadOutputParameterValues(mysqlConnection: Connection, { definitionList, selectionList, forClient, session, site, siteIdColumn, siteNameColumn }: loadOutputParameterValuesOptions): Promise<DashboardReportParameter[]>;
|
|
43
|
+
declare const parameterizeQuery: (queryString: string, parameterValues: DashboardReportParameter[]) => {
|
|
44
|
+
sql: string;
|
|
45
|
+
values: unknown[];
|
|
46
|
+
};
|
|
47
|
+
type FormatReportMetadataOptions = {
|
|
48
|
+
report: ReportInput;
|
|
49
|
+
chartsInReport: Chart[];
|
|
50
|
+
session: Session;
|
|
51
|
+
site: SiteType;
|
|
52
|
+
siteIdColumn?: string;
|
|
53
|
+
siteNameColumn?: string;
|
|
54
|
+
};
|
|
55
|
+
declare function formatReportMetadata(mysqlConnection: Connection, { report, chartsInReport, session, site, siteIdColumn, siteNameColumn }: FormatReportMetadataOptions): Promise<Report>;
|
|
56
|
+
type FormatChartDataForReportOptions = {
|
|
57
|
+
reportParameters: DashboardReportParameter[];
|
|
58
|
+
chart: Chart;
|
|
59
|
+
reportChart: {
|
|
60
|
+
chartId: number;
|
|
61
|
+
dashboardReportId: number;
|
|
62
|
+
jsonOverride: Partial<Chart>;
|
|
63
|
+
rank: number;
|
|
64
|
+
reportChartId: number;
|
|
65
|
+
};
|
|
66
|
+
parameterSelectionList: DashboardReportParameter[];
|
|
67
|
+
session: Session;
|
|
68
|
+
site: SiteType;
|
|
69
|
+
siteIdColumn?: string;
|
|
70
|
+
siteNameColumn?: string;
|
|
71
|
+
};
|
|
72
|
+
declare function formatChartDataForReport(mysqlConnection: Connection, { reportParameters, chart, reportChart, parameterSelectionList, session, site, siteIdColumn, siteNameColumn }: FormatChartDataForReportOptions): Promise<Omit<Chart, 'query'>>;
|
|
73
|
+
export { formatReportMetadata, formatChartDataForReport, loadOutputParameterValues, loadDataTable, loadDataTableAndProcessedFormatting, parameterizeQuery, handleFormattingTemplates, formatterTemplates, };
|