diff --git a/frontend-challenge/App.js b/frontend-challenge/App.js new file mode 100644 index 000000000..73784011f --- /dev/null +++ b/frontend-challenge/App.js @@ -0,0 +1,28 @@ +import React, { useState } from 'react'; +import { NavigationContainer } from '@react-navigation/native'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import CourtListScreen from './CourtListScreen'; +import CourtDetailScreen from './CourtDetailScreen'; + +const Stack = createNativeStackNavigator(); + +export default function App() { + const [reviewsByCourt, setReviewsByCourt] = useState({}); + + return ( + + + + + {props => ( + + )} + + + + ); +} diff --git a/frontend-challenge/CourtDetailScreen.js b/frontend-challenge/CourtDetailScreen.js new file mode 100644 index 000000000..a57d79d93 --- /dev/null +++ b/frontend-challenge/CourtDetailScreen.js @@ -0,0 +1,43 @@ +import React, { useState } from 'react'; +import { View, Text, TextInput, Button, FlatList } from 'react-native'; + +export default function CourtDetailScreen({ route, reviewsByCourt, setReviewsByCourt }) { + const { court } = route.params; + const [text, setText] = useState(''); + + const reviews = reviewsByCourt[court.id] || []; + + const addReview = () => { + if (!text) return; + + setReviewsByCourt(prev => ({ + ...prev, + [court.id]: [...(prev[court.id] || []), text] + })); + + setText(''); + }; + + return ( + + {court.name} + + + +