Newer
Older
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>
}
open,
showForm,
handleCloseClick,
setShowForm,
goToPartnerSite,
handleSuccess,
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]: {
leftButton: (
<Button
onClick={handleGiveConsentPrevious}
classes={{
root: 'btn-profile-back',
label: 'text-16-bold',
}}
>
{`< ${t('auth.button_previous')}`}
</Button>
),
rightButton: <GrdfFormOAuth onSuccess={handleSuccess} />,
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
},
}
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