From 0834f41adcc73097f10a318ac2222d22003762e4 Mon Sep 17 00:00:00 2001 From: puni9869 Date: Sun, 10 Nov 2024 16:09:09 +0530 Subject: [PATCH] feat: using stringBuilder download the data and appending in list and then to string by join. --- frontend/common/index.js | 26 ++++++++++---------------- frontend/common/stringBuilder.js | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 frontend/common/stringBuilder.js diff --git a/frontend/common/index.js b/frontend/common/index.js index 9546621..aec27b3 100644 --- a/frontend/common/index.js +++ b/frontend/common/index.js @@ -1,3 +1,5 @@ +import {StringBuilder} from './stringBuilder.js'; + export function RedirectToLogin() { window.location = '/logout'; } @@ -13,39 +15,31 @@ export function CloseModal(modalId, toClose) { }); } -export function JsonToCsv(jsonData) { - let csv = ''; - // Get the headers +function jsonToCsv(jsonData) { + const csv = new StringBuilder(); let headers = Object.keys(jsonData[0]); - csv += headers.join(',') + '\n'; - - // Add the data + csv.write(headers.join(',') + '\n'); jsonData.forEach(function (row) { let data = headers.map(header => row[header]).join(','); - csv += data + '\n'; + csv.write(data + '\n'); }); - return csv; + return csv.toString(); } export function SaveFile(filename, dataObjToWrite, format) { const blob = new Blob([ - format === 'json' ? JSON.stringify(dataObjToWrite) : JsonToCsv(dataObjToWrite) + format === 'json' ? JSON.stringify(dataObjToWrite) : jsonToCsv(dataObjToWrite) ], { type: `text/${format}` }); - const link = document.createElement("a"); + const link = document.createElement("a"); link.download = filename; link.href = window.URL.createObjectURL(blob); link.dataset.downloadurl = [`text/${format}`, link.download, link.href].join(':'); - const evt = new MouseEvent("click", { - view: window, - bubbles: true, - cancelable: true, - }); - + const evt = new MouseEvent("click", {view: window, bubbles: true, cancelable: true,}); link.dispatchEvent(evt); link.remove() } diff --git a/frontend/common/stringBuilder.js b/frontend/common/stringBuilder.js new file mode 100644 index 0000000..e266c21 --- /dev/null +++ b/frontend/common/stringBuilder.js @@ -0,0 +1,18 @@ +export class StringBuilder { + constructor() { + this._lines = []; + } + + write(line = "") { + this._lines.push(line); + } + + writeln(line = "") { + this._lines.push(line); + this._lines.push("\n"); + } + + toString() { + return this._lines.join(""); + } +}