import React, { useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { RootState } from '../../../store/store' import { FaAngleRight, FaCheck, FaChevronRight, FaPaste, FaRegCopy, FaSave, FaSignature } from 'react-icons/fa' import { IoIosDocument, IoMdArrowRoundBack, IoMdHome } from 'react-icons/io' import { LuRedo2, LuTableOfContents, LuUndo2 } from 'react-icons/lu' import { MdKeyboardArrowDown, MdOutlineKeyboardBackspace } from 'react-icons/md' import { RiResetRightLine } from 'react-icons/ri' import { fetchRecipients, recipientType, toggleToTemplates, TRANSACTION_TEMPLATE_TOGGLE } from '../../../store/slices/selectedRecipientsSlice' import { fetchDocuments } from '../../../store/slices/documentSlice' import { Link, useNavigate, useParams } from 'react-router-dom' import { Bounce, toast } from 'react-toastify' import { FiChevronDown } from 'react-icons/fi' import RecipientsCon from '../processStepOne/RecipientsCon' import MessageCon from '../processStepOne/MessageCon' import { IoArrowBackSharp, IoCopy } from 'react-icons/io5' import { FaRegPaste } from 'react-icons/fa6' import ConfirmSendModal from './TransactionSendConfirmationModal' import { RxDividerVertical } from 'react-icons/rx' import CloseConfirmationModal from './CloseCofirmationModal' interface NavTwoProps { transactionSaving?: boolean; // setTransactionSaving: React.Dispatch> isFields?: boolean; setIsFields?: React.Dispatch> isPages?: boolean; setIsPages?: React.Dispatch> isSend?: boolean | null; setIsSend?: React.Dispatch> isPreview?: boolean aId?: string | null tId?: string | null onSendClick?: (isSave?: boolean, navigate?: boolean, navigateTo?: string) => void; } interface FIT { label: string, value: number | null } const fitObj = [ { label: "Fit", value: "FIT" }, { label: "50%", value: "50" }, { label: "150%", value: "150" }, { label: "200%", value: "200" }, ] const NavTwo: React.FC = ({ transactionSaving = false, isFields, setIsFields, isPages, setIsPages, isSend, setIsSend, isPreview = false, aId = null, tId = null, onSendClick, }) => { let transactionTemplateToggle = TRANSACTION_TEMPLATE_TOGGLE.TRANSACTIONS; const dispatch = useDispatch(); const [showActionsDropDown, setShowActionsDropDown] = useState(false); const [editRecipientsModal, setEditRecipientsModal] = useState(false); const [messageModal, setMessageModal] = useState(false); const [confirmSendModalOpen, setConfirmSendModalOpen] = useState({ "open": false, "confirm": false, "loading": false }); console.log(editRecipientsModal) const params = useParams<{ accountId?: string; transactionId?: string; templateId?: string }>(); let accountId = params.accountId; let transactionId = params.transactionId if (!transactionId) { transactionTemplateToggle = TRANSACTION_TEMPLATE_TOGGLE.TEMPLATES; transactionId = params.templateId; dispatch(toggleToTemplates()); } if (!accountId || !transactionId) { window.location.href = "/"; return null; } // If is preview is enable if (isPreview && aId != null && tId != null) { accountId = aId; transactionId = tId; } // const [transactionSaving, setTransactionSaving] = useState(false); const [dotCount, setDotCount] = useState(0); const [closePage, setClosePage] = useState(false); const [isFitDd, setIsFitDd] = useState(false) const [selFitIndx, setSelFitIndx] = useState(0); const [selfUserSign, setSelfUserSign] = useState({ sign: false, recipientId: 0 }); const navigate = useNavigate() const selectedRecipients = useSelector((state: RootState) => state.selectedRecipients.recipients) const selectedDocuments = useSelector((state: RootState) => state.documents.documents) const userDetails = useSelector((state: RootState) => state.user); useEffect(() => { if (selectedRecipients.length || selectedDocuments.length) return; (async () => { selectedRecipients.length == 0 && await dispatch(fetchRecipients({ accountId, transactionId })); selectedDocuments.length == 0 && await dispatch(fetchDocuments({ accountId, transactionId })); })() }, []) useEffect(() => { if (selectedRecipients.length > 0) { let minRoutingOrder: number = Infinity; let userEmailPresent = { present: false, routingOrder: 0, recipientId: 0, type: recipientType.CC }; // Getting Minimum RoutingOrder for (let i = 0; i < selectedRecipients.length; i++) { const recipient = selectedRecipients[i] if (recipient.routingOrder < minRoutingOrder) { minRoutingOrder = recipient.routingOrder; } if (recipient.email == userDetails.email) { userEmailPresent.present = true; userEmailPresent.routingOrder = recipient.routingOrder; userEmailPresent.recipientId = recipient.id; userEmailPresent.type = recipient.type; } } if (userEmailPresent.present && userEmailPresent.routingOrder == minRoutingOrder && userEmailPresent.type != recipientType.CC && userEmailPresent.type != recipientType.INPERSONSIGNER) { setSelfUserSign({ sign: true, recipientId: userEmailPresent.recipientId }) } } }, [selectedRecipients]) const [nav2RecToggle, setNav2RecToggle] = useState(false); const [nav2DocToggle, setNav2DocToggle] = useState(false); const transactionSendValidation = () => { const transactionSendValidationObj = { oneSignerIsRequiredError: true } // One Signer is required - Validation for (const recipient of selectedRecipients) { if (recipient.type == recipientType.SIGNER || recipient.type == recipientType.INPERSONSIGNER) { transactionSendValidationObj.oneSignerIsRequiredError = false; break }; } if (!transactionSendValidationObj.oneSignerIsRequiredError) return false; return transactionSendValidationObj; } function handleSend(isSignSend: boolean = false) { // dispatch(showLoader("Loading ...")); if (onSendClick === undefined) return; const transactionSendValidationObj = transactionSendValidation() if (transactionSendValidationObj.oneSignerIsRequiredError) { return } // if (isSend == null) { // setIsSend(false); // } // setIsSend(!isSend); // setTimeout(() => { setConfirmSendModalOpen({ open: false, confirm: false, loading: false }) if (transactionTemplateToggle == TRANSACTION_TEMPLATE_TOGGLE.TRANSACTIONS) { if (isSignSend) { // SELF SIGN CHECK HERE window.open(`./../../../sign/${selfUserSign.recipientId}`, "_self"); } else { onSendClick(false); // false for not a save action } } else { onSendClick(true, true, "/templates"); // true for save action } // }, 1000) } useEffect(() => { if (confirmSendModalOpen.confirm) handleSend() }, [confirmSendModalOpen]) const zoom = (percentage: number, contentClass: string) => { const content = document.querySelector(`.${contentClass}`); if (content) { (content as HTMLElement).style.zoom = `${percentage}%`; } } useEffect(() => { let indx = fitObj[selFitIndx].value if (indx == "FIT") { indx = "100"; } zoom(Number(indx), 'zoom-con') }, [selFitIndx]) useEffect(() => { if (!transactionSaving) return; const interval = setInterval(() => { setDotCount((prev) => (prev + 1) % 4); // Cycle through 0, 1, 2, 3 }, 500); // Update every 0.5s return () => clearInterval(interval); }, [transactionSaving]); const dots = '. '.repeat(dotCount); return ( <> {closePage && setClosePage(false)} // Cancel not closing onConfirm={() => navigate("/")} />} { setConfirmSendModalOpen({ open: false, confirm: false, loading: false }) }} confirmSendModalOnConfirm={() => { setConfirmSendModalOpen({ open: true, confirm: true, loading: true }) }} confirmSendModalLoading={confirmSendModalOpen.loading} documents={selectedDocuments} recipients={selectedRecipients} /> {/* Nav Two - Oprions - START */}
{/* Left Side */}
{/*
Sign Made Easy
*/}

Add Fields

setIsFitDd(false)} className='absolute gap-2 flex items-center left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] z-50' >

setIsFitDd(!isFitDd)} className='hidden sm:flex md:flex items-center gap-1 cursor-pointer text-xs px-2 py-1 rounded-sm' >

{fitObj[selFitIndx]?.label}

{isFitDd &&
{fitObj.map((val, indx) => { return (
setSelFitIndx(indx)} className='flex z-50 items-center justify-between gap-2 w-[70px] p-2 text-xs cursor-default hover:bg-slate-100'>

{val.label}

{selFitIndx == indx && }
) }) }
}
{/* {!isPreview &&

{transactionSaving ? `Saving ${dots}` : "Save"}

} */}
{/* Right Side - STARTS */}
{/* Trigger */} {/* Menu */} {showActionsDropDown &&
{/* */} {/* */}
}
{/* Document Nav */}
setNav2DocToggle(false)}>
setNav2DocToggle(!nav2DocToggle)} className='flex items-center gap-1 cursor-pointer text-xs px-2 py-1 rounded-sm'>

{selectedDocuments.length} Documents

{selectedDocuments.length && selectedDocuments.map((document, indx) => { return (
{/*

*/}

{document.name}

) })}
{/* Recipients Nav */}
setNav2RecToggle(false)}>
setNav2RecToggle(!nav2RecToggle)} className='flex items-center gap-1 cursor-pointer text-xs px-2 py-1 rounded-sm'>

{selectedRecipients.length} Recipients

{selectedRecipients.length && selectedRecipients.map((recipient, indx) => { return (

{recipient.type + " | "} {recipient.firstName} {recipient.lastName}

) })}
{/* Send */} {!isPreview && <>
setConfirmSendModalOpen({ open: true, confirm: false, loading: false })} className='flex items-center gap-2 cursor-pointer text-xs px-4 py-2 ml-3 rounded-sm bg-[var(--primary)]'>

{transactionTemplateToggle == TRANSACTION_TEMPLATE_TOGGLE.TEMPLATES ? "Save" : "Send"}

{/* {transactionTemplateToggle != TRANSACTION_TEMPLATE_TOGGLE.TEMPLATES && selfUserSign.sign &&
handleSend(selfUserSign.sign)} className='flex items-center gap-2 cursor-pointer text-xs px-4 py-2 ml-3 rounded-sm bg-[var(--primary)]'>

Sign & Send

} */} } {editRecipientsModal && accountId && transactionId && <>
{/*
*/}
} {messageModal && accountId && transactionId && <>
{/*
*/}
}
{/* Right Side - ENDS */}
{/* Nav Two - Oprions - End */} ) } export default NavTwo