From e61460bd3b3bd8c9774c3506cef5cea010a5239a Mon Sep 17 00:00:00 2001
From: Benedikt Seeger <benedikt.seeger@ptb.de>
Date: Thu, 27 Feb 2025 14:28:36 +0100
Subject: [PATCH] fixed plotting after ddcQuantiy class refactoring.

---
 src/renderers/MeasurementRenderer.js | 56 ++++++++++------------------
 1 file changed, 20 insertions(+), 36 deletions(-)

diff --git a/src/renderers/MeasurementRenderer.js b/src/renderers/MeasurementRenderer.js
index 0a63c39..47f6a6c 100644
--- a/src/renderers/MeasurementRenderer.js
+++ b/src/renderers/MeasurementRenderer.js
@@ -101,36 +101,30 @@ export function renderMeasurementResults(measurementResults, language) {
 
   const indexQuantities = [];
   const dataQuantities = [];
-  // extraInfo: for each data quantity, store { uncertainty, comments: [{ comment, validArray }], conformity }
   const extraInfo = [];
   quantityJSONs.forEach(q => {
     if (q.$ && q.$.refType && q.$.refType.match(/basic_tableIndex/)) {
       indexQuantities.push(new DCCRealListQuantity(q));
     } else {
-      dataQuantities.push(new DCCRealListQuantity(q));
-      const uncertainty = (new DCCRealListQuantity(q)).getUncertainty();
-      let comments = [];
+      const quantity = new DCCRealListQuantity(q);
+      dataQuantities.push(quantity);
+      let uncertainty = quantity.getUncertainty();
+      let comment = '';
       let conformity = null;
       if (q['dcc:measurementMetaData'] && q['dcc:measurementMetaData']['dcc:metaData']) {
         let md = q['dcc:measurementMetaData']['dcc:metaData'];
         if (!Array.isArray(md)) { md = [md]; }
         md.forEach(item => {
           if (item.$ && item.$.refType && item.$.refType.includes('basic_tableRowComment')) {
-            let commentText = '';
             if (item['dcc:description'] && item['dcc:description']['dcc:content']) {
               let desc = item['dcc:description']['dcc:content'];
               if (Array.isArray(desc)) {
                 const match = desc.find(d => d.$ && d.$.lang === language) || desc[0];
-                commentText = match._ || match;
+                comment = match._ || match;
               } else {
-                commentText = desc._ || desc;
+                comment = desc._ || desc;
               }
             }
-            let validArray = [];
-            if (item['dcc:validXMLList']) {
-              validArray = item['dcc:validXMLList'].trim().split(/\s+/);
-            }
-            comments.push({ comment: commentText, valid: validArray });
           }
           if (item.$ && item.$.refType && item.$.refType.includes('basic_conformity')) {
             if (item['dcc:conformityXMLList']) {
@@ -139,11 +133,10 @@ export function renderMeasurementResults(measurementResults, language) {
           }
         });
       }
-      extraInfo.push({ uncertainty, comments, conformity });
+      extraInfo.push({ uncertainty, comment, conformity });
     }
   });
 
-  // Build data headers array for each data quantity
   const dataHeaders = dataQuantities.map((q, idx) => {
     let header = q.getName(language);
     let unit = q.getUnit();
@@ -153,7 +146,6 @@ export function renderMeasurementResults(measurementResults, language) {
     return header;
   });
 
-  // Create scaling toggles for log axes
   const scalingContainer = document.createElement('div');
   scalingContainer.innerHTML = '<strong>Scaling:</strong> ';
   const logXToggle = document.createElement('input');
@@ -227,7 +219,6 @@ export function renderMeasurementResults(measurementResults, language) {
     const conformityArray = [];
     extraInfo.forEach((info, idx) => {
       headers.push(dataHeaders[idx]);
-      // Only include Conformity header if conformity exists for this quantity
       if (info.conformity) { headers.push('Conformity'); }
       dataValues.push(dataQuantities[idx].getValues());
       uncertaintiesArray.push(info.uncertainty || []);
@@ -249,18 +240,11 @@ export function renderMeasurementResults(measurementResults, language) {
           row.push(info.conformity[i] || '');
         }
       });
-      // For comments, combine all comments valid at this row from all quantities
-      let rowComments = extraInfo.map(info => {
-        if (info.comments) {
-          // info.comments is an array of { comment, valid } objects
-          return info.comments.filter(cObj => cObj.valid[i] === 'true').map(cObj => cObj.comment).join(' ; ');
-        }
-        return '';
-      }).filter(c => c).join(' | ');
-      row.push(rowComments);
+      // Comments column remains uncolored
+      row.push(extraInfo.map(info => info.comment).filter(c => c).join(' ; '));
       tableData.push(row);
     }
-    renderTable(tableData);
+    renderTable(tableData, headers);
 
     const unitGroups = {};
     dataQuantities.forEach((q, idx) => {
@@ -273,7 +257,7 @@ export function renderMeasurementResults(measurementResults, language) {
       const defaultColor = palette[idx % palette.length];
       const markerColorArray = values.map((val, i) => {
         if (conformity && conformity[i] && conformity[i].toLowerCase().includes('fail')) {
-          return '#d62728';
+          return conformityColors.fail;
         }
         return defaultColor;
       });
@@ -301,7 +285,9 @@ export function renderMeasurementResults(measurementResults, language) {
           y: trace.y,
           error_y: {
             type: 'data',
-            array: (trace.uncertainty && trace.uncertainty.length === xValues.length) ? trace.uncertainty : new Array(xValues.length).fill(0),
+            array: (trace.uncertainty && trace.uncertainty.length === xValues.length)
+                ? trace.uncertainty
+                : new Array(xValues.length).fill(0),
             visible: true,
             color: trace.defaultColor
           },
@@ -311,7 +297,9 @@ export function renderMeasurementResults(measurementResults, language) {
           marker: { color: trace.markerColor },
           line: { color: trace.defaultColor },
           hovertemplate: tooltip,
-          customdata: (trace.conformity && trace.conformity.length === xValues.length) ? trace.conformity : new Array(xValues.length).fill('')
+          customdata: (trace.conformity && trace.conformity.length === xValues.length)
+              ? trace.conformity
+              : new Array(xValues.length).fill('')
         };
       });
       let xaxisTitle = '';
@@ -361,7 +349,7 @@ export function renderMeasurementResults(measurementResults, language) {
     });
   }
 
-  function renderTable(tableData) {
+  function renderTable(tableData, headers) {
     const tableContainer = document.getElementById('tableContainer');
     tableContainer.innerHTML = '';
     const table = document.createElement('table');
@@ -372,9 +360,7 @@ export function renderMeasurementResults(measurementResults, language) {
         if (rowIndex === 0) {
           cell.innerHTML = cellData;
           if (cellData !== 'Comments' && cellIndex > 0) {
-            // Use correct header mapping: assume each quantity occupies either 1 (if no conformity) or 2 columns.
-            // We'll compute the index based on dataHeaders length.
-            const qtyIndex = cellIndex % 2 === 1 ? Math.floor(cellIndex / 2) : Math.floor((cellIndex - 1) / 2);
+            const qtyIndex = Math.floor((cellIndex - 1) / 2);
             cell.style.backgroundColor = lightPalette[qtyIndex % lightPalette.length];
           }
         } else {
@@ -393,9 +379,7 @@ export function renderMeasurementResults(measurementResults, language) {
 
   function highlightTableRow(rowIndex) {
     const rows = document.getElementById('tableContainer').querySelectorAll('tr');
-    if (rows[rowIndex]) {
-      rows[rowIndex].style.backgroundColor = '#fee';
-    }
+    if (rows[rowIndex]) { rows[rowIndex].style.backgroundColor = '#fee'; }
   }
 
   function clearTableRowHighlights() {
-- 
GitLab