Skip to content
Snippets Groups Projects
GrdfConnectModal.tsx 4 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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>
    }
    
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    const GrdfConnectModal = ({
    
      open,
      showForm,
      handleCloseClick,
      setShowForm,
      goToPartnerSite,
      handleSuccess,
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    }: 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