From 6f2c26bd01f548796be097a0ebad41c8cf10535b Mon Sep 17 00:00:00 2001
From: Manuel Spuhler <manuel.spuhler@chuv.ch>
Date: Thu, 9 Feb 2023 13:35:54 +0100
Subject: [PATCH] fix(Exareme2): Fixed histogram enumeration casting

---
 .../handlers/algorithms/histogram.handler.ts  | 46 +++++++++++++------
 1 file changed, 32 insertions(+), 14 deletions(-)

diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts b/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts
index 0014529..fa95240 100644
--- a/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts
+++ b/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts
@@ -8,19 +8,32 @@ import {
 
 const ALGO_NAME = 'multiple_histograms';
 
+interface Exareme2HistogramData {
+  var: string;
+  grouping_var: string | null;
+  grouping_enum: string | null;
+  bins: string[] | number[];
+  counts: number[];
+}
+
 const round = (n: number) => Math.round((n + Number.EPSILON) * 100) / 100;
 
 export default class HistogramHandler extends BaseHandler {
-  private getBarChartResult(data: any): BarChartResult {
-    const categories =
-      typeof data.bins[0] === 'string'
-        ? data.bins
-        : data.bins
+  private getBarChartResult(
+    data: Exareme2HistogramData,
+    domain: Domain,
+  ): BarChartResult {
+    const lookupVar = domain.variables.find((v) => v.id ===  data.var);
+    const categories = lookupVar.type === 'nominal'
+        ? lookupVar.enumerations.map(e => e.value)
+        : (data.bins as number[])
             .filter((_, i) => i < data.bins.length - 1) // upper limit counts for 1 extra
-            .map((b, i) => `${round(b)}-${round(data.bins[i + 1])}`);
+            .map(
+              (b, i) => `${round(b)}-${round((data.bins as number[])[i + 1])}`,
+            );
 
     const barChart: BarChartResult = {
-      name: data.var,
+      name: lookupVar.label,
       barValues: data.counts.map((c) => c ?? 0),
       xAxis: {
         label: 'bins',
@@ -70,13 +83,15 @@ export default class HistogramHandler extends BaseHandler {
     if (!this.canHandle(experiment, data))
       return super.handle(experiment, data, domain);
 
-    const extractedData = data[0].histogram;
-
-    const defaultChartData = extractedData.find(
+    const extractedData: Exareme2HistogramData[] = data[0].histogram;
+    const selectedVariableChartData = extractedData.find(
       (d) => d.var && !d.grouping_var,
     );
-    const defaultChart = this.getBarChartResult(defaultChartData);
-    experiment.results.push(defaultChart);
+    const selectedVariableChart = this.getBarChartResult(
+      selectedVariableChartData,
+      domain,
+    );
+    experiment.results.push(selectedVariableChart);
 
     const groupingVars: string[] = Array.from(
       new Set(
@@ -86,9 +101,12 @@ export default class HistogramHandler extends BaseHandler {
       ),
     );
     const groupingCharts = groupingVars.map((groupingVar) =>
-      this.getGroupedBarChartResult(groupingVar, defaultChart, extractedData),
+      this.getGroupedBarChartResult(
+        groupingVar,
+        selectedVariableChart,
+        extractedData,
+      ),
     );
-
     if (groupingCharts) groupingCharts.map((gc) => experiment.results.push(gc));
 
     this.next?.handle(experiment, data, domain);
-- 
GitLab