@isoftdata/utility-dashboard-backend 3.4.1 → 4.0.0-beta.1
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 +13 -29
- package/dist/chart-helper.d.ts +6 -10
- package/dist/chart-helper.js +58 -136
- package/dist/index.d.ts +19 -41
- package/dist/index.js +41 -71
- package/dist/style-templates.d.ts +2 -2
- package/dist/style-templates.js +4 -16
- package/dist/types/chart.d.ts +44 -59
- package/dist/types/parameter.d.ts +5 -9
- package/dist/types/report.d.ts +2 -2
- package/dist/types/session.d.ts +0 -1
- package/package.json +13 -24
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.js +0 -2
package/README.md
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# utility-dashboard-backend
|
|
2
|
-
|
|
3
2
|
A backend utility for formatting and loading dashboard chart and report data to be usable by the [frontend dashboard component](https://github.com/ISoft-Data-Systems/ractive-component-web-dashboard).
|
|
4
3
|
|
|
5
4
|
## Installation
|
|
@@ -11,9 +10,7 @@ npm i @isoftdata/utility-dashboard-backend
|
|
|
11
10
|
> Breaking change in version 3: ESM style exports
|
|
12
11
|
|
|
13
12
|
## Prerequisites
|
|
14
|
-
>
|
|
15
13
|
> Version 3.Y.Z of the frontend component is required for use with version 2.Y.Z of the backend component.
|
|
16
|
-
|
|
17
14
|
* A MySQL database schema as outlined in [schema.md](schema.md)
|
|
18
15
|
* A backend that can fetches rows from the chart, report, and report chart tables from the database with their primary keys. Any json columns should be parsed as objects.
|
|
19
16
|
* A connection or pool of connections from the `mysql` NPM module for running the charts' queries
|
|
@@ -35,14 +32,13 @@ async formatReportMetadata(mysqlConnection, { report, chartsInReport, session })
|
|
|
35
32
|
|
|
36
33
|
```js
|
|
37
34
|
async function loadReportMetadata({ dashboardReportId, chartId, session }) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
const report = await db.dashboardReport.loadById({ dashboardReportId }) // gets a report by its id
|
|
36
|
+
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.
|
|
37
|
+
return await formatReportMetadata(db.pool, { report, chartsInReport, session })
|
|
41
38
|
}
|
|
42
39
|
```
|
|
43
40
|
|
|
44
41
|
#### mysqlConnection
|
|
45
|
-
|
|
46
42
|
A connection or pool of connections from the `mysql` npm module.
|
|
47
43
|
|
|
48
44
|
#### report
|
|
@@ -106,19 +102,13 @@ Example:
|
|
|
106
102
|
```
|
|
107
103
|
|
|
108
104
|
#### session
|
|
109
|
-
|
|
110
105
|
Session object from the Auth Module
|
|
111
106
|
|
|
112
107
|
#### site (optional)
|
|
113
|
-
|
|
114
108
|
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.
|
|
115
|
-
|
|
116
109
|
#### siteIdColumn (optional)
|
|
117
|
-
|
|
118
110
|
The name of the column that stores the site id in the site table. Defaults to `${site}id`.
|
|
119
|
-
|
|
120
111
|
#### siteNameColumn (optional)
|
|
121
|
-
|
|
122
112
|
The store name column.
|
|
123
113
|
|
|
124
114
|
### formatChartDataForReport
|
|
@@ -135,37 +125,32 @@ async formatChartDataForReport(mysqlConnection, { reportParameters, chart, repor
|
|
|
135
125
|
|
|
136
126
|
```js
|
|
137
127
|
async function loadChartDataForReport ({ dashboardReportId, chartId, parameterSelectionList, session }) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
128
|
+
const report = await db.dashboardReport.loadById({ dashboardReportId }) // get the report object
|
|
129
|
+
const chart = await db.dashboardChart.loadById({ chartId }) // get the chart object
|
|
130
|
+
const reportChart = await db.dashboardReportChart.loadByReportAndChartId({ chartId, dashboardReportId }) // get the report chart for the rank/overrides
|
|
131
|
+
try {
|
|
132
|
+
const chartData = await formatChartDataForReport(db.pool, { reportParameters: report.parameters, chart, reportChart, parameterSelectionList, session })
|
|
133
|
+
return chartData
|
|
134
|
+
} catch (err) {
|
|
135
|
+
console.error(err)
|
|
136
|
+
return { isErrored: true }
|
|
137
|
+
}
|
|
148
138
|
}
|
|
149
139
|
```
|
|
150
140
|
|
|
151
141
|
#### mysqlConnection
|
|
152
|
-
|
|
153
142
|
A connection or pool of connections from the `mysql` npm module.
|
|
154
143
|
|
|
155
144
|
#### reportParameters
|
|
156
|
-
|
|
157
145
|
The `parameters` array from a report object.
|
|
158
146
|
|
|
159
147
|
#### chartId
|
|
160
|
-
|
|
161
148
|
The id of a chart row in `wa_dashboard_chart`.
|
|
162
149
|
|
|
163
150
|
#### parameterSelectionList
|
|
164
|
-
|
|
165
151
|
The array of selected parameters sent from the client dashboard.
|
|
166
152
|
|
|
167
153
|
#### session
|
|
168
|
-
|
|
169
154
|
Session object from the Auth Module
|
|
170
155
|
|
|
171
156
|
### loadOutputParameterValues
|
|
@@ -181,7 +166,6 @@ async function loadOutputParameterValues(mysqlConnection, { definitionList, sele
|
|
|
181
166
|
#### Example Usage
|
|
182
167
|
|
|
183
168
|
#### mysqlConnection
|
|
184
|
-
|
|
185
169
|
A connection or pool of connections from the `mysql` npm module.
|
|
186
170
|
|
|
187
171
|
#### definitionList
|
package/dist/chart-helper.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Formatting, GoogleDataTable, MultiSeriesOptions, ProcessedFormatting, Table } from './types/chart
|
|
3
|
-
export type FieldType = 'string' | 'number' | 'datetime' | 'timeofday' | 'date'
|
|
1
|
+
import { DatabaseConnectionInterface, QueryCommand, RowDataPacket } from '@isoftdata/utility-db';
|
|
2
|
+
import type { Formatting, GoogleDataTable, MultiSeriesOptions, ProcessedFormatting, Table } from './types/chart';
|
|
3
|
+
export type FieldType = 'string' | 'number' | 'datetime' | 'timeofday' | 'date';
|
|
4
4
|
export type QueryFieldsObject = Record<string, FieldType>;
|
|
5
|
-
export declare function queryWithFields(connection:
|
|
6
|
-
|
|
7
|
-
values: unknown[];
|
|
8
|
-
}): Promise<{
|
|
9
|
-
results: RowDataPacket[];
|
|
5
|
+
export declare function queryWithFields(connection: DatabaseConnectionInterface, query: QueryCommand): Promise<{
|
|
6
|
+
results: object[];
|
|
10
7
|
fields: QueryFieldsObject;
|
|
11
8
|
}>;
|
|
12
9
|
export type getMultiSeriesDataInput = {
|
|
@@ -25,7 +22,6 @@ export declare function coerceNullColumn(columnProp: string, data: RowDataPacket
|
|
|
25
22
|
export declare function handleFormattingTemplates(formatting?: Formatting): ProcessedFormatting;
|
|
26
23
|
export declare function getDataTableFormat(data: RowDataPacket[], fields: QueryFieldsObject, multiSeries?: MultiSeriesOptions): GoogleDataTable;
|
|
27
24
|
export declare function makeDataCumulative(dataTable: GoogleDataTable, cumulative?: boolean): GoogleDataTable;
|
|
28
|
-
export declare function
|
|
25
|
+
export declare function getRactiveTableDataFormat(rows: RowDataPacket[], fields: {
|
|
29
26
|
[key: string]: string;
|
|
30
27
|
}, formatting: ProcessedFormatting, styleTemplates?: {}): Table;
|
|
31
|
-
export { getSvelteDataTableFormat as getRactiveDataTableFormat };
|
package/dist/chart-helper.js
CHANGED
|
@@ -2,7 +2,6 @@ import formattingTemplates from './formatting-templates.js';
|
|
|
2
2
|
import toSnakeCase from 'to-snake-case';
|
|
3
3
|
import mysqlDataTypes from 'mysql/lib/protocol/constants/types.js';
|
|
4
4
|
import styleTableRow from './style-templates.js';
|
|
5
|
-
import { klona } from 'klona';
|
|
6
5
|
function mysqlToGoogleChartsDataTypeMap(mysqlDataType) {
|
|
7
6
|
switch (mysqlDataType) {
|
|
8
7
|
case 'VAR_STRING':
|
|
@@ -37,29 +36,6 @@ function mysqlToGoogleChartsDataTypeMap(mysqlDataType) {
|
|
|
37
36
|
return 'string';
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
|
-
const roleRegex = /^role:(\w+)([ \-_]\w+)?/;
|
|
41
|
-
function getRoleFromColumnName(name) {
|
|
42
|
-
const match = name.match(roleRegex);
|
|
43
|
-
return match?.[1] ?? null;
|
|
44
|
-
}
|
|
45
|
-
function getColumnRoleType(role, dataType) {
|
|
46
|
-
if (role?.startsWith('role:')) {
|
|
47
|
-
role = role.replace('role:', '');
|
|
48
|
-
}
|
|
49
|
-
switch (role) {
|
|
50
|
-
case 'certainty':
|
|
51
|
-
case 'emphasis':
|
|
52
|
-
case 'scope':
|
|
53
|
-
return 'boolean';
|
|
54
|
-
case 'interval':
|
|
55
|
-
return 'number';
|
|
56
|
-
case 'domain':
|
|
57
|
-
case 'data':
|
|
58
|
-
return dataType;
|
|
59
|
-
default:
|
|
60
|
-
return 'string';
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
39
|
function makeDataTableCol(key, fields, role = null) {
|
|
64
40
|
return {
|
|
65
41
|
id: toSnakeCase(key).toLowerCase(),
|
|
@@ -68,92 +44,65 @@ function makeDataTableCol(key, fields, role = null) {
|
|
|
68
44
|
role,
|
|
69
45
|
};
|
|
70
46
|
}
|
|
71
|
-
function
|
|
72
|
-
return (Array.isArray(results) && results.length === 0)
|
|
47
|
+
function resultsIsObjectArray(results) {
|
|
48
|
+
return (Array.isArray(results) && results.length === 0)
|
|
49
|
+
|| (Array.isArray(results) && results.length > 0 && typeof results[0] === 'object' && results[0] !== null && !Array.isArray(results[0]));
|
|
73
50
|
}
|
|
74
51
|
function fieldsIsFieldPacketArray(fields) {
|
|
75
52
|
return (Array.isArray(fields) && fields.length === 0) || (Array.isArray(fields) && fields.length > 0 && fields[0].constructor.name === 'FieldPacket');
|
|
76
53
|
}
|
|
77
|
-
export function queryWithFields(connection, query) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
reject(err);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
});
|
|
54
|
+
export async function queryWithFields(connection, query) {
|
|
55
|
+
try {
|
|
56
|
+
const [results, fields] = await connection.queryWithFieldPackets(query);
|
|
57
|
+
if (!resultsIsObjectArray(results)) {
|
|
58
|
+
throw new Error('Query did not return a valid result set. Ensure that the chart has exactly one valid SELECT query.');
|
|
59
|
+
}
|
|
60
|
+
else if (!fieldsIsFieldPacketArray(fields)) {
|
|
61
|
+
throw new Error('Query did not return a valid field set.');
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return {
|
|
65
|
+
results,
|
|
66
|
+
fields: fields.reduce((sum, field) => {
|
|
67
|
+
return {
|
|
68
|
+
...sum,
|
|
69
|
+
[field.name]: mysqlToGoogleChartsDataTypeMap(mysqlDataTypes[field.type] || field.type),
|
|
70
|
+
};
|
|
71
|
+
}, {}) ?? {},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
console.error('Error running query for dashboard chart', err);
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
109
79
|
}
|
|
110
80
|
export function getMultiSeriesData({ data: queryResult, seriesOptions, formatting, fields }) {
|
|
111
81
|
const { groupXAxisBy, series, value, tooltip } = seriesOptions;
|
|
112
|
-
const allOfTheKeysInTheSeries = new Set(queryResult.
|
|
113
|
-
|
|
114
|
-
const roleKeys = Object.keys(row)
|
|
115
|
-
.filter(key => key.startsWith('role:'))
|
|
116
|
-
.map(key => `${key}-${row[series]}`);
|
|
117
|
-
if (roleKeys.length) {
|
|
118
|
-
keys.push(...roleKeys);
|
|
119
|
-
}
|
|
120
|
-
return keys;
|
|
121
|
-
}));
|
|
122
|
-
const objectOfAllKeys = {};
|
|
82
|
+
const allOfTheKeysInTheSeries = new Set(queryResult.map(row => row[series]));
|
|
83
|
+
const objectOfAllKeysWithNullValues = {};
|
|
123
84
|
for (const key of allOfTheKeysInTheSeries) {
|
|
124
|
-
|
|
125
|
-
if (tooltip
|
|
126
|
-
|
|
85
|
+
objectOfAllKeysWithNullValues[key] = null;
|
|
86
|
+
if (tooltip) {
|
|
87
|
+
objectOfAllKeysWithNullValues[`${tooltip} ${key}`] = null;
|
|
127
88
|
}
|
|
128
89
|
}
|
|
129
90
|
const grouped = {};
|
|
130
|
-
let groupedByDate = false;
|
|
131
91
|
for (const row of queryResult) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (!grouped[groupXAxisByValue]) {
|
|
135
|
-
grouped[groupXAxisByValue] = { ...klona(objectOfAllKeys) };
|
|
92
|
+
if (!grouped[row[groupXAxisBy]]) {
|
|
93
|
+
grouped[row[groupXAxisBy]] = { ...objectOfAllKeysWithNullValues };
|
|
136
94
|
}
|
|
137
|
-
grouped[
|
|
138
|
-
const roleKeys = Object.keys(row).filter(key => key.startsWith('role:'));
|
|
139
|
-
roleKeys.forEach(key => {
|
|
140
|
-
grouped[groupXAxisByValue][`${key}-${row[series]}`].push(row[key]);
|
|
141
|
-
});
|
|
95
|
+
grouped[row[groupXAxisBy]][row[series]] = row[value];
|
|
142
96
|
if (tooltip) {
|
|
143
|
-
grouped[
|
|
97
|
+
grouped[row[groupXAxisBy]][`${tooltip} ${row[series]}`] = row[tooltip];
|
|
144
98
|
}
|
|
145
99
|
}
|
|
146
100
|
const seriesFields = { [groupXAxisBy]: fields[groupXAxisBy] };
|
|
147
101
|
const seriesFormatting = {};
|
|
148
102
|
for (const key of allOfTheKeysInTheSeries) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
else {
|
|
153
|
-
seriesFields[key] = fields[value];
|
|
154
|
-
}
|
|
155
|
-
if (tooltip && !key.startsWith('role:')) {
|
|
156
|
-
seriesFields[`role:tooltip-${key}`] = fields[tooltip];
|
|
103
|
+
seriesFields[key] = fields[value];
|
|
104
|
+
if (tooltip) {
|
|
105
|
+
seriesFields[`${tooltip} ${key}`] = fields[tooltip];
|
|
157
106
|
}
|
|
158
107
|
if (formatting && value in formatting) {
|
|
159
108
|
seriesFormatting[key] = formatting[value];
|
|
@@ -161,15 +110,10 @@ export function getMultiSeriesData({ data: queryResult, seriesOptions, formattin
|
|
|
161
110
|
}
|
|
162
111
|
const multiSeriesData = [];
|
|
163
112
|
for (const key in grouped) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
for (const groupedKey of groupedKeys) {
|
|
169
|
-
obj[groupedKey] = grouped[key][groupedKey][i] ?? null;
|
|
170
|
-
}
|
|
171
|
-
multiSeriesData.push(obj);
|
|
172
|
-
}
|
|
113
|
+
multiSeriesData.push({
|
|
114
|
+
[groupXAxisBy]: key,
|
|
115
|
+
...grouped[key],
|
|
116
|
+
});
|
|
173
117
|
}
|
|
174
118
|
return {
|
|
175
119
|
data: multiSeriesData,
|
|
@@ -222,19 +166,6 @@ export function handleFormattingTemplates(formatting) {
|
|
|
222
166
|
}
|
|
223
167
|
return formattingOutput;
|
|
224
168
|
}
|
|
225
|
-
function getSeriesRole(seriesName, multiSeries) {
|
|
226
|
-
if (multiSeries?.tooltip && seriesName.startsWith(multiSeries.tooltip)) {
|
|
227
|
-
return {
|
|
228
|
-
role: 'tooltip',
|
|
229
|
-
seriesName,
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
const match = seriesName.match(roleRegex);
|
|
233
|
-
if (match) {
|
|
234
|
-
return { role: match[1], seriesName: seriesName };
|
|
235
|
-
}
|
|
236
|
-
return { role: null, seriesName };
|
|
237
|
-
}
|
|
238
169
|
export function getDataTableFormat(data, fields, multiSeries) {
|
|
239
170
|
let cols = [];
|
|
240
171
|
if (multiSeries) {
|
|
@@ -242,8 +173,12 @@ export function getDataTableFormat(data, fields, multiSeries) {
|
|
|
242
173
|
}
|
|
243
174
|
for (const key in fields) {
|
|
244
175
|
if (!multiSeries || key !== multiSeries.groupXAxisBy) {
|
|
245
|
-
|
|
246
|
-
|
|
176
|
+
if (multiSeries?.tooltip && key.includes(multiSeries.tooltip)) {
|
|
177
|
+
cols.push(makeDataTableCol(key, fields, 'tooltip'));
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
cols.push(makeDataTableCol(key, fields));
|
|
181
|
+
}
|
|
247
182
|
}
|
|
248
183
|
}
|
|
249
184
|
const rows = data.map(row => {
|
|
@@ -255,20 +190,6 @@ export function getDataTableFormat(data, fields, multiSeries) {
|
|
|
255
190
|
c: items,
|
|
256
191
|
};
|
|
257
192
|
});
|
|
258
|
-
if (!cols.length) {
|
|
259
|
-
cols.push({
|
|
260
|
-
id: 'nodata1',
|
|
261
|
-
label: 'No Data',
|
|
262
|
-
type: 'number',
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
if (cols.length === 1) {
|
|
266
|
-
cols.push({
|
|
267
|
-
id: 'nodata2',
|
|
268
|
-
label: 'No Data',
|
|
269
|
-
type: 'number',
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
193
|
return { cols, rows };
|
|
273
194
|
}
|
|
274
195
|
export function makeDataCumulative(dataTable, cumulative = true) {
|
|
@@ -286,28 +207,29 @@ export function makeDataCumulative(dataTable, cumulative = true) {
|
|
|
286
207
|
});
|
|
287
208
|
return dataTable;
|
|
288
209
|
}
|
|
289
|
-
export function
|
|
210
|
+
export function getRactiveTableDataFormat(rows, fields, formatting, styleTemplates = {}) {
|
|
290
211
|
const columns = Object.keys(fields).map(field => {
|
|
291
|
-
if (formatting?.[field]?.type === 'NumberFormat') {
|
|
212
|
+
if (formatting?.[field]?.type === 'NumberFormat' && formatting?.[field]?.format?.prefix === '$') {
|
|
292
213
|
return {
|
|
293
214
|
property: `${field}[value]`,
|
|
294
215
|
name: field,
|
|
295
|
-
class: 'text-right
|
|
216
|
+
class: 'text-right border-top-0',
|
|
296
217
|
};
|
|
297
218
|
}
|
|
298
219
|
return {
|
|
299
220
|
property: `${field}[value]`,
|
|
300
221
|
name: field,
|
|
301
|
-
class: '',
|
|
222
|
+
class: 'border-top-0',
|
|
302
223
|
};
|
|
303
224
|
});
|
|
304
225
|
if (styleTemplates) {
|
|
305
|
-
rows = rows.map(row =>
|
|
226
|
+
rows = rows.map(row => {
|
|
227
|
+
return styleTableRow(row, styleTemplates);
|
|
228
|
+
});
|
|
306
229
|
}
|
|
307
230
|
return {
|
|
308
231
|
columns,
|
|
309
232
|
rows,
|
|
310
233
|
};
|
|
311
234
|
}
|
|
312
|
-
export { getSvelteDataTableFormat as getRactiveDataTableFormat };
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NoYXJ0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLG1CQUFtQixNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQTtBQUV2QyxPQUFPLGNBQWMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNsRSxPQUFPLGFBQWEsTUFBTSxzQkFBc0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBRTdCLFNBQVMsOEJBQThCLENBQUMsYUFBcUI7SUFDNUQsUUFBUSxhQUFhLEVBQUUsQ0FBQztRQUN2QixLQUFLLFlBQVksQ0FBQztRQUNsQixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxTQUFTO1lBQ2IsT0FBTyxRQUFRLENBQUE7UUFDaEIsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLFlBQVksQ0FBQztRQUNsQixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTTtZQUNWLE9BQU8sUUFBUSxDQUFBO1FBQ2hCLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssVUFBVSxDQUFDO1FBQ2hCLEtBQUssWUFBWSxDQUFDO1FBQ2xCLEtBQUssV0FBVztZQUNmLE9BQU8sVUFBVSxDQUFBO1FBQ2xCLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxTQUFTO1lBQ2IsT0FBTyxNQUFNLENBQUE7UUFDZCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTztZQUNYLE9BQU8sV0FBVyxDQUFBO1FBQ25CO1lBQ0MsT0FB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
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NoYXJ0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLG1CQUFtQixNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQTtBQUV2QyxPQUFPLGNBQWMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNsRSxPQUFPLGFBQWEsTUFBTSxzQkFBc0IsQ0FBQTtBQUVoRCxTQUFTLDhCQUE4QixDQUFDLGFBQXFCO0lBQzVELFFBQVEsYUFBYSxFQUFFLENBQUM7UUFDdkIsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssU0FBUztZQUNiLE9BQU8sUUFBUSxDQUFBO1FBQ2hCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLE1BQU07WUFDVixPQUFPLFFBQVEsQ0FBQTtRQUNoQixLQUFLLFdBQVcsQ0FBQztRQUNqQixLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLFlBQVksQ0FBQztRQUNsQixLQUFLLFdBQVc7WUFDZixPQUFPLFVBQVUsQ0FBQTtRQUNsQixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssU0FBUztZQUNiLE9BQU8sTUFBTSxDQUFBO1FBQ2QsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU87WUFDWCxPQUFPLFdBQVcsQ0FBQTtRQUNuQjtZQUNDLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7QUFDRixDQUFDO0FBRUQsU0FB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
|
package/dist/index.d.ts
CHANGED
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
export * from './types/index.js';
|
|
3
|
-
export { queryWithFields } from './chart-helper.js';
|
|
1
|
+
import { DatabaseConnectionInterface, QueryCommand, RowDataPacket } from '@isoftdata/utility-db';
|
|
4
2
|
import { QueryFieldsObject } from './chart-helper.js';
|
|
5
|
-
import type { DashboardReportParameter
|
|
6
|
-
import type { Session, SiteType } from './types/session
|
|
7
|
-
import type { MultiSeriesOptions, Formatting, Chart, Table, GoogleDataTable, ProcessedFormatting
|
|
8
|
-
import type {
|
|
9
|
-
import type { Report, ReportInput } from './types/report.js';
|
|
10
|
-
import type { PartialDeep } from 'type-fest';
|
|
3
|
+
import type { DashboardReportParameter } from './types/parameter';
|
|
4
|
+
import type { Session, SiteType } from './types/session';
|
|
5
|
+
import type { MultiSeriesOptions, Formatting, Chart, Table, GoogleDataTable, ProcessedFormatting } from './types/chart';
|
|
6
|
+
import type { Report, ReportInput } from './types/report';
|
|
11
7
|
export * as formatterTemplates from './formatting-templates.js';
|
|
12
8
|
export { handleFormattingTemplates } from './chart-helper.js';
|
|
9
|
+
export type { ReportInput } from './types/report';
|
|
13
10
|
export type CustomDataSourceFunction = (query: string, values?: unknown[]) => Promise<{
|
|
14
11
|
results: RowDataPacket[];
|
|
15
12
|
fields: QueryFieldsObject;
|
|
16
|
-
jsonOverride?: PartialDeep<ChartJson>;
|
|
17
13
|
}>;
|
|
18
14
|
export type LoadDataTableAndProcessedFormattingOptions = {
|
|
19
|
-
query:
|
|
20
|
-
sql: string;
|
|
21
|
-
values: unknown[];
|
|
22
|
-
};
|
|
15
|
+
query: QueryCommand;
|
|
23
16
|
multiSeries?: MultiSeriesOptions;
|
|
24
17
|
formatting?: Formatting;
|
|
25
18
|
chartType: string;
|
|
@@ -27,45 +20,30 @@ export type LoadDataTableAndProcessedFormattingOptions = {
|
|
|
27
20
|
table?: Table;
|
|
28
21
|
customDataSource?: CustomDataSourceFunction | null;
|
|
29
22
|
};
|
|
30
|
-
export declare function loadDataTableAndProcessedFormatting(mysqlConnection:
|
|
23
|
+
export declare function loadDataTableAndProcessedFormatting(mysqlConnection: DatabaseConnectionInterface, { query: queryObject, multiSeries, formatting, chartType, cumulative, table, customDataSource }: LoadDataTableAndProcessedFormattingOptions): Promise<{
|
|
31
24
|
dataTable: GoogleDataTable | Table;
|
|
32
25
|
processedFormatting: ProcessedFormatting;
|
|
33
26
|
fields: QueryFieldsObject;
|
|
34
|
-
jsonOverride?: PartialDeep<ChartJson>;
|
|
35
27
|
}>;
|
|
36
28
|
export type loadDataTableOptions = {
|
|
37
|
-
query:
|
|
38
|
-
sql: string;
|
|
39
|
-
values: unknown[];
|
|
40
|
-
};
|
|
29
|
+
query: QueryCommand;
|
|
41
30
|
multiSeries: MultiSeriesOptions;
|
|
42
31
|
formatting: Formatting;
|
|
43
32
|
chartType: string;
|
|
44
33
|
};
|
|
45
|
-
export declare function loadDataTable(mysqlConnection:
|
|
46
|
-
type
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
dates?: {
|
|
50
|
-
from: string;
|
|
51
|
-
to: string;
|
|
52
|
-
} | null;
|
|
53
|
-
};
|
|
54
|
-
type LoadOutputParameterValuesOptions = {
|
|
55
|
-
definitionList: Array<DashboardReportParameterInput>;
|
|
56
|
-
selectionList?: Array<SelectionParameter>;
|
|
34
|
+
export declare function loadDataTable(mysqlConnection: DatabaseConnectionInterface, { query: queryObject, multiSeries, formatting, chartType }: loadDataTableOptions): Promise<GoogleDataTable>;
|
|
35
|
+
type loadOutputParameterValuesOptions = {
|
|
36
|
+
definitionList: DashboardReportParameter[];
|
|
37
|
+
selectionList?: Array<Partial<DashboardReportParameter> & Pick<DashboardReportParameter, 'name'>>;
|
|
57
38
|
forClient?: boolean;
|
|
58
39
|
session: Session;
|
|
59
40
|
site?: SiteType;
|
|
60
41
|
siteIdColumn?: string;
|
|
61
42
|
siteNameColumn?: string;
|
|
62
43
|
};
|
|
63
|
-
export declare function loadOutputParameterValues(mysqlConnection:
|
|
44
|
+
export declare function loadOutputParameterValues(mysqlConnection: DatabaseConnectionInterface, { definitionList, selectionList, forClient, session, site, siteIdColumn, siteNameColumn }: loadOutputParameterValuesOptions): Promise<DashboardReportParameter[]>;
|
|
64
45
|
export declare const parameterRegex: RegExp;
|
|
65
|
-
export declare function parameterizeQuery(queryString: string
|
|
66
|
-
sql: string;
|
|
67
|
-
values: unknown[];
|
|
68
|
-
};
|
|
46
|
+
export declare function parameterizeQuery(queryString: string, parameterValues: DashboardReportParameter[]): QueryCommand;
|
|
69
47
|
export declare function parameterizeUrl(url: string, parameterValues: DashboardReportParameter[]): string;
|
|
70
48
|
type FormatReportMetadataOptions = {
|
|
71
49
|
report: ReportInput;
|
|
@@ -75,9 +53,9 @@ type FormatReportMetadataOptions = {
|
|
|
75
53
|
siteIdColumn?: string;
|
|
76
54
|
siteNameColumn?: string;
|
|
77
55
|
};
|
|
78
|
-
export declare function formatReportMetadata(mysqlConnection:
|
|
56
|
+
export declare function formatReportMetadata(mysqlConnection: DatabaseConnectionInterface, { report, chartsInReport, session, site, siteIdColumn, siteNameColumn }: FormatReportMetadataOptions): Promise<Report>;
|
|
79
57
|
export type FormatChartDataForReportOptions = {
|
|
80
|
-
reportParameters:
|
|
58
|
+
reportParameters: DashboardReportParameter[];
|
|
81
59
|
chart: Chart;
|
|
82
60
|
reportChart: {
|
|
83
61
|
chartId: number;
|
|
@@ -86,11 +64,11 @@ export type FormatChartDataForReportOptions = {
|
|
|
86
64
|
rank: number;
|
|
87
65
|
reportChartId: number;
|
|
88
66
|
};
|
|
89
|
-
parameterSelectionList:
|
|
67
|
+
parameterSelectionList: DashboardReportParameter[];
|
|
90
68
|
session: Session;
|
|
91
69
|
site: SiteType;
|
|
92
70
|
siteIdColumn?: string;
|
|
93
71
|
siteNameColumn?: string;
|
|
94
72
|
customDataSource?: CustomDataSourceFunction | null;
|
|
95
73
|
};
|
|
96
|
-
export declare function formatChartDataForReport(mysqlConnection:
|
|
74
|
+
export declare function formatChartDataForReport(mysqlConnection: DatabaseConnectionInterface, { reportParameters, chart, reportChart, parameterSelectionList, session, site, siteIdColumn, siteNameColumn, customDataSource }: FormatChartDataForReportOptions): Promise<Omit<Chart, 'query'>>;
|