@hisptz/dhis2-analytics 2.0.51 → 2.0.53

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 (47) hide show
  1. package/dist/components/ChartAnalytics/models/multi-series.js +4 -3
  2. package/dist/components/ChartAnalytics/models/multi-series.js.map +1 -1
  3. package/dist/components/ChartAnalytics/utils/chart.js +2 -1
  4. package/dist/components/ChartAnalytics/utils/chart.js.map +1 -1
  5. package/dist/esm/components/ChartAnalytics/models/multi-series.js +4 -3
  6. package/dist/esm/components/ChartAnalytics/models/multi-series.js.map +1 -1
  7. package/dist/esm/components/ChartAnalytics/utils/chart.js +2 -1
  8. package/dist/esm/components/ChartAnalytics/utils/chart.js.map +1 -1
  9. package/dist/types/components/ChartAnalytics/models/multi-series.d.ts.map +1 -1
  10. package/dist/types/components/ChartAnalytics/utils/chart.d.ts.map +1 -1
  11. package/package.json +5 -5
  12. package/dist/components/ChartAnalytics/ChartAnalytics.stories.js +0 -287
  13. package/dist/components/ChartAnalytics/ChartAnalytics.stories.js.map +0 -1
  14. package/dist/components/CircularProgressDashboard/CircularProgressIndicator.stories.js +0 -49
  15. package/dist/components/CircularProgressDashboard/CircularProgressIndicator.stories.js.map +0 -1
  16. package/dist/components/DHIS2PivotTable/DHIS2PivotTable.stories.js +0 -40
  17. package/dist/components/DHIS2PivotTable/DHIS2PivotTable.stories.js.map +0 -1
  18. package/dist/components/Map/DHIS2Map.stories.js +0 -402
  19. package/dist/components/Map/DHIS2Map.stories.js.map +0 -1
  20. package/dist/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfigModal.stories.js +0 -39
  21. package/dist/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfigModal.stories.js.map +0 -1
  22. package/dist/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.stories.js +0 -26
  23. package/dist/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.stories.js.map +0 -1
  24. package/dist/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfigModal.stories.js +0 -29
  25. package/dist/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfigModal.stories.js.map +0 -1
  26. package/dist/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.stories.js +0 -26
  27. package/dist/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.stories.js.map +0 -1
  28. package/dist/components/SingleValueContainer/SingleValueContainer.stories.js +0 -191
  29. package/dist/components/SingleValueContainer/SingleValueContainer.stories.js.map +0 -1
  30. package/dist/esm/components/ChartAnalytics/ChartAnalytics.stories.js +0 -264
  31. package/dist/esm/components/ChartAnalytics/ChartAnalytics.stories.js.map +0 -1
  32. package/dist/esm/components/CircularProgressDashboard/CircularProgressIndicator.stories.js +0 -42
  33. package/dist/esm/components/CircularProgressDashboard/CircularProgressIndicator.stories.js.map +0 -1
  34. package/dist/esm/components/DHIS2PivotTable/DHIS2PivotTable.stories.js +0 -31
  35. package/dist/esm/components/DHIS2PivotTable/DHIS2PivotTable.stories.js.map +0 -1
  36. package/dist/esm/components/Map/DHIS2Map.stories.js +0 -388
  37. package/dist/esm/components/Map/DHIS2Map.stories.js.map +0 -1
  38. package/dist/esm/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfigModal.stories.js +0 -34
  39. package/dist/esm/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfigModal.stories.js.map +0 -1
  40. package/dist/esm/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.stories.js +0 -21
  41. package/dist/esm/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.stories.js.map +0 -1
  42. package/dist/esm/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfigModal.stories.js +0 -24
  43. package/dist/esm/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfigModal.stories.js.map +0 -1
  44. package/dist/esm/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.stories.js +0 -21
  45. package/dist/esm/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.stories.js.map +0 -1
  46. package/dist/esm/components/SingleValueContainer/SingleValueContainer.stories.js +0 -182
  47. package/dist/esm/components/SingleValueContainer/SingleValueContainer.stories.js.map +0 -1
@@ -47,11 +47,11 @@ class DHIS2MultiSeriesChart extends index_js.DHIS2Chart {
47
47
  const row = analytics.rows?.find(
48
48
  (row2) => row2[categoryIndex] === item && row2[seriesIndex] === id
49
49
  );
50
- return row?.[valueIndex] ? parseFloat(row?.[valueIndex]) : 0;
50
+ return row?.[valueIndex] ? parseFloat(row?.[valueIndex]) : null;
51
51
  });
52
52
  let cumulativeData = [];
53
53
  if (cumulative) {
54
- cumulativeData = data?.reduce((acc, curr, index) => {
54
+ cumulativeData = lodash.compact(data)?.reduce((acc, curr, index) => {
55
55
  if (index === 0) {
56
56
  return [...acc, curr];
57
57
  }
@@ -59,6 +59,7 @@ class DHIS2MultiSeriesChart extends index_js.DHIS2Chart {
59
59
  }, []) ?? [];
60
60
  }
61
61
  return {
62
+ id,
62
63
  name: dataItem?.name,
63
64
  data: cumulative ? cumulativeData : data,
64
65
  type: as,
@@ -79,7 +80,7 @@ class DHIS2MultiSeriesChart extends index_js.DHIS2Chart {
79
80
  };
80
81
  }
81
82
  getYAxis() {
82
- let yAxes = [];
83
+ let yAxes;
83
84
  if (this.config.multiSeries?.yAxes) {
84
85
  yAxes = this.config.multiSeries?.yAxes;
85
86
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ChartAnalytics/models/multi-series.ts"],"names":["DHIS2Chart","head","getDimensionHeaderIndex","compact","row","getAllCategories"],"mappings":"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","file":"multi-series.js","sourcesContent":["import {\n\tPlotOptions,\n\tSeriesOptionsType,\n\tXAxisOptions,\n\tYAxisOptions,\n} from \"highcharts\";\nimport { compact, head } from \"lodash\";\nimport { MultiSeriesConfig } from \"../types/props.js\";\nimport { getAllCategories, getDimensionHeaderIndex } from \"../utils/chart.js\";\nimport { DHIS2Chart } from \"./index.js\";\n\nexport class DHIS2MultiSeriesChart extends DHIS2Chart {\n\tgetHighchartsType(): string {\n\t\treturn \"\";\n\t}\n\n\tgetPlotOptions(): PlotOptions {\n\t\treturn {\n\t\t\tcolumn: {},\n\t\t\tline: {},\n\t\t};\n\t}\n\n\tgetSeries(): SeriesOptionsType[] {\n\t\tconst analytics = this.analytics;\n\t\tconst config = this.config;\n\n\t\tconst categoryDimension = head(config.layout.category);\n\t\tconst seriesConfig: MultiSeriesConfig | undefined =\n\t\t\tthis.config.multiSeries;\n\n\t\tconst categoryIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\tcategoryDimension ?? \"\",\n\t\t);\n\t\tconst seriesIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\thead(config.layout.series) ?? \"\",\n\t\t);\n\t\tconst valueIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\t\"value\",\n\t\t);\n\n\t\tif (!categoryDimension) {\n\t\t\tthrow new Error(\"At least one category dimension is required\");\n\t\t}\n\n\t\tif (!seriesConfig) {\n\t\t\tthrow new Error(\n\t\t\t\t\"MultiSeries config is required for chart type multi-series\",\n\t\t\t);\n\t\t}\n\n\t\treturn compact(\n\t\t\tseriesConfig?.series?.map(({ id, as, cumulative, yAxis }) => {\n\t\t\t\tconst dataItem = analytics.metaData?.items[id as any];\n\t\t\t\tconst categoryItems =\n\t\t\t\t\tanalytics.metaData?.dimensions[\n\t\t\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t\t\t];\n\n\t\t\t\tconst data = categoryItems?.map((item: string) => {\n\t\t\t\t\tconst row = analytics.rows?.find(\n\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\trow[categoryIndex] === item &&\n\t\t\t\t\t\t\trow[seriesIndex] === id,\n\t\t\t\t\t);\n\t\t\t\t\treturn row?.[valueIndex]\n\t\t\t\t\t\t? parseFloat(row?.[valueIndex])\n\t\t\t\t\t\t: 0;\n\t\t\t\t});\n\n\t\t\t\tlet cumulativeData: number[] = [];\n\n\t\t\t\tif (cumulative) {\n\t\t\t\t\tcumulativeData =\n\t\t\t\t\t\tdata?.reduce((acc, curr, index) => {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\treturn [...acc, curr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [...acc, acc[index - 1] + curr];\n\t\t\t\t\t\t}, [] as number[]) ?? [];\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname: dataItem?.name,\n\t\t\t\t\tdata: cumulative ? cumulativeData : data,\n\t\t\t\t\ttype: as,\n\t\t\t\t\tyAxis: yAxis ?? 0,\n\t\t\t\t};\n\t\t\t}),\n\t\t) as SeriesOptionsType[];\n\t}\n\n\tgetXAxis(): XAxisOptions | undefined {\n\t\treturn {\n\t\t\ttype: \"category\",\n\t\t\tcategories: getAllCategories(this.analytics, this.config),\n\t\t\tcrosshair: true,\n\t\t\tlabels: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\ttitle: { text: \"\" },\n\t\t};\n\t}\n\n\tgetYAxis(): YAxisOptions[] {\n\t\tlet yAxes: YAxisOptions[] = [];\n\n\t\tif (this.config.multiSeries?.yAxes) {\n\t\t\tyAxes = this.config.multiSeries?.yAxes;\n\t\t} else {\n\t\t\tyAxes = super.getYAxis();\n\t\t}\n\n\t\tif (!this.config.multiSeries?.target) {\n\t\t\treturn yAxes;\n\t\t}\n\n\t\tconst { value, styles, label } = this.config.multiSeries?.target ?? {};\n\n\t\treturn [\n\t\t\t{\n\t\t\t\t...yAxes[0],\n\t\t\t\tplotLines: [\n\t\t\t\t\t...(yAxes[0].plotLines ?? []),\n\t\t\t\t\t{\n\t\t\t\t\t\tcolor: styles?.color ?? \"#00FF00\",\n\t\t\t\t\t\tdashStyle: styles?.dashStyle ?? \"Solid\",\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twidth: styles?.width ?? 2,\n\t\t\t\t\t\tzIndex: styles?.zIndex ?? 1000,\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t...yAxes.slice(1),\n\t\t];\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/components/ChartAnalytics/models/multi-series.ts"],"names":["DHIS2Chart","head","getDimensionHeaderIndex","compact","row","getAllCategories"],"mappings":"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","file":"multi-series.js","sourcesContent":["import {\n\tPlotOptions,\n\tSeriesOptionsType,\n\tXAxisOptions,\n\tYAxisOptions,\n} from \"highcharts\";\nimport { compact, head } from \"lodash\";\nimport { MultiSeriesConfig } from \"../types/props.js\";\nimport { getAllCategories, getDimensionHeaderIndex } from \"../utils/chart.js\";\nimport { DHIS2Chart } from \"./index.js\";\n\nexport class DHIS2MultiSeriesChart extends DHIS2Chart {\n\tgetHighchartsType(): string {\n\t\treturn \"\";\n\t}\n\n\tgetPlotOptions(): PlotOptions {\n\t\treturn {\n\t\t\tcolumn: {},\n\t\t\tline: {},\n\t\t};\n\t}\n\n\tgetSeries(): SeriesOptionsType[] {\n\t\tconst analytics = this.analytics;\n\t\tconst config = this.config;\n\n\t\tconst categoryDimension = head(config.layout.category);\n\t\tconst seriesConfig: MultiSeriesConfig | undefined =\n\t\t\tthis.config.multiSeries;\n\n\t\tconst categoryIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\tcategoryDimension ?? \"\",\n\t\t);\n\t\tconst seriesIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\thead(config.layout.series) ?? \"\",\n\t\t);\n\t\tconst valueIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\t\"value\",\n\t\t);\n\n\t\tif (!categoryDimension) {\n\t\t\tthrow new Error(\"At least one category dimension is required\");\n\t\t}\n\n\t\tif (!seriesConfig) {\n\t\t\tthrow new Error(\n\t\t\t\t\"MultiSeries config is required for chart type multi-series\",\n\t\t\t);\n\t\t}\n\n\t\treturn compact(\n\t\t\tseriesConfig?.series?.map(({ id, as, cumulative, yAxis }) => {\n\t\t\t\tconst dataItem = analytics.metaData?.items[id as any];\n\t\t\t\tconst categoryItems =\n\t\t\t\t\tanalytics.metaData?.dimensions[\n\t\t\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t\t\t];\n\n\t\t\t\tconst data = categoryItems?.map((item: string) => {\n\t\t\t\t\tconst row = analytics.rows?.find(\n\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\trow[categoryIndex] === item &&\n\t\t\t\t\t\t\trow[seriesIndex] === id,\n\t\t\t\t\t);\n\t\t\t\t\treturn row?.[valueIndex]\n\t\t\t\t\t\t? parseFloat(row?.[valueIndex])\n\t\t\t\t\t\t: null;\n\t\t\t\t});\n\n\t\t\t\tlet cumulativeData: number[] = [];\n\n\t\t\t\tif (cumulative) {\n\t\t\t\t\tcumulativeData =\n\t\t\t\t\t\tcompact(data)?.reduce((acc, curr, index) => {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\treturn [...acc, curr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [...acc, acc[index - 1] + curr];\n\t\t\t\t\t\t}, [] as number[]) ?? [];\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tname: dataItem?.name,\n\t\t\t\t\tdata: cumulative ? cumulativeData : data,\n\t\t\t\t\ttype: as,\n\t\t\t\t\tyAxis: yAxis ?? 0,\n\t\t\t\t};\n\t\t\t}),\n\t\t) as SeriesOptionsType[];\n\t}\n\n\tgetXAxis(): XAxisOptions | undefined {\n\t\treturn {\n\t\t\ttype: \"category\",\n\t\t\tcategories: getAllCategories(this.analytics, this.config),\n\t\t\tcrosshair: true,\n\t\t\tlabels: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\ttitle: { text: \"\" },\n\t\t};\n\t}\n\n\tgetYAxis(): YAxisOptions[] {\n\t\tlet yAxes: YAxisOptions[];\n\n\t\tif (this.config.multiSeries?.yAxes) {\n\t\t\tyAxes = this.config.multiSeries?.yAxes;\n\t\t} else {\n\t\t\tyAxes = super.getYAxis();\n\t\t}\n\n\t\tif (!this.config.multiSeries?.target) {\n\t\t\treturn yAxes;\n\t\t}\n\n\t\tconst { value, styles, label } = this.config.multiSeries?.target ?? {};\n\n\t\treturn [\n\t\t\t{\n\t\t\t\t...yAxes[0],\n\t\t\t\tplotLines: [\n\t\t\t\t\t...(yAxes[0].plotLines ?? []),\n\t\t\t\t\t{\n\t\t\t\t\t\tcolor: styles?.color ?? \"#00FF00\",\n\t\t\t\t\t\tdashStyle: styles?.dashStyle ?? \"Solid\",\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twidth: styles?.width ?? 2,\n\t\t\t\t\t\tzIndex: styles?.zIndex ?? 1000,\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t...yAxes.slice(1),\n\t\t];\n\t}\n}\n"]}
@@ -48,9 +48,10 @@ function getColumnSeries(analytics, header, config, highchartsType) {
48
48
  analytics?.rows,
49
49
  (row2) => row2[headerIndex ?? -1] === seriesDimensionValue && row2[categoryDimensionIndex ?? -1] === category
50
50
  );
51
- return row?.[valueIndex ?? -1] ? parseFloat(row?.[valueIndex ?? -1]) : 0;
51
+ return row?.[valueIndex ?? -1] ? parseFloat(row?.[valueIndex ?? -1]) : null;
52
52
  });
53
53
  return {
54
+ id: seriesDimensionValue,
54
55
  name: items?.[seriesDimensionValue]?.name,
55
56
  data,
56
57
  type: highchartsType,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ChartAnalytics/utils/chart.ts"],"names":["findIndex","header","head","find","row","compact","set","isEmpty","DHIS2ColumnChart","DHIS2BarChart","DHIS2StackedBarChart","DHIS2StackedColumnChart","DHIS2PieChart","DHIS2LineChart","DHIS2MultiSeriesChart"],"mappings":"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","file":"chart.js","sourcesContent":["import type {\n\tAnalytics,\n\tAnalyticsHeader,\n\tAnalyticsMetadata,\n} from \"@hisptz/dhis2-utils\";\nimport { compact, find, findIndex, head, isEmpty, set } from \"lodash\";\nimport { DHIS2Chart } from \"../models/index.js\";\nimport { DHIS2ColumnChart, DHIS2StackedColumnChart } from \"../models/column.js\";\nimport { DHIS2LineChart } from \"../models/line.js\";\nimport { DHIS2MultiSeriesChart } from \"../models/multi-series.js\";\nimport { DHIS2PieChart } from \"../models/pie.js\";\nimport { ChartConfig, ChartType } from \"../types/props.js\";\nimport { DHIS2BarChart, DHIS2StackedBarChart } from \"../models/bar.js\";\n\nexport function getDimensionHeaderIndex(\n\theaders: AnalyticsHeader[],\n\tname: string,\n): number {\n\treturn findIndex(headers, { name });\n}\n\nexport function getPointSeries(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n) {\n\tconst series: string[] = config.layout.series;\n\n\treturn series.map((seriesName: string) => {\n\t\tconst header = analytics?.headers?.find(\n\t\t\t(header: any) => header.name === seriesName,\n\t\t);\n\t\tif (!header) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (analytics?.metaData) {\n\t\t\treturn getColumnSeries(analytics, header, config, highchartsType);\n\t\t}\n\t})[0];\n}\n\nexport function getColumnSeries(\n\tanalytics: Analytics,\n\theader: AnalyticsHeader,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n): any {\n\tconst headerIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: any }) => header.name === h.name,\n\t);\n\tconst valueIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: string }) => h.name === \"value\",\n\t);\n\n\tconst colors = config.colors ?? [];\n\n\tconst { items, dimensions } = analytics?.metaData ?? {};\n\tconst categoriesDimension = config.layout.category;\n\n\tconst seriesDimensionValues: string[] =\n\t\tdimensions?.[header.name as \"dx\" | \"ou\" | \"pe\"] ?? [];\n\n\treturn head(\n\t\tcategoriesDimension?.map((categoryDimension: string) => {\n\t\t\tconst categories: string[] = dimensions?.[\n\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t] as any;\n\t\t\tconst categoryDimensionIndex = analytics?.headers?.findIndex(\n\t\t\t\t(h: { name: string }) => h.name === categoryDimension,\n\t\t\t);\n\t\t\treturn seriesDimensionValues?.map(\n\t\t\t\t(seriesDimensionValue: string, index) => {\n\t\t\t\t\tconst data = categories?.map((category: string) => {\n\t\t\t\t\t\tconst row = find(\n\t\t\t\t\t\t\tanalytics?.rows,\n\t\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\t\trow[headerIndex ?? -1] ===\n\t\t\t\t\t\t\t\t\tseriesDimensionValue &&\n\t\t\t\t\t\t\t\trow[categoryDimensionIndex ?? -1] === category,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn row?.[valueIndex ?? -1]\n\t\t\t\t\t\t\t? parseFloat(row?.[valueIndex ?? -1])\n\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: items?.[seriesDimensionValue as any]?.name,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\ttype: highchartsType,\n\t\t\t\t\t\tcolor: colors[index % colors.length],\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t}),\n\t);\n}\n\nfunction getCategories(\n\t{ name }: AnalyticsHeader,\n\t{ items, dimensions }: AnalyticsMetadata,\n): string[] {\n\tconst categories: string[] = dimensions?.[\n\t\tname as \"dx\" | \"ou\" | \"pe\"\n\t] as any;\n\n\treturn categories?.map((category: string) => {\n\t\treturn items[category as any]?.name ?? \"\";\n\t}) as unknown as string[];\n}\n\nexport function getAllCategories(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): string[] {\n\tconst categories = config.layout.category;\n\n\treturn compact(\n\t\tcategories?.map((category: string) => {\n\t\t\tconst header = analytics?.headers?.find(\n\t\t\t\t(header: any) => header.name === category,\n\t\t\t);\n\t\t\tif (!header) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (analytics?.metaData) {\n\t\t\t\treturn getCategories(header, analytics?.metaData);\n\t\t\t}\n\t\t}),\n\t)[0];\n}\n\nexport function updateLayout(\n\tconfig: ChartConfig,\n\t{ type }: { type: ChartType },\n) {\n\tif (type === config.type) {\n\t\treturn config.layout;\n\t}\n\n\tconst updatedLayout = { ...config.layout };\n\n\tswitch (type) {\n\t\tcase \"pie\":\n\t\t\tset(updatedLayout, \"category\", []);\n\t\t\tif (isEmpty(updatedLayout.series)) {\n\t\t\t\tif (!isEmpty(config.layout.category)) {\n\t\t\t\t\tset(updatedLayout, \"series\", [\n\t\t\t\t\t\thead(config.layout.category),\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Invalid layout for pie chart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (updatedLayout.series.length > 1) {\n\t\t\t\tset(updatedLayout, \"series\", [head(updatedLayout.series)]);\n\t\t\t}\n\t}\n\n\treturn updatedLayout;\n}\n\nexport function getChartInstance(\n\tid: string,\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): DHIS2Chart {\n\tswitch (config.type) {\n\t\tcase \"column\":\n\t\t\treturn new DHIS2ColumnChart(id, analytics, config);\n\t\tcase \"bar\":\n\t\t\treturn new DHIS2BarChart(id, analytics, config);\n\t\tcase \"stacked-bar\":\n\t\t\treturn new DHIS2StackedBarChart(id, analytics, config);\n\t\tcase \"stacked-column\":\n\t\t\treturn new DHIS2StackedColumnChart(id, analytics, config);\n\t\tcase \"pie\":\n\t\t\treturn new DHIS2PieChart(id, analytics, config);\n\t\tcase \"line\":\n\t\t\treturn new DHIS2LineChart(id, analytics, config);\n\t\tcase \"multi-series\":\n\t\t\treturn new DHIS2MultiSeriesChart(id, analytics, config);\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported chart type: ${config.type}`);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/components/ChartAnalytics/utils/chart.ts"],"names":["findIndex","header","head","find","row","compact","set","isEmpty","DHIS2ColumnChart","DHIS2BarChart","DHIS2StackedBarChart","DHIS2StackedColumnChart","DHIS2PieChart","DHIS2LineChart","DHIS2MultiSeriesChart"],"mappings":"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","file":"chart.js","sourcesContent":["import type {\n\tAnalytics,\n\tAnalyticsHeader,\n\tAnalyticsMetadata,\n} from \"@hisptz/dhis2-utils\";\nimport { compact, find, findIndex, head, isEmpty, set } from \"lodash\";\nimport { DHIS2Chart } from \"../models/index.js\";\nimport { DHIS2ColumnChart, DHIS2StackedColumnChart } from \"../models/column.js\";\nimport { DHIS2LineChart } from \"../models/line.js\";\nimport { DHIS2MultiSeriesChart } from \"../models/multi-series.js\";\nimport { DHIS2PieChart } from \"../models/pie.js\";\nimport { ChartConfig, ChartType } from \"../types/props.js\";\nimport { DHIS2BarChart, DHIS2StackedBarChart } from \"../models/bar.js\";\n\nexport function getDimensionHeaderIndex(\n\theaders: AnalyticsHeader[],\n\tname: string,\n): number {\n\treturn findIndex(headers, { name });\n}\n\nexport function getPointSeries(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n) {\n\tconst series: string[] = config.layout.series;\n\n\treturn series.map((seriesName: string) => {\n\t\tconst header = analytics?.headers?.find(\n\t\t\t(header: any) => header.name === seriesName,\n\t\t);\n\t\tif (!header) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (analytics?.metaData) {\n\t\t\treturn getColumnSeries(analytics, header, config, highchartsType);\n\t\t}\n\t})[0];\n}\n\nexport function getColumnSeries(\n\tanalytics: Analytics,\n\theader: AnalyticsHeader,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n): any {\n\tconst headerIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: any }) => header.name === h.name,\n\t);\n\tconst valueIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: string }) => h.name === \"value\",\n\t);\n\n\tconst colors = config.colors ?? [];\n\n\tconst { items, dimensions } = analytics?.metaData ?? {};\n\tconst categoriesDimension = config.layout.category;\n\n\tconst seriesDimensionValues: string[] =\n\t\tdimensions?.[header.name as \"dx\" | \"ou\" | \"pe\"] ?? [];\n\n\treturn head(\n\t\tcategoriesDimension?.map((categoryDimension: string) => {\n\t\t\tconst categories: string[] = dimensions?.[\n\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t] as any;\n\t\t\tconst categoryDimensionIndex = analytics?.headers?.findIndex(\n\t\t\t\t(h: { name: string }) => h.name === categoryDimension,\n\t\t\t);\n\t\t\treturn seriesDimensionValues?.map(\n\t\t\t\t(seriesDimensionValue: string, index) => {\n\t\t\t\t\tconst data = categories?.map((category: string) => {\n\t\t\t\t\t\tconst row = find(\n\t\t\t\t\t\t\tanalytics?.rows,\n\t\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\t\trow[headerIndex ?? -1] ===\n\t\t\t\t\t\t\t\t\tseriesDimensionValue &&\n\t\t\t\t\t\t\t\trow[categoryDimensionIndex ?? -1] === category,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn row?.[valueIndex ?? -1]\n\t\t\t\t\t\t\t? parseFloat(row?.[valueIndex ?? -1])\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: seriesDimensionValue,\n\t\t\t\t\t\tname: items?.[seriesDimensionValue as any]?.name,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\ttype: highchartsType,\n\t\t\t\t\t\tcolor: colors[index % colors.length],\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t}),\n\t);\n}\n\nfunction getCategories(\n\t{ name }: AnalyticsHeader,\n\t{ items, dimensions }: AnalyticsMetadata,\n): string[] {\n\tconst categories: string[] = dimensions?.[\n\t\tname as \"dx\" | \"ou\" | \"pe\"\n\t] as any;\n\n\treturn categories?.map((category: string) => {\n\t\treturn items[category as any]?.name ?? \"\";\n\t}) as unknown as string[];\n}\n\nexport function getAllCategories(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): string[] {\n\tconst categories = config.layout.category;\n\n\treturn compact(\n\t\tcategories?.map((category: string) => {\n\t\t\tconst header = analytics?.headers?.find(\n\t\t\t\t(header: any) => header.name === category,\n\t\t\t);\n\t\t\tif (!header) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (analytics?.metaData) {\n\t\t\t\treturn getCategories(header, analytics?.metaData);\n\t\t\t}\n\t\t}),\n\t)[0];\n}\n\nexport function updateLayout(\n\tconfig: ChartConfig,\n\t{ type }: { type: ChartType },\n) {\n\tif (type === config.type) {\n\t\treturn config.layout;\n\t}\n\n\tconst updatedLayout = { ...config.layout };\n\n\tswitch (type) {\n\t\tcase \"pie\":\n\t\t\tset(updatedLayout, \"category\", []);\n\t\t\tif (isEmpty(updatedLayout.series)) {\n\t\t\t\tif (!isEmpty(config.layout.category)) {\n\t\t\t\t\tset(updatedLayout, \"series\", [\n\t\t\t\t\t\thead(config.layout.category),\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Invalid layout for pie chart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (updatedLayout.series.length > 1) {\n\t\t\t\tset(updatedLayout, \"series\", [head(updatedLayout.series)]);\n\t\t\t}\n\t}\n\n\treturn updatedLayout;\n}\n\nexport function getChartInstance(\n\tid: string,\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): DHIS2Chart {\n\tswitch (config.type) {\n\t\tcase \"column\":\n\t\t\treturn new DHIS2ColumnChart(id, analytics, config);\n\t\tcase \"bar\":\n\t\t\treturn new DHIS2BarChart(id, analytics, config);\n\t\tcase \"stacked-bar\":\n\t\t\treturn new DHIS2StackedBarChart(id, analytics, config);\n\t\tcase \"stacked-column\":\n\t\t\treturn new DHIS2StackedColumnChart(id, analytics, config);\n\t\tcase \"pie\":\n\t\t\treturn new DHIS2PieChart(id, analytics, config);\n\t\tcase \"line\":\n\t\t\treturn new DHIS2LineChart(id, analytics, config);\n\t\tcase \"multi-series\":\n\t\t\treturn new DHIS2MultiSeriesChart(id, analytics, config);\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported chart type: ${config.type}`);\n\t}\n}\n"]}
@@ -45,11 +45,11 @@ class DHIS2MultiSeriesChart extends DHIS2Chart {
45
45
  const row = analytics.rows?.find(
46
46
  (row2) => row2[categoryIndex] === item && row2[seriesIndex] === id
47
47
  );
48
- return row?.[valueIndex] ? parseFloat(row?.[valueIndex]) : 0;
48
+ return row?.[valueIndex] ? parseFloat(row?.[valueIndex]) : null;
49
49
  });
50
50
  let cumulativeData = [];
51
51
  if (cumulative) {
52
- cumulativeData = data?.reduce((acc, curr, index) => {
52
+ cumulativeData = compact(data)?.reduce((acc, curr, index) => {
53
53
  if (index === 0) {
54
54
  return [...acc, curr];
55
55
  }
@@ -57,6 +57,7 @@ class DHIS2MultiSeriesChart extends DHIS2Chart {
57
57
  }, []) ?? [];
58
58
  }
59
59
  return {
60
+ id,
60
61
  name: dataItem?.name,
61
62
  data: cumulative ? cumulativeData : data,
62
63
  type: as,
@@ -77,7 +78,7 @@ class DHIS2MultiSeriesChart extends DHIS2Chart {
77
78
  };
78
79
  }
79
80
  getYAxis() {
80
- let yAxes = [];
81
+ let yAxes;
81
82
  if (this.config.multiSeries?.yAxes) {
82
83
  yAxes = this.config.multiSeries?.yAxes;
83
84
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ChartAnalytics/models/multi-series.ts"],"names":["row"],"mappings":"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","file":"multi-series.js","sourcesContent":["import {\n\tPlotOptions,\n\tSeriesOptionsType,\n\tXAxisOptions,\n\tYAxisOptions,\n} from \"highcharts\";\nimport { compact, head } from \"lodash\";\nimport { MultiSeriesConfig } from \"../types/props.js\";\nimport { getAllCategories, getDimensionHeaderIndex } from \"../utils/chart.js\";\nimport { DHIS2Chart } from \"./index.js\";\n\nexport class DHIS2MultiSeriesChart extends DHIS2Chart {\n\tgetHighchartsType(): string {\n\t\treturn \"\";\n\t}\n\n\tgetPlotOptions(): PlotOptions {\n\t\treturn {\n\t\t\tcolumn: {},\n\t\t\tline: {},\n\t\t};\n\t}\n\n\tgetSeries(): SeriesOptionsType[] {\n\t\tconst analytics = this.analytics;\n\t\tconst config = this.config;\n\n\t\tconst categoryDimension = head(config.layout.category);\n\t\tconst seriesConfig: MultiSeriesConfig | undefined =\n\t\t\tthis.config.multiSeries;\n\n\t\tconst categoryIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\tcategoryDimension ?? \"\",\n\t\t);\n\t\tconst seriesIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\thead(config.layout.series) ?? \"\",\n\t\t);\n\t\tconst valueIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\t\"value\",\n\t\t);\n\n\t\tif (!categoryDimension) {\n\t\t\tthrow new Error(\"At least one category dimension is required\");\n\t\t}\n\n\t\tif (!seriesConfig) {\n\t\t\tthrow new Error(\n\t\t\t\t\"MultiSeries config is required for chart type multi-series\",\n\t\t\t);\n\t\t}\n\n\t\treturn compact(\n\t\t\tseriesConfig?.series?.map(({ id, as, cumulative, yAxis }) => {\n\t\t\t\tconst dataItem = analytics.metaData?.items[id as any];\n\t\t\t\tconst categoryItems =\n\t\t\t\t\tanalytics.metaData?.dimensions[\n\t\t\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t\t\t];\n\n\t\t\t\tconst data = categoryItems?.map((item: string) => {\n\t\t\t\t\tconst row = analytics.rows?.find(\n\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\trow[categoryIndex] === item &&\n\t\t\t\t\t\t\trow[seriesIndex] === id,\n\t\t\t\t\t);\n\t\t\t\t\treturn row?.[valueIndex]\n\t\t\t\t\t\t? parseFloat(row?.[valueIndex])\n\t\t\t\t\t\t: 0;\n\t\t\t\t});\n\n\t\t\t\tlet cumulativeData: number[] = [];\n\n\t\t\t\tif (cumulative) {\n\t\t\t\t\tcumulativeData =\n\t\t\t\t\t\tdata?.reduce((acc, curr, index) => {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\treturn [...acc, curr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [...acc, acc[index - 1] + curr];\n\t\t\t\t\t\t}, [] as number[]) ?? [];\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname: dataItem?.name,\n\t\t\t\t\tdata: cumulative ? cumulativeData : data,\n\t\t\t\t\ttype: as,\n\t\t\t\t\tyAxis: yAxis ?? 0,\n\t\t\t\t};\n\t\t\t}),\n\t\t) as SeriesOptionsType[];\n\t}\n\n\tgetXAxis(): XAxisOptions | undefined {\n\t\treturn {\n\t\t\ttype: \"category\",\n\t\t\tcategories: getAllCategories(this.analytics, this.config),\n\t\t\tcrosshair: true,\n\t\t\tlabels: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\ttitle: { text: \"\" },\n\t\t};\n\t}\n\n\tgetYAxis(): YAxisOptions[] {\n\t\tlet yAxes: YAxisOptions[] = [];\n\n\t\tif (this.config.multiSeries?.yAxes) {\n\t\t\tyAxes = this.config.multiSeries?.yAxes;\n\t\t} else {\n\t\t\tyAxes = super.getYAxis();\n\t\t}\n\n\t\tif (!this.config.multiSeries?.target) {\n\t\t\treturn yAxes;\n\t\t}\n\n\t\tconst { value, styles, label } = this.config.multiSeries?.target ?? {};\n\n\t\treturn [\n\t\t\t{\n\t\t\t\t...yAxes[0],\n\t\t\t\tplotLines: [\n\t\t\t\t\t...(yAxes[0].plotLines ?? []),\n\t\t\t\t\t{\n\t\t\t\t\t\tcolor: styles?.color ?? \"#00FF00\",\n\t\t\t\t\t\tdashStyle: styles?.dashStyle ?? \"Solid\",\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twidth: styles?.width ?? 2,\n\t\t\t\t\t\tzIndex: styles?.zIndex ?? 1000,\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t...yAxes.slice(1),\n\t\t];\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/ChartAnalytics/models/multi-series.ts"],"names":["row"],"mappings":"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","file":"multi-series.js","sourcesContent":["import {\n\tPlotOptions,\n\tSeriesOptionsType,\n\tXAxisOptions,\n\tYAxisOptions,\n} from \"highcharts\";\nimport { compact, head } from \"lodash\";\nimport { MultiSeriesConfig } from \"../types/props.js\";\nimport { getAllCategories, getDimensionHeaderIndex } from \"../utils/chart.js\";\nimport { DHIS2Chart } from \"./index.js\";\n\nexport class DHIS2MultiSeriesChart extends DHIS2Chart {\n\tgetHighchartsType(): string {\n\t\treturn \"\";\n\t}\n\n\tgetPlotOptions(): PlotOptions {\n\t\treturn {\n\t\t\tcolumn: {},\n\t\t\tline: {},\n\t\t};\n\t}\n\n\tgetSeries(): SeriesOptionsType[] {\n\t\tconst analytics = this.analytics;\n\t\tconst config = this.config;\n\n\t\tconst categoryDimension = head(config.layout.category);\n\t\tconst seriesConfig: MultiSeriesConfig | undefined =\n\t\t\tthis.config.multiSeries;\n\n\t\tconst categoryIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\tcategoryDimension ?? \"\",\n\t\t);\n\t\tconst seriesIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\thead(config.layout.series) ?? \"\",\n\t\t);\n\t\tconst valueIndex = getDimensionHeaderIndex(\n\t\t\tanalytics.headers ?? [],\n\t\t\t\"value\",\n\t\t);\n\n\t\tif (!categoryDimension) {\n\t\t\tthrow new Error(\"At least one category dimension is required\");\n\t\t}\n\n\t\tif (!seriesConfig) {\n\t\t\tthrow new Error(\n\t\t\t\t\"MultiSeries config is required for chart type multi-series\",\n\t\t\t);\n\t\t}\n\n\t\treturn compact(\n\t\t\tseriesConfig?.series?.map(({ id, as, cumulative, yAxis }) => {\n\t\t\t\tconst dataItem = analytics.metaData?.items[id as any];\n\t\t\t\tconst categoryItems =\n\t\t\t\t\tanalytics.metaData?.dimensions[\n\t\t\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t\t\t];\n\n\t\t\t\tconst data = categoryItems?.map((item: string) => {\n\t\t\t\t\tconst row = analytics.rows?.find(\n\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\trow[categoryIndex] === item &&\n\t\t\t\t\t\t\trow[seriesIndex] === id,\n\t\t\t\t\t);\n\t\t\t\t\treturn row?.[valueIndex]\n\t\t\t\t\t\t? parseFloat(row?.[valueIndex])\n\t\t\t\t\t\t: null;\n\t\t\t\t});\n\n\t\t\t\tlet cumulativeData: number[] = [];\n\n\t\t\t\tif (cumulative) {\n\t\t\t\t\tcumulativeData =\n\t\t\t\t\t\tcompact(data)?.reduce((acc, curr, index) => {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\treturn [...acc, curr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [...acc, acc[index - 1] + curr];\n\t\t\t\t\t\t}, [] as number[]) ?? [];\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tname: dataItem?.name,\n\t\t\t\t\tdata: cumulative ? cumulativeData : data,\n\t\t\t\t\ttype: as,\n\t\t\t\t\tyAxis: yAxis ?? 0,\n\t\t\t\t};\n\t\t\t}),\n\t\t) as SeriesOptionsType[];\n\t}\n\n\tgetXAxis(): XAxisOptions | undefined {\n\t\treturn {\n\t\t\ttype: \"category\",\n\t\t\tcategories: getAllCategories(this.analytics, this.config),\n\t\t\tcrosshair: true,\n\t\t\tlabels: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\ttitle: { text: \"\" },\n\t\t};\n\t}\n\n\tgetYAxis(): YAxisOptions[] {\n\t\tlet yAxes: YAxisOptions[];\n\n\t\tif (this.config.multiSeries?.yAxes) {\n\t\t\tyAxes = this.config.multiSeries?.yAxes;\n\t\t} else {\n\t\t\tyAxes = super.getYAxis();\n\t\t}\n\n\t\tif (!this.config.multiSeries?.target) {\n\t\t\treturn yAxes;\n\t\t}\n\n\t\tconst { value, styles, label } = this.config.multiSeries?.target ?? {};\n\n\t\treturn [\n\t\t\t{\n\t\t\t\t...yAxes[0],\n\t\t\t\tplotLines: [\n\t\t\t\t\t...(yAxes[0].plotLines ?? []),\n\t\t\t\t\t{\n\t\t\t\t\t\tcolor: styles?.color ?? \"#00FF00\",\n\t\t\t\t\t\tdashStyle: styles?.dashStyle ?? \"Solid\",\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twidth: styles?.width ?? 2,\n\t\t\t\t\t\tzIndex: styles?.zIndex ?? 1000,\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t...yAxes.slice(1),\n\t\t];\n\t}\n}\n"]}
@@ -46,9 +46,10 @@ function getColumnSeries(analytics, header, config, highchartsType) {
46
46
  analytics?.rows,
47
47
  (row2) => row2[headerIndex ?? -1] === seriesDimensionValue && row2[categoryDimensionIndex ?? -1] === category
48
48
  );
49
- return row?.[valueIndex ?? -1] ? parseFloat(row?.[valueIndex ?? -1]) : 0;
49
+ return row?.[valueIndex ?? -1] ? parseFloat(row?.[valueIndex ?? -1]) : null;
50
50
  });
51
51
  return {
52
+ id: seriesDimensionValue,
52
53
  name: items?.[seriesDimensionValue]?.name,
53
54
  data,
54
55
  type: highchartsType,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ChartAnalytics/utils/chart.ts"],"names":["header","row"],"mappings":"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","file":"chart.js","sourcesContent":["import type {\n\tAnalytics,\n\tAnalyticsHeader,\n\tAnalyticsMetadata,\n} from \"@hisptz/dhis2-utils\";\nimport { compact, find, findIndex, head, isEmpty, set } from \"lodash\";\nimport { DHIS2Chart } from \"../models/index.js\";\nimport { DHIS2ColumnChart, DHIS2StackedColumnChart } from \"../models/column.js\";\nimport { DHIS2LineChart } from \"../models/line.js\";\nimport { DHIS2MultiSeriesChart } from \"../models/multi-series.js\";\nimport { DHIS2PieChart } from \"../models/pie.js\";\nimport { ChartConfig, ChartType } from \"../types/props.js\";\nimport { DHIS2BarChart, DHIS2StackedBarChart } from \"../models/bar.js\";\n\nexport function getDimensionHeaderIndex(\n\theaders: AnalyticsHeader[],\n\tname: string,\n): number {\n\treturn findIndex(headers, { name });\n}\n\nexport function getPointSeries(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n) {\n\tconst series: string[] = config.layout.series;\n\n\treturn series.map((seriesName: string) => {\n\t\tconst header = analytics?.headers?.find(\n\t\t\t(header: any) => header.name === seriesName,\n\t\t);\n\t\tif (!header) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (analytics?.metaData) {\n\t\t\treturn getColumnSeries(analytics, header, config, highchartsType);\n\t\t}\n\t})[0];\n}\n\nexport function getColumnSeries(\n\tanalytics: Analytics,\n\theader: AnalyticsHeader,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n): any {\n\tconst headerIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: any }) => header.name === h.name,\n\t);\n\tconst valueIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: string }) => h.name === \"value\",\n\t);\n\n\tconst colors = config.colors ?? [];\n\n\tconst { items, dimensions } = analytics?.metaData ?? {};\n\tconst categoriesDimension = config.layout.category;\n\n\tconst seriesDimensionValues: string[] =\n\t\tdimensions?.[header.name as \"dx\" | \"ou\" | \"pe\"] ?? [];\n\n\treturn head(\n\t\tcategoriesDimension?.map((categoryDimension: string) => {\n\t\t\tconst categories: string[] = dimensions?.[\n\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t] as any;\n\t\t\tconst categoryDimensionIndex = analytics?.headers?.findIndex(\n\t\t\t\t(h: { name: string }) => h.name === categoryDimension,\n\t\t\t);\n\t\t\treturn seriesDimensionValues?.map(\n\t\t\t\t(seriesDimensionValue: string, index) => {\n\t\t\t\t\tconst data = categories?.map((category: string) => {\n\t\t\t\t\t\tconst row = find(\n\t\t\t\t\t\t\tanalytics?.rows,\n\t\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\t\trow[headerIndex ?? -1] ===\n\t\t\t\t\t\t\t\t\tseriesDimensionValue &&\n\t\t\t\t\t\t\t\trow[categoryDimensionIndex ?? -1] === category,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn row?.[valueIndex ?? -1]\n\t\t\t\t\t\t\t? parseFloat(row?.[valueIndex ?? -1])\n\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: items?.[seriesDimensionValue as any]?.name,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\ttype: highchartsType,\n\t\t\t\t\t\tcolor: colors[index % colors.length],\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t}),\n\t);\n}\n\nfunction getCategories(\n\t{ name }: AnalyticsHeader,\n\t{ items, dimensions }: AnalyticsMetadata,\n): string[] {\n\tconst categories: string[] = dimensions?.[\n\t\tname as \"dx\" | \"ou\" | \"pe\"\n\t] as any;\n\n\treturn categories?.map((category: string) => {\n\t\treturn items[category as any]?.name ?? \"\";\n\t}) as unknown as string[];\n}\n\nexport function getAllCategories(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): string[] {\n\tconst categories = config.layout.category;\n\n\treturn compact(\n\t\tcategories?.map((category: string) => {\n\t\t\tconst header = analytics?.headers?.find(\n\t\t\t\t(header: any) => header.name === category,\n\t\t\t);\n\t\t\tif (!header) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (analytics?.metaData) {\n\t\t\t\treturn getCategories(header, analytics?.metaData);\n\t\t\t}\n\t\t}),\n\t)[0];\n}\n\nexport function updateLayout(\n\tconfig: ChartConfig,\n\t{ type }: { type: ChartType },\n) {\n\tif (type === config.type) {\n\t\treturn config.layout;\n\t}\n\n\tconst updatedLayout = { ...config.layout };\n\n\tswitch (type) {\n\t\tcase \"pie\":\n\t\t\tset(updatedLayout, \"category\", []);\n\t\t\tif (isEmpty(updatedLayout.series)) {\n\t\t\t\tif (!isEmpty(config.layout.category)) {\n\t\t\t\t\tset(updatedLayout, \"series\", [\n\t\t\t\t\t\thead(config.layout.category),\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Invalid layout for pie chart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (updatedLayout.series.length > 1) {\n\t\t\t\tset(updatedLayout, \"series\", [head(updatedLayout.series)]);\n\t\t\t}\n\t}\n\n\treturn updatedLayout;\n}\n\nexport function getChartInstance(\n\tid: string,\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): DHIS2Chart {\n\tswitch (config.type) {\n\t\tcase \"column\":\n\t\t\treturn new DHIS2ColumnChart(id, analytics, config);\n\t\tcase \"bar\":\n\t\t\treturn new DHIS2BarChart(id, analytics, config);\n\t\tcase \"stacked-bar\":\n\t\t\treturn new DHIS2StackedBarChart(id, analytics, config);\n\t\tcase \"stacked-column\":\n\t\t\treturn new DHIS2StackedColumnChart(id, analytics, config);\n\t\tcase \"pie\":\n\t\t\treturn new DHIS2PieChart(id, analytics, config);\n\t\tcase \"line\":\n\t\t\treturn new DHIS2LineChart(id, analytics, config);\n\t\tcase \"multi-series\":\n\t\t\treturn new DHIS2MultiSeriesChart(id, analytics, config);\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported chart type: ${config.type}`);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/ChartAnalytics/utils/chart.ts"],"names":["header","row"],"mappings":"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","file":"chart.js","sourcesContent":["import type {\n\tAnalytics,\n\tAnalyticsHeader,\n\tAnalyticsMetadata,\n} from \"@hisptz/dhis2-utils\";\nimport { compact, find, findIndex, head, isEmpty, set } from \"lodash\";\nimport { DHIS2Chart } from \"../models/index.js\";\nimport { DHIS2ColumnChart, DHIS2StackedColumnChart } from \"../models/column.js\";\nimport { DHIS2LineChart } from \"../models/line.js\";\nimport { DHIS2MultiSeriesChart } from \"../models/multi-series.js\";\nimport { DHIS2PieChart } from \"../models/pie.js\";\nimport { ChartConfig, ChartType } from \"../types/props.js\";\nimport { DHIS2BarChart, DHIS2StackedBarChart } from \"../models/bar.js\";\n\nexport function getDimensionHeaderIndex(\n\theaders: AnalyticsHeader[],\n\tname: string,\n): number {\n\treturn findIndex(headers, { name });\n}\n\nexport function getPointSeries(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n) {\n\tconst series: string[] = config.layout.series;\n\n\treturn series.map((seriesName: string) => {\n\t\tconst header = analytics?.headers?.find(\n\t\t\t(header: any) => header.name === seriesName,\n\t\t);\n\t\tif (!header) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (analytics?.metaData) {\n\t\t\treturn getColumnSeries(analytics, header, config, highchartsType);\n\t\t}\n\t})[0];\n}\n\nexport function getColumnSeries(\n\tanalytics: Analytics,\n\theader: AnalyticsHeader,\n\tconfig: ChartConfig,\n\thighchartsType: string,\n): any {\n\tconst headerIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: any }) => header.name === h.name,\n\t);\n\tconst valueIndex = analytics?.headers?.findIndex(\n\t\t(h: { name: string }) => h.name === \"value\",\n\t);\n\n\tconst colors = config.colors ?? [];\n\n\tconst { items, dimensions } = analytics?.metaData ?? {};\n\tconst categoriesDimension = config.layout.category;\n\n\tconst seriesDimensionValues: string[] =\n\t\tdimensions?.[header.name as \"dx\" | \"ou\" | \"pe\"] ?? [];\n\n\treturn head(\n\t\tcategoriesDimension?.map((categoryDimension: string) => {\n\t\t\tconst categories: string[] = dimensions?.[\n\t\t\t\tcategoryDimension as \"dx\" | \"ou\" | \"pe\"\n\t\t\t] as any;\n\t\t\tconst categoryDimensionIndex = analytics?.headers?.findIndex(\n\t\t\t\t(h: { name: string }) => h.name === categoryDimension,\n\t\t\t);\n\t\t\treturn seriesDimensionValues?.map(\n\t\t\t\t(seriesDimensionValue: string, index) => {\n\t\t\t\t\tconst data = categories?.map((category: string) => {\n\t\t\t\t\t\tconst row = find(\n\t\t\t\t\t\t\tanalytics?.rows,\n\t\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\t\trow[headerIndex ?? -1] ===\n\t\t\t\t\t\t\t\t\tseriesDimensionValue &&\n\t\t\t\t\t\t\t\trow[categoryDimensionIndex ?? -1] === category,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn row?.[valueIndex ?? -1]\n\t\t\t\t\t\t\t? parseFloat(row?.[valueIndex ?? -1])\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: seriesDimensionValue,\n\t\t\t\t\t\tname: items?.[seriesDimensionValue as any]?.name,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\ttype: highchartsType,\n\t\t\t\t\t\tcolor: colors[index % colors.length],\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t}),\n\t);\n}\n\nfunction getCategories(\n\t{ name }: AnalyticsHeader,\n\t{ items, dimensions }: AnalyticsMetadata,\n): string[] {\n\tconst categories: string[] = dimensions?.[\n\t\tname as \"dx\" | \"ou\" | \"pe\"\n\t] as any;\n\n\treturn categories?.map((category: string) => {\n\t\treturn items[category as any]?.name ?? \"\";\n\t}) as unknown as string[];\n}\n\nexport function getAllCategories(\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): string[] {\n\tconst categories = config.layout.category;\n\n\treturn compact(\n\t\tcategories?.map((category: string) => {\n\t\t\tconst header = analytics?.headers?.find(\n\t\t\t\t(header: any) => header.name === category,\n\t\t\t);\n\t\t\tif (!header) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (analytics?.metaData) {\n\t\t\t\treturn getCategories(header, analytics?.metaData);\n\t\t\t}\n\t\t}),\n\t)[0];\n}\n\nexport function updateLayout(\n\tconfig: ChartConfig,\n\t{ type }: { type: ChartType },\n) {\n\tif (type === config.type) {\n\t\treturn config.layout;\n\t}\n\n\tconst updatedLayout = { ...config.layout };\n\n\tswitch (type) {\n\t\tcase \"pie\":\n\t\t\tset(updatedLayout, \"category\", []);\n\t\t\tif (isEmpty(updatedLayout.series)) {\n\t\t\t\tif (!isEmpty(config.layout.category)) {\n\t\t\t\t\tset(updatedLayout, \"series\", [\n\t\t\t\t\t\thead(config.layout.category),\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Invalid layout for pie chart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (updatedLayout.series.length > 1) {\n\t\t\t\tset(updatedLayout, \"series\", [head(updatedLayout.series)]);\n\t\t\t}\n\t}\n\n\treturn updatedLayout;\n}\n\nexport function getChartInstance(\n\tid: string,\n\tanalytics: Analytics,\n\tconfig: ChartConfig,\n): DHIS2Chart {\n\tswitch (config.type) {\n\t\tcase \"column\":\n\t\t\treturn new DHIS2ColumnChart(id, analytics, config);\n\t\tcase \"bar\":\n\t\t\treturn new DHIS2BarChart(id, analytics, config);\n\t\tcase \"stacked-bar\":\n\t\t\treturn new DHIS2StackedBarChart(id, analytics, config);\n\t\tcase \"stacked-column\":\n\t\t\treturn new DHIS2StackedColumnChart(id, analytics, config);\n\t\tcase \"pie\":\n\t\t\treturn new DHIS2PieChart(id, analytics, config);\n\t\tcase \"line\":\n\t\t\treturn new DHIS2LineChart(id, analytics, config);\n\t\tcase \"multi-series\":\n\t\t\treturn new DHIS2MultiSeriesChart(id, analytics, config);\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported chart type: ${config.type}`);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"multi-series.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/models/multi-series.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,qBAAsB,SAAQ,UAAU;IACpD,iBAAiB,IAAI,MAAM;IAI3B,cAAc,IAAI,WAAW;IAO7B,SAAS,IAAI,iBAAiB,EAAE;IAwEhC,QAAQ,IAAI,YAAY,GAAG,SAAS;IAYpC,QAAQ,IAAI,YAAY,EAAE;CAiC1B"}
1
+ {"version":3,"file":"multi-series.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/models/multi-series.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,qBAAsB,SAAQ,UAAU;IACpD,iBAAiB,IAAI,MAAM;IAI3B,cAAc,IAAI,WAAW;IAO7B,SAAS,IAAI,iBAAiB,EAAE;IAyEhC,QAAQ,IAAI,YAAY,GAAG,SAAS;IAYpC,QAAQ,IAAI,YAAY,EAAE;CAiC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/utils/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EAEf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKhD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG3D,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,eAAe,EAAE,EAC1B,IAAI,EAAE,MAAM,GACV,MAAM,CAER;AAED,wBAAgB,cAAc,CAC7B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,OAetB;AAED,wBAAgB,eAAe,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,GACpB,GAAG,CAgDL;AAeD,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,GACjB,MAAM,EAAE,CAgBV;AAED,wBAAgB,YAAY,CAC3B,MAAM,EAAE,WAAW,EACnB,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;;;;EA0B7B;AAED,wBAAgB,gBAAgB,CAC/B,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,GACjB,UAAU,CAmBZ"}
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/utils/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EAEf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKhD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG3D,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,eAAe,EAAE,EAC1B,IAAI,EAAE,MAAM,GACV,MAAM,CAER;AAED,wBAAgB,cAAc,CAC7B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,OAetB;AAED,wBAAgB,eAAe,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,GACpB,GAAG,CAiDL;AAeD,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,GACjB,MAAM,EAAE,CAgBV;AAED,wBAAgB,YAAY,CAC3B,MAAM,EAAE,WAAW,EACnB,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;;;;EA0B7B;AAED,wBAAgB,gBAAgB,CAC/B,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,GACjB,UAAU,CAmBZ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hisptz/dhis2-analytics",
3
- "version": "2.0.51",
3
+ "version": "2.0.53",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/types/index.d.ts",
@@ -46,8 +46,8 @@
46
46
  "tsup": "^8.0.1",
47
47
  "typescript": "^5.3.3",
48
48
  "usehooks-ts": "^2.9.2",
49
- "@repo/eslint-config": "0.0.0",
50
- "@repo/typescript-config": "0.0.0"
49
+ "@repo/typescript-config": "0.0.0",
50
+ "@repo/eslint-config": "0.0.0"
51
51
  },
52
52
  "dependencies": {
53
53
  "@react-leaflet/core": "^2.1.0",
@@ -78,8 +78,8 @@
78
78
  "screenfull": "^6.0.2",
79
79
  "xlsx": "^0.18.5",
80
80
  "zod": "^3.23.8",
81
- "@hisptz/dhis2-ui": "2.0.30",
82
- "@hisptz/dhis2-utils": "2.0.10"
81
+ "@hisptz/dhis2-ui": "2.0.31",
82
+ "@hisptz/dhis2-utils": "2.0.11"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "@dhis2/app-runtime": "^3.10.2",
@@ -1,287 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var _ = require('.');
6
- var columnData = require('../../shared/resources/column-data.json');
7
- var multiSeriesData = require('../../shared/resources/multi-series-data.json');
8
- var stackedChartData = require('../../shared/resources/stacked-chart-data.json');
9
- var pieData = require('../../shared/resources/pie-data.json');
10
- var complexMultiSeriesData = require('../../shared/resources/complex-multi-series-data.json');
11
- var HighCharts = require('highcharts');
12
-
13
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
-
15
- var columnData__default = /*#__PURE__*/_interopDefault(columnData);
16
- var multiSeriesData__default = /*#__PURE__*/_interopDefault(multiSeriesData);
17
- var stackedChartData__default = /*#__PURE__*/_interopDefault(stackedChartData);
18
- var pieData__default = /*#__PURE__*/_interopDefault(pieData);
19
- var complexMultiSeriesData__default = /*#__PURE__*/_interopDefault(complexMultiSeriesData);
20
- var HighCharts__default = /*#__PURE__*/_interopDefault(HighCharts);
21
-
22
- _.setupHighchartsModules(HighCharts__default.default);
23
- const meta = {
24
- component: _.DHIS2Chart,
25
- title: "DHIS2 Chart"
26
- };
27
- var ChartAnalytics_stories_default = meta;
28
- const Default = {
29
- name: "Column",
30
- args: {
31
- analytics: columnData__default.default,
32
- config: {
33
- layout: {
34
- series: ["dx"],
35
- category: ["ou"],
36
- filter: ["pe"]
37
- },
38
- showFilterAsTitle: true,
39
- type: "column"
40
- }
41
- }
42
- };
43
- const Bar = {
44
- name: "Bar",
45
- args: {
46
- analytics: columnData__default.default,
47
- config: {
48
- layout: {
49
- series: ["dx"],
50
- category: ["ou"],
51
- filter: ["pe"]
52
- },
53
- showFilterAsTitle: true,
54
- type: "bar"
55
- }
56
- }
57
- };
58
- const MultipleColumns = {
59
- name: "Multiple columns",
60
- args: {
61
- analytics: multiSeriesData__default.default,
62
- config: {
63
- layout: {
64
- series: ["ou"],
65
- category: ["pe"],
66
- filter: ["dx"]
67
- },
68
- showFilterAsTitle: true,
69
- type: "column"
70
- }
71
- }
72
- };
73
- const StackedColumn = {
74
- name: "Stacked column",
75
- args: {
76
- analytics: stackedChartData__default.default,
77
- config: {
78
- layout: {
79
- series: ["ou"],
80
- category: ["pe"],
81
- filter: ["dx"]
82
- },
83
- showFilterAsTitle: true,
84
- type: "stacked-column"
85
- }
86
- }
87
- };
88
- const StackedBar = {
89
- name: "Stacked bar",
90
- args: {
91
- analytics: stackedChartData__default.default,
92
- config: {
93
- layout: {
94
- series: ["ou"],
95
- category: ["pe"],
96
- filter: ["dx"]
97
- },
98
- showFilterAsTitle: true,
99
- type: "stacked-bar"
100
- }
101
- }
102
- };
103
- const Line = {
104
- name: "Line chart",
105
- args: {
106
- analytics: columnData__default.default,
107
- config: {
108
- layout: {
109
- series: ["dx"],
110
- category: ["ou"],
111
- filter: ["pe"]
112
- },
113
- showFilterAsTitle: true,
114
- type: "line"
115
- }
116
- }
117
- };
118
- const MultipleLines = {
119
- name: "Multi line",
120
- args: {
121
- analytics: multiSeriesData__default.default,
122
- config: {
123
- layout: {
124
- series: ["ou"],
125
- category: ["pe"],
126
- filter: ["dx"]
127
- },
128
- showFilterAsTitle: true,
129
- type: "line"
130
- }
131
- }
132
- };
133
- const PieChart = {
134
- name: "Pie chart",
135
- args: {
136
- analytics: pieData__default.default,
137
- config: {
138
- layout: {
139
- series: ["dx"],
140
- category: [],
141
- filter: ["pe", "ou"]
142
- },
143
- showFilterAsTitle: true,
144
- type: "pie"
145
- }
146
- }
147
- };
148
- const MultiSeries = {
149
- name: "Multi series",
150
- args: {
151
- analytics: multiSeriesData__default.default,
152
- config: {
153
- layout: {
154
- series: ["ou"],
155
- category: ["pe"],
156
- filter: ["dx"]
157
- },
158
- showFilterAsTitle: true,
159
- type: "multi-series",
160
- multiSeries: {
161
- series: [
162
- {
163
- id: "qhqAxPSTUXp",
164
- as: "column",
165
- yAxis: 0
166
- },
167
- {
168
- id: "Vth0fbpFcsO",
169
- as: "line",
170
- cumulative: true,
171
- yAxis: 1
172
- }
173
- ],
174
- yAxes: [
175
- {
176
- id: "yAxis1",
177
- title: {
178
- text: "Koinandugu"
179
- },
180
- labels: {
181
- format: "{value}"
182
- }
183
- },
184
- {
185
- id: "yAxis2",
186
- title: {
187
- text: "Kono"
188
- },
189
- labels: {
190
- format: "{value}"
191
- },
192
- opposite: true
193
- }
194
- ],
195
- target: {
196
- id: "",
197
- styles: {
198
- color: "blue"
199
- },
200
- value: 45,
201
- label: {
202
- text: "Target",
203
- textAlign: "center",
204
- verticalAlign: "middle"
205
- }
206
- }
207
- }
208
- }
209
- }
210
- };
211
- const ComplexMultiSeries = {
212
- name: "Complex multi series",
213
- args: {
214
- analytics: complexMultiSeriesData__default.default,
215
- config: {
216
- layout: {
217
- series: ["dx"],
218
- category: ["pe"],
219
- filter: ["ou"]
220
- },
221
- type: "multi-series",
222
- showFilterAsTitle: true,
223
- multiSeries: {
224
- series: [
225
- {
226
- id: "QQkOAJFukyY",
227
- as: "column",
228
- yAxis: 0
229
- },
230
- {
231
- id: "QQkOAJFukyY",
232
- as: "line",
233
- cumulative: true,
234
- yAxis: 1
235
- }
236
- ],
237
- yAxes: [
238
- {
239
- id: "yAxis1",
240
- title: {
241
- text: "Koinandugu"
242
- },
243
- labels: {
244
- format: "{value}"
245
- }
246
- },
247
- {
248
- id: "yAxis2",
249
- title: {
250
- text: "Kono"
251
- },
252
- labels: {
253
- format: "{value}"
254
- },
255
- opposite: true
256
- }
257
- ],
258
- target: {
259
- id: "",
260
- styles: {
261
- color: "blue"
262
- },
263
- value: 45,
264
- label: {
265
- text: "Target",
266
- textAlign: "center",
267
- verticalAlign: "middle"
268
- }
269
- }
270
- }
271
- }
272
- }
273
- };
274
-
275
- exports.Bar = Bar;
276
- exports.ComplexMultiSeries = ComplexMultiSeries;
277
- exports.Default = Default;
278
- exports.Line = Line;
279
- exports.MultiSeries = MultiSeries;
280
- exports.MultipleColumns = MultipleColumns;
281
- exports.MultipleLines = MultipleLines;
282
- exports.PieChart = PieChart;
283
- exports.StackedBar = StackedBar;
284
- exports.StackedColumn = StackedColumn;
285
- exports.default = ChartAnalytics_stories_default;
286
- //# sourceMappingURL=ChartAnalytics.stories.js.map
287
- //# sourceMappingURL=ChartAnalytics.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/ChartAnalytics/ChartAnalytics.stories.tsx"],"names":["setupHighchartsModules","HighCharts","DHIS2Chart","columnData","multiSeriesData","stackedChartData","pieData","complexMultiSeriesData"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAUAA,wBAAA,CAAuBC,2BAAU,CAAA,CAAA;AAEjC,MAAM,IAAgC,GAAA;AAAA,EACrC,SAAW,EAAAC,YAAA;AAAA,EACX,KAAO,EAAA,aAAA;AACR,CAAA,CAAA;AAEA,IAAO,8BAAQ,GAAA,KAAA;AAIR,MAAM,OAAiB,GAAA;AAAA,EAC7B,IAAM,EAAA,QAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAC,2BAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,QAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AAEO,MAAM,GAAa,GAAA;AAAA,EACzB,IAAM,EAAA,KAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAA,2BAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,KAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AACO,MAAM,eAAyB,GAAA;AAAA,EACrC,IAAM,EAAA,kBAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAC,gCAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,QAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AAEO,MAAM,aAAuB,GAAA;AAAA,EACnC,IAAM,EAAA,gBAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAC,iCAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,gBAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AACO,MAAM,UAAoB,GAAA;AAAA,EAChC,IAAM,EAAA,aAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAA,iCAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,aAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AACO,MAAM,IAAc,GAAA;AAAA,EAC1B,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAF,2BAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,MAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AAEO,MAAM,aAAuB,GAAA;AAAA,EACnC,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAC,gCAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,MAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AAEO,MAAM,QAAkB,GAAA;AAAA,EAC9B,IAAM,EAAA,WAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAE,wBAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,UAAU,EAAC;AAAA,QACX,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,OACpB;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,KAAA;AAAA,KACP;AAAA,GACD;AACD,EAAA;AAEO,MAAM,WAAqB,GAAA;AAAA,EACjC,IAAM,EAAA,cAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAF,gCAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,iBAAmB,EAAA,IAAA;AAAA,MACnB,IAAM,EAAA,cAAA;AAAA,MACN,WAAa,EAAA;AAAA,QACZ,MAAQ,EAAA;AAAA,UACP;AAAA,YACC,EAAI,EAAA,aAAA;AAAA,YACJ,EAAI,EAAA,QAAA;AAAA,YACJ,KAAO,EAAA,CAAA;AAAA,WACR;AAAA,UACA;AAAA,YACC,EAAI,EAAA,aAAA;AAAA,YACJ,EAAI,EAAA,MAAA;AAAA,YACJ,UAAY,EAAA,IAAA;AAAA,YACZ,KAAO,EAAA,CAAA;AAAA,WACR;AAAA,SACD;AAAA,QACA,KAAO,EAAA;AAAA,UACN;AAAA,YACC,EAAI,EAAA,QAAA;AAAA,YACJ,KAAO,EAAA;AAAA,cACN,IAAM,EAAA,YAAA;AAAA,aACP;AAAA,YACA,MAAQ,EAAA;AAAA,cACP,MAAQ,EAAA,SAAA;AAAA,aACT;AAAA,WACD;AAAA,UACA;AAAA,YACC,EAAI,EAAA,QAAA;AAAA,YACJ,KAAO,EAAA;AAAA,cACN,IAAM,EAAA,MAAA;AAAA,aACP;AAAA,YACA,MAAQ,EAAA;AAAA,cACP,MAAQ,EAAA,SAAA;AAAA,aACT;AAAA,YACA,QAAU,EAAA,IAAA;AAAA,WACX;AAAA,SACD;AAAA,QACA,MAAQ,EAAA;AAAA,UACP,EAAI,EAAA,EAAA;AAAA,UACJ,MAAQ,EAAA;AAAA,YACP,KAAO,EAAA,MAAA;AAAA,WACR;AAAA,UACA,KAAO,EAAA,EAAA;AAAA,UACP,KAAO,EAAA;AAAA,YACN,IAAM,EAAA,QAAA;AAAA,YACN,SAAW,EAAA,QAAA;AAAA,YACX,aAAe,EAAA,QAAA;AAAA,WAChB;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD;AACD,EAAA;AAEO,MAAM,kBAA4B,GAAA;AAAA,EACxC,IAAM,EAAA,sBAAA;AAAA,EACN,IAAM,EAAA;AAAA,IACL,SAAW,EAAAG,uCAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACP,MAAQ,EAAA;AAAA,QACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,QACb,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,QACf,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,OACd;AAAA,MACA,IAAM,EAAA,cAAA;AAAA,MACN,iBAAmB,EAAA,IAAA;AAAA,MACnB,WAAa,EAAA;AAAA,QACZ,MAAQ,EAAA;AAAA,UACP;AAAA,YACC,EAAI,EAAA,aAAA;AAAA,YACJ,EAAI,EAAA,QAAA;AAAA,YACJ,KAAO,EAAA,CAAA;AAAA,WACR;AAAA,UACA;AAAA,YACC,EAAI,EAAA,aAAA;AAAA,YACJ,EAAI,EAAA,MAAA;AAAA,YACJ,UAAY,EAAA,IAAA;AAAA,YACZ,KAAO,EAAA,CAAA;AAAA,WACR;AAAA,SACD;AAAA,QACA,KAAO,EAAA;AAAA,UACN;AAAA,YACC,EAAI,EAAA,QAAA;AAAA,YACJ,KAAO,EAAA;AAAA,cACN,IAAM,EAAA,YAAA;AAAA,aACP;AAAA,YACA,MAAQ,EAAA;AAAA,cACP,MAAQ,EAAA,SAAA;AAAA,aACT;AAAA,WACD;AAAA,UACA;AAAA,YACC,EAAI,EAAA,QAAA;AAAA,YACJ,KAAO,EAAA;AAAA,cACN,IAAM,EAAA,MAAA;AAAA,aACP;AAAA,YACA,MAAQ,EAAA;AAAA,cACP,MAAQ,EAAA,SAAA;AAAA,aACT;AAAA,YACA,QAAU,EAAA,IAAA;AAAA,WACX;AAAA,SACD;AAAA,QACA,MAAQ,EAAA;AAAA,UACP,EAAI,EAAA,EAAA;AAAA,UACJ,MAAQ,EAAA;AAAA,YACP,KAAO,EAAA,MAAA;AAAA,WACR;AAAA,UACA,KAAO,EAAA,EAAA;AAAA,UACP,KAAO,EAAA;AAAA,YACN,IAAM,EAAA,QAAA;AAAA,YACN,SAAW,EAAA,QAAA;AAAA,YACX,aAAe,EAAA,QAAA;AAAA,WAChB;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD;AACD","file":"ChartAnalytics.stories.js","sourcesContent":["import { DHIS2Chart, setupHighchartsModules } from \".\";\nimport { Meta, StoryObj } from \"@storybook/react\";\nimport columnData from \"../../shared/resources/column-data.json\";\nimport multiSeriesData from \"../../shared/resources/multi-series-data.json\";\nimport stackedChartData from \"../../shared/resources/stacked-chart-data.json\";\nimport pieData from \"../../shared/resources/pie-data.json\";\nimport complexMultiSeriesData from \"../../shared/resources/complex-multi-series-data.json\";\nimport { Analytics } from \"@hisptz/dhis2-utils\";\nimport HighCharts from \"highcharts\";\n\nsetupHighchartsModules(HighCharts);\n\nconst meta: Meta<typeof DHIS2Chart> = {\n\tcomponent: DHIS2Chart,\n\ttitle: \"DHIS2 Chart\",\n};\n\nexport default meta;\n\ntype Story = StoryObj<typeof DHIS2Chart>;\n\nexport const Default: Story = {\n\tname: \"Column\",\n\targs: {\n\t\tanalytics: columnData as unknown as Analytics,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"dx\"],\n\t\t\t\tcategory: [\"ou\"],\n\t\t\t\tfilter: [\"pe\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"column\",\n\t\t},\n\t},\n};\n\nexport const Bar: Story = {\n\tname: \"Bar\",\n\targs: {\n\t\tanalytics: columnData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"dx\"],\n\t\t\t\tcategory: [\"ou\"],\n\t\t\t\tfilter: [\"pe\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"bar\",\n\t\t},\n\t},\n};\nexport const MultipleColumns: Story = {\n\tname: \"Multiple columns\",\n\targs: {\n\t\tanalytics: multiSeriesData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"ou\"],\n\t\t\t\tcategory: [\"pe\"],\n\t\t\t\tfilter: [\"dx\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"column\",\n\t\t},\n\t},\n};\n\nexport const StackedColumn: Story = {\n\tname: \"Stacked column\",\n\targs: {\n\t\tanalytics: stackedChartData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"ou\"],\n\t\t\t\tcategory: [\"pe\"],\n\t\t\t\tfilter: [\"dx\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"stacked-column\",\n\t\t},\n\t},\n};\nexport const StackedBar: Story = {\n\tname: \"Stacked bar\",\n\targs: {\n\t\tanalytics: stackedChartData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"ou\"],\n\t\t\t\tcategory: [\"pe\"],\n\t\t\t\tfilter: [\"dx\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"stacked-bar\",\n\t\t},\n\t},\n};\nexport const Line: Story = {\n\tname: \"Line chart\",\n\targs: {\n\t\tanalytics: columnData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"dx\"],\n\t\t\t\tcategory: [\"ou\"],\n\t\t\t\tfilter: [\"pe\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"line\",\n\t\t},\n\t},\n};\n\nexport const MultipleLines: Story = {\n\tname: \"Multi line\",\n\targs: {\n\t\tanalytics: multiSeriesData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"ou\"],\n\t\t\t\tcategory: [\"pe\"],\n\t\t\t\tfilter: [\"dx\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"line\",\n\t\t},\n\t},\n};\n\nexport const PieChart: Story = {\n\tname: \"Pie chart\",\n\targs: {\n\t\tanalytics: pieData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"dx\"],\n\t\t\t\tcategory: [],\n\t\t\t\tfilter: [\"pe\", \"ou\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"pie\",\n\t\t},\n\t},\n};\n\nexport const MultiSeries: Story = {\n\tname: \"Multi series\",\n\targs: {\n\t\tanalytics: multiSeriesData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"ou\"],\n\t\t\t\tcategory: [\"pe\"],\n\t\t\t\tfilter: [\"dx\"],\n\t\t\t},\n\t\t\tshowFilterAsTitle: true,\n\t\t\ttype: \"multi-series\",\n\t\t\tmultiSeries: {\n\t\t\t\tseries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"qhqAxPSTUXp\",\n\t\t\t\t\t\tas: \"column\",\n\t\t\t\t\t\tyAxis: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"Vth0fbpFcsO\",\n\t\t\t\t\t\tas: \"line\",\n\t\t\t\t\t\tcumulative: true,\n\t\t\t\t\t\tyAxis: 1,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tyAxes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"yAxis1\",\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\ttext: \"Koinandugu\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabels: {\n\t\t\t\t\t\t\tformat: \"{value}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"yAxis2\",\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\ttext: \"Kono\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabels: {\n\t\t\t\t\t\t\tformat: \"{value}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\topposite: true,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\ttarget: {\n\t\t\t\t\tid: \"\",\n\t\t\t\t\tstyles: {\n\t\t\t\t\t\tcolor: \"blue\",\n\t\t\t\t\t},\n\t\t\t\t\tvalue: 45,\n\t\t\t\t\tlabel: {\n\t\t\t\t\t\ttext: \"Target\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tverticalAlign: \"middle\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n};\n\nexport const ComplexMultiSeries: Story = {\n\tname: \"Complex multi series\",\n\targs: {\n\t\tanalytics: complexMultiSeriesData as any,\n\t\tconfig: {\n\t\t\tlayout: {\n\t\t\t\tseries: [\"dx\"],\n\t\t\t\tcategory: [\"pe\"],\n\t\t\t\tfilter: [\"ou\"],\n\t\t\t},\n\t\t\ttype: \"multi-series\",\n\t\t\tshowFilterAsTitle: true,\n\t\t\tmultiSeries: {\n\t\t\t\tseries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"QQkOAJFukyY\",\n\t\t\t\t\t\tas: \"column\",\n\t\t\t\t\t\tyAxis: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"QQkOAJFukyY\",\n\t\t\t\t\t\tas: \"line\",\n\t\t\t\t\t\tcumulative: true,\n\t\t\t\t\t\tyAxis: 1,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tyAxes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"yAxis1\",\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\ttext: \"Koinandugu\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabels: {\n\t\t\t\t\t\t\tformat: \"{value}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"yAxis2\",\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\ttext: \"Kono\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabels: {\n\t\t\t\t\t\t\tformat: \"{value}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\topposite: true,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\ttarget: {\n\t\t\t\t\tid: \"\",\n\t\t\t\t\tstyles: {\n\t\t\t\t\t\tcolor: \"blue\",\n\t\t\t\t\t},\n\t\t\t\t\tvalue: 45,\n\t\t\t\t\tlabel: {\n\t\t\t\t\t\ttext: \"Target\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tverticalAlign: \"middle\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n};\n"]}