@robotical/sensors-dashboard
Version:
A dashboard tool for depicting Marty data by Robotical
87 lines (86 loc) • 2.44 kB
JavaScript
;
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;
};