@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.20.2 → 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.
Files changed (134) hide show
  1. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
  2. package/dpr/components/_charts/chart/Chart.js +2 -0
  3. package/dpr/components/_charts/chart/Chart.js.map +7 -0
  4. package/dpr/components/_charts/chart/Chart.ts +89 -0
  5. package/dpr/components/_charts/chart/ChartColours.js +2 -0
  6. package/dpr/components/_charts/chart/ChartColours.js.map +7 -0
  7. package/dpr/components/_charts/chart/ChartColours.ts +36 -0
  8. package/dpr/components/_charts/chart/ChartTimeseries.js +2 -0
  9. package/dpr/components/_charts/chart/ChartTimeseries.js.map +7 -0
  10. package/dpr/components/_charts/chart/ChartTimeseries.ts +95 -0
  11. package/dpr/components/_charts/chart/bar/BarChart.js +2 -0
  12. package/dpr/components/_charts/chart/bar/BarChart.js.map +7 -0
  13. package/dpr/components/_charts/chart/bar/BarChart.ts +204 -0
  14. package/dpr/components/_charts/chart/bar/clientClass.mjs +0 -58
  15. package/dpr/components/_charts/chart/bar/types.js +2 -0
  16. package/dpr/components/_charts/chart/bar/types.js.map +7 -0
  17. package/dpr/components/_charts/chart/bar/types.ts +6 -0
  18. package/dpr/components/_charts/chart/bar/validate.js +2 -0
  19. package/dpr/components/_charts/chart/bar/validate.js.map +7 -0
  20. package/dpr/components/_charts/chart/bar/validate.ts +59 -0
  21. package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js +2 -0
  22. package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js.map +7 -0
  23. package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.ts +57 -0
  24. package/dpr/components/_charts/chart/bar-timeseries/types.js +2 -0
  25. package/dpr/components/_charts/chart/bar-timeseries/types.js.map +7 -0
  26. package/dpr/components/_charts/chart/bar-timeseries/types.ts +5 -0
  27. package/dpr/components/_charts/chart/bar-timeseries/validate.js +2 -0
  28. package/dpr/components/_charts/chart/bar-timeseries/validate.js.map +7 -0
  29. package/dpr/components/_charts/chart/bar-timeseries/validate.ts +30 -0
  30. package/dpr/components/_charts/chart/buckets/Buckets.js +2 -0
  31. package/dpr/components/_charts/chart/buckets/Buckets.js.map +7 -0
  32. package/dpr/components/_charts/chart/{Buckets.ts → buckets/Buckets.ts} +18 -14
  33. package/dpr/components/_charts/chart/buckets/types.js +2 -0
  34. package/dpr/components/_charts/chart/buckets/types.js.map +7 -0
  35. package/dpr/components/_charts/chart/buckets/types.ts +4 -0
  36. package/dpr/components/_charts/chart/buckets/validate.js +2 -0
  37. package/dpr/components/_charts/chart/buckets/validate.js.map +7 -0
  38. package/dpr/components/_charts/chart/buckets/validate.ts +15 -0
  39. package/dpr/components/_charts/chart/chart-config.js +2 -0
  40. package/dpr/components/_charts/chart/chart-config.js.map +7 -0
  41. package/dpr/components/_charts/chart/chart-config.ts +108 -0
  42. package/dpr/components/_charts/chart/clientClass.mjs +28 -106
  43. package/dpr/components/_charts/chart/doughnut/DoughnutChart.js +2 -0
  44. package/dpr/components/_charts/chart/doughnut/DoughnutChart.js.map +7 -0
  45. package/dpr/components/_charts/chart/doughnut/DoughnutChart.ts +77 -0
  46. package/dpr/components/_charts/chart/doughnut/clientClass.mjs +0 -45
  47. package/dpr/components/_charts/chart/doughnut/types.js +2 -0
  48. package/dpr/components/_charts/chart/doughnut/types.js.map +7 -0
  49. package/dpr/components/_charts/chart/doughnut/types.ts +5 -0
  50. package/dpr/components/_charts/chart/doughnut/validate.js +2 -0
  51. package/dpr/components/_charts/chart/doughnut/validate.js.map +7 -0
  52. package/dpr/components/_charts/chart/doughnut/validate.ts +30 -0
  53. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
  54. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +3 -3
  55. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +122 -44
  56. package/dpr/components/_charts/chart/heatmap/clientClass.mjs +7 -89
  57. package/dpr/components/_charts/chart/heatmap/types.js +1 -1
  58. package/dpr/components/_charts/chart/heatmap/types.js.map +1 -1
  59. package/dpr/components/_charts/chart/heatmap/types.ts +5 -0
  60. package/dpr/components/_charts/chart/heatmap/validate.js +2 -0
  61. package/dpr/components/_charts/chart/heatmap/validate.js.map +7 -0
  62. package/dpr/components/_charts/chart/heatmap/validate.ts +25 -0
  63. package/dpr/components/_charts/chart/line/LineChart.js +2 -0
  64. package/dpr/components/_charts/chart/line/LineChart.js.map +7 -0
  65. package/dpr/components/_charts/chart/line/LineChart.ts +89 -0
  66. package/dpr/components/_charts/chart/line/clientClass.mjs +5 -36
  67. package/dpr/components/_charts/chart/line/types.js +2 -0
  68. package/dpr/components/_charts/chart/line/types.js.map +7 -0
  69. package/dpr/components/_charts/chart/line/types.ts +5 -0
  70. package/dpr/components/_charts/chart/line/validate.js +2 -0
  71. package/dpr/components/_charts/chart/line/validate.js.map +7 -0
  72. package/dpr/components/_charts/chart/line/validate.ts +30 -0
  73. package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js +2 -0
  74. package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js.map +7 -0
  75. package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.ts +57 -0
  76. package/dpr/components/_charts/chart/line-timeseries/types.js +2 -0
  77. package/dpr/components/_charts/chart/line-timeseries/types.js.map +7 -0
  78. package/dpr/components/_charts/chart/line-timeseries/types.ts +5 -0
  79. package/dpr/components/_charts/chart/line-timeseries/validate.js +2 -0
  80. package/dpr/components/_charts/chart/line-timeseries/validate.js.map +7 -0
  81. package/dpr/components/_charts/chart/line-timeseries/validate.ts +30 -0
  82. package/dpr/components/_charts/chart/view.njk +8 -1
  83. package/dpr/components/_charts/chart-tabs/view.njk +15 -14
  84. package/dpr/components/_charts/utils.js +1 -1
  85. package/dpr/components/_charts/utils.js.map +3 -3
  86. package/dpr/components/_charts/utils.test.ts +9 -3
  87. package/dpr/components/_charts/utils.ts +59 -193
  88. package/dpr/components/_dashboards/dashboard-list/types.js +2 -0
  89. package/dpr/components/_dashboards/dashboard-list/types.js.map +7 -0
  90. package/dpr/components/_dashboards/dashboard-list/types.ts +4 -0
  91. package/dpr/components/_dashboards/dashboard-list/validate.js +2 -0
  92. package/dpr/components/_dashboards/dashboard-list/validate.js.map +7 -0
  93. package/dpr/components/_dashboards/dashboard-list/validate.ts +28 -0
  94. package/dpr/components/_dashboards/dashboard-visualisation/Validate.js +2 -0
  95. package/dpr/components/_dashboards/dashboard-visualisation/Validate.js.map +7 -0
  96. package/dpr/components/_dashboards/dashboard-visualisation/Validate.ts +71 -0
  97. package/dpr/components/_dashboards/dashboard-visualisation/types.js +1 -1
  98. package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +2 -2
  99. package/dpr/components/_dashboards/dashboard-visualisation/types.ts +32 -2
  100. package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
  101. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +3 -3
  102. package/dpr/components/_dashboards/scorecard/Scorecard.ts +82 -213
  103. package/dpr/components/_dashboards/scorecard/types.js +1 -1
  104. package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
  105. package/dpr/components/_dashboards/scorecard/types.ts +11 -1
  106. package/dpr/components/_dashboards/scorecard/validate.js +2 -0
  107. package/dpr/components/_dashboards/scorecard/validate.js.map +7 -0
  108. package/dpr/components/_dashboards/scorecard/validate.ts +36 -0
  109. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js +2 -0
  110. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js.map +7 -0
  111. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.ts +228 -0
  112. package/dpr/components/_dashboards/scorecard-group/types.js +2 -0
  113. package/dpr/components/_dashboards/scorecard-group/types.js.map +7 -0
  114. package/dpr/components/_dashboards/scorecard-group/types.ts +5 -0
  115. package/dpr/components/_dashboards/scorecard-group/validate.js +2 -0
  116. package/dpr/components/_dashboards/scorecard-group/validate.js.map +7 -0
  117. package/dpr/components/_dashboards/scorecard-group/validate.ts +37 -0
  118. package/dpr/components/_filters/types.d.js.map +1 -1
  119. package/dpr/components/_filters/types.d.ts +6 -4
  120. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  121. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  122. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +22 -10
  123. package/dpr/routes/journeys/view-report/controller.js +1 -1
  124. package/dpr/routes/journeys/view-report/controller.js.map +3 -3
  125. package/dpr/routes/journeys/view-report/controller.ts +3 -1
  126. package/dpr/utils/ErrorHandler.js +1 -1
  127. package/dpr/utils/ErrorHandler.js.map +3 -3
  128. package/dpr/utils/ErrorHandler.ts +16 -0
  129. package/package.json +1 -1
  130. package/dpr/components/_charts/chart/Buckets.js +0 -2
  131. package/dpr/components/_charts/chart/Buckets.js.map +0 -7
  132. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +0 -2
  133. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +0 -7
  134. 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
- DashboardVisualisationDataSet,
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
- chart = createSnapshotChart(chartDefinition, snapshotData)
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
- ): DashboardVisualisatonCardData => {
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
- Object.keys(query).forEach((key) => {
73
- if (key.includes('granularity')) {
74
- granularity = <Granularity>query[key]
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
- chart = new HeatmapChart(timeseriesData, granularity, chartDefinition).build()
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,4 @@
1
+ import z from 'zod'
2
+ import ListSchema from './validate'
3
+
4
+ export type ListDefinitionType = z.infer<typeof ListSchema.ListSchema>
@@ -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 d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var c=(e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})},b=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of l(t))!u.call(e,i)&&i!==r&&o(e,i,{get:()=>t[i],enumerable:!(s=d(t,i))||s.enumerable});return e};var m=e=>b(o({},"__esModule",{value:!0}),e);var D={};c(D,{DashboardVisualisationType:()=>n});module.exports=m(D);var n=(a=>(a.LIST="list",a.DONUT="doughnut",a.BAR="bar",a.LINE="line",a.MATRIX="matrix",a.MATRIX_TIMESERIES="matrix-timeseries",a.BAR_TIMESERIES="bar-timeseries",a.LINE_TIMESERIES="line-timeseries",a.SCORECARD="scorecard",a.SCORECARD_GROUP="scorecard-group",a))(n||{});0&&(module.exports={DashboardVisualisationType});
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: components['schemas']['DashboardVisualisationDefinition']['type']\n unit?: components['schemas']['DashboardVisualisationColumnDefinition']['unit']\n data: DashboardVisualisationDataValues\n timeseries?: boolean\n}\n\nexport interface DashboardVisualisationDataValues {\n labels?: string[]\n datasets: DashboardVisualisationDataSet[]\n axis?: 'x' | 'y'\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"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAuEO,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",
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: components['schemas']['DashboardVisualisationDefinition']['type']
35
- unit?: components['schemas']['DashboardVisualisationColumnDefinition']['unit']
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 V=Object.create;var g=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var T=(n,u)=>{for(var e in u)g(n,e,{get:u[e],enumerable:!0})},b=(n,u,e,t)=>{if(u&&typeof u=="object"||typeof u=="function")for(let s of B(u))!F.call(n,s)&&s!==e&&g(n,s,{get:()=>u[s],enumerable:!(t=k(u,s))||t.enumerable});return n};var f=(n,u,e)=>(e=n!=null?V($(n)):{},b(u||!n||!n.__esModule?g(e,"default",{value:n,enumerable:!0}):e,n)),N=n=>b(g({},"__esModule",{value:!0}),n);var x={};T(x,{ScorecardVisualisation:()=>D,default:()=>I});module.exports=N(x);var K=f(require("../dashboard-visualisation/DashboardVisualisation")),l=f(require("../../../utils/datasetHelper")),v=f(require("../../_charts/chart/Buckets"));class D extends K.default{constructor(e,t,s=!1){super(e,t);this.buckets=[];this.valueKey="";this.titleKey="";this.ragColours=["#cce2d8","#fff7bf","#f4cdc6"];this.initBuckets=(e,t)=>{(this.definition.options?.buckets||this.definition.options?.useRagColour)&&(this.bucketsHelper=new v.default(e,this.definition,t,!1,this.ragColours),this.buckets=new v.default(e,this.definition,t,!1,this.ragColours).getBuckets())};this.initGroupVars=()=>{this.groupKey=l.default.getGroupKey(this.dataset.latest,this.keys),this.groupKeyId=this.groupKey?.id,this.groupKeyDisplay=this.groupKey?.display,this.valueColumn=this.measures.find(e=>e.displayValue),this.valueColumn&&(this.valueKey=this.valueColumn?.id,this.titleColumn=this.measures.find(e=>e.display||e.display===""),this.titleKey=this.titleColumn?.id||"")};this.getDataset=(e,t)=>{const s=l.default.getLastestDataset(t),r=l.default.getDatasetRows(e,s),i=r[0]?.ts?.raw,o=l.default.filterRowsByDisplayColumns(e,r,!0),a=l.default.getEarliestDataset(t),c=l.default.getDatasetRows(e,a),d=c[0]?.ts?.raw;return{earliest:l.default.filterRowsByDisplayColumns(e,c,!0),earliestTs:d,latest:o,latestTs:i}};this.setRagScore=(e,t)=>this.bucketsHelper?.getBucketForValue(e,t);this.createScorecardData=({title:e,value:t,rag:s,valueFor:r,valueFrom:i,prevVal:o,groupTitle:a})=>({id:this.definition.id,title:e,value:t,...!Number.isNaN(t)&&this.buckets.length&&this.bucketsHelper&&{rag:this.setRagScore(t,s)},valueFor:r,trend:this.createTrend(r,i,t,o),...a&&{group:a}});this.createTrend=(e,t,s,r)=>{let i;if(t!==e){const o=r?Number(s)-Number(r):0;i={direction:Math.sign(o),value:Math.abs(o),from:t}}return i};this.validateDefinition=()=>{const{id:e,type:t}=this.definition,s=[];if(this.group||(this.measures.length!==1?s.push(`Measures should only have 1 column defined. Found ${this.measures.length}`):this.titleColumn?this.valueKey||s.push('Missing ID in title measure. Expected measure to include "id: string" field'):s.push('No title column defined. Expected measure to include "display: string" field')),s.length){const r=`Validation: Visualisaton definition: ID: ${e}, type: ${t}, errors: ${s.join(",")}`;throw new Error(r)}};this.createScorecardGroupFromColumns=()=>{const{latest:e,earliest:t,latestTs:s,earliestTs:r}=this.dataset;return e.map((i,o)=>({title:this.createGroupTitle(i),scorecards:Object.keys(i).filter(a=>a!==this.groupKeyId).map(a=>{const d=this.measures.find(R=>R.id===a)?.display||a,p=i[a],{raw:h,rag:m}=p,y=Number(h),S=m!==void 0?Number(m):void 0;this.initBuckets([i],a);const C=`${s}`,w=`${r}`,G=t[o][a]?.raw;return this.createScorecardData({title:d,value:y,rag:S,prevVal:G,valueFor:C,valueFrom:w})})}))};this.createScorecardGroupFromList=()=>{const{latest:e,earliest:t}=this.dataset;return[{title:"",scorecards:e.map((s,r)=>{const i=this.getScorecardValues(s),o=t[r][this.valueKey].raw;return this.createScorecardData({...i,prevVal:o})})}]};this.createScorecardGroupFromListWithGroups=()=>{const{latest:e,earliest:t}=this.dataset;let s=l.default.groupRowsByKey(t,this.groupKeyId),r=l.default.groupRowsByKey(e,this.groupKeyId);return this.groupKeyId===this.titleKey&&(r=[r.flat()],s=[s.flat()]),r.map((o,a)=>({title:this.groupKeyDisplay?`By ${this.groupKeyDisplay}`:"",scorecards:o.map((c,d)=>{const p=this.getScorecardValues(c),m=s[a][d][this.valueKey]?.raw;return this.createScorecardData({...p,prevVal:m})})}))};this.getScorecardValues=e=>{const{latestTs:t,earliestTs:s}=this.dataset,r=`${this.titleColumn?.display} ${e[this.titleKey].raw}`,i=e[this.valueKey],{raw:o,rag:a}=i,c=Number(o),d=a!==void 0?Number(a):void 0;this.initBuckets([e],this.valueKey);const p=`${t}`,h=`${s}`;return{title:r,value:c,rag:d,valueFor:p,valueFrom:h}};this.buildScorecard=()=>{const{latest:e,earliest:t,latestTs:s,earliestTs:r}=this.dataset;return e.map((o,a)=>{const{raw:c,rag:d}=o[this.valueKey],p=t[a][this.valueKey].raw,h=`${s}`,m=`${r}`,y=this.titleColumn?.display;return this.createScorecardData({title:y||"",value:c||"",rag:d,prevVal:p,valueFor:h,valueFrom:m})})[0]};this.createGroupTitle=e=>{const t=this.groupKeyId?`${e[this.groupKeyId]?.raw}`:"";return this.groupKeyDisplay&&this.groupKeyDisplay.length?`${this.groupKeyDisplay}: ${t}`:t};this.buildGroup=()=>{let e;return this.valueColumn?this.groupKey?e=this.createScorecardGroupFromListWithGroups():e=this.createScorecardGroupFromList():e=this.createScorecardGroupFromColumns(),e};this.build=()=>(this.validateDefinition(),this.group?this.buildGroup():this.buildScorecard());this.group=s,this.dataset=this.getDataset(t,e),s?this.initGroupVars():(this.valueKey=this.measures[0].id,this.titleColumn={display:t.display||"",id:this.valueKey},this.initBuckets(e,this.valueKey))}}var I=D;0&&(module.exports={ScorecardVisualisation});
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