Skip to content
Snippets Groups Projects
ChallengeCardDone.tsx 3.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Button } from '@material-ui/core'
    import defaultIcon from 'assets/icons/visu/duelResult/default.svg'
    
    import classNames from 'classnames'
    
    import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
    
    import { useClient } from 'cozy-client'
    
    import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n'
    
    import { UserChallengeSuccess, UserChallengeUpdateFlag } from 'enums'
    
    import { UserChallenge } from 'models'
    
    import React, { useEffect, useState } from 'react'
    
    import { useNavigate } from 'react-router-dom'
    
    import ChallengeService from 'services/challenge.service'
    import { updateUserChallengeList } from 'store/challenge/challenge.slice'
    
    import { useAppDispatch, useAppSelector } from 'store/hooks'
    
    import {
      formatNumberValues,
      getChallengeTitleWithLineReturn,
    
    } from 'utils/utils'
    
    import './challengeCardDone.scss'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    const ChallengeCardDone = ({
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    }: {
      userChallenge: UserChallenge
    }) => {
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
      const { t } = useI18n()
    
      const navigate = useNavigate()
    
      const client = useClient()
    
      const dispatch = useAppDispatch()
      const { currentChallenge } = useAppSelector(state => state.ecolyo.challenge)
    
      const [resultIcon, setResultIcon] = useState<string>(defaultIcon)
    
      const isSuccess = userChallenge.success === UserChallengeSuccess.WIN
    
      const goDuel = () => {
    
        navigate('/challenges/duel?id=' + userChallenge.id)
    
      const handleChallengeReset = async () => {
        const challengeService = new ChallengeService(client)
        const updatedChallenge = await challengeService.updateUserChallenge(
          userChallenge,
          UserChallengeUpdateFlag.DUEL_RESET
        )
        dispatch(updateUserChallengeList(updatedChallenge))
      }
    
    
      useEffect(() => {
    
          const icon = await importIconById(
            userChallenge.id + '-' + Number(isSuccess),
            'duelResult'
          )
          setResultIcon(icon || defaultIcon)
    
      }, [isSuccess, userChallenge])
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
      return (
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
        <div className="cardContent cardDone">
    
          <div className="challengeName text-22-bold">
    
            {getChallengeTitleWithLineReturn(userChallenge.id)}
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
          <div className="iconResult">
    
            <StyledIcon className="imgResult" icon={resultIcon} size={180} />
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
          </div>
          <div className="statsResult">
    
            <div
              className={classNames('labelResult', {
    
                win: userChallenge.success === UserChallengeSuccess.WIN,
                lost: userChallenge.success === UserChallengeSuccess.LOST,
    
              {isSuccess
                ? t('challenge.card_done.win')
                : t('challenge.card_done.lost')}
    
            </div>
            <span className="text-18">
    
              {isSuccess
                ? t('challenge.card_done.saving')
                : t('challenge.card_done.depense')}{' '}
    
              <span className="text-18-bold">
                {formatNumberValues(
                  Math.abs(
                    userChallenge.duel.threshold -
                      userChallenge.duel.userConsumption
                  )
                ) + ' '}
    
              </span>
              <br />
              {t('challenge.card_done.final_defi')}
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
            </span>
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
          </div>
    
          <div className="buttons">
    
            <Button onClick={goDuel} className="btnSecondary">
    
              {t('challenge.card_done.final_defi_view')}
            </Button>
            <Button
              onClick={handleChallengeReset}
    
              className={
                userChallenge.success === UserChallengeSuccess.WIN
                  ? 'btnSecondary'
                  : 'btnPrimaryNegative'
              }
    
              disabled={currentChallenge !== null}
            >
              {t('challenge.card_done.reset_defi')}
            </Button>
          </div>
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
        </div>
      )
    
    export default ChallengeCardDone