UNPKG

@robotical/sensors-dashboard

Version:

A dashboard tool for depicting Marty data by Robotical

87 lines (86 loc) 2.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCSVTitle = void 0; exports.prepareCSVData = prepareCSVData; exports.prepareTitles = prepareTitles; require("core-js/modules/es.promise.js"); require("core-js/modules/es.array.includes.js"); require("core-js/modules/web.dom-collections.iterator.js"); require("core-js/modules/es.array.sort.js"); require("core-js/modules/esnext.iterator.map.js"); async function prepareCSVData(data) { const mergedX = mergeX(data); const mergedYs = await mergeY(data, mergedX); const csvData = createCSVData(mergedX, mergedYs); return csvData; } function prepareTitles(data, xAxisTitle) { const titles = []; titles.push(xAxisTitle); for (const traceKey in data) { titles.push(traceKey.split("=>")[1]); } return titles; } const getCSVTitle = data => { const tracesTitles = []; for (const trace in data) { const traceTitle = trace.split("=>")[0]; if (!tracesTitles.includes(traceTitle)) { tracesTitles.push(traceTitle); } } return "".concat(tracesTitles.join("_"), "_Data.csv"); }; exports.getCSVTitle = getCSVTitle; const mergeX = data => { // merge all x's into one array const mergedX = []; for (const traceKey in data) { const trace = data[traceKey]; const { x } = trace; for (const xVal of x) { if (!mergedX.includes(xVal)) { mergedX.push(xVal); } } } return mergedX.sort((a, b) => a - b); }; const mergeY = async (data, mergedX) => { // async because it'll be a time consuming process so better we do it in parallel // go through y's of each trace and add to csvData const ysPromises = []; for (const traceKey in data) { const promise = new Promise((resolve, reject) => { const mergedY = new Array(mergedX.length).fill(NaN); const trace = data[traceKey]; const { x, y } = trace; for (let i = 0; i < y.length; i++) { const yVal = y[i]; const xVal = x[i]; const xIndex = mergedX.indexOf(xVal); mergedY[xIndex] = yVal; } resolve(mergedY); }); ysPromises.push(promise); } return Promise.all(ysPromises); }; const createCSVData = (mergedX, mergedYs) => { const csvData = []; for (let i = 0; i < mergedX.length; i++) { const xVal = mergedX[i]; const yVals = mergedYs.map(y => y[i]); csvData.push([xVal, ...yVals]); } return csvData; };