From 2021d9394da181f9b2dc985ca823a832ff7c6d63 Mon Sep 17 00:00:00 2001 From: Carlos Valente <34649812+cpvalente@users.noreply.github.com> Date: Sun, 11 Dec 2022 19:17:41 +0100 Subject: [PATCH] fix(csv-export): escape special characters (#268) --- client/package.json | 7 ++++--- client/src/features/table/utils.js | 9 ++++----- client/yarn.lock | 5 +++++ server/package.json | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/client/package.json b/client/package.json index 135c4f89c..0ad69ac69 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "ontime-ui", - "version": "1.9.6", + "version": "1.9.7", "private": true, "dependencies": { "@chakra-ui/react": "^2.3.2", @@ -15,6 +15,7 @@ "autosize": "^5.0.1", "axios": "^0.27.2", "color": "^4.2.3", + "csv-stringify": "^6.2.3", "framer-motion": "^7.3.2", "jotai": "^1.7.8", "luxon": "^3.0.1", @@ -34,7 +35,7 @@ "build": "vite build", "lint": "eslint .", "stylelint": "npx stylelint \"**/*.scss\"\n", - "test": "vitest ", + "test": "vitest", "test:pipeline": "vitest run" }, "browserslist": { @@ -80,4 +81,4 @@ "vite-tsconfig-paths": "^3.5.0", "vitest": "^0.23.2" } -} \ No newline at end of file +} diff --git a/client/src/features/table/utils.js b/client/src/features/table/utils.js index ae085d4b1..d48458a29 100644 --- a/client/src/features/table/utils.js +++ b/client/src/features/table/utils.js @@ -1,3 +1,5 @@ +import { stringify } from 'csv-stringify/browser/esm/sync'; + /** * @description parses a field for export * @param {string} field @@ -99,9 +101,6 @@ export const makeTable = (headerData, tableData, userFields) => { */ export const makeCSV = (arrayOfArrays) => { let csvData = 'data:text/csv;charset=utf-8,'; - arrayOfArrays.forEach((rowArray) => { - const row = rowArray.join(','); - csvData += `${row}\n`; - }); - return csvData; + const stringifiedData = stringify(arrayOfArrays); + return csvData + stringifiedData; }; diff --git a/client/yarn.lock b/client/yarn.lock index 47bfe28c4..feda85992 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -2403,6 +2403,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== +csv-stringify@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-6.2.3.tgz#fefd25e66fd48f8f42f43b85a66a4663a2c3e796" + integrity sha512-4qGjUMwnlaRc00gc2jrIYh2w/h1fo25B0mTuY9K8fBiIgtmCX3LcgUbrEGViL98Ci4Se/F5LFEtu8k+dItJVZQ== + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" diff --git a/server/package.json b/server/package.json index 45a646b59..20658771c 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "ontime", - "version": "1.9.6", + "version": "1.9.7", "author": "Carlos Valente", "description": "Time keeping for live events", "repository": "https://github.com/cpvalente/ontime",