diff --git a/client/web/reporter/src/components/faIcons.js b/client/web/reporter/src/components/faIcons.js index 088c1c515..573150e41 100644 --- a/client/web/reporter/src/components/faIcons.js +++ b/client/web/reporter/src/components/faIcons.js @@ -49,6 +49,7 @@ import { faEllipsisV, faTools, faClone, + faDownload, } from '@fortawesome/free-solid-svg-icons' import { @@ -114,4 +115,5 @@ library.add( faEllipsisV, faTools, faClone, + faDownload, ) diff --git a/lib/vue/src/components/reporter/Viewers/CReportTable.vue b/lib/vue/src/components/reporter/Viewers/CReportTable.vue index ea1834064..67a3e588f 100644 --- a/lib/vue/src/components/reporter/Viewers/CReportTable.vue +++ b/lib/vue/src/components/reporter/Viewers/CReportTable.vue @@ -110,8 +110,19 @@ + + + + @@ -497,6 +508,25 @@ export default { } } }, + + exportCSV () { + const header = this.tabelify.header.map(({ column }) => { + const value = column ? column.label : '' + return value.includes(',') ? `"${value}"` : value + }) + + const rows = this.tabelify.rows.map(row => row.map(({ value }) => value.includes(',') ? `"${value}"` : value)) + + const csv = [header, ...rows].map(row => row.join(',')).join('\n') + const blob = new Blob([csv], { type: 'text/csv' }) + const url = URL.createObjectURL(blob) + + const a = document.createElement('a') + a.href = url + a.download = `${this.displayElement.name || 'report'}-${new Date().toISOString()}.csv` + a.click() + URL.revokeObjectURL(url) + }, }, }