import React, { useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { RootState } from '../../../store/store' import { FaCheck, FaSignature } from 'react-icons/fa' import { IoIosDocument } from 'react-icons/io' import { LuTableOfContents } from 'react-icons/lu' import { MdKeyboardArrowDown } from 'react-icons/md' import { RiResetRightLine } from 'react-icons/ri' import { fetchRecipients, toggleToTemplates, TRANSACTION_TEMPLATE_TOGGLE } from '../../../store/slices/selectedRecipientsSlice' import { fetchDocuments } from '../../../store/slices/documentSlice' import { useNavigate, useParams } from 'react-router-dom' import { Bounce, toast } from 'react-toastify' interface NavTwoProps { transactionSaving: boolean; // setTransactionSaving: React.Dispatch> isFields: boolean; setIsFields: React.Dispatch> isSend: boolean | null; setIsSend: React.Dispatch> } 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, isFields, setIsFields, isSend, setIsSend }) => { let transactionTemplateToggle = TRANSACTION_TEMPLATE_TOGGLE.TRANSACTIONS; const dispatch = useDispatch(); const params = useParams<{ accountId?: string; transactionId?: string; templateId?: string }>(); const 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; } // const [transactionSaving, setTransactionSaving] = useState(false); const [dotCount, setDotCount] = useState(0); 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 }; // 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; } } if (userEmailPresent.present && userEmailPresent.routingOrder === minRoutingOrder) { setSelfUserSign({ sign: true, recipientId: userEmailPresent.recipientId }) } } }, [selectedRecipients]) const [nav2RecToggle, setNav2RecToggle] = useState(false); const [nav2DocToggle, setNav2DocToggle] = useState(false); function handleSend(isSignSend: boolean = false) { // dispatch(showLoader("Loading ...")); if (isSend === null) { setIsSend(false); } setIsSend(!isSend); setTimeout(() => { if (transactionTemplateToggle === TRANSACTION_TEMPLATE_TOGGLE.TRANSACTIONS) { if (isSignSend) { // navigate(`./../../../sign/${selfUserSign.recipientId}`,{ replace: true }); } else { // navigate(`/document-completion-screen/${accountId}/${transactionId}`, { replace: true }) } } else { navigate(`/templates`); toast.success("Template Saved...!", { position: "top-center", autoClose: 1500, hideProgressBar: false, closeOnClick: false, pauseOnHover: true, draggable: true, progress: undefined, theme: "light", transition: Bounce, }); } }, 1000) } const handleSetIsFields = (setTo: boolean) => { if (setTo !== isFields) setIsFields(setTo); } 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(() => { // let timeoutId: number; // const timeOutIn = 8000; // const updateLabel = () => { // if (document.visibilityState === 'visible') { // setTransactionSaving(true); // setTimeout(() => { // setTransactionSaving(false); // }, 4000) // } // timeoutId = setTimeout(updateLabel, timeOutIn); // }; // timeoutId = setTimeout(updateLabel, timeOutIn); // // Cleanup on unmount // return () => clearTimeout(timeoutId); // }, []); 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 ( <> {/* Nav Two - Oprions - START */}
{/* Left Side */}
handleSetIsFields(true)} className={`flex items-center gap-1 cursor-pointer text-xs px-2 py-1 rounded-sm ${isFields ? 'bg-slate-100' : ''}`}>

Fields

handleSetIsFields(false)} className={`flex items-center gap-1 cursor-pointer text-xs px-2 py-1 rounded-sm ${!isFields ? 'bg-slate-100' : ''}`}>

Pages

{/*

Reset

*/} {/*

Fit

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

Fit

{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 && }
) }) }
}

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

{/* Right Side - STARTS */}
{/* Documnt 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.firstName} {recipient.lastName}

) })}
{/* Send */}
handleSend()} 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

}
{/* Right Side - ENDS */}
{/* Nav Two - Oprions - End */} ) } export default NavTwo