diff --git a/components/settings.js b/components/settings.js index bf420f7212f6d984f276b3c6e0aa69819c506fb9..cfce6dac809ee4cea0b89a83d5f3eb164a5bd7c7 100644 --- a/components/settings.js +++ b/components/settings.js @@ -64,7 +64,8 @@ function transformToCsv(cycleDays) { const rows = cycleDays .map(day => { return columnNames.map(column => { - return objectPath.get(day, column, '') + const val = objectPath.get(day, column, '') + return typeof val === 'string' ? csvify(val) : val }) }) .map(row => row.join(',')) @@ -72,3 +73,20 @@ function transformToCsv(cycleDays) { rows.unshift(columnNames.join(',')) return rows.join('\n') } + +function csvify (val) { + // escape double quotes + val = val.replace(/"/g, '""') + + val = val.toLowerCase() + const hasSpecialChars = ( + val.includes('\n') || + val.includes('\t') || + val.includes(',') || + val.includes(';') || + val.includes('.') || + val.includes('\'') + ) + + return hasSpecialChars ? `"${val}"` : val +} \ No newline at end of file