From f4ee2701f9a01a28e305a80bceb8fdebbeff7b39 Mon Sep 17 00:00:00 2001 From: Vinicius Souza Date: Fri, 1 Nov 2024 13:22:52 -0300 Subject: [PATCH] feat: fill information from backend on exercise screen --- src/screens/Exercise.tsx | 49 +++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/src/screens/Exercise.tsx b/src/screens/Exercise.tsx index 3acb188..a2312bf 100644 --- a/src/screens/Exercise.tsx +++ b/src/screens/Exercise.tsx @@ -1,19 +1,30 @@ -import { Box, Center, Heading, HStack, Icon, Image, Text, VStack } from '@gluestack-ui/themed'; +import { useEffect, useState } from 'react'; +import { Box, Heading, HStack, Icon, Image, Text, useToast, VStack } from '@gluestack-ui/themed'; import { useNavigation, useRoute } from '@react-navigation/native'; import { ArrowLeft } from 'lucide-react-native'; import { ScrollView, TouchableOpacity } from 'react-native'; +import { api } from '@services/api'; +import { AppError } from '@utils/AppError'; +import { ExerciseDTO } from '@dtos/ExerciseDTO'; + import BodySvg from '@assets/body.svg'; import SeriesSvg from '@assets/series.svg'; import RepetitionSvg from '@assets/repetitions.svg'; + import { Button } from '@components/Button'; +import { ToastMessage } from '@components/ToastMessage'; +import { Loading } from '@components/Loading'; type RouteParams = { exerciseId: string; }; export function Exercise() { + const [exercise, setExercise] = useState({} as ExerciseDTO); + const navigation = useNavigation(); + const toast = useToast(); const route = useRoute(); const { exerciseId } = route.params as RouteParams; @@ -22,6 +33,32 @@ export function Exercise() { navigation.goBack(); } + async function fetchExerciseData() { + try { + const response = await api.get(`/exercises/${exerciseId}`); + setExercise(response.data); + } catch (error) { + const isAppError = error instanceof AppError; + const title = isAppError + ? error.message + : 'Não foi possível carregar os detalhes do exercício.'; + toast.show({ + placement: 'top', + render: ({ id }) => ( + toast.close(id)} /> + ), + }); + } + } + + useEffect(() => { + fetchExerciseData(); + }, [exerciseId]); + + if (!exercise.id) { + return ; + } + return ( @@ -31,13 +68,13 @@ export function Exercise() { - Puxada frontal + {exercise.name} - Costas + {exercise.group} @@ -48,7 +85,7 @@ export function Exercise() { contentContainerStyle={{ paddingBottom: 32 }}> imagem do exercício - 3 séries + {exercise.series} séries - 12 repetições + {exercise.repetitions} repetições