import { Button, Checkbox } from '@material-ui/core' import { useClient } from 'cozy-client' import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' import React, { useCallback, useState } from 'react' import { useNavigate } from 'react-router-dom' import TermsService from 'services/terms.service' import { updateTermsStatus } from 'store/global/global.slice' import { useAppDispatch, useAppSelector } from 'store/hooks' import { updateProfile } from 'store/profile/profile.slice' import CGUModal from './CGUModal' import DataShareConsentContent from './DataShareConsentContent' import LegalNoticeModal from './LegalNoticeModal' import MinorUpdateContent from './MinorUpdateContent' import './termsView.scss' const TermsView = () => { const { t } = useI18n() const client = useClient() const navigate = useNavigate() const dispatch = useAppDispatch() const { global: { termsStatus }, profile: { sendAnalysisNotification }, } = useAppSelector(state => state.ecolyo) const [acceptNewsletter, setAcceptNewsletter] = useState(false) const [GCUValidation, setGCUValidation] = useState(false) const [dataConsentValidation, setDataConsentValidation] = useState(false) const [openCGUModal, setOpenCGUModal] = useState(false) const [openLegalNoticeModal, setOpenLegalNoticeModal] = useState(false) const handleTermValidate = useCallback(async () => { const termsService = new TermsService(client) const createdTerm = await termsService.createTerm() if (createdTerm) { dispatch( updateTermsStatus({ accepted: true, versionType: await termsService.getTermsVersionType(), }) ) } if (acceptNewsletter) { dispatch(updateProfile({ sendAnalysisNotification: true })) } navigate('/consumption') }, [client, acceptNewsletter, navigate, dispatch]) return ( <div className="terms-wrapper"> {termsStatus.versionType === 'major' || termsStatus.versionType === 'init' ? ( <> <div className="terms-content"> <DataShareConsentContent /> <label htmlFor="dataConsent" className="inline"> <Checkbox id="dataConsent" onChange={e => setDataConsentValidation(e.target.checked)} checked={dataConsentValidation} required /> {t('dataShare.validDataConsent')} </label> <label htmlFor="gcu" className="inline"> <Checkbox id="gcu" onChange={e => setGCUValidation(e.target.checked)} checked={GCUValidation} required /> <div> <span>{t('dataShare.validCGU')}</span> <Button size="small" className="btnText" onClick={() => setOpenCGUModal(true)} > {t('dataShare.validCGU_button')} </Button> <span>{t('dataShare.validLegal')}</span> <Button size="small" className="btnText" onClick={() => setOpenLegalNoticeModal(true)} > {t('dataShare.validLegal_button')} </Button> <span>{t('dataShare.validLegal2')}</span> </div> </label> {!sendAnalysisNotification && ( <label htmlFor="newsletter" className="inline"> <Checkbox id="newsletter" onChange={e => setAcceptNewsletter(e.target.checked)} checked={acceptNewsletter} /> <div> <span>{t('dataShare.acceptNewsletter')}</span> </div> </label> )} </div> <div className="terms-footer"> <Button aria-label={t('dataShare.accessibility.button_accept')} onClick={handleTermValidate} disabled={!GCUValidation || !dataConsentValidation} className="btnPrimary" > {t('dataShare.button_accept')} </Button> </div> </> ) : ( <> <div className="terms-content"> <MinorUpdateContent /> </div> <div className="terms-footer"> <Button onClick={handleTermValidate} className="btnPrimary"> {t('minorUpdate.button')} </Button> </div> </> )} <CGUModal open={openCGUModal} handleCloseClick={() => setOpenCGUModal(false)} /> <LegalNoticeModal open={openLegalNoticeModal} handleCloseClick={() => setOpenLegalNoticeModal(false)} /> </div> ) } export default TermsView