Skip to content

Commit 008f53b

Browse files
committed
v5.0.10
1 parent 1a665e7 commit 008f53b

File tree

3 files changed

+45
-6
lines changed

3 files changed

+45
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@netdata/netdata-ui",
3-
"version": "5.0.9",
3+
"version": "5.0.10",
44
"description": "netdata UI kit",
55
"main": "dist/index.js",
66
"module": "dist/es6/index.js",

src/components/table/header/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const Header = ({
3232

3333
return (
3434
<Flex
35+
data-noprint
3536
width="100%"
3637
zIndex={10}
3738
background="mainBackground"

src/components/table/helpers/downloadCsv.js

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,52 @@ const formatValue = value => {
44
return value
55
}
66

7-
const convertToCSV = data => data.reduce((h, row) => h + row.map(formatValue).join(",") + "\n", "")
7+
const escapeForCSV = value => {
8+
const str = String(value)
9+
10+
if (/[",\n\r]/.test(str)) return `"${str.replace(/"/g, '""')}"`
11+
12+
return str
13+
}
14+
15+
const convertToCSV = data =>
16+
data.reduce((h, row) => h + row.map(v => escapeForCSV(formatValue(v))).join(",") + "\n", "")
817

918
export default (name = "netdata") =>
1019
(_, table) => {
11-
let data = [table.getFlatHeaders().map(header => header.id)]
12-
table.getRowModel().rows.forEach(row => {
13-
data.push(table.getFlatHeaders().map(header => row.renderValue(header.id)))
14-
})
20+
const headers = table.getFlatHeaders().filter(header => !header.subHeaders?.length)
21+
22+
let data = [
23+
headers.map(header => {
24+
const parentLabel = header.column.parent
25+
? typeof header.column.parent.columnDef.headerString === "function"
26+
? header.column.parent.columnDef.headerString()
27+
: header.column.parent.id
28+
: null
29+
30+
const label =
31+
typeof header.column.columnDef.headerString === "function"
32+
? header.column.columnDef.headerString()
33+
: header.id
34+
35+
return parentLabel ? `${parentLabel} ${label}` : label
36+
}),
37+
]
38+
table.getRowModel().rows.forEach(row =>
39+
data.push(
40+
headers.map(header => {
41+
const value = row.getValue(header.id)
42+
43+
if (value) return value
44+
45+
if (typeof header.column.columnDef.renderString !== "function") return value
46+
47+
const cell = row.getAllCells().find(cell => cell.column.id === header.id)
48+
49+
return header.column.columnDef.renderString(cell.row)
50+
})
51+
)
52+
)
1553

1654
const url = window.URL.createObjectURL(
1755
new Blob([convertToCSV(data)], { type: "text/csv;charset=utf-8;" })

0 commit comments

Comments
 (0)