import { IoMdClose } from "react-icons/io"; import RecipientAddCard from './RecipientAddCard'; import RecipientCards from './RecipientCards'; import SelectedDocuments from "./SelectedDocuments"; import api from "../../../config/api"; import { useDispatch, useSelector } from "react-redux"; import { RootState } from "../../../store/store"; import { useEffect, useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { setImages } from "../../../store/slices/selectedDocsSlice"; import { addRecipient, addRecipientAsync, fetchRecipients, recipientType, resetRecipients, updateRecipientIds } from "../../../store/slices/selectedRecipientsSlice"; import { setTransactionId, TRANSACTION_STATUS_ENUMS, updateTransactionStatus } from "../../../store/slices/transactionSlice"; import { hideLoader, showLoader } from "../../../store/slices/loaderSlice"; import Loader from "../../dashboard/Loader"; import { Bounce, toast } from "react-toastify"; import { fetchDocuments, resetDocuments, setDocuments, uploadDocuments } from "../../../store/slices/documentSlice"; const ProcessStepOne = () => { interface EmailDtls { subject: string; message: string; } const { accountId, transactionId } = useParams<{ accountId: string, transactionId: string }>(); if (!accountId || !transactionId) { window.location.href = "/"; return null; } const navigate = useNavigate(); const dispatch = useDispatch(); // const selectedDocuments = useSelector((state: RootState) => state.selectedDocuments.selectedDocuments) // const { selectedDocuments, signType } = useSelector((state: RootState) => state.selectedDocuments) const selectedDocuments = useSelector((state: RootState) => state.documents.documents) const selectedRecipients = useSelector((state: RootState) => state.selectedRecipients.recipients) useEffect(() => { selectedRecipients.length === 0 && dispatch(fetchRecipients({ accountId, transactionId })); selectedDocuments.length === 0 && dispatch(fetchDocuments({ accountId, transactionId })); }, []) // const signingOrder = useSelector((state: RootState) => state.selectedRecipients.signingOrder) // const user = useSelector((state: RootState) => state.user) const [emailDtls, setEmailDtls] = useState({ subject: "Documents for Signature", message: "" }); useEffect(() => { dispatch(hideLoader()); }, []) const handleNextClick = async (isSendNow: boolean) => { let formError = { documents: false, recipients: false, subject: false } if (!selectedDocuments.length) { formError.documents = true } if (!selectedRecipients.length) { formError.recipients = true } if (!emailDtls.subject.length) { formError.subject = true } if (formError.documents || formError.recipients || formError.subject) { console.log(selectedDocuments, 'line 193') toast.dismiss(); toast.error(`${formError.documents ? "Add Document" : ""} ${(formError.documents && formError.recipients) ? " | " : ""} ${formError.recipients ? "Add Recipient" : ""} ${(formError.documents || formError.recipients) ? " | " : ""} ${formError.subject ? "Add Subject" : ""}`, { position: "top-center", autoClose: 5000, hideProgressBar: false, closeOnClick: false, pauseOnHover: true, draggable: true, progress: undefined, theme: "light", transition: Bounce, }); return; } try { dispatch(showLoader("Processing Documents...")); const documentsData = selectedDocuments.map((doc, index) => ({ name: doc.name, documentId: doc.id, order: index, })); await api.patch(`/api/accounts/${accountId}/transactions/${transactionId}/documents`, { "documents": documentsData }); await api.get(`/api/accounts/${accountId}/transactions/${transactionId}/documents?include_images=true`).then(res => { if (res.status === 200) { dispatch(setDocuments(res.data)); } }).catch((err) => { console.error(err) }); dispatch(showLoader("Processing Recipients...")); const recipientsData = selectedRecipients.map((recipient, index) => ({ // index, routingOrder: "routingOrder" in recipient && recipient.routingOrder ? recipient.routingOrder : 1, type: recipient.type, firstName: recipient.firstName, lastName: recipient.lastName, authType: "NONE", deliveryMethod: "EMAIL", email: recipient.email, hostName: recipient.hostName, hostEmail: recipient.hostEmail, company: "", title: "", website: "", phone: "", accessCode: "", accessCodeDelivery: true, language: "en", name: `${recipient.firstName} ${recipient.lastName}` })); dispatch(addRecipientAsync({ recipientsData, accountId, transactionId })); dispatch(showLoader("Processing Message...")); await api.put(`/api/accounts/${accountId}/transactions/${transactionId}`, { subject: emailDtls.subject, message: emailDtls.message, status: "CREATED" }).then((res) => { console.log(res); }) dispatch(hideLoader()); if (isSendNow) { dispatch(updateTransactionStatus(TRANSACTION_STATUS_ENUMS.TRANSACTION_SEND_SUCCESS)); setTimeout(() => { // navigate("/"); }, 1000); } else { setTimeout(() => { dispatch(resetDocuments()) dispatch(resetRecipients()) dispatch(hideLoader()); navigate(`/process-step-two/${accountId}/${transactionId}`); }, 1000); } } catch (error) { dispatch(hideLoader()); console.error("Error submitting data step-by-step:", error); toast.error("Something went wrong. Please try again.", { position: "top-center", autoClose: 5000, theme: "light", transition: Bounce, }); } }; useEffect(() => { dispatch(updateTransactionStatus(TRANSACTION_STATUS_ENUMS.TRANSACTION_INITIATED)) }, []) const handleClose = () => { dispatch(resetDocuments()) navigate('/') } const globalLoader = useSelector((state: RootState) => state.loader) return ( <>
{/* Top Navigation */}

Add Recipient and Message

{/* Main Content */}
{/* Documents */}

Documents

{/* Recipients */}

Signers

{/* {signType !== "self-sign" && } */}
{/* Email */}

Email

{/* Subject */}
setEmailDtls({ ...emailDtls, subject: e.target.value })} placeholder="Email Subject" className="w-full px-3 py-2 rounded border border-gray-300 focus:outline-none focus:ring-2 focus:ring-[var(--primary)]" />
{/* Message */}