diff --git a/app/index.tsx b/app/index.tsx index 1a9a6d9..66fdbd0 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -32,6 +32,8 @@ const Index = () => { setUserName, userImage, setUserImage, + park, + setPark, userStatus, setUserStatus, setUserDataChanged, @@ -96,6 +98,8 @@ const Index = () => { setLocationActive(false)} /> diff --git a/components/Location.tsx b/components/Location.tsx index a9222eb..3f33cc0 100644 --- a/components/Location.tsx +++ b/components/Location.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, {useEffect, useState} from "react"; import { Dialog, TextInput, useTheme, Button, Text, List, Portal } from "react-native-paper"; import { View, FlatList } from "react-native"; import Slider from "@react-native-community/slider"; @@ -10,13 +10,12 @@ interface LocationScreenProps { visible: boolean; setChanged: (dataChanged: boolean) => void; currentTheme: string; + park: string; + setPark: (data: string) => void; onClose: () => void; } -export const API_URL = process.env.EXPO_PUBLIC_API_URL; -const BUTTON_WIDTH = 260; - -type Park = { +interface Park { Id: string; name: string; address: string; @@ -26,9 +25,12 @@ type Park = { location: { coordinates: [number, number]; }; -}; +} -const LocationScreen: React.FC = ({ visible, currentTheme, setChanged, onClose }) => { +export const API_URL = process.env.EXPO_PUBLIC_API_URL; +const BUTTON_WIDTH = 260; + +const LocationScreen: React.FC = ({ visible, park, setPark, setChanged, onClose }) => { const theme = useTheme(); const [zip, setZip] = useState(""); const [distance, setDistance] = useState(25); @@ -38,11 +40,19 @@ const LocationScreen: React.FC = ({ visible, currentTheme, const [hasSearched, setHasSearched] = useState(false); const [selectedPark, setSelectedPark] = useState(null); + useEffect(() => { + if (visible) { + if (park) { + setSelectedPark(JSON.parse(park) as Park | null); + } + } + }, [visible]); + // Call the parks endpoint with coordinates const fetchNearbyParks = async (longitude: number, latitude: number) => { try { const response = await axios.post(API_URL + "/parkLookup", { "Lon": longitude, "Lat": latitude, "Dist": distance }); - log.error("Nearby Parks:", response.data); + log.debug("Nearby Parks:", response.data); setParks(response.data); } catch (err) { log.error("Nearby Parks Error:", err); @@ -58,7 +68,7 @@ const LocationScreen: React.FC = ({ visible, currentTheme, setLoading(true); try { const response = await axios.post(API_URL + "/zipLookup", { zip }); - log.error("Zip Lookup Response:", response.data); + log.debug("Zip Lookup Response:", response.data); const longitude = response.data[0]; const latitude = response.data[1]; await fetchNearbyParks(longitude, latitude); @@ -80,7 +90,7 @@ const LocationScreen: React.FC = ({ visible, currentTheme, } let location = await Location.getCurrentPositionAsync({}); const { longitude, latitude } = location.coords; - log.error([longitude, latitude]); + log.debug([longitude, latitude]); await fetchNearbyParks(longitude, latitude); } catch (err) { log.error("Location Error:", err); @@ -106,6 +116,11 @@ const LocationScreen: React.FC = ({ visible, currentTheme, descriptionNumberOfLines={2} onPress={() => { setSelectedPark(item); + const parkString = JSON.stringify(item) + if ( park !== parkString ) { + setChanged(true); + } + setPark(parkString); setParks([]); setHasSearched(false); }} @@ -114,11 +129,9 @@ const LocationScreen: React.FC = ({ visible, currentTheme, return ( - + style={{ backgroundColor: theme.colors.background }} > Location diff --git a/context/UserContext.tsx b/context/UserContext.tsx index 3d85978..6604f73 100644 --- a/context/UserContext.tsx +++ b/context/UserContext.tsx @@ -26,6 +26,8 @@ interface UserContextType { setUserName: (name: string) => void; userImage: string; setUserImage: (image: string) => void; + park: string; + setPark: (park: string) => void; userStatus: string; setUserStatus: (status: string) => void; setUserDataChanged: (changed: boolean) => void; @@ -52,6 +54,7 @@ export const UserProvider: React.FC = ({ children }) => { const [userId, setUserId] = useState(""); const [userName, setUserName] = useState(""); const [userImage, setUserImage] = useState(""); + const [park, setPark] = useState(""); const [userStatus, setUserStatus] = useState("none"); const [userDataChanged, setUserDataChanged] = useState(false); const [isLoading, setIsLoading] = useState(true); @@ -65,7 +68,8 @@ export const UserProvider: React.FC = ({ children }) => { const storedUserName = await AsyncStorage.getItem("userName"); const storedUserImage = await AsyncStorage.getItem("userImage"); const storedUserTheme = await AsyncStorage.getItem("theme"); - log.debug("Stored theme: ", storedUserTheme); + const storedPark = await AsyncStorage.getItem("park"); + log.debug("Stored park: ", storedPark); if (storedUserId) { setUserId(storedUserId); setUserName(storedUserName || ""); @@ -79,6 +83,13 @@ export const UserProvider: React.FC = ({ children }) => { setTheme("blue") setProfileActive(true); } + if(storedPark) { + setPark(storedPark); + setLocationActive(false); + } else { + setPark(""); + setLocationActive(true); + } } catch (error) { log.error("Error loading user data:", error); } finally { @@ -98,7 +109,8 @@ export const UserProvider: React.FC = ({ children }) => { await AsyncStorage.setItem("userName", userName); await AsyncStorage.setItem("userImage", userImage); await AsyncStorage.setItem("theme", currentTheme); - log.debug("Current theme: ", currentTheme); + await AsyncStorage.setItem("park", park); + log.debug("Current park: ", park); setUserDataChanged(false); } catch (error) { log.error("Error saving user data:", error); @@ -160,6 +172,8 @@ export const UserProvider: React.FC = ({ children }) => { setUserName, userImage, setUserImage, + park, + setPark, userStatus, setUserStatus, setUserDataChanged,