Untitled
unknown
plain_text
2 years ago
20 kB
7
Indexable
import classes from './LastStep.module.scss'; import dynamic from 'next/dynamic'; import LastStepButton from '../../atoms/LastStepButton/LastStepButton'; import ImageLoader from '../../../../../common/components/atoms/ImageLoader/ImageLoader'; import { useRouter } from 'next/router'; import Donation from '../../../../Payment/components/organisms/Donation/Donation'; import { createPDFReport } from '../../../services/pdfService'; import { useEffect, useState, useRef, createRef } from 'react'; import Modal from '../../../../../common/components/atoms/Modal/Modal'; import EmailPopup from '../../atoms/LastStep/EmailPopup/EmailPopup'; import { getPaymentContent } from '../../../../Payment/services/paymentLangService'; import { getMultilanguageContent } from '../../../../../common/services/content/multilanguageContent'; import { useSelector, useDispatch } from 'react-redux'; import useWindowDimensions from '../../../../../common/services/useWindowDimensions.js'; import classNames from 'classnames/bind'; import { getDashboardTabContent, getDashboardAssets, } from '../../../services/dashboardContentService'; import { setGridForSliders, setPdfDownloadedOrAdvisorClicked, } from '../../../../../redux/reducers/chartsDashboardSlice'; import { setLocalStorageValues } from '../../../services/dashboardLocalStorageHendler'; import { REACHED_DASHBOARD } from '../../../helpers/localStorageKeyNames'; import moment from 'moment'; import Spinner from '../../../../../common/components/atoms/Spinner/Spinner'; import { useScreenshot } from 'use-react-screenshot'; import { savePDFToFBStorage, savePDFToFBStorageForMail, } from '../../../services/pdfService'; import { sendEmailWith } from '../../../services/mailing'; import { uuidv4 } from '../../../../../common/services/guid'; import { Suspense } from 'react'; import { GENERAL_GOAL } from '../../../helpers/localStorageKeyNames'; import { getLocalStorageValue } from '../../../services/dashboardLocalStorageHendler'; import { pdfContentService } from '../../../services/pdfContentService'; import { getCommonSiteElements } from '../../../services/commonSiteElementsService'; import { handleSnackbar } from '../../../../../redux/reducers/commonSlice'; const PDF = dynamic(() => import('../../atoms/GeneratePDF/PDFBranchABC'), { suspense: true, }); const DONATION_FEATURE_ID = '4skfjWgdHqu1ggGYztBJ'; const LAST_STEP_DOCUMENT_ID = 'TOc8C1VlUVZB70Cih9o2'; const FIRESTORE_BASE_URL = process.env.FIRESTORE_BASE_URL; const LastStep = ({ dashboardGoalOutput, dashboardPortfolioOutput, contentsCommon, investmentProposalTableData, openCashPart, showLastStep, setShowLastStep, }) => { const { isOptimalSolution, pdfDownloadedOrAdvisorClicked } = useSelector( (state) => state.chartsDashboard ); const { width } = useWindowDimensions(); const router = useRouter(); const dispatch = useDispatch(); const [showModal, setShowModal] = useState(false); const [paymentPageContent, setPaymentPageContent] = useState(''); const [pageContent, setPageContent] = useState([]); const [iconAssets, setIconAssets] = useState([]); const [imageAssets, setImageAssets] = useState([]); const { locale } = useRouter(); const [generatedPDFdate, setGeneratedPDFdate] = useState(); const [isLoading, setIsLoading] = useState(false); const [changingWidth, setChangingWidth] = useState(false); const [pdfContent, setPdfContent] = useState(''); const [isLastStepBlured, setIsLastStepBlured] = useState(false); const [siteElements, setSiteElements] = useState([]); const [refInfoData, setRefInfoData] = useState({ emailLinkPage1Top: 0, emailLinkPage1Left: 0, emailLinkPage1Height: 0, emailLinkPage1Width: 0, linkPage1Top: 0, linkPage1Left: 0, linkPage1Height: 0, linkPage1Width: 0, mainLinkPage1Top: 0, mainLinkPage1Left: 0, mainLinkPage1Height: 0, mainLinkPage1Width: 0, feedbackLinkPage2Top: 0, feedbackLinkPage2Left: 0, feedbackLinkPage2Height: 0, feedbackLinkPage2Width: 0, feedbackEmailPage2Top: 0, feedbackEmailPage2Left: 0, feedbackEmailPage2Height: 0, feedbackEmailPage2Width: 0, userEmailTop: 0, userEmailLeft: 0, userEmailHeight: 0, userEmailWidth: 0, }); useEffect(async () => { setPaymentPageContent(await getPaymentContent(DONATION_FEATURE_ID)); setPageContent(await getDashboardTabContent(false, LAST_STEP_DOCUMENT_ID)); const dashboardAssets = await getDashboardAssets(); setIconAssets(dashboardAssets.iconAssets); setImageAssets(dashboardAssets.imageAssets); setPdfContent(await pdfContentService()); setSiteElements(await getCommonSiteElements()); }, []); let investmentProcessesID = ''; let email = ''; let user = ''; let pdfContents = getMultilanguageContent(locale, pdfContent); if (typeof window !== 'undefined') { investmentProcessesID = JSON.parse( window.localStorage.getItem('investmentProcessId') ); email = JSON?.parse( window?.localStorage?.getItem('investmentPortfolioModalInput') )?.email; user = JSON?.parse( window?.localStorage?.getItem('investmentPortfolioModalInput') )?.name; } useEffect(() => () => dispatch(setGridForSliders(0)), []); let content = getMultilanguageContent(locale, pageContent); let paymentContents = getMultilanguageContent(locale, paymentPageContent); let contentForSignature = content?.signature; const [toggleSidebar, setToggleSidebar] = useState(true); const handleExitDashboardClick = () => { router.push('/leave'); setLocalStorageValues({ [REACHED_DASHBOARD]: false }); }; let cx = classNames.bind(classes); const ref = createRef(null); // const [image, takeScreenshot] = useScreenshot({ // type: 'image/jpeg', // quality: 0.01, // }); // const getImageForBackground = () => takeScreenshot(ref.current); let widthOfPage; const changeViewport = () => { if (changingWidth === true) { widthOfPage = '1236px'; } else if (changingWidth === false) { widthOfPage = '100%'; } return widthOfPage; }; const idFromTable = 'my-table'; const idFromTable2 = 'my-table2'; const idFromTable3 = 'my-table3'; const input = window.document.getElementById('divToPrint'); const getStartingCapital = () => { let startingCapital; if (dashboardGoalOutput?.barometer?.initial?.units == 'Hundreds') { startingCapital = dashboardGoalOutput?.barometer?.initial?.initialCapital; } else if (dashboardGoalOutput?.barometer?.initial.units == 'Thousands') { startingCapital = dashboardGoalOutput?.barometer.initial?.initialCapital * 1000; } else if (dashboardGoalOutput?.barometer?.initial?.units == 'Millions') { startingCapital = dashboardGoalOutput?.barometer?.initial?.initialCapital * 1000000; } return startingCapital; }; let startingCapital = getStartingCapital(); let timeT = ''; let time1 = ''; let time2 = ''; let generalGoal = ''; if (typeof window !== 'undefined') { time1 = JSON.parse(window.localStorage.getItem('time1')); time2 = JSON.parse(window.localStorage.getItem('time2')); timeT = JSON.parse(localStorage.getItem('timeT')); generalGoal = getLocalStorageValue(GENERAL_GOAL); } let time = generalGoal === 'B120' || generalGoal === 'B220' || generalGoal === 'B320' || generalGoal === 'B420' ? timeT - new Date().getFullYear() : generalGoal === 'C110' || generalGoal === 'C120' ? time1 : generalGoal === 'C210' || generalGoal === 'C220' ? dashboardGoalOutput?.trajectories?.initial?.trajectories?.better ?.length - 1 : timeT; const getInvestmentProductIdArray = () => { let investableProducts = []; siteElements?.investableProducts?.map((item) => { investableProducts?.push(item.id); }); return investableProducts; }; let investmentProductIdArray = getInvestmentProductIdArray(); const handlePdfDownloadClick = async () => { // await getImageForBackground(); setIsLastStepBlured(true); setIsLoading(true); setGeneratedPDFdate(moment().format()); setChangingWidth(true); await handleSendPDF(true); // await createPDFReport( // true, // input, // width, // openCashPart, // startingCapital, // time, // pdfContents, // idFromTable, // idFromTable2, // idFromTable3, // siteElements, // investmentProductIdArray, // locale, // refInfoData, // email // ); setChangingWidth(false); setIsLastStepBlured(false); setIsLoading(false); dispatch(setPdfDownloadedOrAdvisorClicked(true)); await savePDFToFBStorage( false, investmentProcessesID, 'QIO GBI Report', input, width, openCashPart, startingCapital, time, pdfContents, idFromTable, idFromTable2, idFromTable3, siteElements, investmentProductIdArray, locale, refInfoData, email ); }; const handleSendPDF = async (sendReport) => { let pdfName; let guid = uuidv4(); pdfName = investmentProcessesID + '/' + guid; if (sendReport) { await savePDFToFBStorageForMail( true, investmentProcessesID, guid, input, width, openCashPart, startingCapital, time, pdfContents, idFromTable, idFromTable2, idFromTable3, siteElements, investmentProductIdArray, locale, refInfoData, email ); } sendEmailWith( content?.messageForEmailAfterDonwload.replaceAll('\\n', '\n'), content?.subjectForEmailAfterDonwload, email, pdfName, sendReport, contentForSignature ); triggerSuccessfulSentEmail(); }; function triggerSuccessfulSentEmail() { dispatch( handleSnackbar({ show: true, indicator: 'success', title: content?.snackbarMessage?.title, message: content?.snackbarMessage?.message, }) ); // setTimeout(() => { // dispatch( // handleSnackbar({ // show: false, // }) // ); // }, 5000); } return ( <> <div className={classes.wrapper} ref={ref} style={{ width: `${changeViewport()}` }} > {isLoading && isLastStepBlured && ( <> <div className={classes.spinerWrapper} // style={{ // backgroundImage: `url(${image})`, // }} ></div> <div className={classes.spinner}> <Spinner spinnerStyle={'blue'} /> <h1>{content?.generatingPDF}</h1> </div> </> )} <div className={cx({ sidebar: true, hide: toggleSidebar, })} > <div className={classes.sidebarTitle}> <p>{content?.sidebarTitle}</p> </div> <div className={classes.sidebarParagraph}> <p> {content?.sidebarParagraph?.firstPart} <span>{content?.sidebarParagraph?.linkName}</span>.{' '} {content?.sidebarParagraph?.secondPart} </p> </div> <div className={classes.donationForm}> <Donation contents={paymentContents} setToggleSidebar={setToggleSidebar} /> </div> </div> <div className={cx({ mainSection: true, hide: !toggleSidebar, })} > {iconAssets?.downloadButtonBlue != undefined && ( <div className={classes.buttonDownloadPdf}> <LastStepButton buttonText={content?.downloadButton} imgWhite={iconAssets.downloadButtonWhite} imgBlue={iconAssets?.downloadButtonBlue} iconWidth={56} iconHeight={35} handleOnClick={handlePdfDownloadClick} /> </div> )} {iconAssets?.sendAdvisorButtonBlue != undefined && ( <div className={classes.buttonSendAdvisor}> <LastStepButton buttonText={content?.sendAdvisorButton} imgWhite={iconAssets?.sendAdvisorButtonWhite} imgBlue={iconAssets?.sendAdvisorButtonBlue} handleOnClick={() => { setShowModal(true); }} /> </div> )} {iconAssets?.exitDashboardButtonBlue != undefined && ( <div className={classes.buttonExitDashboard}> <LastStepButton buttonText={content?.exitDashboardButton} imgWhite={iconAssets?.exitDashboardButtonWhite} imgBlue={iconAssets?.exitDashboardButtonBlue} handleOnClick={handleExitDashboardClick} isExitButton={pdfDownloadedOrAdvisorClicked} isLastStepBlured={isLastStepBlured} /> </div> )} <div className={classes.tabTitle}> <h1>{content?.title}</h1> </div> <div className={classes.tabSubtitle}> <p>{content?.subtitle}</p> </div> <div className={classes.brokerageAccountSerialNumber}> <p>1.</p> </div> <div className={classes.brokerageAccountTitle}> <p>{content?.brokerageAccountTitle}</p> </div> <div className={classes.brokerageAccountSubtitle}> <p> {content?.brokerageAccountSubtitle?.firstPart} <a href={content?.brokerageAccountSubtitle?.link} target="_blank" rel="noreferrer noopener" > {content?.brokerageAccountSubtitle?.linkName} </a> {content?.brokerageAccountSubtitle?.secondPart} </p> </div> <div className={classes.brokerageAccountImage}> <img alt={'brockerage account'} name={'brockerage acoount'} width={218} height={211} src={imageAssets?.brockerageAccount} /> </div> {/* <div className={classes.banksImage}> <ImageLoader name={'banks'} width={431} height={52} src={imageAssets?.banksImage} /> </div> */} <div className={classes.sectionsGap}></div> <div className={classes.yourGoalAssetsSerialNumber}> <p>2.</p> </div> <div className={classes.yourGoalAssetsTitle}> <p>{content?.yourGoalAssetsTitle}</p> </div> <div className={classes.yourGoalAssetsSubtitle}> <p>{content?.yourGoalAssetsSubtitle}</p> <div className={classes.yourGoalAssetsSubtitleSecondParagraph}> <p> {content?.yourGoalAssetsParagraph?.firstPart} <a href={content?.yourGoalAssetsParagraph?.link} target="_blank" rel="noreferrer noopener" > {content?.yourGoalAssetsParagraph?.linkName} </a> . </p> </div> </div> <div className={classes.yourGoalAssetsImage}> <img alt={' your Goal Assets'} name={' your Goal Assets'} width={240} height={195} src={imageAssets?.yourGoalAssetsImage} /> </div> <div className={classes.sectionsGap2}></div> <div className={classes.monitorGoalAndStrategySerialNumber}> <p>3.</p> </div> <div className={classes.monitorGoalAndStrategyTitle}> <p>{content?.monitorGoalAndStrategyTitle}</p> </div> <div className={classes.monitorGoalAndStrategySubtitle}> <p> {content?.monitorGoalAndStrategySubtitle?.firstPart} <a href={content?.monitorGoalAndStrategySubtitle?.link} target="_blank" rel="noreferrer noopener" > {content?.monitorGoalAndStrategySubtitle?.linkName} </a> . </p> </div> <div className={classes.monitorGoalAndStrategyImage}> <img alt={'monitor Goal And Strategy'} name={'monitor Goal And Strategy'} width={233} height={168} src={imageAssets?.monitorGoalAndStrategyImage} /> </div> <div className={classes.bottomMessage}> <p>{content?.bottomMessage}</p> </div> </div> <Modal title={content?.sendAdvisorModal?.title} show={showModal} onClose={() => setShowModal(false)} modalStyle={{ height: '550px' }} > <EmailPopup setShowModal={setShowModal} bodyText={content?.sendAdvisorModal?.emailBody .replaceAll('\\n', '\n') .replace('{GOAL}', contentsCommon?.legacyCode?.title) .replace('{USER}', user)} sendReport={true} emailPopupContent={content?.emailPopup} input={input} contentsCommon={contentsCommon} width={width} openCashPart={openCashPart} startingCapital={startingCapital} time={time} pdfContents={pdfContents} idFromTable={idFromTable} idFromTable2={idFromTable2} idFromTable3={idFromTable3} siteElements={siteElements} investmentProductIdArray={investmentProductIdArray} locale={locale} refInfoData={refInfoData} emailUser={email} contentForSignature={contentForSignature} /> </Modal> {/* If we go with preview in project uncomment this section */} {/* <h1>Preview export PDF</h1> <div id="exportCanvas"> <PDFPreview className={classes.buttonGrid} /> </div> */} <div className={classes.donationBackground}> <div onClick={() => setToggleSidebar(!toggleSidebar)} className={cx({ donationButton: toggleSidebar, hide: !toggleSidebar, })} > <div className={classes.upArrowSign}> <ImageLoader alt={'expand donation'} name={'expand donation'} width={12} height={7} src={iconAssets?.upArrowSign} /> </div> <p>{content?.donate}</p> </div> <div onClick={() => setToggleSidebar(!toggleSidebar)} className={cx({ donationButtonClose: !toggleSidebar, hideSidebar: toggleSidebar, })} > <div className={classes.closeSign}> <ImageLoader alt={'close'} name={'close'} width={21} height={21} src={iconAssets?.closeSign} /> </div> </div> </div> {dashboardPortfolioOutput != null && ( <div className={classes.pdf} id="divToPrint"> <Suspense fallback={`Loading...`}> <PDF dashboardPortfolioOutput={dashboardPortfolioOutput} dashboardGoalOutput={dashboardGoalOutput} contentsCommon={contentsCommon} generatedPDFdate={generatedPDFdate} investmentProposalTableData={investmentProposalTableData} openCashPart={openCashPart} idFromTable={idFromTable} idFromTable2={idFromTable2} idFromTable3={idFromTable3} refInfoData={refInfoData} setRefInfoData={setRefInfoData} showLastStep={showLastStep} /> </Suspense> </div> )} </div> </> ); }; export default LastStep;
Editor is loading...