store park variable in user context
This commit is contained in:
parent
c1f7bfb805
commit
f711c9d610
@ -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)}
|
||||
/>
|
||||
|
@ -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%" }}>
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user