// Dashboard.jsx - Updated version import React, { useEffect, useLayoutEffect } from 'react' import SideBar from './SideBar' import { Outlet, useNavigate } from 'react-router-dom' import { useDispatch, useSelector } from 'react-redux' import { RootState } from '../../store/store' import { UserState } from '../../store/slices/userSlice' import Loader from './Loader' import { clearTransaction, TRANSACTION_STATUS_ENUMS } from '../../store/slices/transactionSlice' import { resetSelDoc } from '../../store/slices/selectedDocsSlice' import { resetSelRecipient } from '../../store/slices/selectedRecipientsSlice' import { hideLoader, showLoader } from '../../store/slices/loaderSlice' import SignModal from '../modal/SignModal' import confetti from 'canvas-confetti' import { FaCheckCircle } from 'react-icons/fa' import { IoClose } from 'react-icons/io5' import CommonNav from '../CommonNav' function Dashboard() { const [showSideBar, setShowSideBar] = React.useState(true) const [showConfetti, setShowConfetti] = React.useState(false) const [isMobile, setIsMobile] = React.useState(false) const navigate = useNavigate(); const dispatch = useDispatch(); const user: UserState = useSelector((state: RootState) => state.user); const globalLoader = useSelector((state: RootState) => state.loader) const globalModalIsOpen = useSelector((state: RootState) => state.modal.isOpen) const selectedDocuments = useSelector((state: RootState) => state.selectedDocuments) const documentSignType = useSelector((state: RootState) => state.selectedDocuments.signType) const transactionStatus = useSelector((state: RootState) => state.transaction.status) // Check if cookie already exists - Redirect to Dashboard useLayoutEffect(() => { if (transactionStatus === TRANSACTION_STATUS_ENUMS.TRANSACTION_SEND_SUCCESS || transactionStatus === TRANSACTION_STATUS_ENUMS.TRANSACTION_INITIATED || transactionStatus === TRANSACTION_STATUS_ENUMS.TRANSACTION_SEND_FAILURE) { dispatch(resetSelDoc()) dispatch(resetSelRecipient()) dispatch(clearTransaction()) if (transactionStatus === TRANSACTION_STATUS_ENUMS.TRANSACTION_SEND_SUCCESS) { setShowConfetti(true) } return } }, []) useEffect(() => { if (transactionStatus === TRANSACTION_STATUS_ENUMS.TRANSACTION_SEND_SUCCESS || transactionStatus === TRANSACTION_STATUS_ENUMS.TRANSACTION_INITIATED) return; if (selectedDocuments === null || (Array.isArray(selectedDocuments) && !selectedDocuments.length)) { dispatch(resetSelDoc()) } dispatch(showLoader("Loading ...")); if (documentSignType && transactionStatus === TRANSACTION_STATUS_ENUMS.TRANSACTION_NOT_INITIATED) { if (documentSignType === 'self-sign') { setTimeout(() => { navigate('/process-step-one'); }, 1000) return } else if (documentSignType === 'multiple-sign') { setTimeout(() => { navigate('/process-step-one'); }, 1000) return } } dispatch(hideLoader()); }, [documentSignType]) useEffect(() => { if (showConfetti) { const duration = 3000; const end = Date.now() + duration; const interval = setInterval(() => { if (Date.now() > end) { clearInterval(interval); return; } confetti({ particleCount: 80, // more particles angle: Math.random() * 360, // fire in random direction spread: 220, // wider spread startVelocity: 15, // more power scalar: 1.2, // bigger pieces (default is 1) origin: { x: Math.random(), y: Math.random() * 0.6, }, zIndex: 9999, }); }, 350); // fire every 150ms } }, [showConfetti]); useEffect(() => { // Function to handle window resize const handleResize = () => { const mobile = window.innerWidth <= 768; setIsMobile(mobile); if (mobile) { setShowSideBar(false); // hide sidebar on mobile by default } else { setShowSideBar(true); // show sidebar on desktop } }; // Set sidebar visibility on mount handleResize(); // Add event listener window.addEventListener('resize', handleResize); // Cleanup listener on unmount return () => window.removeEventListener('resize', handleResize); }, []); return ( <> <> { showConfetti && (
Your transaction has been created and saved successfully.