From ac20baad2398224de762d745471b7941048d9477 Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Thu, 12 Dec 2024 19:33:44 +0100 Subject: [PATCH] =?UTF-8?q?Gestion=20dynamique=20de=20l'affichage=20du=20d?= =?UTF-8?q?=C3=A9fi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/app/(tabs)/challenges.tsx | 45 ++++++++++++------------- client/components/ChallengeCard.tsx | 30 +++++++++++++++++ client/hooks/useChallenges.ts | 2 +- client/utils/features/game/gameSlice.ts | 5 ++- 4 files changed, 56 insertions(+), 26 deletions(-) create mode 100644 client/components/ChallengeCard.tsx diff --git a/client/app/(tabs)/challenges.tsx b/client/app/(tabs)/challenges.tsx index c1c3ed8..5369242 100644 --- a/client/app/(tabs)/challenges.tsx +++ b/client/app/(tabs)/challenges.tsx @@ -1,9 +1,26 @@ +import ChallengeCard from '@/components/ChallengeCard' import PenaltyBanner from '@/components/PenalyBanner' -import { FontAwesome6 } from '@expo/vector-icons' -import { View } from 'react-native' -import { Appbar, Button, Surface, Text } from 'react-native-paper' +import { useChallengeActions } from '@/hooks/useChallengeActions' +import { useChallenges } from '@/hooks/useChallenges' +import { useGame } from '@/hooks/useGame' +import { useMemo } from 'react' +import { Appbar, Surface } from 'react-native-paper' export default function ChallengesScreen() { + 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]) + return ( @@ -11,27 +28,7 @@ export default function ChallengesScreen() { - - - Titre - - - - Description - - Récompense : 500 - - - - - - - - + {currentChallenge && } ) } diff --git a/client/components/ChallengeCard.tsx b/client/components/ChallengeCard.tsx new file mode 100644 index 0000000..e03fb8c --- /dev/null +++ b/client/components/ChallengeCard.tsx @@ -0,0 +1,30 @@ +import { Challenge } from "@/utils/features/challenges/challengesSlice" +import { FontAwesome6 } from "@expo/vector-icons" +import { View } from "react-native" +import { Button, Surface, Text } from "react-native-paper" + +export default function ChallengeCard({ challenge }: { challenge: Challenge }) { + return ( + + + {challenge.title} + + + + {challenge.description} + + Récompense : {challenge.reward} + + + + + + + + + ) +} \ No newline at end of file diff --git a/client/hooks/useChallenges.ts b/client/hooks/useChallenges.ts index 9dcd5e9..c4b6605 100644 --- a/client/hooks/useChallenges.ts +++ b/client/hooks/useChallenges.ts @@ -1,3 +1,3 @@ import { useAppSelector } from "./useStore" -export const useTrain = () => useAppSelector((state) => state.challenges) +export const useChallenges = () => useAppSelector((state) => state.challenges) diff --git a/client/utils/features/game/gameSlice.ts b/client/utils/features/game/gameSlice.ts index f24684d..bd0531c 100644 --- a/client/utils/features/game/gameSlice.ts +++ b/client/utils/features/game/gameSlice.ts @@ -1,4 +1,5 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import { ChallengeAction } from '../challengeActions/challengeActionsSlice' export interface RunPayload { id: number @@ -20,9 +21,10 @@ export interface GameState { gameStarted: boolean money: number currentRunner: boolean + currentChallengeId: number | null chaseFreeTime: number | null // date penaltyStart: number | null // date - penaltyEnd: number | null // date + penaltyEnd: number | null //date } const initialState: GameState = { @@ -30,6 +32,7 @@ const initialState: GameState = { gameStarted: false, money: 0, currentRunner: false, + currentChallengeId: null, chaseFreeTime: null, penaltyStart: null, penaltyEnd: null,