Created
May 26, 2020 23:52
-
-
Save NguyenDa18/20d07c4bcf2da75b712ce20b7bed822c to your computer and use it in GitHub Desktop.
Generate CSV Download Link From Array
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const generateHeader = (header) => { | |
const newHeader = header.map(key => { | |
const replacement = headerMappings[key] === undefined ? key : headerMappings[key] | |
return replacement | |
}) | |
return newHeader | |
} | |
const convertArrayOfObjectsToCSV = arrayOfObjects => { | |
let result = ""; | |
const columnDelimiter = ","; | |
const lineDelimiter = "\n"; | |
arrayOfObjects.map(item => { | |
delete item['LastUpdated'] | |
delete item['id'] | |
return item | |
}) | |
const keys = Object.keys(arrayOfObjects[0]) | |
const header = generateHeader(keys) | |
result += header.join(columnDelimiter) | |
result += lineDelimiter; | |
arrayOfObjects.forEach(item => { | |
let ctr = 0; | |
keys.forEach(key => { | |
if (ctr > 0) result += columnDelimiter; | |
result += item[key]; | |
ctr++; | |
}); | |
result += lineDelimiter; | |
}); | |
console.log(result) | |
return result; | |
}; | |
export const downloadCSV = (array, csvName) => { | |
const link = document.createElement("a"); | |
if (array.length > 0) { | |
let csv = convertArrayOfObjectsToCSV(array); | |
if (csv == null) return | |
if (!csv.match(/^data:text\/csv/i)) { | |
csv = `data:text/csv;charset=utf-8,${csv}`; | |
} | |
// https://stackoverflow.com/questions/37740856/javascript-createelement-does-not-work-in-ie | |
document.body.appendChild(link) | |
link.setAttribute("href", encodeURI(csv)); | |
link.setAttribute("download", csvName); | |
link.click() | |
link.remove() | |
} | |
else { | |
toast.error("🔥 No rows selected!", { | |
autoClose: 5000 | |
}) | |
} | |
}; |
Author
NguyenDa18
commented
Aug 19, 2020
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment