@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.20.1 → 4.21.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/dpr/components/_async/async-filters-form/types.d.js +1 -1
- package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
- package/dpr/components/_async/async-filters-form/types.d.ts +7 -4
- package/dpr/components/_async/async-filters-form/utils.js +1 -1
- package/dpr/components/_async/async-filters-form/utils.js.map +2 -2
- package/dpr/components/_async/async-filters-form/utils.ts +18 -17
- package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
- package/dpr/components/_charts/chart/Chart.js +2 -0
- package/dpr/components/_charts/chart/Chart.js.map +7 -0
- package/dpr/components/_charts/chart/Chart.ts +89 -0
- package/dpr/components/_charts/chart/ChartColours.js +2 -0
- package/dpr/components/_charts/chart/ChartColours.js.map +7 -0
- package/dpr/components/_charts/chart/ChartColours.ts +36 -0
- package/dpr/components/_charts/chart/ChartTimeseries.js +2 -0
- package/dpr/components/_charts/chart/ChartTimeseries.js.map +7 -0
- package/dpr/components/_charts/chart/ChartTimeseries.ts +95 -0
- package/dpr/components/_charts/chart/bar/BarChart.js +2 -0
- package/dpr/components/_charts/chart/bar/BarChart.js.map +7 -0
- package/dpr/components/_charts/chart/bar/BarChart.ts +204 -0
- package/dpr/components/_charts/chart/bar/clientClass.mjs +0 -58
- package/dpr/components/_charts/chart/bar/types.js +2 -0
- package/dpr/components/_charts/chart/bar/types.js.map +7 -0
- package/dpr/components/_charts/chart/bar/types.ts +6 -0
- package/dpr/components/_charts/chart/bar/validate.js +2 -0
- package/dpr/components/_charts/chart/bar/validate.js.map +7 -0
- package/dpr/components/_charts/chart/bar/validate.ts +59 -0
- package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js +2 -0
- package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js.map +7 -0
- package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.ts +57 -0
- package/dpr/components/_charts/chart/bar-timeseries/types.js +2 -0
- package/dpr/components/_charts/chart/bar-timeseries/types.js.map +7 -0
- package/dpr/components/_charts/chart/bar-timeseries/types.ts +5 -0
- package/dpr/components/_charts/chart/bar-timeseries/validate.js +2 -0
- package/dpr/components/_charts/chart/bar-timeseries/validate.js.map +7 -0
- package/dpr/components/_charts/chart/bar-timeseries/validate.ts +30 -0
- package/dpr/components/_charts/chart/buckets/Buckets.js +2 -0
- package/dpr/components/_charts/chart/buckets/Buckets.js.map +7 -0
- package/dpr/components/_charts/chart/{Buckets.ts → buckets/Buckets.ts} +18 -14
- package/dpr/components/_charts/chart/buckets/types.js +2 -0
- package/dpr/components/_charts/chart/buckets/types.js.map +7 -0
- package/dpr/components/_charts/chart/buckets/types.ts +4 -0
- package/dpr/components/_charts/chart/buckets/validate.js +2 -0
- package/dpr/components/_charts/chart/buckets/validate.js.map +7 -0
- package/dpr/components/_charts/chart/buckets/validate.ts +15 -0
- package/dpr/components/_charts/chart/chart-config.js +2 -0
- package/dpr/components/_charts/chart/chart-config.js.map +7 -0
- package/dpr/components/_charts/chart/chart-config.ts +108 -0
- package/dpr/components/_charts/chart/clientClass.mjs +28 -106
- package/dpr/components/_charts/chart/doughnut/DoughnutChart.js +2 -0
- package/dpr/components/_charts/chart/doughnut/DoughnutChart.js.map +7 -0
- package/dpr/components/_charts/chart/doughnut/DoughnutChart.ts +77 -0
- package/dpr/components/_charts/chart/doughnut/clientClass.mjs +0 -45
- package/dpr/components/_charts/chart/doughnut/types.js +2 -0
- package/dpr/components/_charts/chart/doughnut/types.js.map +7 -0
- package/dpr/components/_charts/chart/doughnut/types.ts +5 -0
- package/dpr/components/_charts/chart/doughnut/validate.js +2 -0
- package/dpr/components/_charts/chart/doughnut/validate.js.map +7 -0
- package/dpr/components/_charts/chart/doughnut/validate.ts +30 -0
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +3 -3
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +122 -44
- package/dpr/components/_charts/chart/heatmap/clientClass.mjs +7 -89
- package/dpr/components/_charts/chart/heatmap/types.js +1 -1
- package/dpr/components/_charts/chart/heatmap/types.js.map +1 -1
- package/dpr/components/_charts/chart/heatmap/types.ts +5 -0
- package/dpr/components/_charts/chart/heatmap/validate.js +2 -0
- package/dpr/components/_charts/chart/heatmap/validate.js.map +7 -0
- package/dpr/components/_charts/chart/heatmap/validate.ts +25 -0
- package/dpr/components/_charts/chart/line/LineChart.js +2 -0
- package/dpr/components/_charts/chart/line/LineChart.js.map +7 -0
- package/dpr/components/_charts/chart/line/LineChart.ts +89 -0
- package/dpr/components/_charts/chart/line/clientClass.mjs +5 -36
- package/dpr/components/_charts/chart/line/types.js +2 -0
- package/dpr/components/_charts/chart/line/types.js.map +7 -0
- package/dpr/components/_charts/chart/line/types.ts +5 -0
- package/dpr/components/_charts/chart/line/validate.js +2 -0
- package/dpr/components/_charts/chart/line/validate.js.map +7 -0
- package/dpr/components/_charts/chart/line/validate.ts +30 -0
- package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js +2 -0
- package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js.map +7 -0
- package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.ts +57 -0
- package/dpr/components/_charts/chart/line-timeseries/types.js +2 -0
- package/dpr/components/_charts/chart/line-timeseries/types.js.map +7 -0
- package/dpr/components/_charts/chart/line-timeseries/types.ts +5 -0
- package/dpr/components/_charts/chart/line-timeseries/validate.js +2 -0
- package/dpr/components/_charts/chart/line-timeseries/validate.js.map +7 -0
- package/dpr/components/_charts/chart/line-timeseries/validate.ts +30 -0
- package/dpr/components/_charts/chart/view.njk +8 -1
- package/dpr/components/_charts/chart-tabs/view.njk +15 -14
- package/dpr/components/_charts/utils.js +1 -1
- package/dpr/components/_charts/utils.js.map +3 -3
- package/dpr/components/_charts/utils.test.ts +9 -3
- package/dpr/components/_charts/utils.ts +59 -193
- package/dpr/components/_dashboards/dashboard-list/types.js +2 -0
- package/dpr/components/_dashboards/dashboard-list/types.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-list/types.ts +4 -0
- package/dpr/components/_dashboards/dashboard-list/validate.js +2 -0
- package/dpr/components/_dashboards/dashboard-list/validate.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-list/validate.ts +28 -0
- package/dpr/components/_dashboards/dashboard-visualisation/Validate.js +2 -0
- package/dpr/components/_dashboards/dashboard-visualisation/Validate.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-visualisation/Validate.ts +71 -0
- package/dpr/components/_dashboards/dashboard-visualisation/types.js +1 -1
- package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +2 -2
- package/dpr/components/_dashboards/dashboard-visualisation/types.ts +32 -2
- package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
- package/dpr/components/_dashboards/scorecard/Scorecard.js.map +3 -3
- package/dpr/components/_dashboards/scorecard/Scorecard.ts +82 -213
- package/dpr/components/_dashboards/scorecard/types.js +1 -1
- package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
- package/dpr/components/_dashboards/scorecard/types.ts +11 -1
- package/dpr/components/_dashboards/scorecard/validate.js +2 -0
- package/dpr/components/_dashboards/scorecard/validate.js.map +7 -0
- package/dpr/components/_dashboards/scorecard/validate.ts +36 -0
- package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js +2 -0
- package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js.map +7 -0
- package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.ts +228 -0
- package/dpr/components/_dashboards/scorecard-group/types.js +2 -0
- package/dpr/components/_dashboards/scorecard-group/types.js.map +7 -0
- package/dpr/components/_dashboards/scorecard-group/types.ts +5 -0
- package/dpr/components/_dashboards/scorecard-group/validate.js +2 -0
- package/dpr/components/_dashboards/scorecard-group/validate.js.map +7 -0
- package/dpr/components/_dashboards/scorecard-group/validate.ts +37 -0
- package/dpr/components/_filters/filter-input/types.d.js.map +1 -1
- package/dpr/components/_filters/filter-input/types.d.ts +1 -1
- package/dpr/components/_filters/types.d.js.map +1 -1
- package/dpr/components/_filters/types.d.ts +6 -4
- package/dpr/components/_reports/report-actions/types.d.js.map +1 -1
- package/dpr/components/_reports/report-actions/types.d.ts +1 -1
- package/dpr/components/report-list/types.d.js.map +1 -1
- package/dpr/components/report-list/types.d.ts +1 -1
- package/dpr/data/types.d.js +1 -1
- package/dpr/data/types.d.js.map +1 -1
- package/dpr/data/types.d.ts +2 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
- package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +22 -10
- package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/report/utils.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/report/utils.ts +1 -1
- package/dpr/routes/journeys/view-report/controller.js +1 -1
- package/dpr/routes/journeys/view-report/controller.js.map +3 -3
- package/dpr/routes/journeys/view-report/controller.ts +3 -1
- package/dpr/types/Services.d.js +1 -1
- package/dpr/types/Services.d.js.map +1 -1
- package/dpr/types/Services.d.ts +0 -2
- package/dpr/utils/DataTableBuilder/types.d.js +1 -1
- package/dpr/utils/DataTableBuilder/types.d.js.map +1 -1
- package/dpr/utils/DataTableBuilder/types.d.ts +2 -2
- package/dpr/utils/ErrorHandler.js +1 -1
- package/dpr/utils/ErrorHandler.js.map +3 -3
- package/dpr/utils/ErrorHandler.ts +16 -0
- package/dpr/utils/ParentChildDataTableBuilder/types.d.js +1 -1
- package/dpr/utils/ParentChildDataTableBuilder/types.d.js.map +1 -1
- package/dpr/utils/ParentChildDataTableBuilder/types.d.ts +1 -0
- package/dpr/utils/Personalisation/types.d.js +1 -1
- package/dpr/utils/Personalisation/types.d.js.map +1 -1
- package/dpr/utils/Personalisation/types.d.ts +1 -0
- package/dpr/utils/UserStoreItemBuilder.js.map +2 -2
- package/dpr/utils/UserStoreItemBuilder.ts +1 -1
- package/package.json +1 -1
- package/dpr/components/_charts/chart/Buckets.js +0 -2
- package/dpr/components/_charts/chart/Buckets.js.map +0 -7
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +0 -2
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +0 -7
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +0 -40
|
@@ -6,19 +6,26 @@ import DatasetHelper from '../../utils/datasetHelper'
|
|
|
6
6
|
import DashboardListUtils from '../_dashboards/dashboard-list/utils'
|
|
7
7
|
import { Granularity } from '../_inputs/granular-date-range/types'
|
|
8
8
|
import HeatmapChart from './chart/heatmap/HeatmapChart'
|
|
9
|
+
import BarChart from './chart/bar/BarChart'
|
|
9
10
|
import { components } from '../../types/api'
|
|
10
11
|
import {
|
|
11
12
|
DashboardVisualisationData,
|
|
12
|
-
|
|
13
|
+
DashboardVisualisationType,
|
|
13
14
|
DashboardVisualisatonCardData,
|
|
14
15
|
MoJTable,
|
|
15
16
|
} from '../_dashboards/dashboard-visualisation/types'
|
|
17
|
+
import DoughnutChart from './chart/doughnut/DoughnutChart'
|
|
18
|
+
import LineChart from './chart/line/LineChart'
|
|
19
|
+
import LineTimeseriesChart from './chart/line-timeseries/LineTimeseriesChart'
|
|
20
|
+
import BarTimeseriesChart from './chart/bar-timeseries/BarTimeseriesChart'
|
|
21
|
+
import { PartialDate } from '../_filters/types'
|
|
16
22
|
|
|
17
23
|
dayjs.extend(weekOfYear)
|
|
18
24
|
|
|
19
25
|
export const createChart = (
|
|
20
26
|
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
21
27
|
rawData: DashboardDataResponse[],
|
|
28
|
+
type: components['schemas']['DashboardVisualisationDefinition']['type'],
|
|
22
29
|
): DashboardVisualisatonCardData | undefined => {
|
|
23
30
|
let table: MoJTable | undefined
|
|
24
31
|
let chart: DashboardVisualisationData | undefined
|
|
@@ -26,7 +33,20 @@ export const createChart = (
|
|
|
26
33
|
|
|
27
34
|
const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)
|
|
28
35
|
if (dataSetRows.length) {
|
|
29
|
-
|
|
36
|
+
switch (type) {
|
|
37
|
+
case DashboardVisualisationType.BAR:
|
|
38
|
+
chart = new BarChart().withDefinition(chartDefinition).withData(snapshotData).build()
|
|
39
|
+
break
|
|
40
|
+
case DashboardVisualisationType.DONUT:
|
|
41
|
+
chart = new DoughnutChart().withDefinition(chartDefinition).withData(snapshotData).build()
|
|
42
|
+
break
|
|
43
|
+
case DashboardVisualisationType.LINE:
|
|
44
|
+
chart = new LineChart().withDefinition(chartDefinition).withData(snapshotData).build()
|
|
45
|
+
break
|
|
46
|
+
default:
|
|
47
|
+
break
|
|
48
|
+
}
|
|
49
|
+
|
|
30
50
|
table = createSnapshotTable(chartDefinition, dataSetRows)
|
|
31
51
|
details = getChartDetails(chartDefinition, dataSetRows)
|
|
32
52
|
}
|
|
@@ -41,46 +61,56 @@ export const createChart = (
|
|
|
41
61
|
export const createTimeseriesCharts = (
|
|
42
62
|
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
43
63
|
rawData: DashboardDataResponse[],
|
|
44
|
-
|
|
45
|
-
let table: MoJTable | undefined
|
|
46
|
-
let chart: DashboardVisualisationData | undefined
|
|
47
|
-
let details: ChartDetails | undefined
|
|
48
|
-
|
|
49
|
-
const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)
|
|
50
|
-
if (dataSetRows.length) {
|
|
51
|
-
chart = createTimeseriesChart(chartDefinition, timeseriesData)
|
|
52
|
-
table = createTimeseriesTable(chartDefinition, timeseriesData)
|
|
53
|
-
details = getChartDetails(chartDefinition, latestData, true)
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
details,
|
|
57
|
-
table,
|
|
58
|
-
chart,
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export const createMatrixChart = (
|
|
63
|
-
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
64
|
-
rawData: DashboardDataResponse[],
|
|
64
|
+
type: components['schemas']['DashboardVisualisationDefinition']['type'],
|
|
65
65
|
query: Record<string, string | string[]>,
|
|
66
|
+
partialDate?: PartialDate,
|
|
66
67
|
) => {
|
|
67
68
|
let table: MoJTable | undefined
|
|
68
69
|
let chart: DashboardVisualisationData | undefined
|
|
69
70
|
let details: ChartDetails | undefined
|
|
70
71
|
let granularity: Granularity = Granularity.DAILY
|
|
71
72
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
granularity
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
if (query) {
|
|
74
|
+
Object.keys(query).forEach((key) => {
|
|
75
|
+
if (key.includes('granularity')) {
|
|
76
|
+
granularity = <Granularity>query[key]
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
}
|
|
77
80
|
|
|
78
81
|
const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)
|
|
82
|
+
|
|
79
83
|
if (dataSetRows.length) {
|
|
80
|
-
|
|
84
|
+
switch (type) {
|
|
85
|
+
case DashboardVisualisationType.MATRIX_TIMESERIES:
|
|
86
|
+
chart = new HeatmapChart()
|
|
87
|
+
.withDefinition(chartDefinition)
|
|
88
|
+
.withGranularity(granularity)
|
|
89
|
+
.withData(timeseriesData)
|
|
90
|
+
.build()
|
|
91
|
+
break
|
|
92
|
+
case DashboardVisualisationType.LINE_TIMESERIES:
|
|
93
|
+
chart = new LineTimeseriesChart()
|
|
94
|
+
.withDefinition(chartDefinition)
|
|
95
|
+
.withData(timeseriesData)
|
|
96
|
+
.withPartialDate(partialDate)
|
|
97
|
+
.build()
|
|
98
|
+
break
|
|
99
|
+
case DashboardVisualisationType.BAR_TIMESERIES:
|
|
100
|
+
chart = new BarTimeseriesChart()
|
|
101
|
+
.withDefinition(chartDefinition)
|
|
102
|
+
.withData(timeseriesData)
|
|
103
|
+
.withPartialDate(partialDate)
|
|
104
|
+
.build()
|
|
105
|
+
break
|
|
106
|
+
default:
|
|
107
|
+
break
|
|
108
|
+
}
|
|
109
|
+
|
|
81
110
|
table = createTimeseriesTable(chartDefinition, timeseriesData)
|
|
82
111
|
details = getChartDetails(chartDefinition, latestData, true)
|
|
83
112
|
}
|
|
113
|
+
|
|
84
114
|
return {
|
|
85
115
|
details,
|
|
86
116
|
table,
|
|
@@ -197,125 +227,6 @@ const createHeadlines = (
|
|
|
197
227
|
return headlines
|
|
198
228
|
}
|
|
199
229
|
|
|
200
|
-
const createSnapshotChart = (
|
|
201
|
-
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
202
|
-
snapshotData: DashboardDataResponse[],
|
|
203
|
-
): DashboardVisualisationData => {
|
|
204
|
-
const { type, columns } = chartDefinition
|
|
205
|
-
const { measures } = columns
|
|
206
|
-
const isListChart = !!measures.find((col) => col.axis)
|
|
207
|
-
|
|
208
|
-
let labels: string[]
|
|
209
|
-
let unit
|
|
210
|
-
let datasets: DashboardVisualisationDataSet[]
|
|
211
|
-
|
|
212
|
-
if (!isListChart) {
|
|
213
|
-
const chart = buildChart(columns, snapshotData)
|
|
214
|
-
labels = chart.labels
|
|
215
|
-
unit = chart.unit
|
|
216
|
-
datasets = chart.datasets
|
|
217
|
-
} else {
|
|
218
|
-
;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return {
|
|
222
|
-
type,
|
|
223
|
-
unit,
|
|
224
|
-
data: {
|
|
225
|
-
labels,
|
|
226
|
-
datasets,
|
|
227
|
-
},
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
const buildChart = (
|
|
232
|
-
columns: components['schemas']['DashboardVisualisationColumnsDefinition'],
|
|
233
|
-
rawData: DashboardDataResponse[],
|
|
234
|
-
) => {
|
|
235
|
-
const { keys, measures } = columns
|
|
236
|
-
const labels = measures.map((col) => col.display || '')
|
|
237
|
-
const labelId = keys ? (keys[keys.length - 1]?.id as keyof DashboardDataResponse) : undefined
|
|
238
|
-
const unit = measures[0].unit ? measures[0].unit : undefined
|
|
239
|
-
|
|
240
|
-
const datasets = rawData.map((row) => {
|
|
241
|
-
const label = labelId && row[labelId] ? `${row[labelId].raw}` : 'All'
|
|
242
|
-
const data = measures.map((c) => {
|
|
243
|
-
const rowId = c.id as keyof DashboardDataResponse
|
|
244
|
-
return row[rowId] && row[rowId].raw ? Number(row[rowId].raw) : 0
|
|
245
|
-
})
|
|
246
|
-
const total = data.reduce((acc: number, val: number) => acc + val, 0)
|
|
247
|
-
return { label, data, total } as DashboardVisualisationDataSet
|
|
248
|
-
})
|
|
249
|
-
|
|
250
|
-
return {
|
|
251
|
-
labels,
|
|
252
|
-
unit,
|
|
253
|
-
datasets,
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
const buildChartFromListData = (
|
|
258
|
-
columns: components['schemas']['DashboardVisualisationColumnsDefinition'],
|
|
259
|
-
rawData: DashboardDataResponse[],
|
|
260
|
-
) => {
|
|
261
|
-
const { measures, keys } = columns
|
|
262
|
-
|
|
263
|
-
const xAxisColumn = measures.find((col) => col.axis === 'x') || measures[0]
|
|
264
|
-
const yAxisColumn = measures.find((col) => col.axis === 'y') || measures[1]
|
|
265
|
-
|
|
266
|
-
if (!xAxisColumn || !yAxisColumn) {
|
|
267
|
-
throw new Error('No X of Y Axis found in definition')
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
const unit = yAxisColumn?.unit || undefined
|
|
271
|
-
const groupKey = DatasetHelper.getGroupKey(rawData, keys)
|
|
272
|
-
const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]
|
|
273
|
-
|
|
274
|
-
const labels = groupsData.flatMap((gd) => {
|
|
275
|
-
return gd.map((row) => {
|
|
276
|
-
const { id: xId } = xAxisColumn
|
|
277
|
-
const field = row[xId]
|
|
278
|
-
return field ? `${field.raw}` : ''
|
|
279
|
-
})
|
|
280
|
-
})
|
|
281
|
-
|
|
282
|
-
const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {
|
|
283
|
-
const data = Array(labels.length)
|
|
284
|
-
groupData.forEach((row) => {
|
|
285
|
-
const { id: yId } = yAxisColumn
|
|
286
|
-
const { id: xId } = xAxisColumn
|
|
287
|
-
const labelField = row[xId]
|
|
288
|
-
const valueField = row[yId]
|
|
289
|
-
const raw = valueField && valueField.raw ? Number(valueField.raw) : 0
|
|
290
|
-
const dataIndex = labels.findIndex((l) => l === labelField.raw)
|
|
291
|
-
if (dataIndex !== -1) {
|
|
292
|
-
data[dataIndex] = Number(raw)
|
|
293
|
-
}
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
let label = ''
|
|
297
|
-
if (groupKey) {
|
|
298
|
-
const groupKeyId = groupKey.id
|
|
299
|
-
const groupRow = groupData[0]
|
|
300
|
-
label = groupRow && groupRow[groupKeyId] ? `${groupRow[groupKeyId].raw}` : ''
|
|
301
|
-
} else {
|
|
302
|
-
label = yAxisColumn.display || label
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return {
|
|
306
|
-
label,
|
|
307
|
-
data,
|
|
308
|
-
total: data.reduce((acc: number, val: number) => acc + val, 0),
|
|
309
|
-
}
|
|
310
|
-
})
|
|
311
|
-
|
|
312
|
-
return {
|
|
313
|
-
labels,
|
|
314
|
-
unit,
|
|
315
|
-
datasets,
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
|
|
319
230
|
const createSnapshotTable = (
|
|
320
231
|
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
321
232
|
data: DashboardDataResponse[],
|
|
@@ -338,50 +249,6 @@ const createSnapshotTable = (
|
|
|
338
249
|
}
|
|
339
250
|
}
|
|
340
251
|
|
|
341
|
-
const createTimeseriesChart = (
|
|
342
|
-
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
343
|
-
timeseriesData: DashboardDataResponse[],
|
|
344
|
-
): DashboardVisualisationData => {
|
|
345
|
-
const { columns } = chartDefinition
|
|
346
|
-
const { keys, measures } = columns
|
|
347
|
-
|
|
348
|
-
const unit = measures[0].unit ? measures[0].unit : undefined
|
|
349
|
-
const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]
|
|
350
|
-
const groupKey = DatasetHelper.getGroupKey(timeseriesData, keys)
|
|
351
|
-
const labelId = groupKey?.id as keyof DashboardDataResponse
|
|
352
|
-
|
|
353
|
-
const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)
|
|
354
|
-
const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0]['ts'].raw as unknown as string)
|
|
355
|
-
const datasetCount = timeBlockData[0].length
|
|
356
|
-
|
|
357
|
-
const datasets: DashboardVisualisationDataSet[] = []
|
|
358
|
-
for (let index = 0; index < datasetCount; index += 1) {
|
|
359
|
-
const data = timeBlockData.map((timeperiod) => {
|
|
360
|
-
const { raw } = timeperiod[index][measures[1].id]
|
|
361
|
-
return raw ? Number(raw) : 0
|
|
362
|
-
})
|
|
363
|
-
const total = data.reduce((a, c) => a + c, 0)
|
|
364
|
-
const rawValue = timeBlockData[0][index][labelId].raw
|
|
365
|
-
const label = rawValue ? <string>rawValue : ''
|
|
366
|
-
|
|
367
|
-
datasets.push({
|
|
368
|
-
data,
|
|
369
|
-
label,
|
|
370
|
-
total,
|
|
371
|
-
})
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
return {
|
|
375
|
-
type,
|
|
376
|
-
unit,
|
|
377
|
-
timeseries: true,
|
|
378
|
-
data: {
|
|
379
|
-
labels,
|
|
380
|
-
datasets,
|
|
381
|
-
},
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
|
|
385
252
|
const createTimeseriesTable = (
|
|
386
253
|
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
387
254
|
timeseriesData: DashboardDataResponse[],
|
|
@@ -422,5 +289,4 @@ const createTimeseriesTable = (
|
|
|
422
289
|
export default {
|
|
423
290
|
createChart,
|
|
424
291
|
createTimeseriesCharts,
|
|
425
|
-
createMatrixChart,
|
|
426
292
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var L=(t,i,p,m)=>{if(i&&typeof i=="object"||typeof i=="function")for(let e of f(i))!s.call(t,e)&&e!==p&&o(t,e,{get:()=>i[e],enumerable:!(m=r(i,e))||m.enumerable});return t};var a=t=>L(o({},"__esModule",{value:!0}),t);var c={};module.exports=a(c);
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dpr/components/_dashboards/dashboard-list/types.ts"],
|
|
4
|
+
"sourcesContent": ["import z from 'zod'\nimport ListSchema from './validate'\n\nexport type ListDefinitionType = z.infer<typeof ListSchema.ListSchema>\n"],
|
|
5
|
+
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["types_exports", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var h=(o,s)=>{for(var i in s)n(o,i,{get:s[i],enumerable:!0})},p=(o,s,i,m)=>{if(s&&typeof s=="object"||typeof s=="function")for(let e of l(s))!u.call(o,e)&&e!==i&&n(o,e,{get:()=>s[e],enumerable:!(m=c(s,e))||m.enumerable});return o};var b=o=>p(n({},"__esModule",{value:!0}),o);var j={};h(j,{default:()=>f});module.exports=b(j);var a=require("zod"),t=require("../dashboard-visualisation/Validate");const r=a.z.object({showLatest:a.z.boolean().default(!0),columnsAsList:a.z.boolean().optional()}),d=a.z.object({...t.DashboardVisualisationSchema.shape,type:a.z.literal("list"),options:a.z.object(r.shape),columns:a.z.object({...t.DashboardColumns.shape,measures:a.z.array(t.DashboardVisualisationMeasureSchema).min(1,"Measure must contain a single item")})}),L={ListSchema:d,ListOptions:r};var f=L;
|
|
2
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dpr/components/_dashboards/dashboard-list/validate.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport {\n DashboardVisualisationSchema,\n DashboardColumns,\n DashboardVisualisationMeasureSchema,\n} from '../dashboard-visualisation/Validate'\n\nconst ListOptions = z.object({\n showLatest: z.boolean().default(true),\n columnsAsList: z.boolean().optional(),\n})\n\nconst ListSchema = z.object({\n ...DashboardVisualisationSchema.shape,\n type: z.literal('list'),\n options: z.object(ListOptions.shape),\n columns: z.object({\n ...DashboardColumns.shape,\n measures: z.array(DashboardVisualisationMeasureSchema).min(1, 'Measure must contain a single item'),\n }),\n})\n\nconst ListSchemas = {\n ListSchema,\n ListOptions,\n}\n\nexport default ListSchemas\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,eAClBC,EAIO,+CAEP,MAAMC,EAAc,IAAE,OAAO,CAC3B,WAAY,IAAE,QAAQ,EAAE,QAAQ,EAAI,EACpC,cAAe,IAAE,QAAQ,EAAE,SAAS,CACtC,CAAC,EAEKC,EAAa,IAAE,OAAO,CAC1B,GAAG,+BAA6B,MAChC,KAAM,IAAE,QAAQ,MAAM,EACtB,QAAS,IAAE,OAAOD,EAAY,KAAK,EACnC,QAAS,IAAE,OAAO,CAChB,GAAG,mBAAiB,MACpB,SAAU,IAAE,MAAM,qCAAmC,EAAE,IAAI,EAAG,oCAAoC,CACpG,CAAC,CACH,CAAC,EAEKE,EAAc,CAClB,WAAAD,EACA,YAAAD,CACF,EAEA,IAAOJ,EAAQM",
|
|
6
|
+
"names": ["validate_exports", "__export", "validate_default", "__toCommonJS", "import_zod", "import_Validate", "ListOptions", "ListSchema", "ListSchemas"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import {
|
|
3
|
+
DashboardVisualisationSchema,
|
|
4
|
+
DashboardColumns,
|
|
5
|
+
DashboardVisualisationMeasureSchema,
|
|
6
|
+
} from '../dashboard-visualisation/Validate'
|
|
7
|
+
|
|
8
|
+
const ListOptions = z.object({
|
|
9
|
+
showLatest: z.boolean().default(true),
|
|
10
|
+
columnsAsList: z.boolean().optional(),
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const ListSchema = z.object({
|
|
14
|
+
...DashboardVisualisationSchema.shape,
|
|
15
|
+
type: z.literal('list'),
|
|
16
|
+
options: z.object(ListOptions.shape),
|
|
17
|
+
columns: z.object({
|
|
18
|
+
...DashboardColumns.shape,
|
|
19
|
+
measures: z.array(DashboardVisualisationMeasureSchema).min(1, 'Measure must contain a single item'),
|
|
20
|
+
}),
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
const ListSchemas = {
|
|
24
|
+
ListSchema,
|
|
25
|
+
ListOptions,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default ListSchemas
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var g=(e,a)=>{for(var s in a)i(e,s,{get:a[s],enumerable:!0})},h=(e,a,s,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of d(a))!m.call(e,t)&&t!==s&&i(e,t,{get:()=>a[t],enumerable:!(r=b(a,t))||r.enumerable});return e};var f=e=>h(i({},"__esModule",{value:!0}),e);var S={};g(S,{BucketOptionsSchema:()=>j,DashboardColumns:()=>c,DashboardVisualisationMeasureSchema:()=>n,DashboardVisualisationSchema:()=>p,default:()=>D});module.exports=f(S);var o=require("zod");const l=o.z.object({min:o.z.number().optional(),max:o.z.number().optional(),hexColour:o.z.string().optional()}),j=o.z.object({useRagColour:o.z.boolean().default(!1),buckets:o.z.array(l).default([]),baseColour:o.z.string().regex(/^#/).optional()}),x=o.z.object({id:o.z.string(),equals:o.z.string()}),u=o.z.object({id:o.z.string(),display:o.z.string().optional(),optional:o.z.boolean().default(!1)}),n=o.z.object({id:o.z.string(),display:o.z.string().optional(),unit:o.z.enum(["NUMBER","PERCENTAGE"]).optional(),aggregate:o.z.enum(["sum","average"]).optional()}),c=o.z.object({keys:o.z.array(u),measures:o.z.array(n).length(1,"Measure must contain a single item"),filters:o.z.array(x).min(1).optional(),expectNulls:o.z.boolean().default(!1)}),y=o.z.object({...l.shape,showLatest:o.z.boolean().default(!0),columnsAsList:o.z.boolean().optional()}),p=o.z.object({id:o.z.string(),type:o.z.enum(["list","doughnut","bar","bar-timeseries","line","scorecard","scorecard-group","matrix-timeseries","line-timeseries"]),display:o.z.string().optional(),description:o.z.string().optional(),options:o.z.object(y.shape),columns:o.z.object(c.shape)}),C={DashboardVisualisationSchema:p,DashboardVisualisationMeasureSchema:n,DashboardVisualisationKeySchema:u};var D=C;0&&(module.exports={BucketOptionsSchema,DashboardColumns,DashboardVisualisationMeasureSchema,DashboardVisualisationSchema});
|
|
2
|
+
//# sourceMappingURL=Validate.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dpr/components/_dashboards/dashboard-visualisation/Validate.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\n\nconst dashboardBucket = z.object({\n min: z.number().optional(),\n max: z.number().optional(),\n hexColour: z.string().optional(),\n})\n\nexport const BucketOptionsSchema = z.object({\n useRagColour: z.boolean().default(false),\n buckets: z.array(dashboardBucket).default([]),\n baseColour: z.string().regex(/^#/).optional(),\n})\n\nconst dashboardVisFilter = z.object({\n id: z.string(),\n equals: z.string(),\n})\n\nconst DashboardVisualisationKeySchema = z.object({\n id: z.string(),\n display: z.string().optional(),\n optional: z.boolean().default(false),\n})\n\nexport const DashboardVisualisationMeasureSchema = z.object({\n id: z.string(),\n display: z.string().optional(),\n unit: z.enum(['NUMBER', 'PERCENTAGE']).optional(),\n aggregate: z.enum(['sum', 'average']).optional(),\n})\n\nexport const DashboardColumns = z.object({\n keys: z.array(DashboardVisualisationKeySchema),\n measures: z.array(DashboardVisualisationMeasureSchema).length(1, 'Measure must contain a single item'),\n filters: z.array(dashboardVisFilter).min(1).optional(),\n expectNulls: z.boolean().default(false),\n})\n\nconst dashboardOptions = z.object({\n ...dashboardBucket.shape,\n showLatest: z.boolean().default(true),\n columnsAsList: z.boolean().optional(),\n})\n\nexport const DashboardVisualisationSchema = z.object({\n id: z.string(),\n type: z.enum([\n 'list',\n 'doughnut',\n 'bar',\n 'bar-timeseries',\n 'line',\n 'scorecard',\n 'scorecard-group',\n 'matrix-timeseries',\n 'line-timeseries',\n ]),\n display: z.string().optional(),\n description: z.string().optional(),\n options: z.object(dashboardOptions.shape),\n columns: z.object(DashboardColumns.shape),\n})\n\nconst DashboardVisualisationSchemas = {\n DashboardVisualisationSchema,\n DashboardVisualisationMeasureSchema,\n DashboardVisualisationKeySchema,\n}\n\nexport default DashboardVisualisationSchemas\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,EAAA,qBAAAC,EAAA,wCAAAC,EAAA,iCAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAP,GAAA,IAAAQ,EAAkB,eAElB,MAAMC,EAAkB,IAAE,OAAO,CAC/B,IAAK,IAAE,OAAO,EAAE,SAAS,EACzB,IAAK,IAAE,OAAO,EAAE,SAAS,EACzB,UAAW,IAAE,OAAO,EAAE,SAAS,CACjC,CAAC,EAEYP,EAAsB,IAAE,OAAO,CAC1C,aAAc,IAAE,QAAQ,EAAE,QAAQ,EAAK,EACvC,QAAS,IAAE,MAAMO,CAAe,EAAE,QAAQ,CAAC,CAAC,EAC5C,WAAY,IAAE,OAAO,EAAE,MAAM,IAAI,EAAE,SAAS,CAC9C,CAAC,EAEKC,EAAqB,IAAE,OAAO,CAClC,GAAI,IAAE,OAAO,EACb,OAAQ,IAAE,OAAO,CACnB,CAAC,EAEKC,EAAkC,IAAE,OAAO,CAC/C,GAAI,IAAE,OAAO,EACb,QAAS,IAAE,OAAO,EAAE,SAAS,EAC7B,SAAU,IAAE,QAAQ,EAAE,QAAQ,EAAK,CACrC,CAAC,EAEYP,EAAsC,IAAE,OAAO,CAC1D,GAAI,IAAE,OAAO,EACb,QAAS,IAAE,OAAO,EAAE,SAAS,EAC7B,KAAM,IAAE,KAAK,CAAC,SAAU,YAAY,CAAC,EAAE,SAAS,EAChD,UAAW,IAAE,KAAK,CAAC,MAAO,SAAS,CAAC,EAAE,SAAS,CACjD,CAAC,EAEYD,EAAmB,IAAE,OAAO,CACvC,KAAM,IAAE,MAAMQ,CAA+B,EAC7C,SAAU,IAAE,MAAMP,CAAmC,EAAE,OAAO,EAAG,oCAAoC,EACrG,QAAS,IAAE,MAAMM,CAAkB,EAAE,IAAI,CAAC,EAAE,SAAS,EACrD,YAAa,IAAE,QAAQ,EAAE,QAAQ,EAAK,CACxC,CAAC,EAEKE,EAAmB,IAAE,OAAO,CAChC,GAAGH,EAAgB,MACnB,WAAY,IAAE,QAAQ,EAAE,QAAQ,EAAI,EACpC,cAAe,IAAE,QAAQ,EAAE,SAAS,CACtC,CAAC,EAEYJ,EAA+B,IAAE,OAAO,CACnD,GAAI,IAAE,OAAO,EACb,KAAM,IAAE,KAAK,CACX,OACA,WACA,MACA,iBACA,OACA,YACA,kBACA,oBACA,iBACF,CAAC,EACD,QAAS,IAAE,OAAO,EAAE,SAAS,EAC7B,YAAa,IAAE,OAAO,EAAE,SAAS,EACjC,QAAS,IAAE,OAAOO,EAAiB,KAAK,EACxC,QAAS,IAAE,OAAOT,EAAiB,KAAK,CAC1C,CAAC,EAEKU,EAAgC,CACpC,6BAAAR,EACA,oCAAAD,EACA,gCAAAO,CACF,EAEA,IAAOL,EAAQO",
|
|
6
|
+
"names": ["Validate_exports", "__export", "BucketOptionsSchema", "DashboardColumns", "DashboardVisualisationMeasureSchema", "DashboardVisualisationSchema", "Validate_default", "__toCommonJS", "import_zod", "dashboardBucket", "dashboardVisFilter", "DashboardVisualisationKeySchema", "dashboardOptions", "DashboardVisualisationSchemas"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
|
|
3
|
+
const dashboardBucket = z.object({
|
|
4
|
+
min: z.number().optional(),
|
|
5
|
+
max: z.number().optional(),
|
|
6
|
+
hexColour: z.string().optional(),
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
export const BucketOptionsSchema = z.object({
|
|
10
|
+
useRagColour: z.boolean().default(false),
|
|
11
|
+
buckets: z.array(dashboardBucket).default([]),
|
|
12
|
+
baseColour: z.string().regex(/^#/).optional(),
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const dashboardVisFilter = z.object({
|
|
16
|
+
id: z.string(),
|
|
17
|
+
equals: z.string(),
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const DashboardVisualisationKeySchema = z.object({
|
|
21
|
+
id: z.string(),
|
|
22
|
+
display: z.string().optional(),
|
|
23
|
+
optional: z.boolean().default(false),
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
export const DashboardVisualisationMeasureSchema = z.object({
|
|
27
|
+
id: z.string(),
|
|
28
|
+
display: z.string().optional(),
|
|
29
|
+
unit: z.enum(['NUMBER', 'PERCENTAGE']).optional(),
|
|
30
|
+
aggregate: z.enum(['sum', 'average']).optional(),
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export const DashboardColumns = z.object({
|
|
34
|
+
keys: z.array(DashboardVisualisationKeySchema),
|
|
35
|
+
measures: z.array(DashboardVisualisationMeasureSchema).length(1, 'Measure must contain a single item'),
|
|
36
|
+
filters: z.array(dashboardVisFilter).min(1).optional(),
|
|
37
|
+
expectNulls: z.boolean().default(false),
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
const dashboardOptions = z.object({
|
|
41
|
+
...dashboardBucket.shape,
|
|
42
|
+
showLatest: z.boolean().default(true),
|
|
43
|
+
columnsAsList: z.boolean().optional(),
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
export const DashboardVisualisationSchema = z.object({
|
|
47
|
+
id: z.string(),
|
|
48
|
+
type: z.enum([
|
|
49
|
+
'list',
|
|
50
|
+
'doughnut',
|
|
51
|
+
'bar',
|
|
52
|
+
'bar-timeseries',
|
|
53
|
+
'line',
|
|
54
|
+
'scorecard',
|
|
55
|
+
'scorecard-group',
|
|
56
|
+
'matrix-timeseries',
|
|
57
|
+
'line-timeseries',
|
|
58
|
+
]),
|
|
59
|
+
display: z.string().optional(),
|
|
60
|
+
description: z.string().optional(),
|
|
61
|
+
options: z.object(dashboardOptions.shape),
|
|
62
|
+
columns: z.object(DashboardColumns.shape),
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
const DashboardVisualisationSchemas = {
|
|
66
|
+
DashboardVisualisationSchema,
|
|
67
|
+
DashboardVisualisationMeasureSchema,
|
|
68
|
+
DashboardVisualisationKeySchema,
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export default DashboardVisualisationSchemas
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var o=Object.defineProperty;var
|
|
1
|
+
"use strict";var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(e,a)=>{for(var r in a)o(e,r,{get:a[r],enumerable:!0})},f=(e,a,r,s)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of l(a))!d.call(e,t)&&t!==r&&o(e,t,{get:()=>a[t],enumerable:!(s=u(a,t))||s.enumerable});return e};var D=e=>f(o({},"__esModule",{value:!0}),e);var p={};m(p,{DashboardVisualisationType:()=>n});module.exports=D(p);var n=(i=>(i.LIST="list",i.DONUT="doughnut",i.BAR="bar",i.LINE="line",i.MATRIX="matrix",i.MATRIX_TIMESERIES="matrix-timeseries",i.BAR_TIMESERIES="bar-timeseries",i.LINE_TIMESERIES="line-timeseries",i.SCORECARD="scorecard",i.SCORECARD_GROUP="scorecard-group",i))(n||{});0&&(module.exports={DashboardVisualisationType});
|
|
2
2
|
//# sourceMappingURL=types.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/dpr/components/_dashboards/dashboard-visualisation/types.ts"],
|
|
4
|
-
"sourcesContent": ["import { components } from '../../../types/api'\nimport { Scorecard, ScorecardGroup } from '../scorecard/types'\nimport { MatrixChartData } from '../../_charts/chart/heatmap/types'\nimport { ChartDetails } from '../../../types/Charts'\n\nexport interface DashboardSection {\n id: string\n title?: string\n description?: string\n visualisations?: DashboardVisualisation[]\n}\n\nexport interface DashboardVisualisation {\n id: string\n type: components['schemas']['DashboardVisualisationDefinition']['type']\n title?: string | undefined\n description?: string | undefined\n data:\n | Scorecard\n | Scorecard[]\n | ScorecardGroup[]\n | DashboardVisualisatonCardData\n | DashboardVisualisationTable\n | undefined\n}\n\nexport interface DashboardVisualisatonCardData {\n chart?: DashboardVisualisationData | undefined\n table?: MoJTable | undefined\n details?: ChartDetails | undefined\n}\n\nexport interface DashboardVisualisationData {\n type:
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,
|
|
4
|
+
"sourcesContent": ["import z from 'zod'\nimport { components } from '../../../types/api'\nimport { Scorecard, ScorecardGroup } from '../scorecard/types'\nimport { MatrixChartData } from '../../_charts/chart/heatmap/types'\nimport { ChartDetails } from '../../../types/Charts'\nimport DashboardVisualisationSchemas from './Validate'\nimport { BarDefinitionMeasure } from '../../_charts/chart/bar/types'\nimport { DoughnutDefinitionMeasure } from '../../_charts/chart/doughnut/types'\nimport { LineDefinitionMeasure } from '../../_charts/chart/line/types'\nimport { LineTimeseriesDefinitionMeasure } from '../../_charts/chart/line-timeseries/types'\nimport { BarTimeseriesDefinitionMeasure } from '../../_charts/chart/bar-timeseries/types'\nimport { ChartOptionsType } from '../../_charts/chart/chart-config'\nimport { PartialDate } from '../../_filters/types'\n\nexport interface DashboardSection {\n id: string\n title?: string\n description?: string\n visualisations?: DashboardVisualisation[]\n}\n\nexport interface DashboardVisualisation {\n id: string\n type: components['schemas']['DashboardVisualisationDefinition']['type']\n title?: string | undefined\n description?: string | undefined\n data:\n | Scorecard\n | Scorecard[]\n | ScorecardGroup[]\n | DashboardVisualisatonCardData\n | DashboardVisualisationTable\n | undefined\n}\n\nexport interface DashboardVisualisatonCardData {\n chart?: DashboardVisualisationData | undefined\n table?: MoJTable | undefined\n details?: ChartDetails | undefined\n}\n\nexport interface DashboardVisualisationData {\n type: DashboardVisualisationType\n options?: DashboardVisualisationDataOptions\n data: DashboardVisualisationDataValues\n}\n\ninterface DashboardVisualisationDataOptions {\n height?: number\n unit?: components['schemas']['DashboardVisualisationColumnDefinition']['unit']\n timeseries?: boolean\n}\n\nexport interface DashboardVisualisationDataValues {\n labels?: string[]\n datasets: DashboardVisualisationDataSet[]\n axis?: 'x' | 'y'\n config: ChartOptionsType\n partialDate?: PartialDate | undefined\n}\n\nexport interface DashboardVisualisationDataSet {\n label: string\n data: number[] | MatrixChartData[]\n total?: number\n}\n\nexport interface DashboardVisualisationTable {\n table: MoJTable\n ts?: string\n}\n\nexport interface MoJTable {\n head: MoJTableHead[]\n rows: MoJTableRow[][]\n}\n\nexport interface MoJTableRow {\n text?: string\n html?: string\n}\n\nexport interface MoJTableHead {\n text?: string\n html?: string\n}\n\nexport enum DashboardVisualisationType {\n LIST = 'list',\n DONUT = 'doughnut',\n BAR = 'bar',\n LINE = 'line',\n MATRIX = 'matrix',\n MATRIX_TIMESERIES = 'matrix-timeseries',\n BAR_TIMESERIES = 'bar-timeseries',\n LINE_TIMESERIES = 'line-timeseries',\n SCORECARD = 'scorecard',\n SCORECARD_GROUP = 'scorecard-group',\n}\n\nexport type DashboardVisualisationOptions = ListDashboardVisualisationOptions | BucketDashboardVisualisationOptions\n\nexport interface ListDashboardVisualisationOptions {\n showLatest?: boolean\n columnsAsList?: boolean\n}\n\nexport interface BucketDashboardVisualisationOptions {\n useRagColour?: boolean\n buckets?: DashboardVisualisationBucket[]\n baseColour?: string\n}\n\nexport interface DashboardVisualisationBucket {\n min?: number | undefined\n max?: number | undefined\n hexColour?: string | undefined\n}\n\nexport type VisualisationDefinitionType = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationSchema>\nexport type VisualisationDefinitionKey = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationKeySchema>\nexport type VisualisationDefinitionMeasure = z.infer<\n typeof DashboardVisualisationSchemas.DashboardVisualisationMeasureSchema\n>\n\nexport type ChartMeasure =\n | BarDefinitionMeasure[]\n | DoughnutDefinitionMeasure[]\n | LineDefinitionMeasure[]\n | VisualisationDefinitionMeasure[]\n\nexport type TimeseriesChartMeasure = LineTimeseriesDefinitionMeasure[] | BarTimeseriesDefinitionMeasure[]\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAuFO,IAAKE,OACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,WACRA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,UAAY,YACZA,EAAA,gBAAkB,kBAVRA,OAAA",
|
|
6
6
|
"names": ["types_exports", "__export", "DashboardVisualisationType", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
import z from 'zod'
|
|
1
2
|
import { components } from '../../../types/api'
|
|
2
3
|
import { Scorecard, ScorecardGroup } from '../scorecard/types'
|
|
3
4
|
import { MatrixChartData } from '../../_charts/chart/heatmap/types'
|
|
4
5
|
import { ChartDetails } from '../../../types/Charts'
|
|
6
|
+
import DashboardVisualisationSchemas from './Validate'
|
|
7
|
+
import { BarDefinitionMeasure } from '../../_charts/chart/bar/types'
|
|
8
|
+
import { DoughnutDefinitionMeasure } from '../../_charts/chart/doughnut/types'
|
|
9
|
+
import { LineDefinitionMeasure } from '../../_charts/chart/line/types'
|
|
10
|
+
import { LineTimeseriesDefinitionMeasure } from '../../_charts/chart/line-timeseries/types'
|
|
11
|
+
import { BarTimeseriesDefinitionMeasure } from '../../_charts/chart/bar-timeseries/types'
|
|
12
|
+
import { ChartOptionsType } from '../../_charts/chart/chart-config'
|
|
13
|
+
import { PartialDate } from '../../_filters/types'
|
|
5
14
|
|
|
6
15
|
export interface DashboardSection {
|
|
7
16
|
id: string
|
|
@@ -31,9 +40,14 @@ export interface DashboardVisualisatonCardData {
|
|
|
31
40
|
}
|
|
32
41
|
|
|
33
42
|
export interface DashboardVisualisationData {
|
|
34
|
-
type:
|
|
35
|
-
|
|
43
|
+
type: DashboardVisualisationType
|
|
44
|
+
options?: DashboardVisualisationDataOptions
|
|
36
45
|
data: DashboardVisualisationDataValues
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface DashboardVisualisationDataOptions {
|
|
49
|
+
height?: number
|
|
50
|
+
unit?: components['schemas']['DashboardVisualisationColumnDefinition']['unit']
|
|
37
51
|
timeseries?: boolean
|
|
38
52
|
}
|
|
39
53
|
|
|
@@ -41,6 +55,8 @@ export interface DashboardVisualisationDataValues {
|
|
|
41
55
|
labels?: string[]
|
|
42
56
|
datasets: DashboardVisualisationDataSet[]
|
|
43
57
|
axis?: 'x' | 'y'
|
|
58
|
+
config: ChartOptionsType
|
|
59
|
+
partialDate?: PartialDate | undefined
|
|
44
60
|
}
|
|
45
61
|
|
|
46
62
|
export interface DashboardVisualisationDataSet {
|
|
@@ -100,3 +116,17 @@ export interface DashboardVisualisationBucket {
|
|
|
100
116
|
max?: number | undefined
|
|
101
117
|
hexColour?: string | undefined
|
|
102
118
|
}
|
|
119
|
+
|
|
120
|
+
export type VisualisationDefinitionType = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationSchema>
|
|
121
|
+
export type VisualisationDefinitionKey = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationKeySchema>
|
|
122
|
+
export type VisualisationDefinitionMeasure = z.infer<
|
|
123
|
+
typeof DashboardVisualisationSchemas.DashboardVisualisationMeasureSchema
|
|
124
|
+
>
|
|
125
|
+
|
|
126
|
+
export type ChartMeasure =
|
|
127
|
+
| BarDefinitionMeasure[]
|
|
128
|
+
| DoughnutDefinitionMeasure[]
|
|
129
|
+
| LineDefinitionMeasure[]
|
|
130
|
+
| VisualisationDefinitionMeasure[]
|
|
131
|
+
|
|
132
|
+
export type TimeseriesChartMeasure = LineTimeseriesDefinitionMeasure[] | BarTimeseriesDefinitionMeasure[]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var y=Object.create;var d=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var w=(i,e)=>{for(var t in e)d(i,t,{get:e[t],enumerable:!0})},D=(i,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of R(e))!B.call(i,s)&&s!==t&&d(i,s,{get:()=>e[s],enumerable:!(a=k(e,s))||a.enumerable});return i};var h=(i,e,t)=>(t=i!=null?y(T(i)):{},D(e||!i||!i.__esModule?d(t,"default",{value:i,enumerable:!0}):t,i)),C=i=>D(d({},"__esModule",{value:!0}),i);var N={};w(N,{ScorecardVisualisation:()=>p,default:()=>V});module.exports=C(N);var f=h(require("../../_charts/chart/buckets/Buckets")),c=h(require("../../../utils/datasetHelper")),b=h(require("./validate"));class p{constructor(){this.buckets=[];this.responseData=[];this.ragColours=["#cce2d8","#fff7bf","#f4cdc6"];this.withDefinition=e=>(this.definition=b.default.ScorecardSchema.parse(e),this.init(),this);this.withData=e=>(this.responseData=e,this.dataset=this.getDataset(this.definition,this.responseData),this.initBuckets(this.responseData,this.valueKey),this);this.init=()=>{this.id=this.definition.id,this.measures=this.definition.columns.measures,this.options=this.definition.options,this.titleColumn={display:this.definition.display,id:this.valueKey},this.initFromMeasures()};this.initFromMeasures=()=>{this.measures[0]!==void 0&&(this.valueKey=this.measures[0].id,this.unit=this.measures[0].unit?this.measures[0].unit:void 0)};this.initBuckets=(e,t)=>{(this.options?.buckets||this.options?.useRagColour)&&(this.bucketsHelper=new f.default(e,this.definition,t,!1,this.ragColours),this.buckets=this.bucketsHelper.getBuckets())};this.getDataset=(e,t)=>{const a=c.default.getLastestDataset(t),s=c.default.getDatasetRows(e,a),r=s[0]?.ts?.raw,o=c.default.filterRowsByDisplayColumns(e,s,!0),u=c.default.getEarliestDataset(t),n=c.default.getDatasetRows(e,u),l=n[0]?.ts?.raw;return{earliest:c.default.filterRowsByDisplayColumns(e,n,!0),earliestTs:l,latest:o,latestTs:r}};this.createScorecardData=({id:e,title:t,value:a,rag:s,valueFor:r,valueFrom:o,prevVal:u,groupTitle:n})=>({id:e,title:t,value:a,...s&&{rag:s},valueFor:r,trend:this.createTrend(r,o,a,u),...n&&{group:n}});this.createTrend=(e,t,a,s)=>{let r;if(t!==e){const o=s?Number(a)-Number(s):0;r={direction:Math.sign(o),value:Math.abs(o),from:t}}return r};this.setRagScore=(e,t,a,s)=>{let r;return!Number.isNaN(e)&&a?.length&&s&&(r=s.getBucketForValue(e,t)),r};this.build=()=>{const{latest:e,earliest:t,latestTs:a,earliestTs:s}=this.dataset;return e.map((o,u)=>{const{raw:n,rag:l}=o[this.valueKey],m=t[u][this.valueKey].raw,S=`${a}`,g=`${s}`,v=this.titleColumn?.display;return this.createScorecardData({id:this.id,title:v||"",value:n||"",rag:this.setRagScore(n,l,this.buckets,this.bucketsHelper),prevVal:m,valueFor:S,valueFrom:g})})[0]}}}var V=p;0&&(module.exports={ScorecardVisualisation});
|
|
2
2
|
//# sourceMappingURL=Scorecard.js.map
|