diff --git a/static/js/dist/app/campaign_results.min.js b/static/js/dist/app/campaign_results.min.js index 416675ba..43c831ae 100644 --- a/static/js/dist/app/campaign_results.min.js +++ b/static/js/dist/app/campaign_results.min.js @@ -291,87 +291,42 @@ function exportAsCleanCSV(scope) { // Exports campaign results as a CSV file -function exportAsCSV(scope) { - var csvScope = null; - var filename = campaign.name + ' - ' + capitalize(scope) + '.csv'; +exportAsCSV(scope) { + exportHTML = $("#exportButton").html(); + var csvScope = null; + var filename = campaign.name + " - " + capitalize(scope) + ".csv"; - switch (scope) { - case "results": - csvScope = campaign.results; - break; - case "events": - csvScope = campaign.timeline; - break; - } + switch (scope) { + case "results": + csvScope = campaign.results; + break; + case "events": + csvScope = campaign.timeline; + break; + } - if (!csvScope) { - return; - } + if (!csvScope) { + return; + } - // Create an array to hold the CSV data - var csvData = []; + $("#exportButton").html(''); - // Add the CSV header - var header = ['Email', 'Email Opened', 'Clicked Link', 'Submitted Data']; - csvData.push(header); + var csvString = Papa.unparse(csvScope, { escapeFormulae: true }); + var csvData = new Blob([csvString], { type: "text/csv;charset=utf-8;" }); - // Define a helper function to convert boolean to string - function boolToString(value) { - return value ? 'true' : 'false'; - } - - // Add CSV rows for each entry in csvScope - csvScope.forEach(function (entry) { - var email = entry.email; - var status = entry.status; - - // Initialize status flags - var emailOpened = false; - var clickedLink = false; - var submittedData = false; - - // Update status flags based on the status value - switch (status) { - case 'Email Opened': - emailOpened = true; - break; - case 'Clicked Link': - emailOpened = true; // If clicked link, email is also opened - clickedLink = true; - break; - case 'Submitted Data': - emailOpened = true; // If submitted data, email is also opened - clickedLink = true; // If submitted data, link is also clicked - submittedData = true; - break; - } - - // Add the CSV row - var csvRow = [email, boolToString(emailOpened), boolToString(clickedLink), boolToString(submittedData)]; - csvData.push(csvRow); - }); - - // Convert the CSV data array to a CSV string - var csvString = csvData.map(function (row) { - return row.join(','); - }).join('\n'); - - // Create a Blob with the CSV string - var csvBlob = new Blob([csvString], { - type: 'text/csv;charset=utf-8;' - }); - - // Create a download link - var csvURL = window.URL.createObjectURL(csvBlob); - var dlLink = document.createElement('a'); + if (navigator.msSaveBlob) { + navigator.msSaveBlob(csvData, filename); + } else { + var csvURL = window.URL.createObjectURL(csvData); + var dlLink = document.createElement("a"); dlLink.href = csvURL; - dlLink.setAttribute('download', filename); - - // Trigger the download + dlLink.setAttribute("download", filename); + document.body.appendChild(dlLink); dlLink.click(); + document.body.removeChild(dlLink); + } - // Clean up - window.URL.revokeObjectURL(csvURL); + $("#exportButton").html(exportHTML); } function replay(event_idx) {