diff --git a/src/app/portfolio/[slug]/components/RemoteAssessmentModal.tsx b/src/app/portfolio/[slug]/components/RemoteAssessmentModal.tsx index 0a46857..52ade5a 100644 --- a/src/app/portfolio/[slug]/components/RemoteAssessmentModal.tsx +++ b/src/app/portfolio/[slug]/components/RemoteAssessmentModal.tsx @@ -332,16 +332,29 @@ function generateS3Keys(userId: string, portfolioId: string) { type GenericObject = Record; -const convertToCSV = (data: T[]): string => { - // Get headers (keys from the first object) +const convertToCSV = >(data: T[]): string => { + if (data.length === 0) return ""; + const headers = Object.keys(data[0]) as (keyof T)[]; - // Create CSV rows + const escape = (value: any): string => { + if (value == null) return ""; + + const str = String(value); + + // Check if field contains special characters + if (/[",\n]/.test(str)) { + // Escape double quotes and wrap in quotes + return `"${str.replace(/"/g, '""')}"`; + } + + return str; + }; + const rows = data.map((row) => - headers.map((header) => row[header]).join(",") + headers.map((header) => escape(row[header])).join(",") ); - // Combine headers and rows into CSV string return [headers.join(","), ...rows].join("\n"); }; @@ -414,6 +427,8 @@ function useCreateRemoteAssessment({ }, ]; + console.log("HELLO WORLD", convertToCSV(assetList)); + csvFile = new Blob([convertToCSV(assetList)], { type: "text/csv", });