bastienrobert/la-ferme

View on GitHub
packages/mobile/src/pages/samples/Pending.tsx

Summary

Maintainability
B
4 hrs
Test Coverage
import React from 'react'
import styled from 'styled-components/native'
import FastImage from 'react-native-fast-image'
import LottieView from 'lottie-react-native'

import Container from '@/components/shared/Container'
import FullContainer from '@/components/shared/FullContainer'
import TitleWithHashtag from '@/components/shared/TitleWithHashtag'
import PlayersReady from '@/components/shared/PlayersReady'
import Text from '@/components/typo/Text'

import viewport from '@/services/viewport'

import { players } from './players'

import { global as globalData } from '@la-ferme/shared/data'
const content = globalData.pending

const Pending = () => {
  return (
    <>
      <Component>
        <Container alignSelf="center">
          <TitleWithHashtag
            anchor="right"
            titleColor="beige"
            hashtagColor="yellow"
            hashtagOffset={{ x: 40 }}
            {...content.title}
          />
        </Container>
        <ImageContainer>
          <BackgroundAnimation
            source={require('@/assets/lottie/pending_numbers.json')}
            autoPlay
          />
          <Character
            source={require('@/assets/images/pending/isabelle.webp')}
            resizeMode={FastImage.resizeMode.contain}
          />
        </ImageContainer>
        <TextContainer>
          {content.text.map((line, i) => (
            <DescriptionText
              key={`pending-text-${i}`}
              color="beige"
              textAlign="center">
              {line}
            </DescriptionText>
          ))}
        </TextContainer>
        <PlayersReady players={players} />
      </Component>
    </>
  )
}

const Component = styled(FullContainer)`
  margin-top: 90px;
`

const ImageContainer = styled(FullContainer)`
  position: relative;
  justify-content: center;
  align-items: center;
`

const TextContainer = styled(FullContainer)`
  position: relative;
  justify-content: center;
  align-items: center;
  align-self: center;
  width: 350px;
`

const BackgroundAnimation = styled(LottieView)`
  position: absolute;
  top: 50px;
  left: 0;
  width: ${viewport.width}px;
  transform: scale(1.25) translateY(-50px);
`

const Character = styled(FastImage)`
  width: 400px;
  height: 400px;
  margin: auto;
`

const DescriptionText = styled(Text)`
  padding-bottom: 20px;
`

export default Pending