@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.20.1 → 4.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dpr/components/_async/async-filters-form/types.d.js +1 -1
- package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
- package/dpr/components/_async/async-filters-form/types.d.ts +7 -4
- package/dpr/components/_async/async-filters-form/utils.js +1 -1
- package/dpr/components/_async/async-filters-form/utils.js.map +2 -2
- package/dpr/components/_async/async-filters-form/utils.ts +18 -17
- package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
- package/dpr/components/_charts/chart/Chart.js +2 -0
- package/dpr/components/_charts/chart/Chart.js.map +7 -0
- package/dpr/components/_charts/chart/Chart.ts +89 -0
- package/dpr/components/_charts/chart/ChartColours.js +2 -0
- package/dpr/components/_charts/chart/ChartColours.js.map +7 -0
- package/dpr/components/_charts/chart/ChartColours.ts +36 -0
- package/dpr/components/_charts/chart/ChartTimeseries.js +2 -0
- package/dpr/components/_charts/chart/ChartTimeseries.js.map +7 -0
- package/dpr/components/_charts/chart/ChartTimeseries.ts +95 -0
- package/dpr/components/_charts/chart/bar/BarChart.js +2 -0
- package/dpr/components/_charts/chart/bar/BarChart.js.map +7 -0
- package/dpr/components/_charts/chart/bar/BarChart.ts +204 -0
- package/dpr/components/_charts/chart/bar/clientClass.mjs +0 -58
- package/dpr/components/_charts/chart/bar/types.js +2 -0
- package/dpr/components/_charts/chart/bar/types.js.map +7 -0
- package/dpr/components/_charts/chart/bar/types.ts +6 -0
- package/dpr/components/_charts/chart/bar/validate.js +2 -0
- package/dpr/components/_charts/chart/bar/validate.js.map +7 -0
- package/dpr/components/_charts/chart/bar/validate.ts +59 -0
- package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js +2 -0
- package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.js.map +7 -0
- package/dpr/components/_charts/chart/bar-timeseries/BarTimeseriesChart.ts +57 -0
- package/dpr/components/_charts/chart/bar-timeseries/types.js +2 -0
- package/dpr/components/_charts/chart/bar-timeseries/types.js.map +7 -0
- package/dpr/components/_charts/chart/bar-timeseries/types.ts +5 -0
- package/dpr/components/_charts/chart/bar-timeseries/validate.js +2 -0
- package/dpr/components/_charts/chart/bar-timeseries/validate.js.map +7 -0
- package/dpr/components/_charts/chart/bar-timeseries/validate.ts +30 -0
- package/dpr/components/_charts/chart/buckets/Buckets.js +2 -0
- package/dpr/components/_charts/chart/buckets/Buckets.js.map +7 -0
- package/dpr/components/_charts/chart/{Buckets.ts → buckets/Buckets.ts} +18 -14
- package/dpr/components/_charts/chart/buckets/types.js +2 -0
- package/dpr/components/_charts/chart/buckets/types.js.map +7 -0
- package/dpr/components/_charts/chart/buckets/types.ts +4 -0
- package/dpr/components/_charts/chart/buckets/validate.js +2 -0
- package/dpr/components/_charts/chart/buckets/validate.js.map +7 -0
- package/dpr/components/_charts/chart/buckets/validate.ts +15 -0
- package/dpr/components/_charts/chart/chart-config.js +2 -0
- package/dpr/components/_charts/chart/chart-config.js.map +7 -0
- package/dpr/components/_charts/chart/chart-config.ts +108 -0
- package/dpr/components/_charts/chart/clientClass.mjs +28 -106
- package/dpr/components/_charts/chart/doughnut/DoughnutChart.js +2 -0
- package/dpr/components/_charts/chart/doughnut/DoughnutChart.js.map +7 -0
- package/dpr/components/_charts/chart/doughnut/DoughnutChart.ts +77 -0
- package/dpr/components/_charts/chart/doughnut/clientClass.mjs +0 -45
- package/dpr/components/_charts/chart/doughnut/types.js +2 -0
- package/dpr/components/_charts/chart/doughnut/types.js.map +7 -0
- package/dpr/components/_charts/chart/doughnut/types.ts +5 -0
- package/dpr/components/_charts/chart/doughnut/validate.js +2 -0
- package/dpr/components/_charts/chart/doughnut/validate.js.map +7 -0
- package/dpr/components/_charts/chart/doughnut/validate.ts +30 -0
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +3 -3
- package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +122 -44
- package/dpr/components/_charts/chart/heatmap/clientClass.mjs +7 -89
- package/dpr/components/_charts/chart/heatmap/types.js +1 -1
- package/dpr/components/_charts/chart/heatmap/types.js.map +1 -1
- package/dpr/components/_charts/chart/heatmap/types.ts +5 -0
- package/dpr/components/_charts/chart/heatmap/validate.js +2 -0
- package/dpr/components/_charts/chart/heatmap/validate.js.map +7 -0
- package/dpr/components/_charts/chart/heatmap/validate.ts +25 -0
- package/dpr/components/_charts/chart/line/LineChart.js +2 -0
- package/dpr/components/_charts/chart/line/LineChart.js.map +7 -0
- package/dpr/components/_charts/chart/line/LineChart.ts +89 -0
- package/dpr/components/_charts/chart/line/clientClass.mjs +5 -36
- package/dpr/components/_charts/chart/line/types.js +2 -0
- package/dpr/components/_charts/chart/line/types.js.map +7 -0
- package/dpr/components/_charts/chart/line/types.ts +5 -0
- package/dpr/components/_charts/chart/line/validate.js +2 -0
- package/dpr/components/_charts/chart/line/validate.js.map +7 -0
- package/dpr/components/_charts/chart/line/validate.ts +30 -0
- package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js +2 -0
- package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.js.map +7 -0
- package/dpr/components/_charts/chart/line-timeseries/LineTimeseriesChart.ts +57 -0
- package/dpr/components/_charts/chart/line-timeseries/types.js +2 -0
- package/dpr/components/_charts/chart/line-timeseries/types.js.map +7 -0
- package/dpr/components/_charts/chart/line-timeseries/types.ts +5 -0
- package/dpr/components/_charts/chart/line-timeseries/validate.js +2 -0
- package/dpr/components/_charts/chart/line-timeseries/validate.js.map +7 -0
- package/dpr/components/_charts/chart/line-timeseries/validate.ts +30 -0
- package/dpr/components/_charts/chart/view.njk +8 -1
- package/dpr/components/_charts/chart-tabs/view.njk +15 -14
- package/dpr/components/_charts/utils.js +1 -1
- package/dpr/components/_charts/utils.js.map +3 -3
- package/dpr/components/_charts/utils.test.ts +9 -3
- package/dpr/components/_charts/utils.ts +59 -193
- package/dpr/components/_dashboards/dashboard-list/types.js +2 -0
- package/dpr/components/_dashboards/dashboard-list/types.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-list/types.ts +4 -0
- package/dpr/components/_dashboards/dashboard-list/validate.js +2 -0
- package/dpr/components/_dashboards/dashboard-list/validate.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-list/validate.ts +28 -0
- package/dpr/components/_dashboards/dashboard-visualisation/Validate.js +2 -0
- package/dpr/components/_dashboards/dashboard-visualisation/Validate.js.map +7 -0
- package/dpr/components/_dashboards/dashboard-visualisation/Validate.ts +71 -0
- package/dpr/components/_dashboards/dashboard-visualisation/types.js +1 -1
- package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +2 -2
- package/dpr/components/_dashboards/dashboard-visualisation/types.ts +32 -2
- package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
- package/dpr/components/_dashboards/scorecard/Scorecard.js.map +3 -3
- package/dpr/components/_dashboards/scorecard/Scorecard.ts +82 -213
- package/dpr/components/_dashboards/scorecard/types.js +1 -1
- package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
- package/dpr/components/_dashboards/scorecard/types.ts +11 -1
- package/dpr/components/_dashboards/scorecard/validate.js +2 -0
- package/dpr/components/_dashboards/scorecard/validate.js.map +7 -0
- package/dpr/components/_dashboards/scorecard/validate.ts +36 -0
- package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js +2 -0
- package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js.map +7 -0
- package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.ts +228 -0
- package/dpr/components/_dashboards/scorecard-group/types.js +2 -0
- package/dpr/components/_dashboards/scorecard-group/types.js.map +7 -0
- package/dpr/components/_dashboards/scorecard-group/types.ts +5 -0
- package/dpr/components/_dashboards/scorecard-group/validate.js +2 -0
- package/dpr/components/_dashboards/scorecard-group/validate.js.map +7 -0
- package/dpr/components/_dashboards/scorecard-group/validate.ts +37 -0
- package/dpr/components/_filters/filter-input/types.d.js.map +1 -1
- package/dpr/components/_filters/filter-input/types.d.ts +1 -1
- package/dpr/components/_filters/types.d.js.map +1 -1
- package/dpr/components/_filters/types.d.ts +6 -4
- package/dpr/components/_reports/report-actions/types.d.js.map +1 -1
- package/dpr/components/_reports/report-actions/types.d.ts +1 -1
- package/dpr/components/report-list/types.d.js.map +1 -1
- package/dpr/components/report-list/types.d.ts +1 -1
- package/dpr/data/types.d.js +1 -1
- package/dpr/data/types.d.js.map +1 -1
- package/dpr/data/types.d.ts +2 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
- package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +22 -10
- package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/report/utils.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/report/utils.ts +1 -1
- package/dpr/routes/journeys/view-report/controller.js +1 -1
- package/dpr/routes/journeys/view-report/controller.js.map +3 -3
- package/dpr/routes/journeys/view-report/controller.ts +3 -1
- package/dpr/types/Services.d.js +1 -1
- package/dpr/types/Services.d.js.map +1 -1
- package/dpr/types/Services.d.ts +0 -2
- package/dpr/utils/DataTableBuilder/types.d.js +1 -1
- package/dpr/utils/DataTableBuilder/types.d.js.map +1 -1
- package/dpr/utils/DataTableBuilder/types.d.ts +2 -2
- package/dpr/utils/ErrorHandler.js +1 -1
- package/dpr/utils/ErrorHandler.js.map +3 -3
- package/dpr/utils/ErrorHandler.ts +16 -0
- package/dpr/utils/ParentChildDataTableBuilder/types.d.js +1 -1
- package/dpr/utils/ParentChildDataTableBuilder/types.d.js.map +1 -1
- package/dpr/utils/ParentChildDataTableBuilder/types.d.ts +1 -0
- package/dpr/utils/Personalisation/types.d.js +1 -1
- package/dpr/utils/Personalisation/types.d.js.map +1 -1
- package/dpr/utils/Personalisation/types.d.ts +1 -0
- package/dpr/utils/UserStoreItemBuilder.js.map +2 -2
- package/dpr/utils/UserStoreItemBuilder.ts +1 -1
- package/package.json +1 -1
- package/dpr/components/_charts/chart/Buckets.js +0 -2
- package/dpr/components/_charts/chart/Buckets.js.map +0 -7
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +0 -2
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +0 -7
- package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +0 -40
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var
|
|
1
|
+
"use strict";var n=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(t,r,s,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of a(r))!l.call(t,e)&&e!==s&&n(t,e,{get:()=>r[e],enumerable:!(i=o(r,e))||i.enumerable});return t};var g=t=>u(n({},"__esModule",{value:!0}),t);var c={};module.exports=g(c);
|
|
2
2
|
//# sourceMappingURL=types.d.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/dpr/components/_async/async-filters-form/types.d.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
4
|
+
"sourcesContent": ["import { FilterValue } from '../../_filters/types'\nimport Dict = NodeJS.Dict\n\nexport interface requestAsyncReportParams {\n apiTimeout: number\n apiUrl: string\n token: string\n reportId: string\n reportVariantId: string\n query: Query\n}\n\n// todo update to correct type\ninterface Query {\n sortColumn: string\n sortedAsc: boolean\n filters: filter[]\n dataProductDefinitionsPath: string\n}\n\ninterface filter {\n [filterId: string]: string\n}\n\nexport interface SortByDefaults {\n options: { text: string; value: string }[]\n value: string\n}\n\nexport interface RenderFiltersReturnValue {\n filters: FilterValue[]\n sortBy?: FilterValue[]\n}\n\nexport interface SetQueryFromFiltersResult {\n query: Record<string, string>\n filterData: Record<string, string>\n querySummary: Array<Record<string, string>>\n sortData: Record<string, string>\n}\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["types_d_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { FilterValue } from '../../_filters/types'
|
|
2
|
+
import Dict = NodeJS.Dict
|
|
3
|
+
|
|
1
4
|
export interface requestAsyncReportParams {
|
|
2
5
|
apiTimeout: number
|
|
3
6
|
apiUrl: string
|
|
@@ -30,8 +33,8 @@ export interface RenderFiltersReturnValue {
|
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
export interface SetQueryFromFiltersResult {
|
|
33
|
-
query:
|
|
34
|
-
filterData:
|
|
35
|
-
querySummary: Array<
|
|
36
|
-
sortData:
|
|
36
|
+
query: Record<string, string>
|
|
37
|
+
filterData: Record<string, string>
|
|
38
|
+
querySummary: Array<Record<string, string>>
|
|
39
|
+
sortData: Record<string, string>
|
|
37
40
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var O=Object.create;var
|
|
1
|
+
"use strict";var O=Object.create;var D=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var U=(t,i)=>{for(var e in i)D(t,e,{get:i[e],enumerable:!0})},F=(t,i,e,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of M(i))!v.call(t,r)&&r!==e&&D(t,r,{get:()=>i[r],enumerable:!(l=x(i,r))||l.enumerable});return t};var u=(t,i,e)=>(e=t!=null?O(W(t)):{},F(i||!t||!t.__esModule?D(e,"default",{value:t,enumerable:!0}):e,t)),j=t=>F(D({},"__esModule",{value:!0}),t);var N={};U(N,{default:()=>B,getSortByFromDefinition:()=>$,renderFilters:()=>Y,setDurationStartAndEnd:()=>b,setQueryFromFilters:()=>A});module.exports=j(N);var h=u(require("./sortByTemplate")),y=u(require("../../../utils/definitionUtils")),S=u(require("../../../utils/DateMapper/DateMapper")),R=u(require("../../_filters/utils")),V=u(require("../../_inputs/date-range/utils"));const $=(t,i)=>{if(!i){const e=h.default.sortByTemplate(),l=t.filter(r=>r.sortable).map(r=>{r.defaultsort&&(e[0].value=r.name);const c={value:r.name,text:r.display};return r.sortDirection&&(e[1].value=r.sortDirection==="asc"?"true":"false"),c});if(l.length){const r=e[0];return r.options=l,e[0]=r,e}}return[]},b=(t,i,e,l,r,c)=>{const{startDate:f,endDate:m}=V.default.calcDates(i),s=f?f.format("YYYY-MM-DD").toString():"",p=m?m.format("YYYY-MM-DD").toString():"",n=t.split(".")[1],o=c.find(d=>d.name===n);e[`filters.${n}.start`]=s,e[`filters.${n}.end`]=p,l[t]=i;let a=`${i.charAt(0).toUpperCase()+i.slice(1).replaceAll("-"," ")}`;return a=`${a} (${s} - ${p})`,r.push({name:o?`${o.display}`:t,value:a}),{querySummary:r,filterData:l,query:e}},Y=async(t,i)=>({filters:R.default.getFiltersFromDefinition(t,!1),sortBy:$(t,i)}),A=(t,i)=>{let e={},l={},r=[];const c={},f=new S.default,m=new URLSearchParams(t.body.search);return Object.keys(t.body).filter(s=>s!=="_csrf"&&t.body[s]!=="").forEach(s=>{const p=s.replace("filters.",""),n=t.body[s];if(s.startsWith("filters.")&&n!==""&&!e[s]&&n!=="no-filter")if(s.includes("relative-duration"))({query:e,filterData:l,querySummary:r}=b(s,n,e,l,r,i));else{let o=m.getAll(s);o=!o||o.length===0?n:o,o=o.length===1?`${o[0]}`:`${o}`,e[s]=o,l[p]=o;let a;if(f.isDate(n)){a=f.toDateString(n,"local-date");const g=f.toDateString(n,"iso");g&&(e[s]=g,l[p]=g)}const d=y.default.getFieldDisplayName(i,p);r.push({name:d||p,value:a||o})}else if(s.startsWith("sort")){e[s]=n,c[s]=n;const o=y.default.getField(i,n);let a="Sort Direction",d=n==="true"?"Ascending":"Descending";o&&(a="Sort Column",d=o.display),r.push({name:a,value:d})}}),{query:e,filterData:l,querySummary:r,sortData:c}};var B={renderFilters:Y,setQueryFromFilters:A};0&&(module.exports={getSortByFromDefinition,renderFilters,setDurationStartAndEnd,setQueryFromFilters});
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/dpr/components/_async/async-filters-form/utils.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request } from 'express'\nimport { Dayjs } from 'dayjs'\nimport
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,4BAAAC,EAAA,kBAAAC,EAAA,2BAAAC,EAAA,wBAAAC,IAAA,eAAAC,EAAAP,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request } from 'express'\nimport { Dayjs } from 'dayjs'\nimport type { SetQueryFromFiltersResult } from './types'\nimport type { components } from '../../../types/api'\n\nimport SortHelper from './sortByTemplate'\nimport DefinitionUtils from '../../../utils/definitionUtils'\nimport DateMapper from '../../../utils/DateMapper/DateMapper'\nimport FiltersUtils from '../../_filters/utils'\nimport DateRangeInputUtils from '../../_inputs/date-range/utils'\nimport { FilterOption, FilterValue, FilterValueWithOptions } from '../../_filters/types'\n\n/**\n * Initialises the sortData from the definition\n */\nexport const getSortByFromDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n): FilterValue[] => {\n if (!interactive) {\n const sortBy = SortHelper.sortByTemplate()\n const options = fields\n .filter((f) => f.sortable)\n .map((f) => {\n if (f.defaultsort) sortBy[0].value = f.name\n const field: FilterOption = { value: f.name, text: f.display }\n if (f.sortDirection) {\n // the 'value' here is whether sortedAsc is true or not\n sortBy[1].value = f.sortDirection === 'asc' ? 'true' : 'false'\n }\n return field\n })\n\n if (options.length) {\n const sortWithOptions: FilterValueWithOptions = <FilterValueWithOptions>sortBy[0]\n sortWithOptions.options = options\n sortBy[0] = sortWithOptions\n return sortBy\n }\n }\n return []\n}\n\nexport const setDurationStartAndEnd = (\n name: string,\n value: string,\n query: Record<string, string>,\n filterData: Record<string, string>,\n querySummary: Array<Record<string, string>>,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { startDate, endDate } = DateRangeInputUtils.calcDates(value)\n const startDateDisplayString = startDate ? (<Dayjs>startDate).format('YYYY-MM-DD').toString() : ''\n const endDateDisplayString = endDate ? (<Dayjs>endDate).format('YYYY-MM-DD').toString() : ''\n\n const fieldId = name.split('.')[1]\n const field = fields.find((f) => {\n return f.name === fieldId\n })\n\n query[`filters.${fieldId}.start`] = startDateDisplayString\n query[`filters.${fieldId}.end`] = endDateDisplayString\n\n filterData[name] = value\n\n let queryValue = `${value.charAt(0).toUpperCase() + value.slice(1).replaceAll('-', ' ')}`\n queryValue = `${queryValue} (${startDateDisplayString} - ${endDateDisplayString})`\n querySummary.push({\n name: field ? `${field.display}` : name,\n value: queryValue,\n })\n\n return {\n querySummary,\n filterData,\n query,\n }\n}\n\n/**\n * Returns the data required for rendering the async filters component\n *\n * @param {AsyncReportUtilsParams} { req, res, dataSources }\n * @return {*}\n */\nexport const renderFilters = async (fields: components['schemas']['FieldDefinition'][], interactive?: boolean) => {\n return {\n filters: FiltersUtils.getFiltersFromDefinition(fields, false),\n sortBy: getSortByFromDefinition(fields, interactive),\n }\n}\n\nexport const setQueryFromFilters = (\n req: Request,\n fields: components['schemas']['FieldDefinition'][],\n): SetQueryFromFiltersResult => {\n let query: Record<string, string> = {}\n let filterData: Record<string, string> = {}\n let querySummary: Array<Record<string, string>> = []\n const sortData: Record<string, string> = {}\n const dateMapper = new DateMapper()\n const urlParams = new URLSearchParams(req.body.search)\n\n Object.keys(req.body)\n .filter((name) => name !== '_csrf' && req.body[name] !== '')\n .forEach((name) => {\n const shortName = name.replace('filters.', '')\n const value = req.body[name]\n\n if (name.startsWith('filters.') && value !== '' && !query[name] && value !== 'no-filter') {\n if (name.includes('relative-duration')) {\n ;({ query, filterData, querySummary } = setDurationStartAndEnd(\n name,\n value,\n query,\n filterData,\n querySummary,\n fields,\n ))\n } else {\n let urlParamValue: string | string[] = urlParams.getAll(name)\n urlParamValue = !urlParamValue || urlParamValue.length === 0 ? value : urlParamValue\n urlParamValue = urlParamValue.length === 1 ? `${urlParamValue[0]}` : `${urlParamValue}`\n\n query[name] = urlParamValue\n filterData[shortName] = urlParamValue\n\n let dateDisplayValue\n if (dateMapper.isDate(value)) {\n dateDisplayValue = dateMapper.toDateString(value, 'local-date')\n\n const isoFormatDate = dateMapper.toDateString(value, 'iso')\n if (isoFormatDate) {\n query[name] = isoFormatDate\n filterData[shortName] = isoFormatDate\n }\n }\n\n const fieldDisplayName = DefinitionUtils.getFieldDisplayName(fields, shortName)\n querySummary.push({\n name: fieldDisplayName || shortName,\n value: dateDisplayValue || urlParamValue,\n })\n }\n } else if (name.startsWith('sort')) {\n query[name] = value\n sortData[name] = value\n\n const fieldDef = DefinitionUtils.getField(fields, value)\n\n let displayName = 'Sort Direction'\n let displayValue = value === 'true' ? 'Ascending' : 'Descending'\n if (fieldDef) {\n displayName = 'Sort Column'\n displayValue = fieldDef.display\n }\n\n querySummary.push({\n name: displayName,\n value: displayValue,\n })\n }\n })\n\n return {\n query,\n filterData,\n querySummary,\n sortData,\n }\n}\n\nexport default {\n renderFilters,\n setQueryFromFilters,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["utils_exports", "__export", "utils_default", "getSortByFromDefinition", "renderFilters", "setDurationStartAndEnd", "setQueryFromFilters", "__toCommonJS", "import_sortByTemplate", "import_definitionUtils", "import_DateMapper", "import_utils", "fields", "interactive", "sortBy", "SortHelper", "options", "f", "field", "sortWithOptions", "name", "value", "query", "filterData", "querySummary", "startDate", "endDate", "DateRangeInputUtils", "startDateDisplayString", "endDateDisplayString", "fieldId", "queryValue", "FiltersUtils", "req", "sortData", "dateMapper", "DateMapper", "urlParams", "shortName", "urlParamValue", "dateDisplayValue", "isoFormatDate", "fieldDisplayName", "DefinitionUtils", "fieldDef", "displayName", "displayValue"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/* eslint-disable no-param-reassign */
|
|
2
2
|
import { Request } from 'express'
|
|
3
3
|
import { Dayjs } from 'dayjs'
|
|
4
|
-
import Dict = NodeJS.Dict
|
|
5
4
|
import type { SetQueryFromFiltersResult } from './types'
|
|
6
5
|
import type { components } from '../../../types/api'
|
|
7
6
|
|
|
@@ -46,9 +45,9 @@ export const getSortByFromDefinition = (
|
|
|
46
45
|
export const setDurationStartAndEnd = (
|
|
47
46
|
name: string,
|
|
48
47
|
value: string,
|
|
49
|
-
query:
|
|
50
|
-
filterData:
|
|
51
|
-
querySummary: Array<
|
|
48
|
+
query: Record<string, string>,
|
|
49
|
+
filterData: Record<string, string>,
|
|
50
|
+
querySummary: Array<Record<string, string>>,
|
|
52
51
|
fields: components['schemas']['FieldDefinition'][],
|
|
53
52
|
) => {
|
|
54
53
|
const { startDate, endDate } = DateRangeInputUtils.calcDates(value)
|
|
@@ -60,10 +59,10 @@ export const setDurationStartAndEnd = (
|
|
|
60
59
|
return f.name === fieldId
|
|
61
60
|
})
|
|
62
61
|
|
|
63
|
-
query[`filters.${fieldId}.start`
|
|
64
|
-
query[`filters.${fieldId}.end`
|
|
62
|
+
query[`filters.${fieldId}.start`] = startDateDisplayString
|
|
63
|
+
query[`filters.${fieldId}.end`] = endDateDisplayString
|
|
65
64
|
|
|
66
|
-
filterData[name
|
|
65
|
+
filterData[name] = value
|
|
67
66
|
|
|
68
67
|
let queryValue = `${value.charAt(0).toUpperCase() + value.slice(1).replaceAll('-', ' ')}`
|
|
69
68
|
queryValue = `${queryValue} (${startDateDisplayString} - ${endDateDisplayString})`
|
|
@@ -96,10 +95,10 @@ export const setQueryFromFilters = (
|
|
|
96
95
|
req: Request,
|
|
97
96
|
fields: components['schemas']['FieldDefinition'][],
|
|
98
97
|
): SetQueryFromFiltersResult => {
|
|
99
|
-
let query:
|
|
100
|
-
let filterData:
|
|
101
|
-
let querySummary: Array<
|
|
102
|
-
const sortData:
|
|
98
|
+
let query: Record<string, string> = {}
|
|
99
|
+
let filterData: Record<string, string> = {}
|
|
100
|
+
let querySummary: Array<Record<string, string>> = []
|
|
101
|
+
const sortData: Record<string, string> = {}
|
|
103
102
|
const dateMapper = new DateMapper()
|
|
104
103
|
const urlParams = new URLSearchParams(req.body.search)
|
|
105
104
|
|
|
@@ -124,16 +123,18 @@ export const setQueryFromFilters = (
|
|
|
124
123
|
urlParamValue = !urlParamValue || urlParamValue.length === 0 ? value : urlParamValue
|
|
125
124
|
urlParamValue = urlParamValue.length === 1 ? `${urlParamValue[0]}` : `${urlParamValue}`
|
|
126
125
|
|
|
127
|
-
query[name
|
|
128
|
-
filterData[shortName
|
|
126
|
+
query[name] = urlParamValue
|
|
127
|
+
filterData[shortName] = urlParamValue
|
|
129
128
|
|
|
130
129
|
let dateDisplayValue
|
|
131
130
|
if (dateMapper.isDate(value)) {
|
|
132
131
|
dateDisplayValue = dateMapper.toDateString(value, 'local-date')
|
|
133
132
|
|
|
134
133
|
const isoFormatDate = dateMapper.toDateString(value, 'iso')
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
if (isoFormatDate) {
|
|
135
|
+
query[name] = isoFormatDate
|
|
136
|
+
filterData[shortName] = isoFormatDate
|
|
137
|
+
}
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
const fieldDisplayName = DefinitionUtils.getFieldDisplayName(fields, shortName)
|
|
@@ -143,8 +144,8 @@ export const setQueryFromFilters = (
|
|
|
143
144
|
})
|
|
144
145
|
}
|
|
145
146
|
} else if (name.startsWith('sort')) {
|
|
146
|
-
query[name
|
|
147
|
-
sortData[name
|
|
147
|
+
query[name] = value
|
|
148
|
+
sortData[name] = value
|
|
148
149
|
|
|
149
150
|
const fieldDef = DefinitionUtils.getField(fields, value)
|
|
150
151
|
|
|
@@ -30,7 +30,7 @@ describe('CatalogueUtils', () => {
|
|
|
30
30
|
const reportsTableData = await CatalogueUtils.getReportsList(res, services)
|
|
31
31
|
|
|
32
32
|
expect(reportsTableData.head.length).toEqual(4)
|
|
33
|
-
expect(reportsTableData.rows.length).toEqual(
|
|
33
|
+
expect(reportsTableData.rows.length).toEqual(79)
|
|
34
34
|
})
|
|
35
35
|
})
|
|
36
36
|
})
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=Object.create;var i=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var I=(e,a)=>{for(var t in a)i(e,t,{get:a[t],enumerable:!0})},l=(e,a,t,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of m(a))!g.call(e,s)&&s!==t&&i(e,s,{get:()=>a[s],enumerable:!(r=C(a,s))||r.enumerable});return e};var R=(e,a,t)=>(t=e!=null?c(f(e)):{},l(a||!e||!e.__esModule?i(t,"default",{value:e,enumerable:!0}):t,e)),x=e=>l(i({},"__esModule",{value:!0}),e);var V={};I(V,{Chart:()=>o,default:()=>M});module.exports=x(V);var u=require("./ChartColours"),d=R(require("./chart-config"));class o{constructor(){this.labels=[];this.labelId=void 0;this.datasets=[];this.responseData=[];this.backgroundColor=[];this.borderWidth=[0,0];this.borderColor=[];this.hexColours=[];this.config=d.default;this.withData=a=>(this.responseData=a,this);this.initUnit=a=>{this.unit=a.find(t=>t.unit)?.unit};this.createDatasets=(a,t)=>{this.hexColours=new u.ChartColours().getHexPallette(),this.datasets=t.map((r,s)=>{const h=this.createDatasetLabel(r),n=this.createDatasetValues(a,r),b=n.reduce((D,p)=>D+p,0);return{label:h,data:n,total:b,...this.setStyles(s)}})};this.createDatasetLabel=a=>this.labelId&&a[this.labelId]?`${a[this.labelId].raw}`:"All";this.createDatasetValues=(a,t)=>a.map(r=>{const s=r.id;return t[s]&&t[s].raw?Number(t[s].raw):0});this.setStyles=a=>{const t=this.hexColours[a];return{backgroundColor:t,borderColor:t}};this.createLabels=a=>{this.labels=a.map(t=>t.display||"")};this.getLabelId=a=>{if(a.length){const t=a.length-1;this.labelId=a[t]?.id}}}}var M=o;0&&(module.exports={Chart});
|
|
2
|
+
//# sourceMappingURL=Chart.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dpr/components/_charts/chart/Chart.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport {\n DashboardVisualisationDataSet,\n VisualisationDefinitionKey,\n ChartMeasure,\n} from '../../_dashboards/dashboard-visualisation/types'\nimport { ChartColours } from './ChartColours'\nimport ChartConfig from './chart-config'\n\nclass Chart {\n labels: string[] = []\n\n private labelId: string | undefined = undefined\n\n datasets: DashboardVisualisationDataSet[] = []\n\n unit: 'NUMBER' | 'PERCENTAGE' | undefined\n\n responseData: DashboardDataResponse[] = []\n\n backgroundColor: string[][] = []\n\n borderWidth: number[] = [0, 0]\n\n borderColor: string[][] = []\n\n hexColours: string[] = []\n\n config = ChartConfig\n\n withData = (responseData: DashboardDataResponse[]) => {\n this.responseData = responseData\n return this\n }\n\n initUnit = (measures: ChartMeasure) => {\n this.unit = measures.find((m) => m.unit)?.unit\n }\n\n createDatasets = (measures: ChartMeasure, responseData: DashboardDataResponse[]) => {\n this.hexColours = new ChartColours().getHexPallette()\n this.datasets = responseData.map((row, datasetIndex) => {\n const label = this.createDatasetLabel(row)\n const data = this.createDatasetValues(measures, row)\n const total = data.reduce((acc: number, val: number) => acc + val, 0)\n\n return {\n label,\n data,\n total,\n ...this.setStyles(datasetIndex),\n }\n })\n }\n\n private createDatasetLabel = (row: DashboardDataResponse) => {\n return this.labelId && row[this.labelId] ? `${row[this.labelId].raw}` : 'All'\n }\n\n private createDatasetValues = (measures: ChartMeasure, row: DashboardDataResponse) => {\n return measures.map((column) => {\n const rowId = column.id\n return row[rowId] && row[rowId].raw ? Number(row[rowId].raw) : 0\n })\n }\n\n setStyles = (datasetIndex: number) => {\n const colour = this.hexColours[datasetIndex]\n return {\n backgroundColor: colour,\n borderColor: colour,\n }\n }\n\n createLabels = (measures: ChartMeasure) => {\n this.labels = measures.map((col) => col.display || '')\n }\n\n getLabelId = (keys: VisualisationDefinitionKey[]) => {\n if (keys.length) {\n const lastIndex = keys.length - 1\n this.labelId = keys[lastIndex]?.id\n }\n }\n}\n\nexport { Chart }\nexport default Chart\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,WAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAOA,IAAAK,EAA6B,0BAC7BC,EAAwB,6BAExB,MAAMJ,CAAM,CAAZ,cACE,YAAmB,CAAC,EAEpB,KAAQ,QAA8B,OAEtC,cAA4C,CAAC,EAI7C,kBAAwC,CAAC,EAEzC,qBAA8B,CAAC,EAE/B,iBAAwB,CAAC,EAAG,CAAC,EAE7B,iBAA0B,CAAC,EAE3B,gBAAuB,CAAC,EAExB,YAAS,EAAAK,QAET,cAAYC,IACV,KAAK,aAAeA,EACb,MAGT,cAAYC,GAA2B,CACrC,KAAK,KAAOA,EAAS,KAAMC,GAAMA,EAAE,IAAI,GAAG,IAC5C,EAEA,oBAAiB,CAACD,EAAwBD,IAA0C,CAClF,KAAK,WAAa,IAAI,eAAa,EAAE,eAAe,EACpD,KAAK,SAAWA,EAAa,IAAI,CAACG,EAAKC,IAAiB,CACtD,MAAMC,EAAQ,KAAK,mBAAmBF,CAAG,EACnCG,EAAO,KAAK,oBAAoBL,EAAUE,CAAG,EAC7CI,EAAQD,EAAK,OAAO,CAACE,EAAaC,IAAgBD,EAAMC,EAAK,CAAC,EAEpE,MAAO,CACL,MAAAJ,EACA,KAAAC,EACA,MAAAC,EACA,GAAG,KAAK,UAAUH,CAAY,CAChC,CACF,CAAC,CACH,EAEA,KAAQ,mBAAsBD,GACrB,KAAK,SAAWA,EAAI,KAAK,OAAO,EAAI,GAAGA,EAAI,KAAK,OAAO,EAAE,GAAG,GAAK,MAG1E,KAAQ,oBAAsB,CAACF,EAAwBE,IAC9CF,EAAS,IAAKS,GAAW,CAC9B,MAAMC,EAAQD,EAAO,GACrB,OAAOP,EAAIQ,CAAK,GAAKR,EAAIQ,CAAK,EAAE,IAAM,OAAOR,EAAIQ,CAAK,EAAE,GAAG,EAAI,CACjE,CAAC,EAGH,eAAaP,GAAyB,CACpC,MAAMQ,EAAS,KAAK,WAAWR,CAAY,EAC3C,MAAO,CACL,gBAAiBQ,EACjB,YAAaA,CACf,CACF,EAEA,kBAAgBX,GAA2B,CACzC,KAAK,OAASA,EAAS,IAAKY,GAAQA,EAAI,SAAW,EAAE,CACvD,EAEA,gBAAcC,GAAuC,CACnD,GAAIA,EAAK,OAAQ,CACf,MAAMC,EAAYD,EAAK,OAAS,EAChC,KAAK,QAAUA,EAAKC,CAAS,GAAG,EAClC,CACF,EACF,CAGA,IAAOpB,EAAQD",
|
|
6
|
+
"names": ["Chart_exports", "__export", "Chart", "Chart_default", "__toCommonJS", "import_ChartColours", "import_chart_config", "ChartConfig", "responseData", "measures", "m", "row", "datasetIndex", "label", "data", "total", "acc", "val", "column", "rowId", "colour", "col", "keys", "lastIndex"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/* eslint-disable prefer-destructuring */
|
|
2
|
+
import { DashboardDataResponse } from '../../../types/Metrics'
|
|
3
|
+
import {
|
|
4
|
+
DashboardVisualisationDataSet,
|
|
5
|
+
VisualisationDefinitionKey,
|
|
6
|
+
ChartMeasure,
|
|
7
|
+
} from '../../_dashboards/dashboard-visualisation/types'
|
|
8
|
+
import { ChartColours } from './ChartColours'
|
|
9
|
+
import ChartConfig from './chart-config'
|
|
10
|
+
|
|
11
|
+
class Chart {
|
|
12
|
+
labels: string[] = []
|
|
13
|
+
|
|
14
|
+
private labelId: string | undefined = undefined
|
|
15
|
+
|
|
16
|
+
datasets: DashboardVisualisationDataSet[] = []
|
|
17
|
+
|
|
18
|
+
unit: 'NUMBER' | 'PERCENTAGE' | undefined
|
|
19
|
+
|
|
20
|
+
responseData: DashboardDataResponse[] = []
|
|
21
|
+
|
|
22
|
+
backgroundColor: string[][] = []
|
|
23
|
+
|
|
24
|
+
borderWidth: number[] = [0, 0]
|
|
25
|
+
|
|
26
|
+
borderColor: string[][] = []
|
|
27
|
+
|
|
28
|
+
hexColours: string[] = []
|
|
29
|
+
|
|
30
|
+
config = ChartConfig
|
|
31
|
+
|
|
32
|
+
withData = (responseData: DashboardDataResponse[]) => {
|
|
33
|
+
this.responseData = responseData
|
|
34
|
+
return this
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
initUnit = (measures: ChartMeasure) => {
|
|
38
|
+
this.unit = measures.find((m) => m.unit)?.unit
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
createDatasets = (measures: ChartMeasure, responseData: DashboardDataResponse[]) => {
|
|
42
|
+
this.hexColours = new ChartColours().getHexPallette()
|
|
43
|
+
this.datasets = responseData.map((row, datasetIndex) => {
|
|
44
|
+
const label = this.createDatasetLabel(row)
|
|
45
|
+
const data = this.createDatasetValues(measures, row)
|
|
46
|
+
const total = data.reduce((acc: number, val: number) => acc + val, 0)
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
label,
|
|
50
|
+
data,
|
|
51
|
+
total,
|
|
52
|
+
...this.setStyles(datasetIndex),
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private createDatasetLabel = (row: DashboardDataResponse) => {
|
|
58
|
+
return this.labelId && row[this.labelId] ? `${row[this.labelId].raw}` : 'All'
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private createDatasetValues = (measures: ChartMeasure, row: DashboardDataResponse) => {
|
|
62
|
+
return measures.map((column) => {
|
|
63
|
+
const rowId = column.id
|
|
64
|
+
return row[rowId] && row[rowId].raw ? Number(row[rowId].raw) : 0
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
setStyles = (datasetIndex: number) => {
|
|
69
|
+
const colour = this.hexColours[datasetIndex]
|
|
70
|
+
return {
|
|
71
|
+
backgroundColor: colour,
|
|
72
|
+
borderColor: colour,
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
createLabels = (measures: ChartMeasure) => {
|
|
77
|
+
this.labels = measures.map((col) => col.display || '')
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
getLabelId = (keys: VisualisationDefinitionKey[]) => {
|
|
81
|
+
if (keys.length) {
|
|
82
|
+
const lastIndex = keys.length - 1
|
|
83
|
+
this.labelId = keys[lastIndex]?.id
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { Chart }
|
|
89
|
+
export default Chart
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var o=(a,e)=>{for(var l in e)r(a,l,{get:e[l],enumerable:!0})},p=(a,e,l,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of x(e))!m.call(a,t)&&t!==l&&r(a,t,{get:()=>e[t],enumerable:!(n=h(e,t))||n.enumerable});return a};var u=a=>p(r({},"__esModule",{value:!0}),a);var s={};o(s,{ChartColours:()=>g});module.exports=u(s);class g{constructor(){this.pallette=[{name:"blue",hex:"#5694ca"},{name:"purple",hex:"#912b88"},{name:"green",hex:"#00703c"},{name:"dark_blue",hex:"#003078"},{name:"orange",hex:"#f47738"},{name:"orange",hex:"#28a197"}];this.getColourPallette=()=>this.pallette;this.getHexPallette=()=>this.pallette.map(e=>e.hex)}}0&&(module.exports={ChartColours});
|
|
2
|
+
//# sourceMappingURL=ChartColours.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dpr/components/_charts/chart/ChartColours.ts"],
|
|
4
|
+
"sourcesContent": ["export class ChartColours {\n pallette = [\n {\n name: 'blue',\n hex: '#5694ca',\n },\n {\n name: 'purple',\n hex: '#912b88',\n },\n {\n name: 'green',\n hex: '#00703c',\n },\n {\n name: 'dark_blue',\n hex: '#003078',\n },\n {\n name: 'orange',\n hex: '#f47738',\n },\n {\n name: 'orange',\n hex: '#28a197',\n },\n ]\n\n getColourPallette = () => {\n return this.pallette\n }\n\n getHexPallette = () => {\n return this.pallette.map((p) => p.hex)\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,CAAa,CAAnB,cACL,cAAW,CACT,CACE,KAAM,OACN,IAAK,SACP,EACA,CACE,KAAM,SACN,IAAK,SACP,EACA,CACE,KAAM,QACN,IAAK,SACP,EACA,CACE,KAAM,YACN,IAAK,SACP,EACA,CACE,KAAM,SACN,IAAK,SACP,EACA,CACE,KAAM,SACN,IAAK,SACP,CACF,EAEA,uBAAoB,IACX,KAAK,SAGd,oBAAiB,IACR,KAAK,SAAS,IAAKE,GAAMA,EAAE,GAAG,EAEzC",
|
|
6
|
+
"names": ["ChartColours_exports", "__export", "ChartColours", "__toCommonJS", "p"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class ChartColours {
|
|
2
|
+
pallette = [
|
|
3
|
+
{
|
|
4
|
+
name: 'blue',
|
|
5
|
+
hex: '#5694ca',
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
name: 'purple',
|
|
9
|
+
hex: '#912b88',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: 'green',
|
|
13
|
+
hex: '#00703c',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'dark_blue',
|
|
17
|
+
hex: '#003078',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'orange',
|
|
21
|
+
hex: '#f47738',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'orange',
|
|
25
|
+
hex: '#28a197',
|
|
26
|
+
},
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
getColourPallette = () => {
|
|
30
|
+
return this.pallette
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getHexPallette = () => {
|
|
34
|
+
return this.pallette.map((p) => p.hex)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var f=Object.create;var o=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var y=(t,e)=>{for(var i in e)o(t,i,{get:e[i],enumerable:!0})},l=(t,e,i,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of c(e))!g.call(t,s)&&s!==i&&o(t,s,{get:()=>e[s],enumerable:!(a=b(e,s))||a.enumerable});return t};var u=(t,e,i)=>(i=t!=null?f(T(t)):{},l(e||!t||!t.__esModule?o(i,"default",{value:t,enumerable:!0}):i,t)),C=t=>l(o({},"__esModule",{value:!0}),t);var k={};y(k,{TimeseriesChart:()=>h,default:()=>B});module.exports=C(k);var m=u(require("../../../utils/datasetHelper")),D=require("./ChartColours"),p=u(require("./chart-config"));class h{constructor(){this.labels=[];this.labelId=void 0;this.datasets=[];this.responseData=[];this.measures=[];this.keys=[];this.timeBlockData=[];this.datasetCount=0;this.hexColours=[];this.config=p.default;this.withData=e=>(this.responseData=e,this.initFromData(),this);this.initFromDefinition=e=>{this.measures=e.columns.measures,this.keys=e.columns.keys||[],this.unit=this.measures.find(i=>i.unit)?.unit};this.withPartialDate=e=>(this.partialDate=e,this);this.initFromData=()=>{this.groupKey=m.default.getGroupKey(this.responseData,this.keys),this.labelId=this.groupKey?.id||"",this.timeBlockData=m.default.groupRowsByTimestamp(this.responseData),this.labels=this.getLabels(),this.datasetCount=this.timeBlockData[0]?.length};this.buildDatasets=()=>{this.hexColours=new D.ChartColours().getHexPallette();for(let e=0;e<this.datasetCount;e+=1){const i=this.timeBlockData.map(n=>{const{raw:r}=n[e][this.measures[1].id];return r?Number(r):0}),a=i.reduce((n,r)=>n+r,0),s=this.labelId?this.timeBlockData[0][e][this.labelId].raw:"",d=s||"";this.datasets.push({data:i,label:d,total:a})}};this.getLabels=()=>this.timeBlockData.map(e=>e[0].ts.raw)}}var B=h;0&&(module.exports={TimeseriesChart});
|
|
2
|
+
//# sourceMappingURL=ChartTimeseries.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dpr/components/_charts/chart/ChartTimeseries.ts"],
|
|
4
|
+
"sourcesContent": ["import { components } from '../../../types/api'\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport {\n DashboardVisualisationDataSet,\n TimeseriesChartMeasure,\n VisualisationDefinitionKey,\n} from '../../_dashboards/dashboard-visualisation/types'\nimport DatasetHelper from '../../../utils/datasetHelper'\nimport { BarTimeseriesDefinitionMeasure, BarTimeseriesDefinitionType } from './bar-timeseries/types'\nimport { LineTimeseriesDefinitionMeasure, LineTimeseriesDefinitionType } from './line-timeseries/types'\nimport { ChartColours } from './ChartColours'\nimport ChartConfig from './chart-config'\nimport { PartialDate } from '../../_filters/types'\n\nclass TimeseriesChart {\n labels: string[] = []\n\n labelId: string | undefined = undefined\n\n datasets: DashboardVisualisationDataSet[] = []\n\n unit: 'NUMBER' | 'PERCENTAGE' | undefined\n\n responseData: DashboardDataResponse[] = []\n\n measures: TimeseriesChartMeasure = []\n\n keys: VisualisationDefinitionKey[] = []\n\n timeBlockData: DashboardDataResponse[][] = []\n\n groupKey: LineTimeseriesDefinitionMeasure | BarTimeseriesDefinitionMeasure | undefined\n\n datasetCount = 0\n\n hexColours: string[] = []\n\n config = ChartConfig\n\n partialDate: PartialDate | undefined\n\n withData = (responseData: DashboardDataResponse[]) => {\n this.responseData = responseData\n this.initFromData()\n return this\n }\n\n initFromDefinition = (definition: BarTimeseriesDefinitionType | LineTimeseriesDefinitionType) => {\n this.measures = definition.columns.measures\n this.keys = definition.columns.keys || []\n this.unit = this.measures.find((m) => m.unit)?.unit\n }\n\n withPartialDate = (partialDate?: PartialDate) => {\n this.partialDate = partialDate\n return this\n }\n\n initFromData = () => {\n this.groupKey = DatasetHelper.getGroupKey(\n this.responseData,\n <Array<components['schemas']['DashboardVisualisationColumnDefinition']>>this.keys,\n )\n this.labelId = this.groupKey?.id || ''\n this.timeBlockData = DatasetHelper.groupRowsByTimestamp(this.responseData)\n this.labels = this.getLabels()\n this.datasetCount = this.timeBlockData[0]?.length\n }\n\n buildDatasets = () => {\n this.hexColours = new ChartColours().getHexPallette()\n for (let index = 0; index < this.datasetCount; index += 1) {\n const data = this.timeBlockData.map((timeperiod) => {\n const { raw } = timeperiod[index][this.measures[1].id]\n return raw ? Number(raw) : 0\n })\n const total = data.reduce((a, c) => a + c, 0)\n const rawValue = this.labelId ? this.timeBlockData[0][index][this.labelId].raw : ''\n const label = rawValue ? <string>rawValue : ''\n\n this.datasets.push({\n data,\n label,\n total,\n })\n }\n }\n\n private getLabels = () => {\n return this.timeBlockData.map((d: DashboardDataResponse[]) => <string>d[0]['ts'].raw)\n }\n}\n\nexport { TimeseriesChart }\nexport default TimeseriesChart\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAOA,IAAAK,EAA0B,2CAG1BC,EAA6B,0BAC7BC,EAAwB,6BAGxB,MAAML,CAAgB,CAAtB,cACE,YAAmB,CAAC,EAEpB,aAA8B,OAE9B,cAA4C,CAAC,EAI7C,kBAAwC,CAAC,EAEzC,cAAmC,CAAC,EAEpC,UAAqC,CAAC,EAEtC,mBAA2C,CAAC,EAI5C,kBAAe,EAEf,gBAAuB,CAAC,EAExB,YAAS,EAAAM,QAIT,cAAYC,IACV,KAAK,aAAeA,EACpB,KAAK,aAAa,EACX,MAGT,wBAAsBC,GAA2E,CAC/F,KAAK,SAAWA,EAAW,QAAQ,SACnC,KAAK,KAAOA,EAAW,QAAQ,MAAQ,CAAC,EACxC,KAAK,KAAO,KAAK,SAAS,KAAMC,GAAMA,EAAE,IAAI,GAAG,IACjD,EAEA,qBAAmBC,IACjB,KAAK,YAAcA,EACZ,MAGT,kBAAe,IAAM,CACnB,KAAK,SAAW,EAAAC,QAAc,YAC5B,KAAK,aACmE,KAAK,IAC/E,EACA,KAAK,QAAU,KAAK,UAAU,IAAM,GACpC,KAAK,cAAgB,EAAAA,QAAc,qBAAqB,KAAK,YAAY,EACzE,KAAK,OAAS,KAAK,UAAU,EAC7B,KAAK,aAAe,KAAK,cAAc,CAAC,GAAG,MAC7C,EAEA,mBAAgB,IAAM,CACpB,KAAK,WAAa,IAAI,eAAa,EAAE,eAAe,EACpD,QAASC,EAAQ,EAAGA,EAAQ,KAAK,aAAcA,GAAS,EAAG,CACzD,MAAMC,EAAO,KAAK,cAAc,IAAKC,GAAe,CAClD,KAAM,CAAE,IAAAC,CAAI,EAAID,EAAWF,CAAK,EAAE,KAAK,SAAS,CAAC,EAAE,EAAE,EACrD,OAAOG,EAAM,OAAOA,CAAG,EAAI,CAC7B,CAAC,EACKC,EAAQH,EAAK,OAAO,CAACI,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EACtCC,EAAW,KAAK,QAAU,KAAK,cAAc,CAAC,EAAEP,CAAK,EAAE,KAAK,OAAO,EAAE,IAAM,GAC3EQ,EAAQD,GAA8B,GAE5C,KAAK,SAAS,KAAK,CACjB,KAAAN,EACA,MAAAO,EACA,MAAAJ,CACF,CAAC,CACH,CACF,EAEA,KAAQ,UAAY,IACX,KAAK,cAAc,IAAKK,GAAuCA,EAAE,CAAC,EAAE,GAAM,GAAG,EAExF,CAGA,IAAOpB,EAAQD",
|
|
6
|
+
"names": ["ChartTimeseries_exports", "__export", "TimeseriesChart", "ChartTimeseries_default", "__toCommonJS", "import_datasetHelper", "import_ChartColours", "import_chart_config", "ChartConfig", "responseData", "definition", "m", "partialDate", "DatasetHelper", "index", "data", "timeperiod", "raw", "total", "a", "c", "rawValue", "label", "d"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { components } from '../../../types/api'
|
|
2
|
+
import { DashboardDataResponse } from '../../../types/Metrics'
|
|
3
|
+
import {
|
|
4
|
+
DashboardVisualisationDataSet,
|
|
5
|
+
TimeseriesChartMeasure,
|
|
6
|
+
VisualisationDefinitionKey,
|
|
7
|
+
} from '../../_dashboards/dashboard-visualisation/types'
|
|
8
|
+
import DatasetHelper from '../../../utils/datasetHelper'
|
|
9
|
+
import { BarTimeseriesDefinitionMeasure, BarTimeseriesDefinitionType } from './bar-timeseries/types'
|
|
10
|
+
import { LineTimeseriesDefinitionMeasure, LineTimeseriesDefinitionType } from './line-timeseries/types'
|
|
11
|
+
import { ChartColours } from './ChartColours'
|
|
12
|
+
import ChartConfig from './chart-config'
|
|
13
|
+
import { PartialDate } from '../../_filters/types'
|
|
14
|
+
|
|
15
|
+
class TimeseriesChart {
|
|
16
|
+
labels: string[] = []
|
|
17
|
+
|
|
18
|
+
labelId: string | undefined = undefined
|
|
19
|
+
|
|
20
|
+
datasets: DashboardVisualisationDataSet[] = []
|
|
21
|
+
|
|
22
|
+
unit: 'NUMBER' | 'PERCENTAGE' | undefined
|
|
23
|
+
|
|
24
|
+
responseData: DashboardDataResponse[] = []
|
|
25
|
+
|
|
26
|
+
measures: TimeseriesChartMeasure = []
|
|
27
|
+
|
|
28
|
+
keys: VisualisationDefinitionKey[] = []
|
|
29
|
+
|
|
30
|
+
timeBlockData: DashboardDataResponse[][] = []
|
|
31
|
+
|
|
32
|
+
groupKey: LineTimeseriesDefinitionMeasure | BarTimeseriesDefinitionMeasure | undefined
|
|
33
|
+
|
|
34
|
+
datasetCount = 0
|
|
35
|
+
|
|
36
|
+
hexColours: string[] = []
|
|
37
|
+
|
|
38
|
+
config = ChartConfig
|
|
39
|
+
|
|
40
|
+
partialDate: PartialDate | undefined
|
|
41
|
+
|
|
42
|
+
withData = (responseData: DashboardDataResponse[]) => {
|
|
43
|
+
this.responseData = responseData
|
|
44
|
+
this.initFromData()
|
|
45
|
+
return this
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
initFromDefinition = (definition: BarTimeseriesDefinitionType | LineTimeseriesDefinitionType) => {
|
|
49
|
+
this.measures = definition.columns.measures
|
|
50
|
+
this.keys = definition.columns.keys || []
|
|
51
|
+
this.unit = this.measures.find((m) => m.unit)?.unit
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
withPartialDate = (partialDate?: PartialDate) => {
|
|
55
|
+
this.partialDate = partialDate
|
|
56
|
+
return this
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
initFromData = () => {
|
|
60
|
+
this.groupKey = DatasetHelper.getGroupKey(
|
|
61
|
+
this.responseData,
|
|
62
|
+
<Array<components['schemas']['DashboardVisualisationColumnDefinition']>>this.keys,
|
|
63
|
+
)
|
|
64
|
+
this.labelId = this.groupKey?.id || ''
|
|
65
|
+
this.timeBlockData = DatasetHelper.groupRowsByTimestamp(this.responseData)
|
|
66
|
+
this.labels = this.getLabels()
|
|
67
|
+
this.datasetCount = this.timeBlockData[0]?.length
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
buildDatasets = () => {
|
|
71
|
+
this.hexColours = new ChartColours().getHexPallette()
|
|
72
|
+
for (let index = 0; index < this.datasetCount; index += 1) {
|
|
73
|
+
const data = this.timeBlockData.map((timeperiod) => {
|
|
74
|
+
const { raw } = timeperiod[index][this.measures[1].id]
|
|
75
|
+
return raw ? Number(raw) : 0
|
|
76
|
+
})
|
|
77
|
+
const total = data.reduce((a, c) => a + c, 0)
|
|
78
|
+
const rawValue = this.labelId ? this.timeBlockData[0][index][this.labelId].raw : ''
|
|
79
|
+
const label = rawValue ? <string>rawValue : ''
|
|
80
|
+
|
|
81
|
+
this.datasets.push({
|
|
82
|
+
data,
|
|
83
|
+
label,
|
|
84
|
+
total,
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private getLabels = () => {
|
|
90
|
+
return this.timeBlockData.map((d: DashboardDataResponse[]) => <string>d[0]['ts'].raw)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { TimeseriesChart }
|
|
95
|
+
export default TimeseriesChart
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var B=Object.create;var h=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var w=(i,a)=>{for(var t in a)h(i,t,{get:a[t],enumerable:!0})},m=(i,a,t,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of k(a))!K.call(i,s)&&s!==t&&h(i,s,{get:()=>a[s],enumerable:!(e=L(a,s))||e.enumerable});return i};var p=(i,a,t)=>(t=i!=null?B(A(i)):{},m(a||!i||!i.__esModule?h(t,"default",{value:i,enumerable:!0}):t,i)),V=i=>m(h({},"__esModule",{value:!0}),i);var M={};w(M,{BarChart:()=>l,default:()=>S});module.exports=V(M);var f=require("../../../_dashboards/dashboard-visualisation/types"),d=p(require("../../../../utils/datasetHelper")),c=p(require("../Chart")),g=p(require("./validate")),b=require("../ChartColours");class l extends c.default{constructor(){super(...arguments);this.responseData=[];this.isList=!1;this.datasets=[];this.groupsData=[];this.barCount=0;this.withDefinition=t=>(this.definition=g.default.BarSchema.parse(t),this.initFromDefinitionData(),this);this.withData=t=>(this.responseData=t,this.isList&&this.initListData(),this);this.getCanvasHeight=()=>(this.barCount=this.datasets.length*this.datasets[0].data.length,this.options?.horizontal?this.barCount*40+60:400);this.build=()=>{this.isList?this.getListBarChartData():this.getBarChartData();const t=this.getCanvasHeight();return{type:f.DashboardVisualisationType.BAR,options:{height:t,unit:this.unit,timeseries:!1},data:{labels:this.labels,datasets:this.datasets,config:this.config}}};this.augmentDataset=t=>t.map(e=>({...e,borderWidth:[0,0],datalabels:{align:"center",anchor:"bottom"}}));this.setBespokeOptions=()=>{let t="x",e;if(this.options){const{horizontal:s,xStacked:r,yStacked:o}=this.options;t=s?"y":t,(r||o)&&(e={...r&&{x:{stacked:r}},...o&&{y:{stacked:o}}})}return{...this.config,indexAxis:t,...e&&{scales:e}}};this.getBarChartData=()=>{this.createDatasets(this.measures,this.responseData),this.datasets=this.augmentDataset(this.datasets),this.config=this.setBespokeOptions(),this.createLabels(this.measures)};this.getListBarChartData=()=>{this.createListLabels(),this.createListDatasets(),this.datasets=this.augmentDataset(this.datasets),this.config=this.setBespokeOptions()};this.initFromDefinitionData=()=>{this.measures=this.definition.columns.measures,this.options=this.definition.options,this.keys=this.definition.columns.keys||[],this.isList=!!this.measures.find(t=>t.axis),this.initUnit(this.measures),this.isList||this.getLabelId(this.keys)};this.initListData=()=>{this.xAxisColumn=this.measures.find(t=>t.axis==="x"),this.yAxisColumn=this.measures.find(t=>t.axis==="y"),this.groupKey=d.default.getGroupKey(this.responseData,this.keys),this.groupsData=this.groupKey?d.default.groupRowsByKey(this.responseData,this.groupKey.id):[this.responseData]};this.createListDatasets=()=>{this.hexColours=new b.ChartColours().getHexPallette(),this.datasets=this.groupsData.map((t,e)=>{const s=Array(this.labels.length);t.forEach(o=>{const n=this.yAxisColumn?.id||"",y=this.xAxisColumn?.id||"",x=o[y],u=o[n],C=u&&u.raw?Number(u.raw):0,D=this.labels.findIndex(v=>v===x.raw);D!==-1&&(s[D]=Number(C))});let r="";if(this.groupKey){const o=this.groupKey.id,n=t[0];r=n&&n[o]?`${n[o].raw}`:""}else r=this.yAxisColumn?.display||r;return{label:r,data:s,total:s.reduce((o,n)=>o+n,0),...this.setStyles(e)}})};this.createListLabels=()=>{this.labels=this.groupsData.flatMap(t=>{const e=this.xAxisColumn?.id||"";return t.map(s=>{const r=s[e];return r?`${r.raw}`:""})})}}}var S=l;0&&(module.exports={BarChart});
|
|
2
|
+
//# sourceMappingURL=BarChart.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/dpr/components/_charts/chart/bar/BarChart.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { DashboardDataResponse } from '../../../../types/Metrics'\nimport {\n DashboardVisualisationType,\n DashboardVisualisationData,\n DashboardVisualisationDataSet,\n VisualisationDefinitionKey,\n} from '../../../_dashboards/dashboard-visualisation/types'\nimport { components } from '../../../../types/api'\nimport DatasetHelper from '../../../../utils/datasetHelper'\nimport Chart from '../Chart'\nimport BarChartSchemas from './validate'\nimport { BarDefinitionMeasure, BarDefinitionOptions, BarDefinitionType } from './types'\nimport { ChartColours } from '../ChartColours'\n\nclass BarChart extends Chart {\n private definition!: BarDefinitionType\n\n private measures!: BarDefinitionMeasure[]\n\n private keys!: VisualisationDefinitionKey[]\n\n private options: BarDefinitionOptions | undefined\n\n override responseData: DashboardDataResponse[] = []\n\n private isList = false\n\n override datasets: DashboardVisualisationDataSet[] = []\n\n private groupsData: DashboardDataResponse[][] = []\n\n private groupKey: BarDefinitionMeasure | undefined\n\n private xAxisColumn: BarDefinitionMeasure | undefined\n\n private yAxisColumn: BarDefinitionMeasure | undefined\n\n private barCount = 0\n\n withDefinition = (definition: components['schemas']['DashboardVisualisationDefinition']) => {\n this.definition = BarChartSchemas.BarSchema.parse(definition)\n this.initFromDefinitionData()\n\n return this\n }\n\n override withData = (responseData: DashboardDataResponse[]) => {\n this.responseData = responseData\n if (this.isList) this.initListData()\n return this\n }\n\n getCanvasHeight = () => {\n this.barCount = this.datasets.length * this.datasets[0].data.length\n return this.options?.horizontal ? this.barCount * 40 + 60 : 400\n }\n\n build = (): DashboardVisualisationData => {\n if (!this.isList) {\n this.getBarChartData()\n } else {\n this.getListBarChartData()\n }\n const height = this.getCanvasHeight()\n\n return {\n type: DashboardVisualisationType.BAR,\n options: {\n height,\n unit: this.unit,\n timeseries: false,\n },\n data: {\n labels: this.labels,\n datasets: this.datasets,\n config: this.config,\n },\n }\n }\n\n augmentDataset = (datasets: DashboardVisualisationDataSet[]) => {\n return datasets.map((set) => {\n return {\n ...set,\n borderWidth: [0, 0],\n datalabels: {\n align: 'center',\n anchor: 'bottom',\n },\n }\n })\n }\n\n setBespokeOptions = () => {\n let indexAxis = 'x'\n let scales\n\n if (this.options) {\n const { horizontal, xStacked, yStacked } = this.options\n indexAxis = horizontal ? 'y' : indexAxis\n if (xStacked || yStacked) {\n scales = {\n ...(xStacked && { x: { stacked: xStacked } }),\n ...(yStacked && { y: { stacked: yStacked } }),\n }\n }\n }\n\n return {\n ...this.config,\n indexAxis,\n ...(scales && { scales }),\n }\n }\n\n private getBarChartData = () => {\n this.createDatasets(this.measures, this.responseData)\n this.datasets = this.augmentDataset(this.datasets)\n this.config = this.setBespokeOptions()\n this.createLabels(this.measures)\n }\n\n private getListBarChartData = () => {\n this.createListLabels()\n this.createListDatasets()\n this.datasets = this.augmentDataset(this.datasets)\n this.config = this.setBespokeOptions()\n }\n\n private initFromDefinitionData = () => {\n this.measures = this.definition.columns.measures\n this.options = this.definition.options\n this.keys = this.definition.columns.keys || []\n this.isList = !!this.measures.find((col) => col.axis)\n this.initUnit(this.measures)\n\n if (!this.isList) this.getLabelId(this.keys)\n }\n\n private initListData = () => {\n this.xAxisColumn = this.measures.find((col) => col.axis === 'x')\n this.yAxisColumn = this.measures.find((col) => col.axis === 'y')\n this.groupKey = <BarDefinitionMeasure>(\n DatasetHelper.getGroupKey(\n this.responseData,\n <Array<components['schemas']['DashboardVisualisationColumnDefinition']>>this.keys,\n )\n )\n this.groupsData = this.groupKey\n ? DatasetHelper.groupRowsByKey(this.responseData, this.groupKey.id)\n : [this.responseData]\n }\n\n private createListDatasets = () => {\n this.hexColours = new ChartColours().getHexPallette()\n this.datasets = this.groupsData.map((groupData, groupIndex) => {\n const data = Array(this.labels.length)\n groupData.forEach((row) => {\n // Validation will ensure these columns exist\n const yId = this.yAxisColumn?.id || ''\n const xId = this.xAxisColumn?.id || ''\n\n const labelField = row[xId]\n const valueField = row[yId]\n\n const raw = valueField && valueField.raw ? Number(valueField.raw) : 0\n const dataIndex = this.labels.findIndex((l) => l === labelField.raw)\n if (dataIndex !== -1) {\n data[dataIndex] = Number(raw)\n }\n })\n\n let label = ''\n if (this.groupKey) {\n const groupKeyId = this.groupKey.id\n const groupRow = groupData[0]\n label = groupRow && groupRow[groupKeyId] ? `${groupRow[groupKeyId].raw}` : ''\n } else {\n label = this.yAxisColumn?.display || label\n }\n\n return {\n label,\n data,\n total: data.reduce((acc: number, val: number) => acc + val, 0),\n ...this.setStyles(groupIndex),\n }\n })\n }\n\n private createListLabels = () => {\n this.labels = this.groupsData.flatMap((gd) => {\n const id = this.xAxisColumn?.id || ''\n return gd.map((row) => {\n const field = row[id]\n return field ? `${field.raw}` : ''\n })\n })\n }\n}\n\nexport { BarChart }\nexport default BarChart\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["BarChart_exports", "__export", "BarChart", "BarChart_default", "__toCommonJS", "import_types", "import_datasetHelper", "import_Chart", "import_validate", "import_ChartColours", "Chart", "definition", "BarChartSchemas", "responseData", "height", "datasets", "set", "indexAxis", "scales", "horizontal", "xStacked", "yStacked", "col", "DatasetHelper", "groupData", "groupIndex", "data", "row", "yId", "xId", "labelField", "valueField", "raw", "dataIndex", "l", "label", "groupKeyId", "groupRow", "acc", "val", "gd", "id", "field"]
|
|
7
|
+
}
|