UNPKG

@ministryofjustice/hmpps-digital-prison-reporting-frontend

Version:

The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.

96 lines (91 loc) 3.5 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var logger = require('../../../utils/logger.js'); var VisualisationDatasetHelper = require('../../../utils/Dashboards/VisualisationDatasetHelper.js'); var ChartColours = require('./ChartColours.js'); var chartConfig = require('./chart-config.js'); var ChartLabels = require('./ChartLabels.js'); class TimeseriesChart { id; labels = []; datasets = []; unit; responseData = []; measures = []; keys = []; timeBlockData = []; groupKey; datasetCount = 0; hexColours = []; config = chartConfig; partialDate; chartColoursHelper; chartLabelsHelper; withData = (responseData) => { this.responseData = responseData; this.initHelpers(); this.initFromData(); return this; }; initHelpers = () => { this.chartColoursHelper = new ChartColours(); this.chartLabelsHelper = new ChartLabels(); }; initFromDefinition = (definition) => { logger.default.debug('Building Dashboard Visualisation: ', JSON.stringify(definition)); this.id = definition.id; this.measures = definition.columns.measures; this.keys = definition.columns.keys || []; this.unit = this.measures.find(m => m.unit)?.unit; }; withPartialDate = (partialDate) => { this.partialDate = partialDate; return this; }; initFromData = () => { this.groupKey = VisualisationDatasetHelper.default.getGroupKey(this.responseData, this.keys); const dateMeasure = VisualisationDatasetHelper.default.getTimestampMeasure(this.measures); if (!dateMeasure) { logger.default.debug(this.id, JSON.stringify(this.measures)); throw new Error(`${this.id}: No timestamp field in definition`); } this.timeBlockData = VisualisationDatasetHelper.default.groupRowsByTimestamp(this.responseData, dateMeasure); this.labels = this.getLabels(); this.datasetCount = this.timeBlockData[0]?.length; }; buildDatasets = () => { this.chartColoursHelper = new ChartColours(); for (let index = 0; index < this.datasetCount; index += 1) { const data = this.timeBlockData.map(timeperiod => { const valueId = this.measures[1]?.id; const value = timeperiod[index]?.[valueId]?.raw; if (value == null || valueId == null) { return 0; } const numericValue = Number(value); return Number.isNaN(numericValue) ? 0 : numericValue; }); const total = data.reduce((a, c) => a + c, 0); const label = this.chartLabelsHelper.getDatasetLabel(this.keys, this.timeBlockData[0][index]); this.datasets.push({ data, label, total, }); } }; getLabels = () => { return this.timeBlockData .map((data) => { const dateColumn = VisualisationDatasetHelper.getTimestampMeasure(this.measures); const dateData = VisualisationDatasetHelper.getDateValue(data, dateColumn); if (!dateData) return undefined; return dateData.value; }) .filter((v) => Boolean(v)); }; } exports.TimeseriesChart = TimeseriesChart; exports.default = TimeseriesChart; //# sourceMappingURL=ChartTimeseries.js.map