diff --git a/src/components/Duel/DuelEmptyValueModal.tsx b/src/components/Duel/DuelEmptyValueModal.tsx index ccc340d074bfc2b37850ab7ed125fa9a4dfdaa69..e9b0bd9c8b3c6d72c16b476a654f274f9042dd5f 100644 --- a/src/components/Duel/DuelEmptyValueModal.tsx +++ b/src/components/Duel/DuelEmptyValueModal.tsx @@ -1,51 +1,65 @@ -import React, { useEffect, useState } from 'react' -import './duelEmptyValueModal.scss' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import Modal from 'components/CommonKit/Modal/Modal' -import MuiButton from '@material-ui/core/Button' -import StyledIcon from 'components/CommonKit/Icon/StyledIcon' - -import defaultIcon from 'assets/icons/visu/duelResult/default.svg' -import { importIconbyId } from 'utils/utils' - -interface DuelEmptyValueModalProps { - handleCloseClick: () => void -} - -const DuelEmptyValueModal: React.FC<DuelEmptyValueModalProps> = ({ - handleCloseClick, -}: DuelEmptyValueModalProps) => { - const { t } = useI18n() - const [emptyIcon, setEmptyIcon] = useState<string>(defaultIcon) - useEffect(() => { - importIconbyId('emptyValue', 'duel').then(icon => { - icon ? setEmptyIcon(icon) : setEmptyIcon(defaultIcon) - }) - }, []) - - return ( - <Modal border={true} handleCloseClick={handleCloseClick}> - <div className="em-root modal-empty-value"> - <div className="em-content"> - <StyledIcon className="imgResult" icon={emptyIcon} size={208} /> - <div className="text-28-normal-uppercase title"> - {t('duel.empty_value.title')} - </div> - <div className="text-18-normal">{t('duel.empty_value.message1')}</div> - <div className="text-18-normal">{t('duel.empty_value.message2')}</div> - <MuiButton - onClick={handleCloseClick} - classes={{ - root: 'btn-secondary-negative', - label: 'text-16-normal', - }} - > - {t('duel.empty_value.button')} - </MuiButton> - </div> - </div> - </Modal> - ) -} - -export default DuelEmptyValueModal +import React, { useEffect, useState } from 'react' +import './duelEmptyValueModal.scss' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' + +import Icon from 'cozy-ui/transpiled/react/Icon' +import Dialog from '@material-ui/core/Dialog' +import Button from '@material-ui/core/Button' + +import defaultIcon from 'assets/icons/visu/duelResult/default.svg' +import { importIconbyId } from 'utils/utils' + +interface DuelEmptyValueModalProps { + open: boolean + handleCloseClick: () => void +} + +const DuelEmptyValueModal: React.FC<DuelEmptyValueModalProps> = ({ + open, + handleCloseClick, +}: DuelEmptyValueModalProps) => { + const { t } = useI18n() + const [emptyIcon, setEmptyIcon] = useState<string>(defaultIcon) + useEffect(() => { + importIconbyId('emptyValue', 'duel').then(icon => { + icon ? setEmptyIcon(icon) : setEmptyIcon(defaultIcon) + }) + }, []) + + return ( + <Dialog + open={open} + onClose={handleCloseClick} + aria-label={t('duel_empty_value_modal.accessibility.window_title')} + classes={{ + root: 'modal-root', + paper: 'modal-paper blue-border', + }} + > + <div className="modal-empty-value-root"> + <Icon className="imgResult" icon={emptyIcon} size={208} /> + <div className="text-28-normal-uppercase modal-empty-value-title"> + {t('duel_empty_value_modal.title')} + </div> + <div className="text-18-normal"> + {t('duel_empty_value_modal.message1')} + </div> + <div className="text-18-normal"> + {t('duel_empty_value_modal.message2')} + </div> + <Button + aria-label={t('duel_empty_value_modal.accessibility.button_validate')} + onClick={handleCloseClick} + classes={{ + root: 'btn-secondary-negative', + label: 'text-16-normal', + }} + > + {t('duel_empty_value_modal.button')} + </Button> + </div> + </Dialog> + ) +} + +export default DuelEmptyValueModal diff --git a/src/components/Duel/DuelView.tsx b/src/components/Duel/DuelView.tsx index d454f5acc948cab6782d73727e4c35f3f135f827..436dbba00d23a788432c157aab2bd149b7231a20 100644 --- a/src/components/Duel/DuelView.tsx +++ b/src/components/Duel/DuelView.tsx @@ -1,64 +1,69 @@ -import React, { useCallback, useState } from 'react' -import { useSelector } from 'react-redux' -import { AppStore } from 'store' -import CozyBar from 'components/Header/CozyBar' -import Content from 'components/Content/Content' -import Header from 'components/Header/Header' -import { UserChallengeState } from 'enum/userChallenge.enum' - -import DuelError from 'components/Duel/DuelError' -import DuelUnlocked from 'components/Duel/DuelUnlocked' -import { UserDuelState } from 'enum/userDuel.enum' -import { UserChallenge } from 'models' -import DuelOngoing from './DuelOngoing' -import DuelEmptyValueModal from './DuelEmptyValueModal' -import { useHistory } from 'react-router-dom' - -const DuelView: React.FC = () => { - const [headerHeight, setHeaderHeight] = useState<number>(0) - const { currentChallenge } = useSelector( - (state: AppStore) => state.ecolyo.challenge - ) - const history = useHistory() - const defineHeaderHeight = useCallback((height: number) => { - setHeaderHeight(height) - }, []) - const goBackToChallenge = () => { - history.push('/challenges') - } - const renderDuel = (challenge: UserChallenge) => { - switch (challenge.duel.state) { - case UserDuelState.UNLOCKED: - return <DuelUnlocked userChallenge={challenge} /> - case UserDuelState.ONGOING: - return <DuelOngoing userChallenge={challenge} /> - case UserDuelState.NO_REF_PERIOD_VALID: - return <DuelEmptyValueModal handleCloseClick={goBackToChallenge} /> - default: - return <DuelError /> - } - } - - return ( - <> - <CozyBar titleKey={'COMMON.APP_DUEL_TITLE'} displayBackArrow={true} /> - <Header - setHeaderHeight={defineHeaderHeight} - desktopTitleKey={'COMMON.APP_DUEL_TITLE'} - displayBackArrow={true} - ></Header> - <Content height={headerHeight}> - <div> - {currentChallenge && - currentChallenge.state === UserChallengeState.DUEL ? ( - renderDuel(currentChallenge) - ) : ( - <DuelError /> - )} - </div> - </Content> - </> - ) -} - -export default DuelView +import React, { useCallback, useState } from 'react' +import { useSelector } from 'react-redux' +import { AppStore } from 'store' +import CozyBar from 'components/Header/CozyBar' +import Content from 'components/Content/Content' +import Header from 'components/Header/Header' +import { UserChallengeState } from 'enum/userChallenge.enum' + +import DuelError from 'components/Duel/DuelError' +import DuelUnlocked from 'components/Duel/DuelUnlocked' +import { UserDuelState } from 'enum/userDuel.enum' +import { UserChallenge } from 'models' +import DuelOngoing from './DuelOngoing' +import DuelEmptyValueModal from './DuelEmptyValueModal' +import { useHistory } from 'react-router-dom' + +const DuelView: React.FC = () => { + const [headerHeight, setHeaderHeight] = useState<number>(0) + const { currentChallenge } = useSelector( + (state: AppStore) => state.ecolyo.challenge + ) + const history = useHistory() + const defineHeaderHeight = useCallback((height: number) => { + setHeaderHeight(height) + }, []) + const goBackToChallenge = () => { + history.push('/challenges') + } + const renderDuel = (challenge: UserChallenge) => { + switch (challenge.duel.state) { + case UserDuelState.UNLOCKED: + return <DuelUnlocked userChallenge={challenge} /> + case UserDuelState.ONGOING: + return <DuelOngoing userChallenge={challenge} /> + case UserDuelState.NO_REF_PERIOD_VALID: + return ( + <DuelEmptyValueModal + open={true} + handleCloseClick={goBackToChallenge} + /> + ) + default: + return <DuelError /> + } + } + + return ( + <> + <CozyBar titleKey={'COMMON.APP_DUEL_TITLE'} displayBackArrow={true} /> + <Header + setHeaderHeight={defineHeaderHeight} + desktopTitleKey={'COMMON.APP_DUEL_TITLE'} + displayBackArrow={true} + ></Header> + <Content height={headerHeight}> + <div> + {currentChallenge && + currentChallenge.state === UserChallengeState.DUEL ? ( + renderDuel(currentChallenge) + ) : ( + <DuelError /> + )} + </div> + </Content> + </> + ) +} + +export default DuelView diff --git a/src/components/Duel/duelEmptyValueModal.scss b/src/components/Duel/duelEmptyValueModal.scss index ad4be6ec65bef58d3ca0dd6759fcebc3ce33851c..f5e9172167801afd048e6920cf3d0fccdc66f589 100644 --- a/src/components/Duel/duelEmptyValueModal.scss +++ b/src/components/Duel/duelEmptyValueModal.scss @@ -1,13 +1,17 @@ -.modal-empty-value { - text-align: center; - overflow-x: hidden; - .em-content { - padding: 1.5rem 2.5rem; - } - .title { - margin: 2rem 0 1rem; - } - button.btn-secondary-negative { - margin: 2rem 0.25rem 1.5rem; - } -} +@import '../../styles/base/color'; + +.modal-empty-value-root { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 1.5rem 0.5rem; + text-align: center; + .modal-empty-value-title{ + margin: 2rem 0 1rem; + } + + button.btn-secondary-negative { + margin: 2rem 0.25rem 1.5rem; + } +} diff --git a/src/locales/fr.json b/src/locales/fr.json index 8de6400acce54786254bc3162a978810518c02b7..6bc34ddd7f6edc211aac3acca23f1ff5e02cd993 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -416,12 +416,16 @@ "message1": "Vous avez dépassé de ", "message2": "et manqué le badge ", "button": "Zut alors" - }, - "empty_value": { - "title": "Oups !", - "message1": "Vous n'avez pas de période de référence valide pour lancer ce duel.", - "message2": "Réessayer dans quelques jours, peut être que nous aurons changé d'avis.", - "button": "Je retourne au menu des duels" + } + }, + "duel_empty_value_modal": { + "title": "Oups !", + "message1": "Vous n'avez pas de période de référence valide pour lancer ce duel.", + "message2": "Réessayer dans quelques jours, peut être que nous aurons changé d'avis.", + "button": "Je retourne au menu des duels", + "accessibility": { + "window_title": "Fenètre d'erreur", + "button_validate": "Retouner au menu des duels" } }, "quiz": {