-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.js
More file actions
111 lines (103 loc) · 3.22 KB
/
App.js
File metadata and controls
111 lines (103 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import React, { useState, useEffect } from 'react';
import 'react-native-gesture-handler';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { FontAwesome } from '@expo/vector-icons';
import { AntDesign } from '@expo/vector-icons';
import Home from './src/pages/Home';
import About from './src/pages/About';
import AllEventsList from './src/pages/AllEventsList';
import FavoriteEventsList from './src/pages/FavoriteEventsList';
import { loadEvents, loadFavoriteEvents } from './src/services/loadData';
import { favoriteEvent, unfavoriteEvent } from './src/services/favoriteUtils';
const Stack = createNativeStackNavigator();
const Drawer = createDrawerNavigator();
function DrawerRoutes() {
const [allEvents, setEvents] = useState(loadEvents());
const [favoriteEvents, setFavoriteEvents] = useState([]);
async function toggleFavorite(eventId) {
if (favoriteEvents.map((event) => event.id).includes(eventId)) {
await unfavoriteEvent(eventId);
} else {
await favoriteEvent(eventId);
}
setFavoriteEvents(await loadFavoriteEvents());
}
useEffect(() => {
loadFavoriteEvents().then(setFavoriteEvents);
}, []);
return (
<Drawer.Navigator
screenOptions={{
headerTintColor: '#E30613',
drawerStyle: {
backgroundColor: '#000',
},
drawerLabelStyle: {
color: '#FFF',
fontSize: 16,
fontWeight: '400',
lineHeight: 20,
},
swipeEnabled: false,
drawerActiveBackgroundColor: '#e30613ab',
}}
>
<Drawer.Screen
name="Lista de todos os eventos"
options={{
drawerLabel: 'Todos eventos',
drawerIcon: () => <FontAwesome name="list" size={24} color="white" />,
headerTransparent: true,
title: '',
}}
>
{(props) => (
<AllEventsList
{...props}
events={allEvents}
favoriteEventsId={favoriteEvents.map(event => event.id)}
toggleFavorite={toggleFavorite}
/>
)}
</Drawer.Screen>
<Drawer.Screen
name="Lista dos eventos favoritos"
options={{
drawerLabel: 'Meus favoritos',
drawerIcon: () => (
<AntDesign name="pushpin" size={24} color="white" />
),
headerTransparent: true,
title: '',
}}
>
{(props) => (
<FavoriteEventsList
{...props}
events={favoriteEvents}
favoriteEventsId={favoriteEvents.map(event => event.id)}
toggleFavorite={toggleFavorite}
/>
)}
</Drawer.Screen>
</Drawer.Navigator>
);
}
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator
initialRouteName="Home"
screenOptions={{
headerShown: false,
}}
>
<Stack.Screen name="Home" component={Home} />
<Stack.Screen name="Drawer" component={DrawerRoutes} />
<Stack.Screen name="About" component={About} />
</Stack.Navigator>
</NavigationContainer>
);
}