@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.20.1 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dpr/components/_async/async-filters-form/types.d.js +1 -1
  2. package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
  3. package/dpr/components/_async/async-filters-form/types.d.ts +7 -4
  4. package/dpr/components/_async/async-filters-form/utils.js +1 -1
  5. package/dpr/components/_async/async-filters-form/utils.js.map +2 -2
  6. package/dpr/components/_async/async-filters-form/utils.ts +18 -17
  7. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
  8. package/dpr/components/_charts/chart/Chart.js +2 -0
  9. package/dpr/components/_charts/chart/Chart.js.map +7 -0
  10. package/dpr/components/_charts/chart/Chart.ts +89 -0
  11. package/dpr/components/_charts/chart/ChartColours.js +2 -0
  12. package/dpr/components/_charts/chart/ChartColours.js.map +7 -0
  13. package/dpr/components/_charts/chart/ChartColours.ts +36 -0
  14. package/dpr/components/_charts/chart/ChartTimeseries.js +2 -0
  15. package/dpr/components/_charts/chart/ChartTimeseries.js.map +7 -0
  16. package/dpr/components/_charts/chart/ChartTimeseries.ts +95 -0
  17. package/dpr/components/_charts/chart/bar/BarChart.js +2 -0
  18. package/dpr/components/_charts/chart/bar/BarChart.js.map +7 -0
  19. package/dpr/components/_charts/chart/bar/BarChart.ts +204 -0
  20. package/dpr/components/_charts/chart/bar/clientClass.mjs +0 -58
  21. package/dpr/components/_charts/chart/bar/types.js +2 -0
  22. package/dpr/components/_charts/chart/bar/types.js.map +7 -0
  23. package/dpr/components/_charts/chart/bar/types.ts +6 -0
  24. package/dpr/components/_charts/chart/bar/validate.js +2 -0
  25. package/dpr/components/_charts/chart/bar/validate.js.map +7 -0
  26. package/dpr/components/_charts/chart/bar/validate.ts +59 -0
  27. package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js +2 -0
  28. package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js.map +7 -0
  29. package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.ts +57 -0
  30. package/dpr/components/_charts/chart/bar-timeseries/types.js +2 -0
  31. package/dpr/components/_charts/chart/bar-timeseries/types.js.map +7 -0
  32. package/dpr/components/_charts/chart/bar-timeseries/types.ts +5 -0
  33. package/dpr/components/_charts/chart/bar-timeseries/validate.js +2 -0
  34. package/dpr/components/_charts/chart/bar-timeseries/validate.js.map +7 -0
  35. package/dpr/components/_charts/chart/bar-timeseries/validate.ts +30 -0
  36. package/dpr/components/_charts/chart/buckets/Buckets.js +2 -0
  37. package/dpr/components/_charts/chart/buckets/Buckets.js.map +7 -0
  38. package/dpr/components/_charts/chart/{Buckets.ts → buckets/Buckets.ts} +18 -14
  39. package/dpr/components/_charts/chart/buckets/types.js +2 -0
  40. package/dpr/components/_charts/chart/buckets/types.js.map +7 -0
  41. package/dpr/components/_charts/chart/buckets/types.ts +4 -0
  42. package/dpr/components/_charts/chart/buckets/validate.js +2 -0
  43. package/dpr/components/_charts/chart/buckets/validate.js.map +7 -0
  44. package/dpr/components/_charts/chart/buckets/validate.ts +15 -0
  45. package/dpr/components/_charts/chart/chart-config.js +2 -0
  46. package/dpr/components/_charts/chart/chart-config.js.map +7 -0
  47. package/dpr/components/_charts/chart/chart-config.ts +108 -0
  48. package/dpr/components/_charts/chart/clientClass.mjs +28 -106
  49. package/dpr/components/_charts/chart/doughnut/DoughnutChart.js +2 -0
  50. package/dpr/components/_charts/chart/doughnut/DoughnutChart.js.map +7 -0
  51. package/dpr/components/_charts/chart/doughnut/DoughnutChart.ts +77 -0
  52. package/dpr/components/_charts/chart/doughnut/clientClass.mjs +0 -45
  53. package/dpr/components/_charts/chart/doughnut/types.js +2 -0
  54. package/dpr/components/_charts/chart/doughnut/types.js.map +7 -0
  55. package/dpr/components/_charts/chart/doughnut/types.ts +5 -0
  56. package/dpr/components/_charts/chart/doughnut/validate.js +2 -0
  57. package/dpr/components/_charts/chart/doughnut/validate.js.map +7 -0
  58. package/dpr/components/_charts/chart/doughnut/validate.ts +30 -0
  59. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
  60. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +3 -3
  61. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +122 -44
  62. package/dpr/components/_charts/chart/heatmap/clientClass.mjs +7 -89
  63. package/dpr/components/_charts/chart/heatmap/types.js +1 -1
  64. package/dpr/components/_charts/chart/heatmap/types.js.map +1 -1
  65. package/dpr/components/_charts/chart/heatmap/types.ts +5 -0
  66. package/dpr/components/_charts/chart/heatmap/validate.js +2 -0
  67. package/dpr/components/_charts/chart/heatmap/validate.js.map +7 -0
  68. package/dpr/components/_charts/chart/heatmap/validate.ts +25 -0
  69. package/dpr/components/_charts/chart/line/LineChart.js +2 -0
  70. package/dpr/components/_charts/chart/line/LineChart.js.map +7 -0
  71. package/dpr/components/_charts/chart/line/LineChart.ts +89 -0
  72. package/dpr/components/_charts/chart/line/clientClass.mjs +5 -36
  73. package/dpr/components/_charts/chart/line/types.js +2 -0
  74. package/dpr/components/_charts/chart/line/types.js.map +7 -0
  75. package/dpr/components/_charts/chart/line/types.ts +5 -0
  76. package/dpr/components/_charts/chart/line/validate.js +2 -0
  77. package/dpr/components/_charts/chart/line/validate.js.map +7 -0
  78. package/dpr/components/_charts/chart/line/validate.ts +30 -0
  79. package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js +2 -0
  80. package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js.map +7 -0
  81. package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.ts +57 -0
  82. package/dpr/components/_charts/chart/line-timeseries/types.js +2 -0
  83. package/dpr/components/_charts/chart/line-timeseries/types.js.map +7 -0
  84. package/dpr/components/_charts/chart/line-timeseries/types.ts +5 -0
  85. package/dpr/components/_charts/chart/line-timeseries/validate.js +2 -0
  86. package/dpr/components/_charts/chart/line-timeseries/validate.js.map +7 -0
  87. package/dpr/components/_charts/chart/line-timeseries/validate.ts +30 -0
  88. package/dpr/components/_charts/chart/view.njk +8 -1
  89. package/dpr/components/_charts/chart-tabs/view.njk +15 -14
  90. package/dpr/components/_charts/utils.js +1 -1
  91. package/dpr/components/_charts/utils.js.map +3 -3
  92. package/dpr/components/_charts/utils.test.ts +9 -3
  93. package/dpr/components/_charts/utils.ts +59 -193
  94. package/dpr/components/_dashboards/dashboard-list/types.js +2 -0
  95. package/dpr/components/_dashboards/dashboard-list/types.js.map +7 -0
  96. package/dpr/components/_dashboards/dashboard-list/types.ts +4 -0
  97. package/dpr/components/_dashboards/dashboard-list/validate.js +2 -0
  98. package/dpr/components/_dashboards/dashboard-list/validate.js.map +7 -0
  99. package/dpr/components/_dashboards/dashboard-list/validate.ts +28 -0
  100. package/dpr/components/_dashboards/dashboard-visualisation/Validate.js +2 -0
  101. package/dpr/components/_dashboards/dashboard-visualisation/Validate.js.map +7 -0
  102. package/dpr/components/_dashboards/dashboard-visualisation/Validate.ts +71 -0
  103. package/dpr/components/_dashboards/dashboard-visualisation/types.js +1 -1
  104. package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +2 -2
  105. package/dpr/components/_dashboards/dashboard-visualisation/types.ts +32 -2
  106. package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
  107. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +3 -3
  108. package/dpr/components/_dashboards/scorecard/Scorecard.ts +82 -213
  109. package/dpr/components/_dashboards/scorecard/types.js +1 -1
  110. package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
  111. package/dpr/components/_dashboards/scorecard/types.ts +11 -1
  112. package/dpr/components/_dashboards/scorecard/validate.js +2 -0
  113. package/dpr/components/_dashboards/scorecard/validate.js.map +7 -0
  114. package/dpr/components/_dashboards/scorecard/validate.ts +36 -0
  115. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js +2 -0
  116. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js.map +7 -0
  117. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.ts +228 -0
  118. package/dpr/components/_dashboards/scorecard-group/types.js +2 -0
  119. package/dpr/components/_dashboards/scorecard-group/types.js.map +7 -0
  120. package/dpr/components/_dashboards/scorecard-group/types.ts +5 -0
  121. package/dpr/components/_dashboards/scorecard-group/validate.js +2 -0
  122. package/dpr/components/_dashboards/scorecard-group/validate.js.map +7 -0
  123. package/dpr/components/_dashboards/scorecard-group/validate.ts +37 -0
  124. package/dpr/components/_filters/filter-input/types.d.js.map +1 -1
  125. package/dpr/components/_filters/filter-input/types.d.ts +1 -1
  126. package/dpr/components/_filters/types.d.js.map +1 -1
  127. package/dpr/components/_filters/types.d.ts +6 -4
  128. package/dpr/components/_reports/report-actions/types.d.js.map +1 -1
  129. package/dpr/components/_reports/report-actions/types.d.ts +1 -1
  130. package/dpr/components/report-list/types.d.js.map +1 -1
  131. package/dpr/components/report-list/types.d.ts +1 -1
  132. package/dpr/data/types.d.js +1 -1
  133. package/dpr/data/types.d.js.map +1 -1
  134. package/dpr/data/types.d.ts +2 -1
  135. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  136. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  137. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +22 -10
  138. package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
  139. package/dpr/routes/journeys/view-report/async/report/utils.js.map +2 -2
  140. package/dpr/routes/journeys/view-report/async/report/utils.ts +1 -1
  141. package/dpr/routes/journeys/view-report/controller.js +1 -1
  142. package/dpr/routes/journeys/view-report/controller.js.map +3 -3
  143. package/dpr/routes/journeys/view-report/controller.ts +3 -1
  144. package/dpr/types/Services.d.js +1 -1
  145. package/dpr/types/Services.d.js.map +1 -1
  146. package/dpr/types/Services.d.ts +0 -2
  147. package/dpr/utils/DataTableBuilder/types.d.js +1 -1
  148. package/dpr/utils/DataTableBuilder/types.d.js.map +1 -1
  149. package/dpr/utils/DataTableBuilder/types.d.ts +2 -2
  150. package/dpr/utils/ErrorHandler.js +1 -1
  151. package/dpr/utils/ErrorHandler.js.map +3 -3
  152. package/dpr/utils/ErrorHandler.ts +16 -0
  153. package/dpr/utils/ParentChildDataTableBuilder/types.d.js +1 -1
  154. package/dpr/utils/ParentChildDataTableBuilder/types.d.js.map +1 -1
  155. package/dpr/utils/ParentChildDataTableBuilder/types.d.ts +1 -0
  156. package/dpr/utils/Personalisation/types.d.js +1 -1
  157. package/dpr/utils/Personalisation/types.d.js.map +1 -1
  158. package/dpr/utils/Personalisation/types.d.ts +1 -0
  159. package/dpr/utils/UserStoreItemBuilder.js.map +2 -2
  160. package/dpr/utils/UserStoreItemBuilder.ts +1 -1
  161. package/package.json +1 -1
  162. package/dpr/components/_charts/chart/Buckets.js +0 -2
  163. package/dpr/components/_charts/chart/Buckets.js.map +0 -7
  164. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +0 -2
  165. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +0 -7
  166. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +0 -40
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_dashboards/scorecard/Scorecard.ts"],
4
- "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport DashboardVisualisationClass from '../dashboard-visualisation/DashboardVisualisation'\nimport { DashboardVisualisationBucket } from '../dashboard-visualisation/types'\nimport DatasetHelper from '../../../utils/datasetHelper'\nimport { CreateScorecardDataArgs, Scorecard, ScorecardDataset, ScorecardGroup, ScorecardTrend } from './types'\nimport Buckets from '../../_charts/chart/Buckets'\nimport { components } from '../../../types/api'\n\nclass ScorecardVisualisation extends DashboardVisualisationClass {\n private dataset: ScorecardDataset\n\n private groupKey: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined\n\n private groupKeyId: string | undefined\n\n private groupKeyDisplay: string | undefined\n\n private bucketsHelper: Buckets | undefined\n\n private buckets: DashboardVisualisationBucket[] = []\n\n private valueColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined\n\n private valueKey = ''\n\n private titleColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined\n\n private titleKey = ''\n\n private group: boolean\n\n private ragColours: string[] = ['#cce2d8', '#fff7bf', '#f4cdc6']\n\n constructor(\n responseData: DashboardDataResponse[],\n definition: components['schemas']['DashboardVisualisationDefinition'],\n group = false,\n ) {\n super(responseData, definition)\n this.group = group\n this.dataset = this.getDataset(definition, responseData)\n\n if (group) {\n this.initGroupVars()\n } else {\n this.valueKey = this.measures[0].id\n this.titleColumn = { display: definition.display || '', id: this.valueKey }\n this.initBuckets(responseData, this.valueKey)\n }\n }\n\n private initBuckets = (responseData: DashboardDataResponse[], valueKey: string) => {\n if (this.definition.options?.buckets || this.definition.options?.useRagColour) {\n this.bucketsHelper = new Buckets(responseData, this.definition, valueKey, false, this.ragColours)\n this.buckets = new Buckets(responseData, this.definition, valueKey, false, this.ragColours).getBuckets()\n }\n }\n\n private initGroupVars = () => {\n this.groupKey = DatasetHelper.getGroupKey(this.dataset.latest, this.keys)\n this.groupKeyId = this.groupKey?.id\n this.groupKeyDisplay = this.groupKey?.display\n\n this.valueColumn = this.measures.find((col) => col.displayValue)\n if (this.valueColumn) {\n this.valueKey = this.valueColumn?.id\n this.titleColumn = this.measures.find((col) => {\n return col.display || col.display === ''\n })\n this.titleKey = this.titleColumn?.id || ''\n }\n }\n\n private getDataset = (\n scorecardDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n ): ScorecardDataset => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const latestDataSetRows = DatasetHelper.getDatasetRows(scorecardDefinition, latestData)\n const latestTs = latestDataSetRows[0]?.['ts']?.raw\n const latestFiltered = DatasetHelper.filterRowsByDisplayColumns(scorecardDefinition, latestDataSetRows, true)\n\n const earliestData = DatasetHelper.getEarliestDataset(rawData)\n const earliestDataSetRows = DatasetHelper.getDatasetRows(scorecardDefinition, earliestData)\n const earliestTs = earliestDataSetRows[0]?.['ts']?.raw\n const earliestfiltered = DatasetHelper.filterRowsByDisplayColumns(scorecardDefinition, earliestDataSetRows, true)\n\n return {\n earliest: earliestfiltered,\n earliestTs,\n latest: latestFiltered,\n latestTs,\n }\n }\n\n private setRagScore = (value: number, rag?: number) => {\n return this.bucketsHelper?.getBucketForValue(value, rag)\n }\n\n private createScorecardData = ({\n title,\n value,\n rag,\n valueFor,\n valueFrom,\n prevVal,\n groupTitle,\n }: CreateScorecardDataArgs): Scorecard => {\n return {\n id: this.definition.id,\n title,\n value,\n ...(!Number.isNaN(value) &&\n this.buckets.length &&\n this.bucketsHelper && { rag: this.setRagScore(<number>value, rag) }),\n valueFor,\n trend: this.createTrend(valueFor, valueFrom, value, prevVal),\n ...(groupTitle && {\n group: groupTitle,\n }),\n }\n }\n\n private createTrend = (\n valueFor: string,\n valueFrom: string,\n latestValue: string | number,\n earliestValue: string | number | null | undefined,\n ): ScorecardTrend | undefined => {\n let trendData\n\n if (valueFrom !== valueFor) {\n const value = earliestValue ? Number(latestValue) - Number(earliestValue) : 0\n const direction = Math.sign(value)\n trendData = {\n direction,\n value: Math.abs(value),\n from: valueFrom,\n }\n }\n\n return trendData\n }\n\n private validateDefinition = () => {\n const { id, type } = this.definition\n const errors = []\n if (!this.group) {\n if (this.measures.length !== 1) {\n errors.push(`Measures should only have 1 column defined. Found ${this.measures.length}`)\n } else if (!this.titleColumn) {\n errors.push(`No title column defined. Expected measure to include \"display: string\" field`)\n } else if (!this.valueKey) {\n errors.push(`Missing ID in title measure. Expected measure to include \"id: string\" field`)\n }\n }\n\n if (errors.length) {\n // Throw the error\n const message = `Validation: Visualisaton definition: ID: ${id}, type: ${type}, errors: ${errors.join(',')}`\n throw new Error(message)\n }\n }\n\n private createScorecardGroupFromColumns = () => {\n const { latest, earliest, latestTs, earliestTs } = this.dataset\n\n return latest.map((row, rowIndex) => {\n return {\n title: this.createGroupTitle(row),\n scorecards: Object.keys(row)\n .filter((colId) => colId !== this.groupKeyId)\n .map((colId) => {\n const measure = this.measures.find((m) => m.id === colId)\n const title = measure?.display || colId\n const rowCol = row[colId]\n const { raw, rag: ragScore } = rowCol\n const value = Number(raw)\n\n const rag = ragScore !== undefined ? Number(ragScore) : undefined\n this.initBuckets([row], colId)\n\n const valueFor = `${latestTs}`\n const valueFrom = `${earliestTs}`\n\n const comparisonRow = earliest[rowIndex]\n const prevVal = comparisonRow[colId]?.raw\n\n return this.createScorecardData({\n title,\n value,\n rag,\n prevVal,\n valueFor,\n valueFrom,\n })\n }),\n }\n })\n }\n\n private createScorecardGroupFromList = (): ScorecardGroup[] => {\n const { latest, earliest } = this.dataset\n return [\n {\n title: '',\n scorecards: latest.map((row: DashboardDataResponse, index: number) => {\n const values = this.getScorecardValues(row)\n const prevVal = earliest[index][this.valueKey].raw\n return this.createScorecardData({\n ...values,\n prevVal,\n })\n }),\n },\n ]\n }\n\n private createScorecardGroupFromListWithGroups = () => {\n const { latest, earliest } = this.dataset\n\n let earliestGroupedByKey = DatasetHelper.groupRowsByKey(earliest, <string>this.groupKeyId)\n let latestGroupedByKey = DatasetHelper.groupRowsByKey(latest, <string>this.groupKeyId)\n if (this.groupKeyId === this.titleKey) {\n latestGroupedByKey = [latestGroupedByKey.flat()]\n earliestGroupedByKey = [earliestGroupedByKey.flat()]\n }\n\n const scorecardGroup = latestGroupedByKey.map((group, groupIndex) => {\n return {\n title: this.groupKeyDisplay ? `By ${this.groupKeyDisplay}` : '',\n scorecards: group.map((row, rowIndex) => {\n const values = this.getScorecardValues(row)\n const comparisonRow = earliestGroupedByKey[groupIndex][rowIndex]\n const prevVal = comparisonRow[this.valueKey]?.raw\n\n return this.createScorecardData({\n ...values,\n prevVal,\n })\n }),\n }\n })\n\n return scorecardGroup\n }\n\n private getScorecardValues = (row: DashboardDataResponse) => {\n const { latestTs, earliestTs } = this.dataset\n const title = `${this.titleColumn?.display} ${row[this.titleKey].raw}`\n const rowCol = row[this.valueKey]\n const { raw, rag: ragScore } = rowCol\n const value = Number(raw)\n const rag = ragScore !== undefined ? Number(ragScore) : undefined\n this.initBuckets([row], this.valueKey)\n const valueFor = `${latestTs}`\n const valueFrom = `${earliestTs}`\n\n return {\n title,\n value,\n rag,\n valueFor,\n valueFrom,\n }\n }\n\n /**\n * Builds a single scorecard\n *\n * @return {Scorecard}\n */\n private buildScorecard = () => {\n const { latest, earliest, latestTs, earliestTs } = this.dataset\n const scorecordArr: Scorecard[] = latest.map((datasetRow: DashboardDataResponse, index: number) => {\n const { raw: value, rag } = datasetRow[this.valueKey]\n const prevVal = earliest[index][this.valueKey].raw\n const valueFor = `${latestTs}`\n const valueFrom = `${earliestTs}`\n const title = this.titleColumn?.display\n\n return this.createScorecardData({\n title: title || '',\n value: value || '',\n rag,\n prevVal,\n valueFor,\n valueFrom,\n })\n })\n\n return scorecordArr[0]\n }\n\n private createGroupTitle = (row: DashboardDataResponse) => {\n const title = this.groupKeyId ? `${row[this.groupKeyId]?.raw}` : ''\n return this.groupKeyDisplay && this.groupKeyDisplay.length ? `${this.groupKeyDisplay}: ${title}` : title\n }\n\n private buildGroup = () => {\n let scorecardGroup: ScorecardGroup[]\n if (!this.valueColumn) {\n scorecardGroup = this.createScorecardGroupFromColumns()\n } else if (this.groupKey) {\n scorecardGroup = this.createScorecardGroupFromListWithGroups()\n } else {\n scorecardGroup = this.createScorecardGroupFromList()\n }\n return scorecardGroup\n }\n\n build = () => {\n this.validateDefinition()\n if (this.group) {\n return this.buildGroup()\n }\n return this.buildScorecard()\n }\n}\n\nexport { ScorecardVisualisation }\nexport default ScorecardVisualisation\n"],
5
- "mappings": "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",
6
- "names": ["Scorecard_exports", "__export", "ScorecardVisualisation", "Scorecard_default", "__toCommonJS", "import_DashboardVisualisation", "import_datasetHelper", "import_Buckets", "DashboardVisualisationClass", "responseData", "definition", "group", "valueKey", "Buckets", "DatasetHelper", "col", "scorecardDefinition", "rawData", "latestData", "latestDataSetRows", "latestTs", "latestFiltered", "earliestData", "earliestDataSetRows", "earliestTs", "value", "rag", "title", "valueFor", "valueFrom", "prevVal", "groupTitle", "latestValue", "earliestValue", "trendData", "id", "type", "errors", "message", "latest", "earliest", "row", "rowIndex", "colId", "m", "rowCol", "raw", "ragScore", "index", "values", "earliestGroupedByKey", "latestGroupedByKey", "groupIndex", "datasetRow", "scorecardGroup"]
4
+ "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport { DashboardVisualisationBucket } from '../dashboard-visualisation/types'\nimport { CreateScorecardDataArgs, Scorecard, ScorecardDataset, ScorecardDefinitionType, ScorecardTrend } from './types'\nimport Buckets from '../../_charts/chart/buckets/Buckets'\nimport { components } from '../../../types/api'\nimport DatasetHelper from '../../../utils/datasetHelper'\nimport ScorecardSchemas from './validate'\nimport { ScorecardGroupDefinitionType } from '../scorecard-group/types'\n\nclass ScorecardVisualisation {\n private definition!: ScorecardDefinitionType\n\n private id!: string\n\n private measures!: ScorecardDefinitionType['columns']['measures']\n\n private options!: ScorecardDefinitionType['options']\n\n private dataset!: ScorecardDataset\n\n private bucketsHelper: Buckets | undefined\n\n private buckets: DashboardVisualisationBucket[] = []\n\n private valueKey!: string\n\n private titleColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined\n\n private unit: 'NUMBER' | 'PERCENTAGE' | undefined\n\n responseData: DashboardDataResponse[] = []\n\n ragColours: string[] = ['#cce2d8', '#fff7bf', '#f4cdc6']\n\n withDefinition = (definition: components['schemas']['DashboardVisualisationDefinition']) => {\n this.definition = ScorecardSchemas.ScorecardSchema.parse(definition)\n this.init()\n\n return this\n }\n\n withData = (responseData: DashboardDataResponse[]) => {\n this.responseData = responseData\n this.dataset = this.getDataset(this.definition, this.responseData)\n this.initBuckets(this.responseData, this.valueKey)\n\n return this\n }\n\n private init = () => {\n this.id = this.definition.id\n this.measures = this.definition.columns.measures\n this.options = this.definition.options\n this.titleColumn = { display: this.definition.display, id: this.valueKey }\n this.initFromMeasures()\n }\n\n private initFromMeasures = () => {\n // Zod should throw an error on line 40 so should always pass\n if (this.measures[0] !== undefined) {\n this.valueKey = this.measures[0].id\n this.unit = this.measures[0].unit ? this.measures[0].unit : undefined\n }\n }\n\n private initBuckets = (responseData: DashboardDataResponse[], valueKey: string) => {\n if (this.options?.buckets || this.options?.useRagColour) {\n this.bucketsHelper = new Buckets(responseData, this.definition, valueKey, false, this.ragColours)\n this.buckets = this.bucketsHelper.getBuckets()\n }\n }\n\n getDataset = (\n definition: ScorecardDefinitionType | ScorecardGroupDefinitionType,\n rawData: DashboardDataResponse[],\n ): ScorecardDataset => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const latestDataSetRows = DatasetHelper.getDatasetRows(\n <components['schemas']['DashboardVisualisationDefinition']>definition,\n latestData,\n )\n const latestTs = latestDataSetRows[0]?.['ts']?.raw\n const latestFiltered = DatasetHelper.filterRowsByDisplayColumns(\n <components['schemas']['DashboardVisualisationDefinition']>definition,\n latestDataSetRows,\n true,\n )\n\n const earliestData = DatasetHelper.getEarliestDataset(rawData)\n const earliestDataSetRows = DatasetHelper.getDatasetRows(\n <components['schemas']['DashboardVisualisationDefinition']>definition,\n earliestData,\n )\n const earliestTs = earliestDataSetRows[0]?.['ts']?.raw\n const earliestfiltered = DatasetHelper.filterRowsByDisplayColumns(\n <components['schemas']['DashboardVisualisationDefinition']>definition,\n earliestDataSetRows,\n true,\n )\n\n return {\n earliest: earliestfiltered,\n earliestTs,\n latest: latestFiltered,\n latestTs,\n }\n }\n\n createScorecardData = ({\n id,\n title,\n value,\n rag,\n valueFor,\n valueFrom,\n prevVal,\n groupTitle,\n }: CreateScorecardDataArgs): Scorecard => {\n return {\n id,\n title,\n value,\n ...(rag && { rag }),\n valueFor,\n trend: this.createTrend(valueFor, valueFrom, value, prevVal),\n ...(groupTitle && {\n group: groupTitle,\n }),\n }\n }\n\n createTrend = (\n valueFor: string,\n valueFrom: string,\n latestValue: string | number,\n earliestValue: string | number | null | undefined,\n ): ScorecardTrend | undefined => {\n let trendData\n\n if (valueFrom !== valueFor) {\n const value = earliestValue ? Number(latestValue) - Number(earliestValue) : 0\n const direction = Math.sign(value)\n trendData = {\n direction,\n value: Math.abs(value),\n from: valueFrom,\n }\n }\n\n return trendData\n }\n\n setRagScore = (\n value: string | number | undefined | null,\n rag: number | undefined,\n buckets: DashboardVisualisationBucket[] | undefined,\n bucketsHelper: Buckets | undefined,\n ) => {\n let ragScore\n if (!Number.isNaN(value) && buckets?.length && bucketsHelper) {\n ragScore = bucketsHelper.getBucketForValue(<number>value, rag)\n }\n return ragScore\n }\n\n build = () => {\n const { latest, earliest, latestTs, earliestTs } = this.dataset\n const scorecordArr: Scorecard[] = latest.map((datasetRow: DashboardDataResponse, index: number) => {\n const { raw: value, rag } = datasetRow[this.valueKey]\n const prevVal = earliest[index][this.valueKey].raw\n const valueFor = `${latestTs}`\n const valueFrom = `${earliestTs}`\n const title = this.titleColumn?.display\n\n return this.createScorecardData({\n id: this.id,\n title: title || '',\n value: value || '',\n rag: this.setRagScore(value, rag, this.buckets, this.bucketsHelper),\n prevVal,\n valueFor,\n valueFrom,\n })\n })\n\n return scorecordArr[0]\n }\n}\n\nexport { ScorecardVisualisation }\nexport default ScorecardVisualisation\n"],
5
+ "mappings": "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",
6
+ "names": ["Scorecard_exports", "__export", "ScorecardVisualisation", "Scorecard_default", "__toCommonJS", "import_Buckets", "import_datasetHelper", "import_validate", "definition", "ScorecardSchemas", "responseData", "valueKey", "Buckets", "rawData", "latestData", "DatasetHelper", "latestDataSetRows", "latestTs", "latestFiltered", "earliestData", "earliestDataSetRows", "earliestTs", "id", "title", "value", "rag", "valueFor", "valueFrom", "prevVal", "groupTitle", "latestValue", "earliestValue", "trendData", "buckets", "bucketsHelper", "ragScore", "latest", "earliest", "datasetRow", "index"]
7
7
  }
@@ -1,90 +1,103 @@
1
1
  /* eslint-disable prefer-destructuring */
2
2
  import { DashboardDataResponse } from '../../../types/Metrics'
3
- import DashboardVisualisationClass from '../dashboard-visualisation/DashboardVisualisation'
4
3
  import { DashboardVisualisationBucket } from '../dashboard-visualisation/types'
5
- import DatasetHelper from '../../../utils/datasetHelper'
6
- import { CreateScorecardDataArgs, Scorecard, ScorecardDataset, ScorecardGroup, ScorecardTrend } from './types'
7
- import Buckets from '../../_charts/chart/Buckets'
4
+ import { CreateScorecardDataArgs, Scorecard, ScorecardDataset, ScorecardDefinitionType, ScorecardTrend } from './types'
5
+ import Buckets from '../../_charts/chart/buckets/Buckets'
8
6
  import { components } from '../../../types/api'
7
+ import DatasetHelper from '../../../utils/datasetHelper'
8
+ import ScorecardSchemas from './validate'
9
+ import { ScorecardGroupDefinitionType } from '../scorecard-group/types'
9
10
 
10
- class ScorecardVisualisation extends DashboardVisualisationClass {
11
- private dataset: ScorecardDataset
11
+ class ScorecardVisualisation {
12
+ private definition!: ScorecardDefinitionType
12
13
 
13
- private groupKey: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined
14
+ private id!: string
14
15
 
15
- private groupKeyId: string | undefined
16
+ private measures!: ScorecardDefinitionType['columns']['measures']
16
17
 
17
- private groupKeyDisplay: string | undefined
18
+ private options!: ScorecardDefinitionType['options']
19
+
20
+ private dataset!: ScorecardDataset
18
21
 
19
22
  private bucketsHelper: Buckets | undefined
20
23
 
21
24
  private buckets: DashboardVisualisationBucket[] = []
22
25
 
23
- private valueColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined
24
-
25
- private valueKey = ''
26
+ private valueKey!: string
26
27
 
27
28
  private titleColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined
28
29
 
29
- private titleKey = ''
30
+ private unit: 'NUMBER' | 'PERCENTAGE' | undefined
30
31
 
31
- private group: boolean
32
+ responseData: DashboardDataResponse[] = []
32
33
 
33
- private ragColours: string[] = ['#cce2d8', '#fff7bf', '#f4cdc6']
34
+ ragColours: string[] = ['#cce2d8', '#fff7bf', '#f4cdc6']
34
35
 
35
- constructor(
36
- responseData: DashboardDataResponse[],
37
- definition: components['schemas']['DashboardVisualisationDefinition'],
38
- group = false,
39
- ) {
40
- super(responseData, definition)
41
- this.group = group
42
- this.dataset = this.getDataset(definition, responseData)
36
+ withDefinition = (definition: components['schemas']['DashboardVisualisationDefinition']) => {
37
+ this.definition = ScorecardSchemas.ScorecardSchema.parse(definition)
38
+ this.init()
43
39
 
44
- if (group) {
45
- this.initGroupVars()
46
- } else {
40
+ return this
41
+ }
42
+
43
+ withData = (responseData: DashboardDataResponse[]) => {
44
+ this.responseData = responseData
45
+ this.dataset = this.getDataset(this.definition, this.responseData)
46
+ this.initBuckets(this.responseData, this.valueKey)
47
+
48
+ return this
49
+ }
50
+
51
+ private init = () => {
52
+ this.id = this.definition.id
53
+ this.measures = this.definition.columns.measures
54
+ this.options = this.definition.options
55
+ this.titleColumn = { display: this.definition.display, id: this.valueKey }
56
+ this.initFromMeasures()
57
+ }
58
+
59
+ private initFromMeasures = () => {
60
+ // Zod should throw an error on line 40 so should always pass
61
+ if (this.measures[0] !== undefined) {
47
62
  this.valueKey = this.measures[0].id
48
- this.titleColumn = { display: definition.display || '', id: this.valueKey }
49
- this.initBuckets(responseData, this.valueKey)
63
+ this.unit = this.measures[0].unit ? this.measures[0].unit : undefined
50
64
  }
51
65
  }
52
66
 
53
67
  private initBuckets = (responseData: DashboardDataResponse[], valueKey: string) => {
54
- if (this.definition.options?.buckets || this.definition.options?.useRagColour) {
68
+ if (this.options?.buckets || this.options?.useRagColour) {
55
69
  this.bucketsHelper = new Buckets(responseData, this.definition, valueKey, false, this.ragColours)
56
- this.buckets = new Buckets(responseData, this.definition, valueKey, false, this.ragColours).getBuckets()
57
- }
58
- }
59
-
60
- private initGroupVars = () => {
61
- this.groupKey = DatasetHelper.getGroupKey(this.dataset.latest, this.keys)
62
- this.groupKeyId = this.groupKey?.id
63
- this.groupKeyDisplay = this.groupKey?.display
64
-
65
- this.valueColumn = this.measures.find((col) => col.displayValue)
66
- if (this.valueColumn) {
67
- this.valueKey = this.valueColumn?.id
68
- this.titleColumn = this.measures.find((col) => {
69
- return col.display || col.display === ''
70
- })
71
- this.titleKey = this.titleColumn?.id || ''
70
+ this.buckets = this.bucketsHelper.getBuckets()
72
71
  }
73
72
  }
74
73
 
75
- private getDataset = (
76
- scorecardDefinition: components['schemas']['DashboardVisualisationDefinition'],
74
+ getDataset = (
75
+ definition: ScorecardDefinitionType | ScorecardGroupDefinitionType,
77
76
  rawData: DashboardDataResponse[],
78
77
  ): ScorecardDataset => {
79
78
  const latestData = DatasetHelper.getLastestDataset(rawData)
80
- const latestDataSetRows = DatasetHelper.getDatasetRows(scorecardDefinition, latestData)
79
+ const latestDataSetRows = DatasetHelper.getDatasetRows(
80
+ <components['schemas']['DashboardVisualisationDefinition']>definition,
81
+ latestData,
82
+ )
81
83
  const latestTs = latestDataSetRows[0]?.['ts']?.raw
82
- const latestFiltered = DatasetHelper.filterRowsByDisplayColumns(scorecardDefinition, latestDataSetRows, true)
84
+ const latestFiltered = DatasetHelper.filterRowsByDisplayColumns(
85
+ <components['schemas']['DashboardVisualisationDefinition']>definition,
86
+ latestDataSetRows,
87
+ true,
88
+ )
83
89
 
84
90
  const earliestData = DatasetHelper.getEarliestDataset(rawData)
85
- const earliestDataSetRows = DatasetHelper.getDatasetRows(scorecardDefinition, earliestData)
91
+ const earliestDataSetRows = DatasetHelper.getDatasetRows(
92
+ <components['schemas']['DashboardVisualisationDefinition']>definition,
93
+ earliestData,
94
+ )
86
95
  const earliestTs = earliestDataSetRows[0]?.['ts']?.raw
87
- const earliestfiltered = DatasetHelper.filterRowsByDisplayColumns(scorecardDefinition, earliestDataSetRows, true)
96
+ const earliestfiltered = DatasetHelper.filterRowsByDisplayColumns(
97
+ <components['schemas']['DashboardVisualisationDefinition']>definition,
98
+ earliestDataSetRows,
99
+ true,
100
+ )
88
101
 
89
102
  return {
90
103
  earliest: earliestfiltered,
@@ -94,11 +107,8 @@ class ScorecardVisualisation extends DashboardVisualisationClass {
94
107
  }
95
108
  }
96
109
 
97
- private setRagScore = (value: number, rag?: number) => {
98
- return this.bucketsHelper?.getBucketForValue(value, rag)
99
- }
100
-
101
- private createScorecardData = ({
110
+ createScorecardData = ({
111
+ id,
102
112
  title,
103
113
  value,
104
114
  rag,
@@ -108,12 +118,10 @@ class ScorecardVisualisation extends DashboardVisualisationClass {
108
118
  groupTitle,
109
119
  }: CreateScorecardDataArgs): Scorecard => {
110
120
  return {
111
- id: this.definition.id,
121
+ id,
112
122
  title,
113
123
  value,
114
- ...(!Number.isNaN(value) &&
115
- this.buckets.length &&
116
- this.bucketsHelper && { rag: this.setRagScore(<number>value, rag) }),
124
+ ...(rag && { rag }),
117
125
  valueFor,
118
126
  trend: this.createTrend(valueFor, valueFrom, value, prevVal),
119
127
  ...(groupTitle && {
@@ -122,7 +130,7 @@ class ScorecardVisualisation extends DashboardVisualisationClass {
122
130
  }
123
131
  }
124
132
 
125
- private createTrend = (
133
+ createTrend = (
126
134
  valueFor: string,
127
135
  valueFrom: string,
128
136
  latestValue: string | number,
@@ -143,135 +151,20 @@ class ScorecardVisualisation extends DashboardVisualisationClass {
143
151
  return trendData
144
152
  }
145
153
 
146
- private validateDefinition = () => {
147
- const { id, type } = this.definition
148
- const errors = []
149
- if (!this.group) {
150
- if (this.measures.length !== 1) {
151
- errors.push(`Measures should only have 1 column defined. Found ${this.measures.length}`)
152
- } else if (!this.titleColumn) {
153
- errors.push(`No title column defined. Expected measure to include "display: string" field`)
154
- } else if (!this.valueKey) {
155
- errors.push(`Missing ID in title measure. Expected measure to include "id: string" field`)
156
- }
157
- }
158
-
159
- if (errors.length) {
160
- // Throw the error
161
- const message = `Validation: Visualisaton definition: ID: ${id}, type: ${type}, errors: ${errors.join(',')}`
162
- throw new Error(message)
163
- }
164
- }
165
-
166
- private createScorecardGroupFromColumns = () => {
167
- const { latest, earliest, latestTs, earliestTs } = this.dataset
168
-
169
- return latest.map((row, rowIndex) => {
170
- return {
171
- title: this.createGroupTitle(row),
172
- scorecards: Object.keys(row)
173
- .filter((colId) => colId !== this.groupKeyId)
174
- .map((colId) => {
175
- const measure = this.measures.find((m) => m.id === colId)
176
- const title = measure?.display || colId
177
- const rowCol = row[colId]
178
- const { raw, rag: ragScore } = rowCol
179
- const value = Number(raw)
180
-
181
- const rag = ragScore !== undefined ? Number(ragScore) : undefined
182
- this.initBuckets([row], colId)
183
-
184
- const valueFor = `${latestTs}`
185
- const valueFrom = `${earliestTs}`
186
-
187
- const comparisonRow = earliest[rowIndex]
188
- const prevVal = comparisonRow[colId]?.raw
189
-
190
- return this.createScorecardData({
191
- title,
192
- value,
193
- rag,
194
- prevVal,
195
- valueFor,
196
- valueFrom,
197
- })
198
- }),
199
- }
200
- })
201
- }
202
-
203
- private createScorecardGroupFromList = (): ScorecardGroup[] => {
204
- const { latest, earliest } = this.dataset
205
- return [
206
- {
207
- title: '',
208
- scorecards: latest.map((row: DashboardDataResponse, index: number) => {
209
- const values = this.getScorecardValues(row)
210
- const prevVal = earliest[index][this.valueKey].raw
211
- return this.createScorecardData({
212
- ...values,
213
- prevVal,
214
- })
215
- }),
216
- },
217
- ]
218
- }
219
-
220
- private createScorecardGroupFromListWithGroups = () => {
221
- const { latest, earliest } = this.dataset
222
-
223
- let earliestGroupedByKey = DatasetHelper.groupRowsByKey(earliest, <string>this.groupKeyId)
224
- let latestGroupedByKey = DatasetHelper.groupRowsByKey(latest, <string>this.groupKeyId)
225
- if (this.groupKeyId === this.titleKey) {
226
- latestGroupedByKey = [latestGroupedByKey.flat()]
227
- earliestGroupedByKey = [earliestGroupedByKey.flat()]
228
- }
229
-
230
- const scorecardGroup = latestGroupedByKey.map((group, groupIndex) => {
231
- return {
232
- title: this.groupKeyDisplay ? `By ${this.groupKeyDisplay}` : '',
233
- scorecards: group.map((row, rowIndex) => {
234
- const values = this.getScorecardValues(row)
235
- const comparisonRow = earliestGroupedByKey[groupIndex][rowIndex]
236
- const prevVal = comparisonRow[this.valueKey]?.raw
237
-
238
- return this.createScorecardData({
239
- ...values,
240
- prevVal,
241
- })
242
- }),
243
- }
244
- })
245
-
246
- return scorecardGroup
247
- }
248
-
249
- private getScorecardValues = (row: DashboardDataResponse) => {
250
- const { latestTs, earliestTs } = this.dataset
251
- const title = `${this.titleColumn?.display} ${row[this.titleKey].raw}`
252
- const rowCol = row[this.valueKey]
253
- const { raw, rag: ragScore } = rowCol
254
- const value = Number(raw)
255
- const rag = ragScore !== undefined ? Number(ragScore) : undefined
256
- this.initBuckets([row], this.valueKey)
257
- const valueFor = `${latestTs}`
258
- const valueFrom = `${earliestTs}`
259
-
260
- return {
261
- title,
262
- value,
263
- rag,
264
- valueFor,
265
- valueFrom,
154
+ setRagScore = (
155
+ value: string | number | undefined | null,
156
+ rag: number | undefined,
157
+ buckets: DashboardVisualisationBucket[] | undefined,
158
+ bucketsHelper: Buckets | undefined,
159
+ ) => {
160
+ let ragScore
161
+ if (!Number.isNaN(value) && buckets?.length && bucketsHelper) {
162
+ ragScore = bucketsHelper.getBucketForValue(<number>value, rag)
266
163
  }
164
+ return ragScore
267
165
  }
268
166
 
269
- /**
270
- * Builds a single scorecard
271
- *
272
- * @return {Scorecard}
273
- */
274
- private buildScorecard = () => {
167
+ build = () => {
275
168
  const { latest, earliest, latestTs, earliestTs } = this.dataset
276
169
  const scorecordArr: Scorecard[] = latest.map((datasetRow: DashboardDataResponse, index: number) => {
277
170
  const { raw: value, rag } = datasetRow[this.valueKey]
@@ -281,9 +174,10 @@ class ScorecardVisualisation extends DashboardVisualisationClass {
281
174
  const title = this.titleColumn?.display
282
175
 
283
176
  return this.createScorecardData({
177
+ id: this.id,
284
178
  title: title || '',
285
179
  value: value || '',
286
- rag,
180
+ rag: this.setRagScore(value, rag, this.buckets, this.bucketsHelper),
287
181
  prevVal,
288
182
  valueFor,
289
183
  valueFrom,
@@ -292,31 +186,6 @@ class ScorecardVisualisation extends DashboardVisualisationClass {
292
186
 
293
187
  return scorecordArr[0]
294
188
  }
295
-
296
- private createGroupTitle = (row: DashboardDataResponse) => {
297
- const title = this.groupKeyId ? `${row[this.groupKeyId]?.raw}` : ''
298
- return this.groupKeyDisplay && this.groupKeyDisplay.length ? `${this.groupKeyDisplay}: ${title}` : title
299
- }
300
-
301
- private buildGroup = () => {
302
- let scorecardGroup: ScorecardGroup[]
303
- if (!this.valueColumn) {
304
- scorecardGroup = this.createScorecardGroupFromColumns()
305
- } else if (this.groupKey) {
306
- scorecardGroup = this.createScorecardGroupFromListWithGroups()
307
- } else {
308
- scorecardGroup = this.createScorecardGroupFromList()
309
- }
310
- return scorecardGroup
311
- }
312
-
313
- build = () => {
314
- this.validateDefinition()
315
- if (this.group) {
316
- return this.buildGroup()
317
- }
318
- return this.buildScorecard()
319
- }
320
189
  }
321
190
 
322
191
  export { ScorecardVisualisation }
@@ -1,2 +1,2 @@
1
- "use strict";var t=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var c=(e,r,i,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of s(r))!d.call(e,n)&&n!==i&&t(e,n,{get:()=>r[n],enumerable:!(a=o(r,n))||a.enumerable});return e};var u=e=>c(t({},"__esModule",{value:!0}),e);var g={};module.exports=u(g);
1
+ "use strict";var a=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var d=(e,r,i,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of c(r))!s.call(e,n)&&n!==i&&a(e,n,{get:()=>r[n],enumerable:!(t=o(r,n))||t.enumerable});return e};var u=e=>d(a({},"__esModule",{value:!0}),e);var g={};module.exports=u(g);
2
2
  //# sourceMappingURL=types.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_dashboards/scorecard/types.ts"],
4
- "sourcesContent": ["import { DashboardDataResponse } from '../../../types/Metrics'\n\nexport interface Scorecard {\n id: string\n title: string\n group?: string\n value: number | string\n trend?: ScorecardTrend | undefined\n link?:\n | {\n href: '#'\n displayName: 'View breakdown'\n }\n | undefined\n valueFor?: string\n rag?: ScorecardRag | undefined\n}\n\nexport interface ScorecardSubGroup {\n name: string\n scorecards: Scorecard[]\n}\n\nexport interface ScorecardGroup {\n title?: string\n description?: string\n scorecards: Scorecard[]\n}\n\nexport interface ScorecardTrend {\n direction: number\n value: number\n from: string\n}\n\nexport interface ScorecardRag {\n score: number\n colour: string\n}\n\nexport interface ScorecardDataset {\n earliest: DashboardDataResponse[]\n earliestTs?: string | number | null | undefined\n latest: DashboardDataResponse[]\n latestTs?: string | number | null | undefined\n}\n\nexport interface CreateScorecardDataArgs {\n title: string\n value: string | number\n rag?: number | undefined\n valueFor: string\n valueFrom: string\n prevVal: string | number | null | undefined\n groupTitle?: string\n}\n"],
4
+ "sourcesContent": ["import z from 'zod'\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport ScorecardSchema from './validate'\n\nexport interface Scorecard {\n id: string\n title: string\n group?: string\n value: number | string\n trend?: ScorecardTrend | undefined\n link?:\n | {\n href: '#'\n displayName: 'View breakdown'\n }\n | undefined\n valueFor?: string\n rag?: ScorecardRag | undefined\n}\n\nexport interface ScorecardSubGroup {\n name: string\n scorecards: Scorecard[]\n}\n\nexport interface ScorecardGroup {\n title?: string\n description?: string\n scorecards: Scorecard[]\n}\n\nexport interface ScorecardTrend {\n direction: number\n value: number\n from: string\n}\n\nexport interface ScorecardRag {\n score: number\n colour: string\n}\n\nexport interface ScorecardDataset {\n earliest: DashboardDataResponse[]\n earliestTs?: string | number | null | undefined\n latest: DashboardDataResponse[]\n latestTs?: string | number | null | undefined\n}\n\nexport interface CreateScorecardDataArgs {\n id: string\n title: string\n value: string | number\n rag?:\n | {\n colour: string\n score: number\n }\n | undefined\n valueFor: string\n valueFrom: string\n prevVal: string | number | null | undefined\n groupTitle?: string\n}\n\nexport type ScorecardDefinitionType = z.infer<typeof ScorecardSchema.ScorecardSchema>\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_exports", "__toCommonJS"]
7
7
  }
@@ -1,4 +1,6 @@
1
+ import z from 'zod'
1
2
  import { DashboardDataResponse } from '../../../types/Metrics'
3
+ import ScorecardSchema from './validate'
2
4
 
3
5
  export interface Scorecard {
4
6
  id: string
@@ -46,11 +48,19 @@ export interface ScorecardDataset {
46
48
  }
47
49
 
48
50
  export interface CreateScorecardDataArgs {
51
+ id: string
49
52
  title: string
50
53
  value: string | number
51
- rag?: number | undefined
54
+ rag?:
55
+ | {
56
+ colour: string
57
+ score: number
58
+ }
59
+ | undefined
52
60
  valueFor: string
53
61
  valueFrom: string
54
62
  prevVal: string | number | null | undefined
55
63
  groupTitle?: string
56
64
  }
65
+
66
+ export type ScorecardDefinitionType = z.infer<typeof ScorecardSchema.ScorecardSchema>
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var p=(o,a)=>{for(var r in a)c(o,r,{get:a[r],enumerable:!0})},u=(o,a,r,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of l(a))!m.call(o,t)&&t!==r&&c(o,t,{get:()=>a[t],enumerable:!(n=d(a,t))||n.enumerable});return o};var h=o=>u(c({},"__esModule",{value:!0}),o);var g={};p(g,{default:()=>S});module.exports=h(g);var e=require("zod"),s=require("../dashboard-visualisation/Validate");const b=e.z.object({id:e.z.string(),optional:e.z.boolean().default(!1)}),f=e.z.object({id:e.z.string(),unit:e.z.enum(["NUMBER","PERCENTAGE"]).optional()}),i=e.z.array(f).length(1,"Measure must contain a single item"),y=e.z.object({...s.DashboardVisualisationSchema.shape,type:e.z.literal("scorecard"),display:e.z.string(),description:e.z.undefined(),options:e.z.object(s.BucketOptionsSchema.shape).optional(),columns:e.z.object({...s.DashboardColumns.shape,keys:e.z.array(b).min(1),measures:i})});var S={ScorecardSchema:y,ScorecardMeasuresSchema:i};
2
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/dpr/components/_dashboards/scorecard/validate.ts"],
4
+ "sourcesContent": ["import { z } from 'zod'\nimport {\n DashboardVisualisationSchema,\n DashboardColumns,\n BucketOptionsSchema,\n} from '../dashboard-visualisation/Validate'\n\nconst scorecardKey = z.object({\n id: z.string(),\n optional: z.boolean().default(false),\n})\n\nconst scorecardMeasure = z.object({\n id: z.string(),\n unit: z.enum(['NUMBER', 'PERCENTAGE']).optional(),\n})\n\nconst ScorecardMeasuresSchema = z.array(scorecardMeasure).length(1, 'Measure must contain a single item')\n\nconst ScorecardSchema = z.object({\n ...DashboardVisualisationSchema.shape,\n type: z.literal('scorecard'),\n display: z.string(),\n description: z.undefined(),\n options: z.object(BucketOptionsSchema.shape).optional(),\n columns: z.object({\n ...DashboardColumns.shape,\n keys: z.array(scorecardKey).min(1),\n measures: ScorecardMeasuresSchema,\n }),\n})\n\nexport default {\n ScorecardSchema,\n ScorecardMeasuresSchema,\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,eAClBC,EAIO,+CAEP,MAAMC,EAAe,IAAE,OAAO,CAC5B,GAAI,IAAE,OAAO,EACb,SAAU,IAAE,QAAQ,EAAE,QAAQ,EAAK,CACrC,CAAC,EAEKC,EAAmB,IAAE,OAAO,CAChC,GAAI,IAAE,OAAO,EACb,KAAM,IAAE,KAAK,CAAC,SAAU,YAAY,CAAC,EAAE,SAAS,CAClD,CAAC,EAEKC,EAA0B,IAAE,MAAMD,CAAgB,EAAE,OAAO,EAAG,oCAAoC,EAElGE,EAAkB,IAAE,OAAO,CAC/B,GAAG,+BAA6B,MAChC,KAAM,IAAE,QAAQ,WAAW,EAC3B,QAAS,IAAE,OAAO,EAClB,YAAa,IAAE,UAAU,EACzB,QAAS,IAAE,OAAO,sBAAoB,KAAK,EAAE,SAAS,EACtD,QAAS,IAAE,OAAO,CAChB,GAAG,mBAAiB,MACpB,KAAM,IAAE,MAAMH,CAAY,EAAE,IAAI,CAAC,EACjC,SAAUE,CACZ,CAAC,CACH,CAAC,EAED,IAAON,EAAQ,CACb,gBAAAO,EACA,wBAAAD,CACF",
6
+ "names": ["validate_exports", "__export", "validate_default", "__toCommonJS", "import_zod", "import_Validate", "scorecardKey", "scorecardMeasure", "ScorecardMeasuresSchema", "ScorecardSchema"]
7
+ }
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod'
2
+ import {
3
+ DashboardVisualisationSchema,
4
+ DashboardColumns,
5
+ BucketOptionsSchema,
6
+ } from '../dashboard-visualisation/Validate'
7
+
8
+ const scorecardKey = z.object({
9
+ id: z.string(),
10
+ optional: z.boolean().default(false),
11
+ })
12
+
13
+ const scorecardMeasure = z.object({
14
+ id: z.string(),
15
+ unit: z.enum(['NUMBER', 'PERCENTAGE']).optional(),
16
+ })
17
+
18
+ const ScorecardMeasuresSchema = z.array(scorecardMeasure).length(1, 'Measure must contain a single item')
19
+
20
+ const ScorecardSchema = z.object({
21
+ ...DashboardVisualisationSchema.shape,
22
+ type: z.literal('scorecard'),
23
+ display: z.string(),
24
+ description: z.undefined(),
25
+ options: z.object(BucketOptionsSchema.shape).optional(),
26
+ columns: z.object({
27
+ ...DashboardColumns.shape,
28
+ keys: z.array(scorecardKey).min(1),
29
+ measures: ScorecardMeasuresSchema,
30
+ }),
31
+ })
32
+
33
+ export default {
34
+ ScorecardSchema,
35
+ ScorecardMeasuresSchema,
36
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var V=Object.create;var h=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var H=(i,e)=>{for(var t in e)h(i,t,{get:e[t],enumerable:!0})},D=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of T(e))!$.call(i,s)&&s!==t&&h(i,s,{get:()=>e[s],enumerable:!(r=w(e,s))||r.enumerable});return i};var m=(i,e,t)=>(t=i!=null?V(F(i)):{},D(e||!i||!i.__esModule?h(t,"default",{value:i,enumerable:!0}):t,i)),N=i=>D(h({},"__esModule",{value:!0}),i);var E={};H(E,{ScorecardGroupVisualisation:()=>f,default:()=>M});module.exports=N(E);var y=m(require("../../../utils/datasetHelper")),g=m(require("../../_charts/chart/buckets/Buckets")),K=m(require("../scorecard/Scorecard")),S=m(require("./validate"));class f{constructor(){this.buckets=[];this.valueKey="";this.titleKey="";this.responseData=[];this.withDefinition=e=>(this.definition=S.default.ScorecardGroupSchema.parse(e),this.init(),this);this.withData=e=>(this.responseData=e,this.dataset=this.scoreCardBuilder.getDataset(this.definition,this.responseData),this.initBuckets(this.responseData,this.valueKey),this.initGroupVars(),this);this.init=()=>{this.id=this.definition.id,this.measures=this.definition.columns.measures,this.keys=this.definition.columns.keys,this.options=this.definition.options,this.valueKey=this.measures[0].id,this.titleColumn={display:this.definition.display||"",id:this.valueKey},this.unit=this.definition.columns.measures[0].unit?this.definition.columns.measures[0].unit:void 0};this.initBuckets=(e,t)=>{(this.options?.buckets||this.options?.useRagColour)&&(this.bucketsHelper=new g.default(e,this.definition,t,!1,this.scoreCardBuilder.ragColours),this.buckets=this.bucketsHelper.getBuckets())};this.initGroupVars=()=>{this.groupKey=y.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.createScorecardGroupFromColumns=()=>{const{latest:e,earliest:t,latestTs:r,earliestTs:s}=this.dataset;return e.map((o,u)=>({title:this.createGroupTitle(o),scorecards:Object.keys(o).filter(a=>a!==this.groupKeyId).map(a=>{const c=this.measures.find(R=>R.id===a)?.display||a,p=o[a],{raw:d,rag:l}=p,v=Number(d),G=l!==void 0?Number(l):void 0;this.initBuckets([o],a);const b=`${r}`,C=`${s}`,k=t[u][a]?.raw,B=this.scoreCardBuilder.setRagScore(v,G,this.buckets,this.bucketsHelper);return this.scoreCardBuilder.createScorecardData({id:this.id,title:c,value:v,rag:B,prevVal:k,valueFor:b,valueFrom:C})})}))};this.createScorecardGroupFromList=()=>{const{latest:e,earliest:t}=this.dataset;return[{title:"",scorecards:e.map((r,s)=>{const o=this.getScorecardValues(r),u=t[s][this.valueKey].raw;return this.scoreCardBuilder.createScorecardData({...o,prevVal:u})})}]};this.createScorecardGroupFromListWithGroups=()=>{const{latest:e,earliest:t}=this.dataset;let r=y.default.groupRowsByKey(t,this.groupKeyId),s=y.default.groupRowsByKey(e,this.groupKeyId);return this.groupKeyId===this.titleKey&&(s=[s.flat()],r=[r.flat()]),s.map((u,a)=>({title:this.groupKeyDisplay?`By ${this.groupKeyDisplay}`:"",scorecards:u.map((n,c)=>{const p=this.getScorecardValues(n),l=r[a][c][this.valueKey]?.raw;return this.scoreCardBuilder.createScorecardData({...p,prevVal:l})})}))};this.getScorecardValues=e=>{const{latestTs:t,earliestTs:r}=this.dataset,s=`${this.titleColumn?.display} ${e[this.titleKey].raw}`,o=e[this.valueKey],{raw:u,rag:a}=o,n=Number(u),c=a!==void 0?Number(a):void 0;this.initBuckets([e],this.valueKey);const p=`${t}`,d=`${r}`;return{id:this.id,title:s,value:n,rag:this.scoreCardBuilder.setRagScore(n,c,this.buckets,this.bucketsHelper),valueFor:p,valueFrom:d}};this.createGroupTitle=e=>{const t=this.groupKeyId?`${e[this.groupKeyId]?.raw}`:"";return this.groupKeyDisplay&&this.groupKeyDisplay.length?`${this.groupKeyDisplay}: ${t}`:t};this.build=()=>{let e;return this.valueColumn?this.groupKey?e=this.createScorecardGroupFromListWithGroups():e=this.createScorecardGroupFromList():e=this.createScorecardGroupFromColumns(),e};this.scoreCardBuilder=new K.default}}var M=f;0&&(module.exports={ScorecardGroupVisualisation});
2
+ //# sourceMappingURL=ScorecardGroup.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/dpr/components/_dashboards/scorecard-group/ScorecardGroup.ts"],
4
+ "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport DatasetHelper from '../../../utils/datasetHelper'\nimport { ScorecardDataset, ScorecardGroup } from '../scorecard/types'\nimport Buckets from '../../_charts/chart/buckets/Buckets'\nimport { components } from '../../../types/api'\nimport ScorecardVisualisation from '../scorecard/Scorecard'\nimport { ScorecardGroupDefinitionType, ScorecardGroupDefinitionMeasure } from './types'\nimport { DashboardVisualisationBucket } from '../dashboard-visualisation/types'\nimport ScorecardGroupSchemas from './validate'\n\nclass ScorecardGroupVisualisation {\n private definition!: ScorecardGroupDefinitionType\n\n private id!: string\n\n private measures!: ScorecardGroupDefinitionType['columns']['measures']\n\n private keys!: ScorecardGroupDefinitionType['columns']['keys']\n\n private options!: ScorecardGroupDefinitionType['options']\n\n private dataset!: ScorecardDataset\n\n private groupKey: ScorecardGroupDefinitionMeasure | undefined\n\n private groupKeyId: string | undefined\n\n private groupKeyDisplay: string | undefined\n\n private bucketsHelper: Buckets | undefined\n\n private buckets: DashboardVisualisationBucket[] = []\n\n private valueColumn: ScorecardGroupDefinitionMeasure | undefined\n\n private valueKey = ''\n\n private titleColumn: ScorecardGroupDefinitionMeasure | undefined\n\n private titleKey = ''\n\n private unit: 'NUMBER' | 'PERCENTAGE' | undefined\n\n responseData: DashboardDataResponse[] = []\n\n scoreCardBuilder: ScorecardVisualisation\n\n constructor() {\n this.scoreCardBuilder = new ScorecardVisualisation()\n }\n\n withDefinition = (definition: components['schemas']['DashboardVisualisationDefinition']) => {\n this.definition = ScorecardGroupSchemas.ScorecardGroupSchema.parse(definition)\n this.init()\n\n return this\n }\n\n withData = (responseData: DashboardDataResponse[]) => {\n this.responseData = responseData\n this.dataset = this.scoreCardBuilder.getDataset(this.definition, this.responseData)\n this.initBuckets(this.responseData, this.valueKey)\n this.initGroupVars()\n return this\n }\n\n private init = () => {\n this.id = this.definition.id\n this.measures = this.definition.columns.measures\n this.keys = this.definition.columns.keys\n this.options = this.definition.options\n this.valueKey = this.measures[0].id\n this.titleColumn = { display: this.definition.display || '', id: this.valueKey }\n this.unit = this.definition.columns.measures[0].unit ? this.definition.columns.measures[0].unit : undefined\n }\n\n private initBuckets = (responseData: DashboardDataResponse[], valueKey: string) => {\n if (this.options?.buckets || this.options?.useRagColour) {\n this.bucketsHelper = new Buckets(responseData, this.definition, valueKey, false, this.scoreCardBuilder.ragColours)\n this.buckets = this.bucketsHelper.getBuckets()\n }\n }\n\n private initGroupVars = () => {\n this.groupKey = DatasetHelper.getGroupKey(\n this.dataset.latest,\n <Array<components['schemas']['DashboardVisualisationColumnDefinition']>>this.keys || [],\n )\n this.groupKeyId = this.groupKey?.id\n this.groupKeyDisplay = this.groupKey?.display\n\n this.valueColumn = this.measures.find((col) => col.displayValue)\n if (this.valueColumn) {\n this.valueKey = this.valueColumn?.id\n this.titleColumn = this.measures.find((col) => {\n return col.display || col.display === ''\n })\n this.titleKey = this.titleColumn?.id || ''\n }\n }\n\n private createScorecardGroupFromColumns = () => {\n const { latest, earliest, latestTs, earliestTs } = this.dataset\n\n return latest.map((row, rowIndex) => {\n return {\n title: this.createGroupTitle(row),\n scorecards: Object.keys(row)\n .filter((colId) => colId !== this.groupKeyId)\n .map((colId) => {\n const measure = this.measures.find((m) => m.id === colId)\n const title = measure?.display || colId\n const rowCol = row[colId]\n const { raw, rag } = rowCol\n const value = Number(raw)\n\n const ragValue = rag !== undefined ? Number(rag) : undefined\n this.initBuckets([row], colId)\n\n const valueFor = `${latestTs}`\n const valueFrom = `${earliestTs}`\n\n const comparisonRow = earliest[rowIndex]\n const prevVal = comparisonRow[colId]?.raw\n const ragScore = this.scoreCardBuilder.setRagScore(value, ragValue, this.buckets, this.bucketsHelper)\n\n return this.scoreCardBuilder.createScorecardData({\n id: this.id,\n title,\n value,\n rag: ragScore,\n prevVal,\n valueFor,\n valueFrom,\n })\n }),\n }\n })\n }\n\n private createScorecardGroupFromList = (): ScorecardGroup[] => {\n const { latest, earliest } = this.dataset\n return [\n {\n title: '',\n scorecards: latest.map((row: DashboardDataResponse, index: number) => {\n const values = this.getScorecardValues(row)\n const prevVal = earliest[index][this.valueKey].raw\n return this.scoreCardBuilder.createScorecardData({\n ...values,\n prevVal,\n })\n }),\n },\n ]\n }\n\n private createScorecardGroupFromListWithGroups = () => {\n const { latest, earliest } = this.dataset\n\n let earliestGroupedByKey = DatasetHelper.groupRowsByKey(earliest, <string>this.groupKeyId)\n let latestGroupedByKey = DatasetHelper.groupRowsByKey(latest, <string>this.groupKeyId)\n if (this.groupKeyId === this.titleKey) {\n latestGroupedByKey = [latestGroupedByKey.flat()]\n earliestGroupedByKey = [earliestGroupedByKey.flat()]\n }\n\n const scorecardGroup = latestGroupedByKey.map((group, groupIndex) => {\n return {\n title: this.groupKeyDisplay ? `By ${this.groupKeyDisplay}` : '',\n scorecards: group.map((row, rowIndex) => {\n const values = this.getScorecardValues(row)\n const comparisonRow = earliestGroupedByKey[groupIndex][rowIndex]\n const prevVal = comparisonRow[this.valueKey]?.raw\n\n return this.scoreCardBuilder.createScorecardData({\n ...values,\n prevVal,\n })\n }),\n }\n })\n\n return scorecardGroup\n }\n\n private getScorecardValues = (row: DashboardDataResponse) => {\n const { latestTs, earliestTs } = this.dataset\n const title = `${this.titleColumn?.display} ${row[this.titleKey].raw}`\n const rowCol = row[this.valueKey]\n const { raw, rag: ragScore } = rowCol\n const value = Number(raw)\n const rag = ragScore !== undefined ? Number(ragScore) : undefined\n this.initBuckets([row], this.valueKey)\n const valueFor = `${latestTs}`\n const valueFrom = `${earliestTs}`\n\n return {\n id: this.id,\n title,\n value,\n rag: this.scoreCardBuilder.setRagScore(value, rag, this.buckets, this.bucketsHelper),\n valueFor,\n valueFrom,\n }\n }\n\n private createGroupTitle = (row: DashboardDataResponse) => {\n const title = this.groupKeyId ? `${row[this.groupKeyId]?.raw}` : ''\n return this.groupKeyDisplay && this.groupKeyDisplay.length ? `${this.groupKeyDisplay}: ${title}` : title\n }\n\n build = () => {\n let scorecardGroup: ScorecardGroup[]\n if (!this.valueColumn) {\n scorecardGroup = this.createScorecardGroupFromColumns()\n } else if (this.groupKey) {\n scorecardGroup = this.createScorecardGroupFromListWithGroups()\n } else {\n scorecardGroup = this.createScorecardGroupFromList()\n }\n return scorecardGroup\n }\n}\n\nexport { ScorecardGroupVisualisation }\nexport default ScorecardGroupVisualisation\n"],
5
+ "mappings": "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",
6
+ "names": ["ScorecardGroup_exports", "__export", "ScorecardGroupVisualisation", "ScorecardGroup_default", "__toCommonJS", "import_datasetHelper", "import_Buckets", "import_Scorecard", "import_validate", "definition", "ScorecardGroupSchemas", "responseData", "valueKey", "Buckets", "DatasetHelper", "col", "latest", "earliest", "latestTs", "earliestTs", "row", "rowIndex", "colId", "title", "m", "rowCol", "raw", "rag", "value", "ragValue", "valueFor", "valueFrom", "prevVal", "ragScore", "index", "values", "earliestGroupedByKey", "latestGroupedByKey", "group", "groupIndex", "scorecardGroup", "ScorecardVisualisation"]
7
+ }