From 5c3af38ebc89b562a8893446d7a71be6fd487922 Mon Sep 17 00:00:00 2001 From: Pratish Ninawe Date: Fri, 22 Sep 2023 18:46:04 +0530 Subject: [PATCH] implemented functionality to upload files via spreadsheet also --- src/views/Campaigns/AddCampaign.js | 4 +- src/views/Campaigns/BasicDetaiils.js | 1 + src/views/Campaigns/ContactDetails.js | 335 +++++++++++++++++--------- src/views/Campaigns/Preview.js | 22 +- 4 files changed, 235 insertions(+), 127 deletions(-) diff --git a/src/views/Campaigns/AddCampaign.js b/src/views/Campaigns/AddCampaign.js index a0f224b..459fee9 100644 --- a/src/views/Campaigns/AddCampaign.js +++ b/src/views/Campaigns/AddCampaign.js @@ -138,7 +138,7 @@ const AddCampaign = () => { // }); // }; - console.log(data); + // console.log(data); return ( @@ -153,7 +153,7 @@ const AddCampaign = () => { " >
- Add Campaign + Contact Details
diff --git a/src/views/Campaigns/BasicDetaiils.js b/src/views/Campaigns/BasicDetaiils.js index 50d0981..15c5173 100644 --- a/src/views/Campaigns/BasicDetaiils.js +++ b/src/views/Campaigns/BasicDetaiils.js @@ -2,6 +2,7 @@ import React from "react"; import { useState } from "react"; import Button from "@material-ui/core/Button"; import toast from "react-hot-toast"; + const BasicDetaiils = ({ props }) => { const { data, setData, handleView } = props; diff --git a/src/views/Campaigns/ContactDetails.js b/src/views/Campaigns/ContactDetails.js index bd899bc..e2840b5 100644 --- a/src/views/Campaigns/ContactDetails.js +++ b/src/views/Campaigns/ContactDetails.js @@ -2,17 +2,56 @@ import React from "react"; import Button from "@material-ui/core/Button"; import { useState } from "react"; import toast from "react-hot-toast"; +import { CFormInput, CFormLabel, CCol, CRow } from "@coreui/react"; + const ContactDetails = ({ props }) => { const { data, setData, handleView } = props; + const [dataEntryMethod, setDataEntryMethod] = useState("manual"); + const [csvData, setCsvData] = useState([]); // const [recipients, setRecipients] = useState([{ name: "", phoneNumber: "" }]); - + // console.log("data", data); const addRecord = () => { setData((prevData) => ({ ...prevData, - recipients: [...prevData.recipients, { name: "", phoneNumber: "" }], + recipients: [ + ...prevData.recipients, + { name: "", phoneNumber: "", email: "" }, + ], })); }; + const handleSpreadSheet = (e) => { + const file = e.target.files[0]; + if (file) { + const reader = new FileReader(); + + reader.onload = (event) => { + const csvData = event.target.result; + const rows = csvData.split("\n"); + const extractedData = []; + + for (let i = 0; i < rows.length; i++) { + const row = rows[i].split(","); + if (row.length >= 2) { + const name = row[0].trim(); + const email = row[1].trim(); + if (name && email) { + extractedData.push({ name, email }); + } + } + } + setCsvData(extractedData); + console.log(csvData); + setData((prevData) => ({ + ...prevData, + recipients: extractedData, + spreadSheet: file.name, + })); + }; + reader.readAsText(file); + } + }; + const deleteRecipient = (index) => { const updatedRecipients = [...data.recipients]; updatedRecipients.splice(index, 1); @@ -46,131 +85,193 @@ const ContactDetails = ({ props }) => { })); }; + const recipientEmailChange = (e, index) => { + const updatedRecipients = [...data.recipients]; + updatedRecipients[index] = { + ...updatedRecipients[index], + email: e.target.value, + }; + setData((prevData) => ({ + ...prevData, + recipients: updatedRecipients, + })); + }; + + const handleSubmit = () => { + if ( + data?.recipients.every( + (recipient) => + recipient.name !== "" && + (data?.campaignType !== "email" + ? recipient.phoneNumber !== "" + : recipient.email !== "") + ) + ) { + handleView(3); + } else { + toast.error("Fill all contact details"); + } + }; + return (
-
-
-
-
- Contact Details -
-
-

-
- -
- - +
+
+
+
+
+ +
+
+ + +
- -
-
-
-
- {data?.recipients.map((recipient, index) => { - return ( -
-
+ )} + + {dataEntryMethod === "spreadsheet" && ( +
+
+ {/* Spreadsheet data entry form */} +
+
+
+
+ + handleSpreadSheet(e)} + /> +
+
+
+
+
+
+ )}
); diff --git a/src/views/Campaigns/Preview.js b/src/views/Campaigns/Preview.js index fe33526..de2e281 100644 --- a/src/views/Campaigns/Preview.js +++ b/src/views/Campaigns/Preview.js @@ -68,15 +68,21 @@ const Preview = ({ props }) => { {data?.campaignType} - Video + + {data?.campaignType === "email" ? "Video" : "Spreadsheet"} + - + {data?.campaignType === "email" ? ( + + ) : ( +
{data?.spreadSheet}
+ )}