import { Button, Dialog, IconButton } from '@material-ui/core' import CloseIcon from 'assets/icons/ico/close.svg' import StyledIcon from 'components/CommonKit/Icon/StyledIcon' import GrdfFormOAuth from 'components/Connection/PartnerConnectModal/Steps/GrdfFormOAuth' import { useI18n } from 'cozy-ui/transpiled/react/I18n' import React, { useEffect, useState } from 'react' import './PartnerConnectModal.scss' import { StepContent } from './StepContent.interface' import GrdfCreateAccount from './Steps/GrdfCreateAccount' import GrdfDoYouHaveAccount from './Steps/GrdfDoYouHaveAccount' import GrdfGiveConsent from './Steps/GrdfGiveConsent' enum StepEnum { DoYouHaveAccount, CreateAccount, GiveConsent, } interface GrdfConnectModalProps { open: boolean showForm: boolean handleCloseClick: () => void setShowForm: (value: boolean) => void goToPartnerSite: () => void handleSuccess: (accountId: string) => Promise<void> } const GrdfConnectModal = ({ open, showForm, handleCloseClick, setShowForm, goToPartnerSite, handleSuccess, }: GrdfConnectModalProps) => { const { t } = useI18n() const [currentStep, setCurrentStep] = useState(StepEnum.DoYouHaveAccount) useEffect(() => { if (open) { showForm ? setCurrentStep(StepEnum.GiveConsent) : setCurrentStep(StepEnum.DoYouHaveAccount) } }, [showForm, open]) const handleGoToPartnerSite = () => { goToPartnerSite() setShowForm(true) handleCloseClick() } const handleGiveConsentPrevious = () => { showForm ? handleCloseClick() : setCurrentStep(StepEnum.DoYouHaveAccount) } const steps: Record<StepEnum, StepContent> = { [StepEnum.DoYouHaveAccount]: { content: <GrdfDoYouHaveAccount />, leftButton: ( <Button onClick={() => setCurrentStep(StepEnum.CreateAccount)} classes={{ root: 'btn-profile-back', label: 'text-16-bold', }} > {t('auth.button_create_account')} </Button> ), rightButton: ( <Button onClick={() => setCurrentStep(StepEnum.GiveConsent)} classes={{ root: 'btn-profile-next', label: 'text-16-bold', }} > {t('auth.button_has_account')} </Button> ), }, [StepEnum.CreateAccount]: { content: <GrdfCreateAccount />, leftButton: ( <Button onClick={() => setCurrentStep(StepEnum.DoYouHaveAccount)} classes={{ root: 'btn-profile-back', label: 'text-16-bold', }} > {`< ${t('auth.button_previous')}`} </Button> ), rightButton: ( <Button onClick={handleGoToPartnerSite} classes={{ root: 'btn-profile-next', label: 'text-16-bold', }} > {t('auth.grdfgrandlyon.button_go_to_partner_site')} </Button> ), }, [StepEnum.GiveConsent]: { content: <GrdfGiveConsent />, leftButton: ( <Button onClick={handleGiveConsentPrevious} classes={{ root: 'btn-profile-back', label: 'text-16-bold', }} > {`< ${t('auth.button_previous')}`} </Button> ), rightButton: <GrdfFormOAuth onSuccess={handleSuccess} />, }, } return ( <Dialog open={open} onClose={handleCloseClick} classes={{ root: 'modal-root', paper: 'modal-paper', }} > <IconButton aria-label={t('auth.accessibility.button_close')} className="modal-paper-close-button" onClick={handleCloseClick} > <StyledIcon icon={CloseIcon} size={16} /> </IconButton> <div className="partners-connection-step-content"> {steps[currentStep].content} </div> <div className="partners-connection-step-navigation"> {steps[currentStep].leftButton} {steps[currentStep].rightButton} </div> </Dialog> ) } export default GrdfConnectModal