From d1ecea5c0a0d30e367f9b012dc31d710ab0542a1 Mon Sep 17 00:00:00 2001 From: Vinicius Souza Date: Fri, 1 Nov 2024 11:14:26 -0300 Subject: [PATCH] feat: fetch exercise groups from backend --- src/screens/Home.tsx | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/screens/Home.tsx b/src/screens/Home.tsx index 0bce519..7e784f4 100644 --- a/src/screens/Home.tsx +++ b/src/screens/Home.tsx @@ -1,17 +1,23 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { FlatList } from 'react-native'; import { useNavigation } from '@react-navigation/native'; -import { Heading, HStack, Text, VStack } from '@gluestack-ui/themed'; +import { Heading, HStack, Text, useToast, VStack } from '@gluestack-ui/themed'; -import { HomeHeader } from '@components/HomeHeader'; -import { Group } from '@components/Group'; -import { ExerciseCard } from '@components/ExerciseCard'; import { AppNavigatorRoutesProps } from '@routes/app.routes'; +import { AppError } from '@utils/AppError'; +import { api } from '@services/api'; + +import { ExerciseCard } from '@components/ExerciseCard'; +import { Group } from '@components/Group'; +import { HomeHeader } from '@components/HomeHeader'; +import { ToastMessage } from '@components/ToastMessage'; + export function Home() { const [exercises] = useState(['1', '2', '3', '4', '5', '6']); - const [groups] = useState(['costas', 'bíceps', 'tríceps', 'ombro', 'peito', 'pernas']); + const [groups, setGroups] = useState([]); const [selectedGroup, setSelectedGroup] = useState('costas'); + const toast = useToast(); const navigation = useNavigation(); @@ -19,6 +25,24 @@ export function Home() { navigation.navigate('Exercise'); } + async function fetchGroups() { + try { + const response = await api.get('/groups'); + setGroups(response.data); + } catch (error) { + const isAppError = error instanceof AppError; + const title = isAppError ? error.message : 'Não foi possível carregar os grupos musculares'; + toast.show({ + placement: 'top', + render: ({ id }) => toast.close(id)} />, + }); + } + } + + useEffect(() => { + fetchGroups(); + }); + return (