@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.16.1 → 4.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dpr/components/_catalogue/catalogue/utils.js +1 -1
- package/dpr/components/_catalogue/catalogue/utils.js.map +3 -3
- package/dpr/components/_catalogue/catalogue/utils.test.ts +15 -1
- package/dpr/components/_catalogue/catalogue/utils.ts +22 -4
- package/dpr/components/_catalogue/catalogue/view.njk +2 -1
- package/dpr/components/_catalogue/catalogue-filters/view.njk +2 -2
- package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
- package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
- package/dpr/components/_catalogue/catalogue-list/utils.ts +4 -5
- package/dpr/components/_catalogue/catalogue-search/clientClass.mjs +14 -0
- package/dpr/components/_catalogue/catalogue-search/view.njk +24 -1
- package/dpr/components/_charts/chart/Buckets.js +1 -1
- package/dpr/components/_charts/chart/Buckets.js.map +3 -3
- package/dpr/components/_charts/chart/Buckets.ts +44 -36
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +2 -2
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +22 -14
- package/dpr/components/_charts/chart/heatmap/types.js +2 -0
- package/dpr/components/_charts/chart/heatmap/types.js.map +7 -0
- package/dpr/components/_charts/chart/heatmap/types.ts +6 -0
- package/dpr/components/_charts/utils.js +1 -1
- package/dpr/components/_charts/utils.js.map +3 -3
- package/dpr/components/_charts/utils.test.ts +10 -7
- package/dpr/components/_charts/utils.ts +57 -50
- package/dpr/components/_dashboards/dashboard/view.njk +1 -1
- package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
- package/dpr/components/_dashboards/dashboard-list/utils.js.map +2 -2
- package/dpr/components/_dashboards/dashboard-list/utils.test.ts +3 -3
- package/dpr/components/_dashboards/dashboard-list/utils.ts +16 -12
- package/dpr/components/_dashboards/dashboard-section/view.njk +1 -1
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +2 -0
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +40 -0
- package/dpr/components/_dashboards/dashboard-visualisation/types.js +2 -0
- package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-visualisation/types.ts +102 -0
- package/dpr/components/_dashboards/dashboard-visualisation/view.njk +1 -1
- package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
- package/dpr/components/_dashboards/scorecard/Scorecard.js.map +2 -2
- package/dpr/components/_dashboards/scorecard/Scorecard.ts +37 -29
- package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
- package/dpr/components/_dashboards/scorecard/types.ts +1 -0
- package/dpr/components/_dashboards/scorecard/utils.js +1 -1
- package/dpr/components/_dashboards/scorecard/utils.js.map +2 -2
- package/dpr/components/_dashboards/scorecard/utils.test.ts +13 -4
- package/dpr/components/_dashboards/scorecard/utils.ts +6 -5
- package/dpr/components/_dashboards/scorecard/view.njk +6 -5
- package/dpr/components/_dashboards/scorecard-group/view.njk +4 -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/_reports/report-heading/view.njk +1 -1
- package/dpr/data/dashboardClient.js +1 -1
- package/dpr/data/dashboardClient.js.map +2 -2
- package/dpr/data/dashboardClient.ts +8 -7
- package/dpr/data/dprReportingClient.js +1 -1
- package/dpr/data/dprReportingClient.js.map +3 -3
- package/dpr/data/dprReportingClient.ts +2 -0
- package/dpr/data/reportingClient.js +1 -1
- package/dpr/data/reportingClient.js.map +1 -1
- package/dpr/data/reportingClient.ts +1 -1
- package/dpr/middleware/reportAuthoriser.js +1 -1
- package/dpr/middleware/reportAuthoriser.js.map +3 -3
- package/dpr/middleware/reportAuthoriser.ts +9 -20
- package/dpr/middleware/setUpDprResources.js +1 -1
- package/dpr/middleware/setUpDprResources.js.map +3 -3
- package/dpr/middleware/setUpDprResources.test.ts +7 -0
- package/dpr/middleware/setUpDprResources.ts +17 -2
- package/dpr/routes/journeys/download-report/controller.js +1 -1
- package/dpr/routes/journeys/download-report/controller.js.map +3 -3
- package/dpr/routes/journeys/download-report/controller.ts +4 -1
- package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js +1 -1
- package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.ts +1 -0
- package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js +1 -1
- package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/download-report/request-download/form/tests.cy.ts +1 -0
- package/dpr/routes/journeys/download-report/tests.cy.js +1 -1
- package/dpr/routes/journeys/download-report/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/download-report/tests.cy.ts +2 -7
- package/dpr/routes/journeys/download-report/utils.js +1 -1
- package/dpr/routes/journeys/download-report/utils.js.map +3 -3
- package/dpr/routes/journeys/download-report/utils.ts +10 -7
- package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js +1 -1
- package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.ts +1 -0
- package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js +1 -1
- package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js.map +3 -3
- package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.ts +5 -12
- package/dpr/routes/journeys/my-reports/bookmarks/utils.js +1 -1
- package/dpr/routes/journeys/my-reports/bookmarks/utils.js.map +3 -3
- package/dpr/routes/journeys/my-reports/bookmarks/utils.ts +11 -5
- package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js +1 -1
- package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js.map +3 -3
- package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.ts +4 -6
- package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.ts +1 -0
- package/dpr/routes/journeys/product-collection/routes.js +2 -0
- package/dpr/routes/journeys/product-collection/routes.js.map +7 -0
- package/dpr/routes/journeys/product-collection/routes.ts +28 -0
- package/dpr/routes/journeys/product-collection/selected/controller.js +2 -0
- package/dpr/routes/journeys/product-collection/selected/controller.js.map +7 -0
- package/dpr/routes/journeys/product-collection/selected/controller.ts +29 -0
- package/dpr/routes/journeys/product-collection/selected/routes.js +2 -0
- package/dpr/routes/journeys/product-collection/selected/routes.js.map +7 -0
- package/dpr/routes/journeys/product-collection/selected/routes.ts +15 -0
- package/dpr/routes/journeys/product-collection/selected/tests.cy.js +2 -0
- package/dpr/routes/journeys/product-collection/selected/tests.cy.js.map +7 -0
- package/dpr/routes/journeys/product-collection/selected/tests.cy.ts +54 -0
- package/dpr/routes/journeys/product-collection/selected/validation.js +2 -0
- package/dpr/routes/journeys/product-collection/selected/validation.js.map +7 -0
- package/dpr/routes/journeys/product-collection/selected/validation.ts +5 -0
- package/dpr/routes/journeys/request-missing-report/form/tests.cy.js +1 -1
- package/dpr/routes/journeys/request-missing-report/form/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/request-missing-report/form/tests.cy.ts +1 -0
- package/dpr/routes/journeys/request-missing-report/tests.cy.js +1 -1
- package/dpr/routes/journeys/request-missing-report/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/request-missing-report/tests.cy.ts +3 -4
- package/dpr/routes/journeys/request-report/filters/tests.cy.js +1 -1
- package/dpr/routes/journeys/request-report/filters/tests.cy.js.map +3 -3
- package/dpr/routes/journeys/request-report/filters/tests.cy.ts +3 -6
- package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
- package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
- package/dpr/routes/journeys/request-report/filters/utils.ts +2 -3
- package/dpr/routes/journeys/request-report/status/tests.cy.js +1 -1
- package/dpr/routes/journeys/request-report/status/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/request-report/status/tests.cy.ts +2 -6
- package/dpr/routes/journeys/request-report/tests.cy.js +1 -1
- package/dpr/routes/journeys/request-report/tests.cy.js.map +3 -3
- package/dpr/routes/journeys/request-report/tests.cy.ts +5 -32
- package/dpr/routes/journeys/routes.js +1 -1
- package/dpr/routes/journeys/routes.js.map +2 -2
- package/dpr/routes/journeys/routes.ts +2 -0
- package/dpr/routes/journeys/view-report/async/controller.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/controller.ts +2 -2
- package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js +1 -1
- package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.ts +2 -9
- 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 +100 -95
- package/dpr/routes/journeys/view-report/async/report/controller.js +1 -1
- package/dpr/routes/journeys/view-report/async/report/controller.js.map +3 -3
- package/dpr/routes/journeys/view-report/async/report/controller.ts +4 -6
- package/dpr/routes/journeys/view-report/async/report/tests.cy.js +1 -1
- package/dpr/routes/journeys/view-report/async/report/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/report/tests.cy.ts +8 -17
- package/dpr/routes/journeys/view-report/async/report/types.js +2 -0
- package/dpr/routes/journeys/view-report/async/report/types.js.map +7 -0
- package/dpr/routes/journeys/view-report/async/report/types.ts +31 -0
- package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/report/utils.js.map +3 -3
- package/dpr/routes/journeys/view-report/async/report/utils.ts +173 -136
- package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
- package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +3 -3
- package/dpr/routes/journeys/view-report/sync/tests.cy.ts +3 -4
- package/dpr/services/dashboardService.js +1 -1
- package/dpr/services/dashboardService.js.map +2 -2
- package/dpr/services/dashboardService.ts +7 -5
- package/dpr/services/productCollection/productCollectionService.js +2 -0
- package/dpr/services/productCollection/productCollectionService.js.map +7 -0
- package/dpr/services/productCollection/productCollectionService.ts +25 -0
- package/dpr/services/productCollection/productCollectionStoreService.js +2 -0
- package/dpr/services/productCollection/productCollectionStoreService.js.map +7 -0
- package/dpr/services/productCollection/productCollectionStoreService.ts +26 -0
- package/dpr/services/reportingService.js +1 -1
- package/dpr/services/reportingService.js.map +1 -1
- package/dpr/services/reportingService.ts +1 -1
- package/dpr/types/AsyncReportUtils.js.map +1 -1
- package/dpr/types/AsyncReportUtils.ts +3 -4
- package/dpr/types/Charts.js +1 -1
- package/dpr/types/Charts.js.map +3 -3
- package/dpr/types/Charts.ts +0 -82
- package/dpr/types/Metrics.js +1 -1
- package/dpr/types/Metrics.js.map +1 -1
- package/dpr/types/Metrics.ts +7 -0
- package/dpr/types/ReportQuery.js +1 -1
- package/dpr/types/ReportQuery.js.map +3 -3
- package/dpr/types/ReportQuery.ts +24 -15
- package/dpr/types/ReportStore.js +1 -1
- package/dpr/types/ReportStore.js.map +1 -1
- package/dpr/types/ReportStore.ts +1 -0
- package/dpr/types/Services.d.js +1 -1
- package/dpr/types/Services.d.js.map +1 -1
- package/dpr/types/Services.d.ts +15 -0
- package/dpr/types/api.d.js +1 -1
- package/dpr/types/api.d.js.map +1 -1
- package/dpr/types/api.d.ts +197 -6
- package/dpr/utils/Personalisation/personalisationUtils.js +1 -1
- package/dpr/utils/Personalisation/personalisationUtils.js.map +3 -3
- package/dpr/utils/Personalisation/personalisationUtils.ts +15 -6
- package/dpr/utils/ReportStoreServiceUtils.js +1 -1
- package/dpr/utils/ReportStoreServiceUtils.js.map +3 -3
- package/dpr/utils/ReportStoreServiceUtils.ts +7 -0
- package/dpr/utils/UserStoreItemBuilder.js +1 -1
- package/dpr/utils/UserStoreItemBuilder.js.map +1 -1
- package/dpr/utils/UserStoreItemBuilder.ts +2 -2
- package/dpr/utils/datasetHelper.js +1 -1
- package/dpr/utils/datasetHelper.js.map +3 -3
- package/dpr/utils/datasetHelper.test.ts +11 -11
- package/dpr/utils/datasetHelper.ts +23 -8
- package/dpr/utils/logger.js +1 -1
- package/dpr/utils/logger.js.map +3 -3
- package/dpr/utils/logger.ts +6 -1
- package/package.json +2 -1
- package/dpr/components/_charts/chart/DashboardVisualisation.js +0 -2
- package/dpr/components/_charts/chart/DashboardVisualisation.js.map +0 -7
- package/dpr/components/_charts/chart/DashboardVisualisation.ts +0 -43
- package/dpr/components/_dashboards/dashboard/types.js +0 -2
- package/dpr/components/_dashboards/dashboard/types.js.map +0 -7
- package/dpr/components/_dashboards/dashboard/types.ts +0 -120
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/dpr/components/_charts/chart/heatmap/HeatmapChart.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport dayjs from 'dayjs'\nimport { Granularity } from '../../../_inputs/granular-date-range/types'\nimport { DashboardDataResponse } from '../../../../types/Metrics'\nimport {\n
|
|
5
|
-
"mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAkB,oBAGlBC,EAIO,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport dayjs from 'dayjs'\nimport { Granularity } from '../../../_inputs/granular-date-range/types'\nimport { DashboardDataResponse } from '../../../../types/Metrics'\nimport {\n DashboardVisualisationType,\n DashboardVisualisationBucket,\n DashboardVisualisationData,\n} from '../../../_dashboards/dashboard-visualisation/types'\nimport { MatrixChartData } from './types'\nimport DatasetHelper from '../../../../utils/datasetHelper'\nimport DashboardVisualisationClass from '../../../_dashboards/dashboard-visualisation/DashboardVisualisation'\nimport Buckets from '../Buckets'\nimport { components } from '../../../../types/api'\n\nclass HeatmapChart extends DashboardVisualisationClass {\n private granularity: Granularity\n\n private data: MatrixChartData[] = []\n\n private dayDateFormat = 'DD/MM/YYYY'\n\n private valueKey = ''\n\n private label = ''\n\n private buckets: DashboardVisualisationBucket[] = []\n\n private bucketsHelper: Buckets\n\n private isTimeseriesChart: boolean\n\n constructor(\n responseData: DashboardDataResponse[],\n granularity: Granularity,\n definition: components['schemas']['DashboardVisualisationDefinition'],\n ) {\n super(responseData, definition)\n\n this.granularity = granularity\n this.isTimeseriesChart = <DashboardVisualisationType>this.type === DashboardVisualisationType.LINE_TIMESERIES\n this.setLabel()\n this.initUnit()\n this.bucketsHelper = new Buckets(responseData, this.definition, this.valueKey, true)\n this.buckets = this.bucketsHelper.getBuckets()\n }\n\n initUnit = () => {\n // todo\n this.unit = this.columns.measures[0].unit ? this.columns.measures[0].unit : undefined\n }\n\n private setLabel = () => {\n const { id, display } = this.columns.measures[1]\n this.valueKey = id\n this.label = display || ''\n }\n\n private validateDefinition = () => {\n const { id, columns, type } = this.definition\n const errors = []\n\n // Validate measures\n if (columns.measures.length !== 2) {\n errors.push(`Measures should only have 2 columns defined. Only found ${columns.measures.length}`)\n } else if (<DashboardVisualisationType>type === DashboardVisualisationType.MATRIX_TIMESERIES) {\n if (columns.measures[0].id !== 'ts') {\n errors.push(`measure at index 0 has incorrect ID. Expected ID to be \"ts\". Found \"${columns.measures[0].id}\"`)\n }\n }\n\n // Throw the error\n if (errors.length) {\n const message = `Validation: Visualisaton definition: ID: ${id}, type: ${type}, errors: ${errors.join(',')}`\n throw new Error(message)\n }\n }\n\n private initTimeseriesData = () => {\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(this.responseData)\n\n this.data = timeBlockData.map((tsData) => {\n const { raw, rag } = tsData[0][this.valueKey]\n const tsRaw = tsData[0].ts.raw\n\n const v: MatrixChartData['v'] = Number(raw)\n const r: MatrixChartData['r'] = rag !== undefined ? Number(tsData[0][this.valueKey].rag) : undefined\n let x: MatrixChartData['x'] = 0\n let y: MatrixChartData['y'] = 0\n\n switch (this.granularity) {\n case 'hourly':\n break\n case 'weekly':\n x = dayjs(tsRaw, this.dayDateFormat).format('ddd')\n y = dayjs(tsRaw, this.dayDateFormat).week()\n break\n case 'daily':\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n case 'monthly':\n {\n const ts = (<string>tsRaw).split(' ')\n x = ts[1]\n y = ts[0]\n }\n break\n case 'annually':\n x = 'year'\n y = <string>tsRaw\n break\n default:\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n }\n return { y, x, v, r }\n })\n }\n\n private bucketData = () => {\n this.data = this.data.map((d) => {\n const { v, r } = d\n const bucketData = this.bucketsHelper.getBucketForValue(v, r)\n return { ...d, c: bucketData.colour }\n })\n }\n\n build = (): DashboardVisualisationData => {\n this.validateDefinition()\n this.initTimeseriesData()\n this.bucketData()\n\n return {\n type: this.type,\n unit: this.unit,\n timeseries: true,\n data: {\n datasets: [\n {\n label: this.label,\n data: this.data,\n },\n ],\n },\n }\n }\n}\n\nexport { HeatmapChart }\nexport default HeatmapChart\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["HeatmapChart_exports", "__export", "HeatmapChart", "HeatmapChart_default", "__toCommonJS", "import_dayjs", "import_types", "import_datasetHelper", "import_DashboardVisualisation", "import_Buckets", "DashboardVisualisationClass", "responseData", "granularity", "definition", "id", "display", "columns", "type", "errors", "message", "timeBlockData", "DatasetHelper", "tsData", "raw", "rag", "tsRaw", "v", "r", "x", "y", "dayjs", "ts", "d", "bucketData", "Buckets"]
|
|
7
7
|
}
|
|
@@ -3,14 +3,15 @@ import dayjs from 'dayjs'
|
|
|
3
3
|
import { Granularity } from '../../../_inputs/granular-date-range/types'
|
|
4
4
|
import { DashboardDataResponse } from '../../../../types/Metrics'
|
|
5
5
|
import {
|
|
6
|
-
DashboardVisualisation,
|
|
7
6
|
DashboardVisualisationType,
|
|
8
7
|
DashboardVisualisationBucket,
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
DashboardVisualisationData,
|
|
9
|
+
} from '../../../_dashboards/dashboard-visualisation/types'
|
|
10
|
+
import { MatrixChartData } from './types'
|
|
11
11
|
import DatasetHelper from '../../../../utils/datasetHelper'
|
|
12
|
-
import DashboardVisualisationClass from '
|
|
12
|
+
import DashboardVisualisationClass from '../../../_dashboards/dashboard-visualisation/DashboardVisualisation'
|
|
13
13
|
import Buckets from '../Buckets'
|
|
14
|
+
import { components } from '../../../../types/api'
|
|
14
15
|
|
|
15
16
|
class HeatmapChart extends DashboardVisualisationClass {
|
|
16
17
|
private granularity: Granularity
|
|
@@ -19,18 +20,25 @@ class HeatmapChart extends DashboardVisualisationClass {
|
|
|
19
20
|
|
|
20
21
|
private dayDateFormat = 'DD/MM/YYYY'
|
|
21
22
|
|
|
22
|
-
private valueKey
|
|
23
|
+
private valueKey = ''
|
|
23
24
|
|
|
24
|
-
private label
|
|
25
|
+
private label = ''
|
|
25
26
|
|
|
26
27
|
private buckets: DashboardVisualisationBucket[] = []
|
|
27
28
|
|
|
28
29
|
private bucketsHelper: Buckets
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
private isTimeseriesChart: boolean
|
|
32
|
+
|
|
33
|
+
constructor(
|
|
34
|
+
responseData: DashboardDataResponse[],
|
|
35
|
+
granularity: Granularity,
|
|
36
|
+
definition: components['schemas']['DashboardVisualisationDefinition'],
|
|
37
|
+
) {
|
|
31
38
|
super(responseData, definition)
|
|
32
39
|
|
|
33
40
|
this.granularity = granularity
|
|
41
|
+
this.isTimeseriesChart = <DashboardVisualisationType>this.type === DashboardVisualisationType.LINE_TIMESERIES
|
|
34
42
|
this.setLabel()
|
|
35
43
|
this.initUnit()
|
|
36
44
|
this.bucketsHelper = new Buckets(responseData, this.definition, this.valueKey, true)
|
|
@@ -45,7 +53,7 @@ class HeatmapChart extends DashboardVisualisationClass {
|
|
|
45
53
|
private setLabel = () => {
|
|
46
54
|
const { id, display } = this.columns.measures[1]
|
|
47
55
|
this.valueKey = id
|
|
48
|
-
this.label = display
|
|
56
|
+
this.label = display || ''
|
|
49
57
|
}
|
|
50
58
|
|
|
51
59
|
private validateDefinition = () => {
|
|
@@ -55,7 +63,7 @@ class HeatmapChart extends DashboardVisualisationClass {
|
|
|
55
63
|
// Validate measures
|
|
56
64
|
if (columns.measures.length !== 2) {
|
|
57
65
|
errors.push(`Measures should only have 2 columns defined. Only found ${columns.measures.length}`)
|
|
58
|
-
} else if (type === DashboardVisualisationType.MATRIX_TIMESERIES) {
|
|
66
|
+
} else if (<DashboardVisualisationType>type === DashboardVisualisationType.MATRIX_TIMESERIES) {
|
|
59
67
|
if (columns.measures[0].id !== 'ts') {
|
|
60
68
|
errors.push(`measure at index 0 has incorrect ID. Expected ID to be "ts". Found "${columns.measures[0].id}"`)
|
|
61
69
|
}
|
|
@@ -75,10 +83,10 @@ class HeatmapChart extends DashboardVisualisationClass {
|
|
|
75
83
|
const { raw, rag } = tsData[0][this.valueKey]
|
|
76
84
|
const tsRaw = tsData[0].ts.raw
|
|
77
85
|
|
|
78
|
-
const v = Number(raw)
|
|
79
|
-
const r = rag !== undefined ? Number(tsData[0][this.valueKey].rag) : undefined
|
|
80
|
-
let x
|
|
81
|
-
let y
|
|
86
|
+
const v: MatrixChartData['v'] = Number(raw)
|
|
87
|
+
const r: MatrixChartData['r'] = rag !== undefined ? Number(tsData[0][this.valueKey].rag) : undefined
|
|
88
|
+
let x: MatrixChartData['x'] = 0
|
|
89
|
+
let y: MatrixChartData['y'] = 0
|
|
82
90
|
|
|
83
91
|
switch (this.granularity) {
|
|
84
92
|
case 'hourly':
|
|
@@ -119,7 +127,7 @@ class HeatmapChart extends DashboardVisualisationClass {
|
|
|
119
127
|
})
|
|
120
128
|
}
|
|
121
129
|
|
|
122
|
-
build = ():
|
|
130
|
+
build = (): DashboardVisualisationData => {
|
|
123
131
|
this.validateDefinition()
|
|
124
132
|
this.initTimeseriesData()
|
|
125
133
|
this.bucketData()
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var x=(e,r,b,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of m(r))!u.call(e,n)&&n!==b&&a(e,n,{get:()=>r[n],enumerable:!(t=i(r,n))||t.enumerable});return e};var g=e=>x(a({},"__esModule",{value:!0}),e);var s={};module.exports=g(s);
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/dpr/components/_charts/chart/heatmap/types.ts"],
|
|
4
|
+
"sourcesContent": ["export interface MatrixChartData {\n x: number | string\n y: number | string\n r?: number\n v: number\n}\n"],
|
|
5
|
+
"mappings": "kWAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["types_exports", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var G=Object.create;var
|
|
1
|
+
var G=Object.create;var f=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var j=(a,s)=>{for(var e in s)f(a,e,{get:s[e],enumerable:!0})},V=(a,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of A(s))!H.call(a,o)&&o!==e&&f(a,o,{get:()=>s[o],enumerable:!(t=$(s,o))||t.enumerable});return a};var p=(a,s,e)=>(e=a!=null?G(F(a)):{},V(s||!a||!a.__esModule?f(e,"default",{value:a,enumerable:!0}):e,a)),v=a=>V(f({},"__esModule",{value:!0}),a);var Q={};j(Q,{createChart:()=>S,createMatrixChart:()=>B,createTimeseriesCharts:()=>L,default:()=>P});module.exports=v(Q);var x=p(require("dayjs")),T=p(require("dayjs/plugin/weekOfYear")),h=p(require("../../utils/datasetHelper")),R=p(require("../_dashboards/dashboard-list/utils")),k=require("../_inputs/granular-date-range/types"),M=p(require("./chart/heatmap/HeatmapChart"));x.default.extend(T.default);const S=(a,s)=>{let e,t,o;const{dataSetRows:n,snapshotData:r}=O(a,s);return n.length&&(t=Y(a,r),e=z(a,n),o=C(a,n)),{details:o,table:e,chart:t}},L=(a,s)=>{let e,t,o;const{latestData:n,dataSetRows:r,timeseriesData:u}=g(a,s);return r.length&&(t=N(a,u),e=w(a,u),o=C(a,n,!0)),{details:o,table:e,chart:t}},B=(a,s,e)=>{let t,o,n,r=k.Granularity.DAILY;Object.keys(e).forEach(c=>{c.includes("granularity")&&(r=e[c])});const{latestData:u,dataSetRows:i,timeseriesData:l}=g(a,s);return i.length&&(o=new M.default(l,r,a).build(),t=w(a,l),n=C(a,u,!0)),{details:n,table:t,chart:o}},O=(a,s)=>{const e=h.default.getLastestDataset(s),t=h.default.getDatasetRows(a,e),o=h.default.filterRowsByDisplayColumns(a,t,!0);return{dataSetRows:t,snapshotData:o}},g=(a,s)=>{const e=h.default.getLastestDataset(s),t=h.default.getDatasetRows(a,s),o=h.default.filterRowsByDisplayColumns(a,t,!0);return{latestData:e,dataSetRows:t,timeseriesData:o}},C=(a,s,e=!1)=>{const t=[],o=W(a,s,e);return s[0]?.ts&&t.push({label:"Values for:",value:s[0]?.ts.raw}),{meta:t,headlines:o}},W=(a,s,e=!1)=>{const t=[],{columns:o}=a,{measures:n}=o,r=!!n.find(d=>d.axis);let u,i,l,c;return e?(i=n.find(d=>d.id!=="ts"),i&&(c=`${s[0].ts.raw}`,l=+s[0][i.id].raw,u={label:c,value:l})):(i=r?n.find(d=>d.axis&&d.axis==="y"):n[0],i&&(c=`Total ${i.display.toLowerCase()}`,l=s.reduce((d,D)=>d+ +D[i.id].raw,0),u={label:c,value:l})),t.push(u),t},Y=(a,s)=>{const{type:e,columns:t}=a,{measures:o}=t,n=!!o.find(l=>l.axis);let r,u,i;return n?{labels:r,unit:u,datasets:i}=U(t,s):{labels:r,unit:u,datasets:i}=E(t,s),{type:e,unit:u,data:{labels:r,datasets:i}}},E=(a,s)=>{const{keys:e,measures:t}=a,o=t.map(i=>i.display),n=e[e.length-1]?.id,r=t[0].unit?t[0].unit:void 0,u=s.map(i=>{const l=i[n]?`${i[n].raw}`:"All",c=t.map(D=>{const m=D.id;return i[m]?+i[m].raw:0}),d=c.reduce((D,m)=>D+m,0);return{label:l,data:c,total:d}});return{labels:o,unit:r,datasets:u}},U=(a,s)=>{const{measures:e,keys:t}=a,o=e.find(d=>d.axis==="x"),n=e.find(d=>d.axis==="y"),r=n?.unit||void 0,u=h.default.getGroupKey(t,s),i=u?h.default.groupRowsByKey(s,u.id):[s],l=i[0]?.map(d=>`${d[o.id].raw}`),c=i.map(d=>{const D=d.map(m=>+m[n.id].raw);return{label:u?`${d[0][u.id].raw}`:n.display,data:D,total:D.reduce((m,b)=>m+b,0)}});return{labels:l,unit:r,datasets:c}},z=(a,s)=>{const{columns:e}=a,{keys:t,measures:o}=e,r=[...t,...o].map(l=>({text:l.display})),u=h.default.filterRowsByDisplayColumns(a,s,!0),i=R.default.createTableRows(u);return{head:r,rows:i}},N=(a,s)=>{const{columns:e}=a,{keys:t,measures:o}=e,n=o[0].unit?o[0].unit:void 0,r=a.type.split("-")[0],i=h.default.getGroupKey(t,s).id,l=h.default.groupRowsByTimestamp(s),c=l.map(m=>m[0].ts.raw),d=l[0].length,D=[];for(let m=0;m<d;m+=1){const b=l.map(y=>+y[m][o[1].id].raw),J=b.reduce((y,K)=>y+K,0),I=l[0][m][i].raw;D.push({data:b,label:I,total:J})}return{type:r,unit:n,timeseries:!0,data:{labels:c,datasets:D}}},w=(a,s)=>{const{columns:e}=a,{keys:t,measures:o}=e;let n=s.flat(),r=[...o];if(s.length>1){const l=r.findIndex(D=>D.id==="ts"),c=r[l];r.splice(l,1),r=[...t.filter(D=>D.id!=="ts"),...r],r.unshift(c)}else n=h.default.filterRowsByDisplayColumns(a,n);const u=r.map(l=>({text:l.display})),i=R.default.createTableRows(n);return{head:u,rows:i}};var P={createChart:S,createTimeseriesCharts:L,createMatrixChart:B};0&&(module.exports={createChart,createMatrixChart,createTimeseriesCharts});
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dpr/components/_charts/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import dayjs from 'dayjs'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport {\n ChartData,\n MoJTable,\n ChartCardData,\n ChartDataset,\n ChartType,\n ChartDetails,\n ChartMetaData,\n} from '../../types/Charts'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport {\n BarChartVisualisationColumn,\n DashboardVisualisation,\n DashboardVisualisationColumns,\n} from '../_dashboards/dashboard/types'\nimport DatasetHelper from '../../utils/datasetHelper'\nimport DashboardListUtils from '../_dashboards/dashboard-list/utils'\nimport { Granularity } from '../_inputs/granular-date-range/types'\nimport HeatmapChart from './chart/heatmap/HeatmapChart'\n\ndayjs.extend(weekOfYear)\n\nexport const createChart = (\n chartDefinition: DashboardVisualisation,\n rawData: DashboardDataResponse[],\n): ChartCardData => {\n let table: MoJTable\n let chart: ChartData\n let details: ChartDetails\n\n const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createSnapshotChart(chartDefinition, snapshotData)\n table = createSnapshotTable(chartDefinition, dataSetRows)\n details = getChartDetails(chartDefinition, dataSetRows)\n }\n\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createTimeseriesCharts = (\n chartDefinition: DashboardVisualisation,\n rawData: DashboardDataResponse[],\n): ChartCardData => {\n let table: MoJTable\n let chart: ChartData\n let details: ChartDetails\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createTimeseriesChart(chartDefinition, timeseriesData)\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createMatrixChart = (\n chartDefinition: DashboardVisualisation,\n rawData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n) => {\n let table: MoJTable\n let chart: ChartData\n let details: ChartDetails\n let granularity: Granularity = Granularity.DAILY\n\n Object.keys(query).forEach((key) => {\n if (key.includes('granularity')) {\n granularity = <Granularity>query[key]\n }\n })\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = new HeatmapChart(timeseriesData, granularity, chartDefinition).build()\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nconst getDataForSnapshotCharts = (chartDefinition: DashboardVisualisation, rawData: DashboardDataResponse[]) => {\n const data = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, data)\n const snapshotData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n dataSetRows,\n snapshotData,\n }\n}\n\nconst getDataForTimeseriesCharts = (chartDefinition: DashboardVisualisation, rawData: DashboardDataResponse[]) => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, rawData)\n const timeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n latestData,\n dataSetRows,\n timeseriesData,\n }\n}\n\nconst getChartDetails = (\n chartDefinition: DashboardVisualisation,\n data: DashboardDataResponse[],\n timeseries = false,\n): ChartDetails => {\n const meta: ChartMetaData[] = []\n const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)\n\n if (data[0]?.ts) {\n meta.push({\n label: 'Values for:',\n value: data[0]?.ts.raw,\n })\n }\n\n return {\n meta,\n headlines,\n }\n}\n\nconst createHeadlines = (\n chartDefinition: DashboardVisualisation,\n data: DashboardDataResponse[],\n timeseries = false,\n) => {\n const headlines: ChartMetaData[] = []\n const { columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!(<BarChartVisualisationColumn[]>measures).find((col) => col.axis)\n let headline: ChartMetaData\n\n let headlineColumn: BarChartVisualisationColumn\n let value: number\n let label: string\n\n if (timeseries) {\n headlineColumn = <BarChartVisualisationColumn>measures.find((col) => col.id !== 'ts')\n if (headlineColumn) {\n label = `${data[0].ts.raw}`\n value = +data[0][headlineColumn.id].raw\n\n headline = {\n label,\n value,\n }\n }\n } else {\n headlineColumn = !isListChart\n ? <BarChartVisualisationColumn>measures[0]\n : measures.find((col: BarChartVisualisationColumn) => col.axis && col.axis === 'y')\n\n if (headlineColumn) {\n label = `Total ${headlineColumn.display.toLowerCase()}`\n value = data.reduce((acc: number, d: DashboardDataResponse) => acc + +d[headlineColumn.id].raw, 0)\n\n headline = {\n label,\n value,\n }\n }\n }\n\n headlines.push(headline)\n\n return headlines\n}\n\nconst createSnapshotChart = (\n chartDefinition: DashboardVisualisation,\n snapshotData: DashboardDataResponse[],\n): ChartData => {\n const { type, columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!(<BarChartVisualisationColumn[]>measures).find((col) => col.axis)\n\n let labels: string[]\n let unit\n let datasets: ChartDataset[]\n\n if (!isListChart) {\n ;({ labels, unit, datasets } = buildChart(columns, snapshotData))\n } else {\n ;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))\n }\n\n return {\n type: type as unknown as ChartType,\n unit,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst buildChart = (columns: DashboardVisualisationColumns, rawData: DashboardDataResponse[]) => {\n const { keys, measures } = columns\n const labels = measures.map((col) => col.display)\n const labelId = keys[keys.length - 1]?.id as keyof DashboardDataResponse\n const unit = measures[0].unit ? measures[0].unit : undefined\n\n const datasets = rawData.map((row) => {\n const label = row[labelId] ? `${row[labelId].raw}` : 'All'\n const data = measures.map((c) => {\n const rowId = c.id as keyof DashboardDataResponse\n return row[rowId] ? +row[rowId].raw : 0\n })\n const total = data.reduce((acc: number, val: number) => acc + val, 0)\n return { label, data, total } as ChartDataset\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst buildChartFromListData = (columns: DashboardVisualisationColumns, rawData: DashboardDataResponse[]) => {\n const { measures, keys } = columns\n\n const xAxisColumn = (<BarChartVisualisationColumn[]>measures).find((col) => col.axis === 'x')\n const yAxisColumn = (<BarChartVisualisationColumn[]>measures).find((col) => col.axis === 'y')\n\n const unit = yAxisColumn?.unit || undefined\n const groupKey = DatasetHelper.getGroupKey(keys, rawData)\n const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]\n\n const labels = groupsData[0]?.map((row) => {\n return `${row[xAxisColumn.id].raw}`\n })\n\n const datasets: ChartDataset[] = groupsData.map((groupData) => {\n const data = groupData.map((row) => +row[yAxisColumn.id].raw)\n return {\n label: groupKey ? `${groupData[0][groupKey.id].raw}` : yAxisColumn.display,\n data,\n total: data.reduce((acc: number, val: number) => acc + val, 0),\n }\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst createSnapshotTable = (chartDefinition: DashboardVisualisation, data: DashboardDataResponse[]): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const headerColumns = [...keys, ...measures]\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const filteredRowData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, data, true)\n const rows = DashboardListUtils.createTableRows(filteredRowData)\n\n return {\n head,\n rows,\n }\n}\n\nconst createTimeseriesChart = (\n chartDefinition: DashboardVisualisation,\n timeseriesData: DashboardDataResponse[],\n): ChartData => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const unit = measures[0].unit ? measures[0].unit : undefined\n const type = chartDefinition.type.split('-')[0]\n const groupKey = DatasetHelper.getGroupKey(keys, timeseriesData)\n const labelId = groupKey.id as keyof DashboardDataResponse\n\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)\n const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0].ts.raw as unknown as string)\n const datasetCount = timeBlockData[0].length\n\n const datasets: ChartDataset[] = []\n for (let index = 0; index < datasetCount; index += 1) {\n const data = timeBlockData.map((timeperiod) => {\n return +timeperiod[index][measures[1].id].raw\n })\n const total = data.reduce((a, c) => a + c, 0)\n const label = timeBlockData[0][index][labelId].raw as string\n\n datasets.push({\n data,\n label,\n total,\n })\n }\n\n return {\n type: type as unknown as ChartType,\n unit,\n timeseries: true,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst createTimeseriesTable = (\n chartDefinition: DashboardVisualisation,\n timeseriesData: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n let flatTimeseriesData = timeseriesData.flat()\n let headerColumns = [...measures]\n\n if (timeseriesData.length > 1) {\n // Add keys as columns as well as measures, and put TS first:\n // Get TS column an remove it from headings\n const timestampIndex = headerColumns.findIndex((m) => m.id === 'ts')\n const timestampCol = headerColumns[timestampIndex]\n headerColumns.splice(timestampIndex, 1)\n // Remove duplicate TS from keys if present and add keys to headings\n const keysWithoutTs = keys.filter((k) => k.id !== 'ts')\n headerColumns = [...keysWithoutTs, ...headerColumns]\n // Add TS column to the start\n headerColumns.unshift(timestampCol)\n } else {\n flatTimeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, flatTimeseriesData)\n }\n\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const rows = DashboardListUtils.createTableRows(flatTimeseriesData)\n\n return {\n head,\n rows,\n } as MoJTable\n}\n\nexport default {\n createChart,\n createTimeseriesCharts,\n createMatrixChart,\n}\n"],
|
|
5
|
-
"mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,EAAA,sBAAAC,EAAA,2BAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EAAkB,oBAClBC,EAAuB,
|
|
6
|
-
"names": ["utils_exports", "__export", "createChart", "createMatrixChart", "createTimeseriesCharts", "utils_default", "__toCommonJS", "import_dayjs", "import_weekOfYear", "import_datasetHelper", "import_utils", "import_types", "import_HeatmapChart", "dayjs", "weekOfYear", "chartDefinition", "rawData", "table", "chart", "details", "dataSetRows", "snapshotData", "getDataForSnapshotCharts", "createSnapshotChart", "createSnapshotTable", "getChartDetails", "latestData", "timeseriesData", "getDataForTimeseriesCharts", "createTimeseriesChart", "createTimeseriesTable", "query", "granularity", "key", "HeatmapChart", "data", "DatasetHelper", "timeseries", "meta", "headlines", "createHeadlines", "columns", "measures", "isListChart", "col", "headline", "headlineColumn", "value", "label", "acc", "d", "type", "labels", "unit", "datasets", "buildChartFromListData", "buildChart", "keys", "labelId", "row", "rowId", "total", "val", "xAxisColumn", "yAxisColumn", "groupKey", "groupsData", "groupData", "head", "column", "filteredRowData", "rows", "DashboardListUtils", "timeBlockData", "datasetCount", "index", "timeperiod", "a", "
|
|
4
|
+
"sourcesContent": ["import dayjs from 'dayjs'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport { ChartDetails, ChartMetaData } from '../../types/Charts'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport DatasetHelper from '../../utils/datasetHelper'\nimport DashboardListUtils from '../_dashboards/dashboard-list/utils'\nimport { Granularity } from '../_inputs/granular-date-range/types'\nimport HeatmapChart from './chart/heatmap/HeatmapChart'\nimport { components } from '../../types/api'\nimport {\n DashboardVisualisationData,\n DashboardVisualisationDataSet,\n DashboardVisualisatonCardData,\n MoJTable,\n} from '../_dashboards/dashboard-visualisation/types'\n\ndayjs.extend(weekOfYear)\n\nexport const createChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData => {\n let table: MoJTable\n let chart: DashboardVisualisationData\n let details: ChartDetails\n\n const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createSnapshotChart(chartDefinition, snapshotData)\n table = createSnapshotTable(chartDefinition, dataSetRows)\n details = getChartDetails(chartDefinition, dataSetRows)\n }\n\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData => {\n let table: MoJTable\n let chart: DashboardVisualisationData\n let details: ChartDetails\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createTimeseriesChart(chartDefinition, timeseriesData)\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createMatrixChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n) => {\n let table: MoJTable\n let chart: DashboardVisualisationData\n let details: ChartDetails\n let granularity: Granularity = Granularity.DAILY\n\n Object.keys(query).forEach((key) => {\n if (key.includes('granularity')) {\n granularity = <Granularity>query[key]\n }\n })\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = new HeatmapChart(timeseriesData, granularity, chartDefinition).build()\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nconst getDataForSnapshotCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const data = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, data)\n const snapshotData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n dataSetRows,\n snapshotData,\n }\n}\n\nconst getDataForTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, rawData)\n const timeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n latestData,\n dataSetRows,\n timeseriesData,\n }\n}\n\nconst getChartDetails = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n): ChartDetails => {\n const meta: ChartMetaData[] = []\n const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)\n\n if (data[0]?.ts) {\n meta.push({\n label: 'Values for:',\n value: data[0]?.ts.raw,\n })\n }\n\n return {\n meta,\n headlines,\n }\n}\n\nconst createHeadlines = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n) => {\n const headlines: ChartMetaData[] = []\n const { columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n let headline: ChartMetaData\n\n let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition']\n let value: number\n let label: string\n\n if (timeseries) {\n headlineColumn = measures.find((col) => col.id !== 'ts')\n if (headlineColumn) {\n label = `${data[0].ts.raw}`\n value = +data[0][headlineColumn.id].raw\n\n headline = {\n label,\n value,\n }\n }\n } else {\n headlineColumn = !isListChart ? measures[0] : measures.find((col) => col.axis && col.axis === 'y')\n\n if (headlineColumn) {\n label = `Total ${headlineColumn.display.toLowerCase()}`\n value = data.reduce((acc: number, d: DashboardDataResponse) => acc + +d[headlineColumn.id].raw, 0)\n\n headline = {\n label,\n value,\n }\n }\n }\n\n headlines.push(headline)\n\n return headlines\n}\n\nconst createSnapshotChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n snapshotData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { type, columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n\n let labels: string[]\n let unit\n let datasets: DashboardVisualisationDataSet[]\n\n if (!isListChart) {\n ;({ labels, unit, datasets } = buildChart(columns, snapshotData))\n } else {\n ;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))\n }\n\n return {\n type,\n unit,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst buildChart = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { keys, measures } = columns\n const labels = measures.map((col) => col.display)\n const labelId = keys[keys.length - 1]?.id as keyof DashboardDataResponse\n const unit = measures[0].unit ? measures[0].unit : undefined\n\n const datasets = rawData.map((row) => {\n const label = row[labelId] ? `${row[labelId].raw}` : 'All'\n const data = measures.map((c) => {\n const rowId = c.id as keyof DashboardDataResponse\n return row[rowId] ? +row[rowId].raw : 0\n })\n const total = data.reduce((acc: number, val: number) => acc + val, 0)\n return { label, data, total } as DashboardVisualisationDataSet\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst buildChartFromListData = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { measures, keys } = columns\n\n const xAxisColumn = measures.find((col) => col.axis === 'x')\n const yAxisColumn = measures.find((col) => col.axis === 'y')\n\n const unit = yAxisColumn?.unit || undefined\n const groupKey = DatasetHelper.getGroupKey(keys, rawData)\n const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]\n\n const labels = groupsData[0]?.map((row) => {\n return `${row[xAxisColumn.id].raw}`\n })\n\n const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {\n const data = groupData.map((row) => +row[yAxisColumn.id].raw)\n return {\n label: groupKey ? `${groupData[0][groupKey.id].raw}` : yAxisColumn.display,\n data,\n total: data.reduce((acc: number, val: number) => acc + val, 0),\n }\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst createSnapshotTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const headerColumns = [...keys, ...measures]\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const filteredRowData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, data, true)\n const rows = DashboardListUtils.createTableRows(filteredRowData)\n\n return {\n head,\n rows,\n }\n}\n\nconst createTimeseriesChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const unit = measures[0].unit ? measures[0].unit : undefined\n const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]\n const groupKey = DatasetHelper.getGroupKey(keys, timeseriesData)\n const labelId = groupKey.id as keyof DashboardDataResponse\n\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)\n const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0].ts.raw as unknown as string)\n const datasetCount = timeBlockData[0].length\n\n const datasets: DashboardVisualisationDataSet[] = []\n for (let index = 0; index < datasetCount; index += 1) {\n const data = timeBlockData.map((timeperiod) => {\n return +timeperiod[index][measures[1].id].raw\n })\n const total = data.reduce((a, c) => a + c, 0)\n const label = timeBlockData[0][index][labelId].raw as string\n\n datasets.push({\n data,\n label,\n total,\n })\n }\n\n return {\n type,\n unit,\n timeseries: true,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst createTimeseriesTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n let flatTimeseriesData = timeseriesData.flat()\n let headerColumns = [...measures]\n\n if (timeseriesData.length > 1) {\n // Add keys as columns as well as measures, and put TS first:\n // Get TS column an remove it from headings\n const timestampIndex = headerColumns.findIndex((m) => m.id === 'ts')\n const timestampCol = headerColumns[timestampIndex]\n headerColumns.splice(timestampIndex, 1)\n // Remove duplicate TS from keys if present and add keys to headings\n const keysWithoutTs = keys.filter((k) => k.id !== 'ts')\n headerColumns = [...keysWithoutTs, ...headerColumns]\n // Add TS column to the start\n headerColumns.unshift(timestampCol)\n } else {\n flatTimeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, flatTimeseriesData)\n }\n\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const rows = DashboardListUtils.createTableRows(flatTimeseriesData)\n\n return {\n head,\n rows,\n } as MoJTable\n}\n\nexport default {\n createChart,\n createTimeseriesCharts,\n createMatrixChart,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["utils_exports", "__export", "createChart", "createMatrixChart", "createTimeseriesCharts", "utils_default", "__toCommonJS", "import_dayjs", "import_weekOfYear", "import_datasetHelper", "import_utils", "import_types", "import_HeatmapChart", "dayjs", "weekOfYear", "chartDefinition", "rawData", "table", "chart", "details", "dataSetRows", "snapshotData", "getDataForSnapshotCharts", "createSnapshotChart", "createSnapshotTable", "getChartDetails", "latestData", "timeseriesData", "getDataForTimeseriesCharts", "createTimeseriesChart", "createTimeseriesTable", "query", "granularity", "key", "HeatmapChart", "data", "DatasetHelper", "timeseries", "meta", "headlines", "createHeadlines", "columns", "measures", "isListChart", "col", "headline", "headlineColumn", "value", "label", "acc", "d", "type", "labels", "unit", "datasets", "buildChartFromListData", "buildChart", "keys", "labelId", "row", "c", "rowId", "total", "val", "xAxisColumn", "yAxisColumn", "groupKey", "groupsData", "groupData", "head", "column", "filteredRowData", "rows", "DashboardListUtils", "timeBlockData", "datasetCount", "index", "timeperiod", "a", "flatTimeseriesData", "headerColumns", "timestampIndex", "m", "timestampCol", "k"]
|
|
7
7
|
}
|
|
@@ -14,19 +14,22 @@ import {
|
|
|
14
14
|
dataQualityEthnicityHistoricLine,
|
|
15
15
|
dietTotalsByEstablishmentBar,
|
|
16
16
|
} from '../../../../test-app/mocks/mockClients/dashboards/definitions/examples/visualisations/charts'
|
|
17
|
-
import {
|
|
17
|
+
import { components } from '../../types/api'
|
|
18
18
|
|
|
19
19
|
describe('ChartCard Utils', () => {
|
|
20
20
|
let dashboardMetricsData: DashboardDataResponse[][]
|
|
21
21
|
let dashboardMockDietData: DashboardDataResponse[]
|
|
22
|
-
let snapshotVisualisationDefinition:
|
|
23
|
-
let snapshotVisualisationFromListDefinition:
|
|
24
|
-
let timeseriesVisualisationDefinition:
|
|
22
|
+
let snapshotVisualisationDefinition: components['schemas']['DashboardVisualisationDefinition']
|
|
23
|
+
let snapshotVisualisationFromListDefinition: components['schemas']['DashboardVisualisationDefinition']
|
|
24
|
+
let timeseriesVisualisationDefinition: components['schemas']['DashboardVisualisationDefinition']
|
|
25
25
|
|
|
26
26
|
beforeEach(() => {
|
|
27
|
-
snapshotVisualisationDefinition =
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
snapshotVisualisationDefinition =
|
|
28
|
+
mockEthnicityBarChart as unknown as components['schemas']['DashboardVisualisationDefinition']
|
|
29
|
+
timeseriesVisualisationDefinition =
|
|
30
|
+
dataQualityEthnicityHistoricLine as unknown as components['schemas']['DashboardVisualisationDefinition']
|
|
31
|
+
snapshotVisualisationFromListDefinition =
|
|
32
|
+
dietTotalsByEstablishmentBar as unknown as components['schemas']['DashboardVisualisationDefinition']
|
|
30
33
|
dashboardMetricsData = mockTimeSeriesDataLastSixMonths
|
|
31
34
|
dashboardMockDietData = mockDietDataLastSixMonths
|
|
32
35
|
})
|
|
@@ -1,33 +1,27 @@
|
|
|
1
1
|
import dayjs from 'dayjs'
|
|
2
2
|
import weekOfYear from 'dayjs/plugin/weekOfYear'
|
|
3
|
-
import {
|
|
4
|
-
ChartData,
|
|
5
|
-
MoJTable,
|
|
6
|
-
ChartCardData,
|
|
7
|
-
ChartDataset,
|
|
8
|
-
ChartType,
|
|
9
|
-
ChartDetails,
|
|
10
|
-
ChartMetaData,
|
|
11
|
-
} from '../../types/Charts'
|
|
3
|
+
import { ChartDetails, ChartMetaData } from '../../types/Charts'
|
|
12
4
|
import { DashboardDataResponse } from '../../types/Metrics'
|
|
13
|
-
import {
|
|
14
|
-
BarChartVisualisationColumn,
|
|
15
|
-
DashboardVisualisation,
|
|
16
|
-
DashboardVisualisationColumns,
|
|
17
|
-
} from '../_dashboards/dashboard/types'
|
|
18
5
|
import DatasetHelper from '../../utils/datasetHelper'
|
|
19
6
|
import DashboardListUtils from '../_dashboards/dashboard-list/utils'
|
|
20
7
|
import { Granularity } from '../_inputs/granular-date-range/types'
|
|
21
8
|
import HeatmapChart from './chart/heatmap/HeatmapChart'
|
|
9
|
+
import { components } from '../../types/api'
|
|
10
|
+
import {
|
|
11
|
+
DashboardVisualisationData,
|
|
12
|
+
DashboardVisualisationDataSet,
|
|
13
|
+
DashboardVisualisatonCardData,
|
|
14
|
+
MoJTable,
|
|
15
|
+
} from '../_dashboards/dashboard-visualisation/types'
|
|
22
16
|
|
|
23
17
|
dayjs.extend(weekOfYear)
|
|
24
18
|
|
|
25
19
|
export const createChart = (
|
|
26
|
-
chartDefinition:
|
|
20
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
27
21
|
rawData: DashboardDataResponse[],
|
|
28
|
-
):
|
|
22
|
+
): DashboardVisualisatonCardData => {
|
|
29
23
|
let table: MoJTable
|
|
30
|
-
let chart:
|
|
24
|
+
let chart: DashboardVisualisationData
|
|
31
25
|
let details: ChartDetails
|
|
32
26
|
|
|
33
27
|
const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)
|
|
@@ -45,11 +39,11 @@ export const createChart = (
|
|
|
45
39
|
}
|
|
46
40
|
|
|
47
41
|
export const createTimeseriesCharts = (
|
|
48
|
-
chartDefinition:
|
|
42
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
49
43
|
rawData: DashboardDataResponse[],
|
|
50
|
-
):
|
|
44
|
+
): DashboardVisualisatonCardData => {
|
|
51
45
|
let table: MoJTable
|
|
52
|
-
let chart:
|
|
46
|
+
let chart: DashboardVisualisationData
|
|
53
47
|
let details: ChartDetails
|
|
54
48
|
|
|
55
49
|
const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)
|
|
@@ -66,12 +60,12 @@ export const createTimeseriesCharts = (
|
|
|
66
60
|
}
|
|
67
61
|
|
|
68
62
|
export const createMatrixChart = (
|
|
69
|
-
chartDefinition:
|
|
63
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
70
64
|
rawData: DashboardDataResponse[],
|
|
71
65
|
query: Record<string, string | string[]>,
|
|
72
66
|
) => {
|
|
73
67
|
let table: MoJTable
|
|
74
|
-
let chart:
|
|
68
|
+
let chart: DashboardVisualisationData
|
|
75
69
|
let details: ChartDetails
|
|
76
70
|
let granularity: Granularity = Granularity.DAILY
|
|
77
71
|
|
|
@@ -94,7 +88,10 @@ export const createMatrixChart = (
|
|
|
94
88
|
}
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
const getDataForSnapshotCharts = (
|
|
91
|
+
const getDataForSnapshotCharts = (
|
|
92
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
93
|
+
rawData: DashboardDataResponse[],
|
|
94
|
+
) => {
|
|
98
95
|
const data = DatasetHelper.getLastestDataset(rawData)
|
|
99
96
|
const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, data)
|
|
100
97
|
const snapshotData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)
|
|
@@ -105,7 +102,10 @@ const getDataForSnapshotCharts = (chartDefinition: DashboardVisualisation, rawDa
|
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
104
|
|
|
108
|
-
const getDataForTimeseriesCharts = (
|
|
105
|
+
const getDataForTimeseriesCharts = (
|
|
106
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
107
|
+
rawData: DashboardDataResponse[],
|
|
108
|
+
) => {
|
|
109
109
|
const latestData = DatasetHelper.getLastestDataset(rawData)
|
|
110
110
|
const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, rawData)
|
|
111
111
|
const timeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)
|
|
@@ -118,7 +118,7 @@ const getDataForTimeseriesCharts = (chartDefinition: DashboardVisualisation, raw
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
const getChartDetails = (
|
|
121
|
-
chartDefinition:
|
|
121
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
122
122
|
data: DashboardDataResponse[],
|
|
123
123
|
timeseries = false,
|
|
124
124
|
): ChartDetails => {
|
|
@@ -139,22 +139,22 @@ const getChartDetails = (
|
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
const createHeadlines = (
|
|
142
|
-
chartDefinition:
|
|
142
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
143
143
|
data: DashboardDataResponse[],
|
|
144
144
|
timeseries = false,
|
|
145
145
|
) => {
|
|
146
146
|
const headlines: ChartMetaData[] = []
|
|
147
147
|
const { columns } = chartDefinition
|
|
148
148
|
const { measures } = columns
|
|
149
|
-
const isListChart = !!
|
|
149
|
+
const isListChart = !!measures.find((col) => col.axis)
|
|
150
150
|
let headline: ChartMetaData
|
|
151
151
|
|
|
152
|
-
let headlineColumn:
|
|
152
|
+
let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition']
|
|
153
153
|
let value: number
|
|
154
154
|
let label: string
|
|
155
155
|
|
|
156
156
|
if (timeseries) {
|
|
157
|
-
headlineColumn =
|
|
157
|
+
headlineColumn = measures.find((col) => col.id !== 'ts')
|
|
158
158
|
if (headlineColumn) {
|
|
159
159
|
label = `${data[0].ts.raw}`
|
|
160
160
|
value = +data[0][headlineColumn.id].raw
|
|
@@ -165,9 +165,7 @@ const createHeadlines = (
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
} else {
|
|
168
|
-
headlineColumn = !isListChart
|
|
169
|
-
? <BarChartVisualisationColumn>measures[0]
|
|
170
|
-
: measures.find((col: BarChartVisualisationColumn) => col.axis && col.axis === 'y')
|
|
168
|
+
headlineColumn = !isListChart ? measures[0] : measures.find((col) => col.axis && col.axis === 'y')
|
|
171
169
|
|
|
172
170
|
if (headlineColumn) {
|
|
173
171
|
label = `Total ${headlineColumn.display.toLowerCase()}`
|
|
@@ -186,16 +184,16 @@ const createHeadlines = (
|
|
|
186
184
|
}
|
|
187
185
|
|
|
188
186
|
const createSnapshotChart = (
|
|
189
|
-
chartDefinition:
|
|
187
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
190
188
|
snapshotData: DashboardDataResponse[],
|
|
191
|
-
):
|
|
189
|
+
): DashboardVisualisationData => {
|
|
192
190
|
const { type, columns } = chartDefinition
|
|
193
191
|
const { measures } = columns
|
|
194
|
-
const isListChart = !!
|
|
192
|
+
const isListChart = !!measures.find((col) => col.axis)
|
|
195
193
|
|
|
196
194
|
let labels: string[]
|
|
197
195
|
let unit
|
|
198
|
-
let datasets:
|
|
196
|
+
let datasets: DashboardVisualisationDataSet[]
|
|
199
197
|
|
|
200
198
|
if (!isListChart) {
|
|
201
199
|
;({ labels, unit, datasets } = buildChart(columns, snapshotData))
|
|
@@ -204,7 +202,7 @@ const createSnapshotChart = (
|
|
|
204
202
|
}
|
|
205
203
|
|
|
206
204
|
return {
|
|
207
|
-
type
|
|
205
|
+
type,
|
|
208
206
|
unit,
|
|
209
207
|
data: {
|
|
210
208
|
labels,
|
|
@@ -213,7 +211,10 @@ const createSnapshotChart = (
|
|
|
213
211
|
}
|
|
214
212
|
}
|
|
215
213
|
|
|
216
|
-
const buildChart = (
|
|
214
|
+
const buildChart = (
|
|
215
|
+
columns: components['schemas']['DashboardVisualisationColumnsDefinition'],
|
|
216
|
+
rawData: DashboardDataResponse[],
|
|
217
|
+
) => {
|
|
217
218
|
const { keys, measures } = columns
|
|
218
219
|
const labels = measures.map((col) => col.display)
|
|
219
220
|
const labelId = keys[keys.length - 1]?.id as keyof DashboardDataResponse
|
|
@@ -226,7 +227,7 @@ const buildChart = (columns: DashboardVisualisationColumns, rawData: DashboardDa
|
|
|
226
227
|
return row[rowId] ? +row[rowId].raw : 0
|
|
227
228
|
})
|
|
228
229
|
const total = data.reduce((acc: number, val: number) => acc + val, 0)
|
|
229
|
-
return { label, data, total } as
|
|
230
|
+
return { label, data, total } as DashboardVisualisationDataSet
|
|
230
231
|
})
|
|
231
232
|
|
|
232
233
|
return {
|
|
@@ -236,11 +237,14 @@ const buildChart = (columns: DashboardVisualisationColumns, rawData: DashboardDa
|
|
|
236
237
|
}
|
|
237
238
|
}
|
|
238
239
|
|
|
239
|
-
const buildChartFromListData = (
|
|
240
|
+
const buildChartFromListData = (
|
|
241
|
+
columns: components['schemas']['DashboardVisualisationColumnsDefinition'],
|
|
242
|
+
rawData: DashboardDataResponse[],
|
|
243
|
+
) => {
|
|
240
244
|
const { measures, keys } = columns
|
|
241
245
|
|
|
242
|
-
const xAxisColumn =
|
|
243
|
-
const yAxisColumn =
|
|
246
|
+
const xAxisColumn = measures.find((col) => col.axis === 'x')
|
|
247
|
+
const yAxisColumn = measures.find((col) => col.axis === 'y')
|
|
244
248
|
|
|
245
249
|
const unit = yAxisColumn?.unit || undefined
|
|
246
250
|
const groupKey = DatasetHelper.getGroupKey(keys, rawData)
|
|
@@ -250,7 +254,7 @@ const buildChartFromListData = (columns: DashboardVisualisationColumns, rawData:
|
|
|
250
254
|
return `${row[xAxisColumn.id].raw}`
|
|
251
255
|
})
|
|
252
256
|
|
|
253
|
-
const datasets:
|
|
257
|
+
const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {
|
|
254
258
|
const data = groupData.map((row) => +row[yAxisColumn.id].raw)
|
|
255
259
|
return {
|
|
256
260
|
label: groupKey ? `${groupData[0][groupKey.id].raw}` : yAxisColumn.display,
|
|
@@ -266,7 +270,10 @@ const buildChartFromListData = (columns: DashboardVisualisationColumns, rawData:
|
|
|
266
270
|
}
|
|
267
271
|
}
|
|
268
272
|
|
|
269
|
-
const createSnapshotTable = (
|
|
273
|
+
const createSnapshotTable = (
|
|
274
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
275
|
+
data: DashboardDataResponse[],
|
|
276
|
+
): MoJTable => {
|
|
270
277
|
const { columns } = chartDefinition
|
|
271
278
|
const { keys, measures } = columns
|
|
272
279
|
|
|
@@ -285,14 +292,14 @@ const createSnapshotTable = (chartDefinition: DashboardVisualisation, data: Dash
|
|
|
285
292
|
}
|
|
286
293
|
|
|
287
294
|
const createTimeseriesChart = (
|
|
288
|
-
chartDefinition:
|
|
295
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
289
296
|
timeseriesData: DashboardDataResponse[],
|
|
290
|
-
):
|
|
297
|
+
): DashboardVisualisationData => {
|
|
291
298
|
const { columns } = chartDefinition
|
|
292
299
|
const { keys, measures } = columns
|
|
293
300
|
|
|
294
301
|
const unit = measures[0].unit ? measures[0].unit : undefined
|
|
295
|
-
const type = chartDefinition.type.split('-')[0]
|
|
302
|
+
const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]
|
|
296
303
|
const groupKey = DatasetHelper.getGroupKey(keys, timeseriesData)
|
|
297
304
|
const labelId = groupKey.id as keyof DashboardDataResponse
|
|
298
305
|
|
|
@@ -300,7 +307,7 @@ const createTimeseriesChart = (
|
|
|
300
307
|
const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0].ts.raw as unknown as string)
|
|
301
308
|
const datasetCount = timeBlockData[0].length
|
|
302
309
|
|
|
303
|
-
const datasets:
|
|
310
|
+
const datasets: DashboardVisualisationDataSet[] = []
|
|
304
311
|
for (let index = 0; index < datasetCount; index += 1) {
|
|
305
312
|
const data = timeBlockData.map((timeperiod) => {
|
|
306
313
|
return +timeperiod[index][measures[1].id].raw
|
|
@@ -316,7 +323,7 @@ const createTimeseriesChart = (
|
|
|
316
323
|
}
|
|
317
324
|
|
|
318
325
|
return {
|
|
319
|
-
type
|
|
326
|
+
type,
|
|
320
327
|
unit,
|
|
321
328
|
timeseries: true,
|
|
322
329
|
data: {
|
|
@@ -327,7 +334,7 @@ const createTimeseriesChart = (
|
|
|
327
334
|
}
|
|
328
335
|
|
|
329
336
|
const createTimeseriesTable = (
|
|
330
|
-
chartDefinition:
|
|
337
|
+
chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
331
338
|
timeseriesData: DashboardDataResponse[],
|
|
332
339
|
): MoJTable => {
|
|
333
340
|
const { columns } = chartDefinition
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
<div class="dashboard-content">
|
|
19
19
|
{{ dprReportHeading(data) }}
|
|
20
|
-
{{ dprDashboardFilters(data.filters) }}
|
|
20
|
+
{{ dprDashboardFilters(data.filters, { csrfToken: data.csrfToken }) }}
|
|
21
21
|
|
|
22
22
|
{% for section in data.sections %}
|
|
23
23
|
{{ dprDashboardSection(section) }}
|