traintrape-moi/client/app/(tabs)/challenges.tsx

66 lines
2.4 KiB
TypeScript
Raw Normal View History

import ChallengeCard from '@/components/ChallengeCard'
import PenaltyBanner from '@/components/PenalyBanner'
import { useChallengeActions } from '@/hooks/useChallengeActions'
import { useChallenges } from '@/hooks/useChallenges'
import { useGame } from '@/hooks/useGame'
2024-12-12 19:15:43 +00:00
import { FontAwesome6 } from '@expo/vector-icons'
import { useMemo } from 'react'
2024-12-12 19:15:43 +00:00
import { View } from 'react-native'
import { Appbar, Banner, FAB, MD3Colors, Surface, Text } from 'react-native-paper'
2024-12-12 19:15:43 +00:00
function ChallengeScreenHeader() {
return <>
<Appbar.Header>
<Appbar.Content title={"Défis"} />
<Appbar.Action icon='format-list-bulleted' />
</Appbar.Header>
<PenaltyBanner />
</>
}
function ChallengeScreenBody() {
const game = useGame()
const challengeActions = useChallengeActions()
const challenges = useChallenges()
const currentChallengeAction = useMemo(() => {
if (!game.currentChallengeId)
return null
return challengeActions.challengeActions.find((action) => action.id === game.currentChallengeId)
}, [game, challengeActions])
const currentChallenge = useMemo(() => {
if (!currentChallengeAction)
return null
return challenges.challenges.find((challenge) => challenge.id === currentChallengeAction.challengeId)
}, [currentChallengeAction, challenges])
2024-12-12 19:15:43 +00:00
return <>
{currentChallenge && <ChallengeCard challenge={currentChallenge} />}
{!currentChallenge && game.currentRunner && <>
<Banner
visible={!currentChallenge && game.currentRunner}
icon='cancel'
style={{ backgroundColor: MD3Colors.error40 }}>
<Text variant='titleMedium' style={{ textAlign: 'center' }}>Aucun défi en cours.</Text>
</Banner>
<View style={{ flexGrow: 1, justifyContent: 'center', alignItems: 'center' }}>
<FAB icon='cards' variant='tertiary' style={{ width: 250, height: 250, borderRadius: 20, justifyContent: 'center' }} size='large' label='Tirer un défi' />
</View>
</>}
<Banner
visible={game.gameStarted && !game.currentRunner}
icon={({ size }) => <FontAwesome6 name='cat' size={size} color={'pink'} />}
style={{ backgroundColor: MD3Colors.secondary30 }}>
Vous êtes poursuiveuse, et n'avez donc pas de défi à accomplir.
</Banner>
</>
}
export default function ChallengesScreen() {
return (
2024-12-12 17:01:08 +00:00
<Surface style={{ flex: 1 }}>
2024-12-12 19:15:43 +00:00
<ChallengeScreenHeader />
<ChallengeScreenBody />
2024-12-09 20:00:15 +00:00
</Surface>
2024-12-07 09:24:41 +00:00
)
}