store park variable in user context

This commit is contained in:
whysman 2025-04-28 00:05:33 -04:00
parent c1f7bfb805
commit f711c9d610
3 changed files with 47 additions and 16 deletions

View File

@ -32,6 +32,8 @@ const Index = () => {
setUserName,
userImage,
setUserImage,
park,
setPark,
userStatus,
setUserStatus,
setUserDataChanged,
@ -96,6 +98,8 @@ const Index = () => {
<LocationScreen
visible={isLocationActive}
currentTheme={currentTheme}
park={park}
setPark={setPark}
setChanged={setUserDataChanged}
onClose={() => setLocationActive(false)}
/>

View File

@ -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<LocationScreenProps> = ({ visible, currentTheme, setChanged, onClose }) => {
export const API_URL = process.env.EXPO_PUBLIC_API_URL;
const BUTTON_WIDTH = 260;
const LocationScreen: React.FC<LocationScreenProps> = ({ 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<LocationScreenProps> = ({ visible, currentTheme,
const [hasSearched, setHasSearched] = useState(false);
const [selectedPark, setSelectedPark] = useState<Park | null>(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<LocationScreenProps> = ({ 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<LocationScreenProps> = ({ 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<LocationScreenProps> = ({ 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<LocationScreenProps> = ({ visible, currentTheme,
return (
<Portal>
<Dialog
visible={visible}
<Dialog visible={visible}
onDismiss={onClose}
style={{ backgroundColor: theme.colors.background }}
>
style={{ backgroundColor: theme.colors.background }} >
<Dialog.Title style={{ color: theme.colors.primary, textAlign: 'center' }}>Location</Dialog.Title>
<Dialog.Content style={{ maxHeight: 500, justifyContent: "center", alignItems: "center" }}>
<View style={{ alignItems: "center", width: "100%" }}>

View File

@ -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<UserProviderProps> = ({ 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<UserProviderProps> = ({ 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<UserProviderProps> = ({ 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<UserProviderProps> = ({ 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<UserProviderProps> = ({ children }) => {
setUserName,
userImage,
setUserImage,
park,
setPark,
userStatus,
setUserStatus,
setUserDataChanged,