import { Button } from '@material-ui/core' import { useClient } from 'cozy-client' import { useI18n } from 'cozy-ui/transpiled/react/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 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 { termsStatus } = useAppSelector(state => state.ecolyo.global) const [GCUValidation, setGCUValidation] = useState<boolean>(false) const [dataConsentValidation, setDataConsentValidation] = useState<boolean>(false) const [openCGUModal, setOpenCGUModal] = useState<boolean>(false) const [openLegalNoticeModal, setOpenLegalNoticeModal] = useState<boolean>(false) const toggleCGUModal = () => { setOpenCGUModal(prev => !prev) } const toggleLegalNoticeModal = () => { setOpenLegalNoticeModal(prev => !prev) } const handleGCUValidate = useCallback(() => { setGCUValidation(prev => !prev) }, []) const handleDataConsentValidation = useCallback(() => { setDataConsentValidation(prev => !prev) }, []) const handleTermValidate = useCallback(async () => { const termsService = new TermsService(client) const createdTerm = await termsService.createTerm() if (createdTerm) { dispatch( updateTermsStatus({ accepted: true, versionType: await termsService.getTermsVersionType(), }) ) } navigate('/consumption') }, [dispatch, client, navigate]) return ( <div className="terms-wrapper"> {termsStatus.versionType === 'major' || termsStatus.versionType === 'init' ? ( <> <div className="terms-content"> <DataShareConsentContent /> <label className="inline"> <input type="checkbox" name="Data-consent-validation" className="inputCheckbox" onChange={handleDataConsentValidation} checked={dataConsentValidation} /> {t('dataShare.validDataConsent')} </label> <label className="inline"> <input id="gcu" type="checkbox" name="GCU-validation" className="inputCheckbox" onChange={handleGCUValidate} checked={GCUValidation} /> <div> <span>{t('dataShare.validCGU')}</span> <Button size="small" className="btnText" onClick={toggleCGUModal} > {t('dataShare.validCGU_button')} </Button> <span>{t('dataShare.validLegal')}</span> <Button size="small" className="btnText" onClick={toggleLegalNoticeModal} > {t('dataShare.validLegal_button')} </Button> <span>{t('dataShare.validLegal2')}</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 aria-label={t('minorUpdate.button')} onClick={handleTermValidate} className="btnPrimary" > {t('minorUpdate.button')} </Button> </div> </> )} <CGUModal open={openCGUModal} handleCloseClick={toggleCGUModal} /> <LegalNoticeModal open={openLegalNoticeModal} handleCloseClick={toggleLegalNoticeModal} /> </div> ) } export default TermsView