bastienrobert/la-ferme

View on GitHub
packages/mobile/src/pages/Game/Main/MiniGame/MiniGameResults.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import React, { FC } from 'react'
import styled from 'styled-components/native'
import FastImage from 'react-native-fast-image'
import { global as globalData, minigames } from '@la-ferme/shared/data'
import { Icon } from '@la-ferme/components/native'

import { MiniGameProps } from './'
import FullContainer from '@/components/shared/FullContainer'
import Container from '@/components/shared/Container'

import { winImages, looseImages } from '@/utils/helpers/players'
import Title from '@/components/typo/Title'
import Text from '@/components/typo/Text'

const global = globalData.minigame.results

const getBackground = (winner: boolean) => {
  if (winner) return require('@/assets/images/minigame/confettis.webp')
  else return require('@/assets/images/minigame/scribbles.webp')
}

const MiniGameResults: FC<Required<MiniGameProps>> = ({
  type,
  player,
  winner,
  close
}) => {
  const isWinner = player.uuid === winner
  const images = isWinner ? winImages : looseImages
  const color = isWinner ? 'gray' : 'beige'

  const content = minigames[type]

  const t = isWinner ? 'winner' : 'looser'

  return (
    <Component>
      <Background source={getBackground(isWinner)} />
      <MainContainer alignSelf="center">
        <BigImage source={images[player.character]} />
        <StyledTitle preset="H1" color={color} textAlign="center">
          {global[t]}
        </StyledTitle>
        <TextContainer>
          <StyledText color={color} textAlign="center">
            {content.results[t].text}
          </StyledText>
          <Title preset="H5" color={color} textAlign="center">
            {content.results[t].effect}
          </Title>
        </TextContainer>
      </MainContainer>
      <IconContainer alignSelf="center">
        <Icon icon="cross" background="red" onPress={close} />
      </IconContainer>
    </Component>
  )
}

const Component = styled(FullContainer)`
  justify-content: center;
`

const BigImage = styled(FastImage)`
  width: 60%;
  max-width: 600px;
  align-self: center;
  aspect-ratio: 1;
  margin-bottom: 20px;
`

const Background = styled(FastImage)`
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
`

const MainContainer = styled(Container)`
  margin-top: auto;
`

const StyledTitle = styled(Title)`
  margin-bottom: 18px;
`

const StyledText = styled(Text)`
  margin-bottom: 12px;
`

const TextContainer = styled(Container)`
  max-width: 270px;
`

const IconContainer = styled(Container)`
  margin-top: auto;
  margin-bottom: 50px;
`

export default MiniGameResults