src/components/csv_manager.js
var Papa = require('papaparse')
class Sparccsv {
constructor(){
}
loadFile(file_url) {
return new Promise( (resolve) => {
fetch(file_url).then(response => response.text())
.then( data => {
this.csv_data = Papa.parse(data)
resolve()
})
})
}
loadData(data) {
return new Promise( (resolve) => {
this.csv_data = {}
this.csv_data.data = data
resolve()
})
}
transposeSelf() {
var tempData = this.transpose(this.csv_data.data)
this.csv_data.data = tempData
}
getDataType() {
var first = this.getHeaders()[0]
if (first.toLowerCase().includes('time')) {
return 'scatter'
} else if (first.toLowerCase().includes('name')) {
return 'bar'
}
var first_col = this.getColoumnByIndex(0)
if (Number(first_col[4]) > Number(first_col[3])){
return 'scatter'
} else {
return 'bar'
}
}
getXaxis(){
var firstHeader = this.csv_data.data[0][0]
return firstHeader.split('-').join(' ').split('_').join(' ')
}
getTitle(url){
var title = url.split('/').pop() //grab file from url
title = title.split('-').join(' ').split('_').join(' ').split('.')[0] //Process file name into title
return title
}
// Return all headers
getHeaders() {
return this.csv_data.data[0]
}
// Returns all headers except for first cell
getHeadersExceptForFirst(){
var headers = this.csv_data.data[0]
headers.shift()
return headers
}
getCSVData() {
return [...this.csv_data.data]
}
// Remove header and first row to pass data values only
getDataValuesOnly(){
let all_data = [...this.csv_data.data]
let headers_removed = all_data.slice(1)
let headers_and_col_removed = headers_removed.map(function(row) {
return row.slice(1);
});
return headers_and_col_removed
}
getSampleRate() {
return 1 / (this.csv_data.data[1][1] - this.csv_data.data[1][0])
}
getColoumnByIndex(index) {
let col = this.csv_data.data.map((row) => { return row[index] })
col.shift()
return col
}
getHeaderByIndex(index) {
return this.csv_data.data[0][index]
}
getColoumnByName(column_name) {
var column_index = 0
for (let i in this.csv_data.data[0]) {
if (this.csv_data.data[0][i] === column_name) {
column_index = i
}
}
if (column_index === 0){
return false // if coloumn not found
}
return this.getColoumnByIndex(column_index)
}
getByAxes(channelx, channely){
var dx = []
var c1 = this.getColoumnByIndex(0)
var index = []
for (let i in channely){
for (let j in c1){
if (c1[j] === channely[i]){
index.push(j)
continue
}
}
}
var datat = []
for (let i in channelx){
var col = []
dx = this.getColoumnByName(channelx[i])
for(let j in index){
col.push(dx[index[j]])
}
datat.push(col)
}
return [...this.transpose(datat)]
}
export(selectedChannels){
var headerList = []
var selectedData = []
headerList.push(this.getHeaderByIndex(0))
selectedData.push(this.getColoumnByIndex(0))
for (let i in selectedChannels){
headerList.push(selectedChannels[i])
selectedData.push(this.getColoumnByName(selectedChannels[i]))
}
var filename = 'sparc-export-' + Math.random().toString(36).slice(-5) + '.csv'
this.downloadCSV({
filename: filename,
data: this.transpose(selectedData),
columns: headerList
})
}
transpose(array){
return array[0].map((col, i) => array.map(row => row[i]));
}
downloadCSV = (args) => {
/* Use like so:
downloadCSV({
filename: 'filename.csv',
data: [{'a': '1', 'b': '2'}],
columns: ['a','b']
});
*/
let filename = args.filename || 'export.csv';
let csv = Papa.unparse(args.data)
if (csv == null) return;
var blob = new Blob([csv]);
var a = window.document.createElement("a");
a.href = window.URL.createObjectURL(blob, {type: "text/plain"});
a.download = filename;
document.body.appendChild(a);
a.click(); // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access
document.body.removeChild(a);
}
}
module.exports = Sparccsv