store park variable in user context
This commit is contained in:
parent
c1f7bfb805
commit
f711c9d610
@ -32,6 +32,8 @@ const Index = () => {
|
|||||||
setUserName,
|
setUserName,
|
||||||
userImage,
|
userImage,
|
||||||
setUserImage,
|
setUserImage,
|
||||||
|
park,
|
||||||
|
setPark,
|
||||||
userStatus,
|
userStatus,
|
||||||
setUserStatus,
|
setUserStatus,
|
||||||
setUserDataChanged,
|
setUserDataChanged,
|
||||||
@ -96,6 +98,8 @@ const Index = () => {
|
|||||||
<LocationScreen
|
<LocationScreen
|
||||||
visible={isLocationActive}
|
visible={isLocationActive}
|
||||||
currentTheme={currentTheme}
|
currentTheme={currentTheme}
|
||||||
|
park={park}
|
||||||
|
setPark={setPark}
|
||||||
setChanged={setUserDataChanged}
|
setChanged={setUserDataChanged}
|
||||||
onClose={() => setLocationActive(false)}
|
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 { Dialog, TextInput, useTheme, Button, Text, List, Portal } from "react-native-paper";
|
||||||
import { View, FlatList } from "react-native";
|
import { View, FlatList } from "react-native";
|
||||||
import Slider from "@react-native-community/slider";
|
import Slider from "@react-native-community/slider";
|
||||||
@ -10,13 +10,12 @@ interface LocationScreenProps {
|
|||||||
visible: boolean;
|
visible: boolean;
|
||||||
setChanged: (dataChanged: boolean) => void;
|
setChanged: (dataChanged: boolean) => void;
|
||||||
currentTheme: string;
|
currentTheme: string;
|
||||||
|
park: string;
|
||||||
|
setPark: (data: string) => void;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const API_URL = process.env.EXPO_PUBLIC_API_URL;
|
interface Park {
|
||||||
const BUTTON_WIDTH = 260;
|
|
||||||
|
|
||||||
type Park = {
|
|
||||||
Id: string;
|
Id: string;
|
||||||
name: string;
|
name: string;
|
||||||
address: string;
|
address: string;
|
||||||
@ -26,9 +25,12 @@ type Park = {
|
|||||||
location: {
|
location: {
|
||||||
coordinates: [number, number];
|
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 theme = useTheme();
|
||||||
const [zip, setZip] = useState("");
|
const [zip, setZip] = useState("");
|
||||||
const [distance, setDistance] = useState(25);
|
const [distance, setDistance] = useState(25);
|
||||||
@ -38,11 +40,19 @@ const LocationScreen: React.FC<LocationScreenProps> = ({ visible, currentTheme,
|
|||||||
const [hasSearched, setHasSearched] = useState(false);
|
const [hasSearched, setHasSearched] = useState(false);
|
||||||
const [selectedPark, setSelectedPark] = useState<Park | null>(null);
|
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
|
// Call the parks endpoint with coordinates
|
||||||
const fetchNearbyParks = async (longitude: number, latitude: number) => {
|
const fetchNearbyParks = async (longitude: number, latitude: number) => {
|
||||||
try {
|
try {
|
||||||
const response = await axios.post(API_URL + "/parkLookup", { "Lon": longitude, "Lat": latitude, "Dist": distance });
|
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);
|
setParks(response.data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error("Nearby Parks Error:", err);
|
log.error("Nearby Parks Error:", err);
|
||||||
@ -58,7 +68,7 @@ const LocationScreen: React.FC<LocationScreenProps> = ({ visible, currentTheme,
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
const response = await axios.post(API_URL + "/zipLookup", { zip });
|
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 longitude = response.data[0];
|
||||||
const latitude = response.data[1];
|
const latitude = response.data[1];
|
||||||
await fetchNearbyParks(longitude, latitude);
|
await fetchNearbyParks(longitude, latitude);
|
||||||
@ -80,7 +90,7 @@ const LocationScreen: React.FC<LocationScreenProps> = ({ visible, currentTheme,
|
|||||||
}
|
}
|
||||||
let location = await Location.getCurrentPositionAsync({});
|
let location = await Location.getCurrentPositionAsync({});
|
||||||
const { longitude, latitude } = location.coords;
|
const { longitude, latitude } = location.coords;
|
||||||
log.error([longitude, latitude]);
|
log.debug([longitude, latitude]);
|
||||||
await fetchNearbyParks(longitude, latitude);
|
await fetchNearbyParks(longitude, latitude);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error("Location Error:", err);
|
log.error("Location Error:", err);
|
||||||
@ -106,6 +116,11 @@ const LocationScreen: React.FC<LocationScreenProps> = ({ visible, currentTheme,
|
|||||||
descriptionNumberOfLines={2}
|
descriptionNumberOfLines={2}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setSelectedPark(item);
|
setSelectedPark(item);
|
||||||
|
const parkString = JSON.stringify(item)
|
||||||
|
if ( park !== parkString ) {
|
||||||
|
setChanged(true);
|
||||||
|
}
|
||||||
|
setPark(parkString);
|
||||||
setParks([]);
|
setParks([]);
|
||||||
setHasSearched(false);
|
setHasSearched(false);
|
||||||
}}
|
}}
|
||||||
@ -114,11 +129,9 @@ const LocationScreen: React.FC<LocationScreenProps> = ({ visible, currentTheme,
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Portal>
|
<Portal>
|
||||||
<Dialog
|
<Dialog visible={visible}
|
||||||
visible={visible}
|
|
||||||
onDismiss={onClose}
|
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.Title style={{ color: theme.colors.primary, textAlign: 'center' }}>Location</Dialog.Title>
|
||||||
<Dialog.Content style={{ maxHeight: 500, justifyContent: "center", alignItems: "center" }}>
|
<Dialog.Content style={{ maxHeight: 500, justifyContent: "center", alignItems: "center" }}>
|
||||||
<View style={{ alignItems: "center", width: "100%" }}>
|
<View style={{ alignItems: "center", width: "100%" }}>
|
||||||
|
@ -26,6 +26,8 @@ interface UserContextType {
|
|||||||
setUserName: (name: string) => void;
|
setUserName: (name: string) => void;
|
||||||
userImage: string;
|
userImage: string;
|
||||||
setUserImage: (image: string) => void;
|
setUserImage: (image: string) => void;
|
||||||
|
park: string;
|
||||||
|
setPark: (park: string) => void;
|
||||||
userStatus: string;
|
userStatus: string;
|
||||||
setUserStatus: (status: string) => void;
|
setUserStatus: (status: string) => void;
|
||||||
setUserDataChanged: (changed: boolean) => void;
|
setUserDataChanged: (changed: boolean) => void;
|
||||||
@ -52,6 +54,7 @@ export const UserProvider: React.FC<UserProviderProps> = ({ children }) => {
|
|||||||
const [userId, setUserId] = useState("");
|
const [userId, setUserId] = useState("");
|
||||||
const [userName, setUserName] = useState("");
|
const [userName, setUserName] = useState("");
|
||||||
const [userImage, setUserImage] = useState("");
|
const [userImage, setUserImage] = useState("");
|
||||||
|
const [park, setPark] = useState("");
|
||||||
const [userStatus, setUserStatus] = useState("none");
|
const [userStatus, setUserStatus] = useState("none");
|
||||||
const [userDataChanged, setUserDataChanged] = useState(false);
|
const [userDataChanged, setUserDataChanged] = useState(false);
|
||||||
const [isLoading, setIsLoading] = useState(true);
|
const [isLoading, setIsLoading] = useState(true);
|
||||||
@ -65,7 +68,8 @@ export const UserProvider: React.FC<UserProviderProps> = ({ children }) => {
|
|||||||
const storedUserName = await AsyncStorage.getItem("userName");
|
const storedUserName = await AsyncStorage.getItem("userName");
|
||||||
const storedUserImage = await AsyncStorage.getItem("userImage");
|
const storedUserImage = await AsyncStorage.getItem("userImage");
|
||||||
const storedUserTheme = await AsyncStorage.getItem("theme");
|
const storedUserTheme = await AsyncStorage.getItem("theme");
|
||||||
log.debug("Stored theme: ", storedUserTheme);
|
const storedPark = await AsyncStorage.getItem("park");
|
||||||
|
log.debug("Stored park: ", storedPark);
|
||||||
if (storedUserId) {
|
if (storedUserId) {
|
||||||
setUserId(storedUserId);
|
setUserId(storedUserId);
|
||||||
setUserName(storedUserName || "");
|
setUserName(storedUserName || "");
|
||||||
@ -79,6 +83,13 @@ export const UserProvider: React.FC<UserProviderProps> = ({ children }) => {
|
|||||||
setTheme("blue")
|
setTheme("blue")
|
||||||
setProfileActive(true);
|
setProfileActive(true);
|
||||||
}
|
}
|
||||||
|
if(storedPark) {
|
||||||
|
setPark(storedPark);
|
||||||
|
setLocationActive(false);
|
||||||
|
} else {
|
||||||
|
setPark("");
|
||||||
|
setLocationActive(true);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error("Error loading user data:", error);
|
log.error("Error loading user data:", error);
|
||||||
} finally {
|
} finally {
|
||||||
@ -98,7 +109,8 @@ export const UserProvider: React.FC<UserProviderProps> = ({ children }) => {
|
|||||||
await AsyncStorage.setItem("userName", userName);
|
await AsyncStorage.setItem("userName", userName);
|
||||||
await AsyncStorage.setItem("userImage", userImage);
|
await AsyncStorage.setItem("userImage", userImage);
|
||||||
await AsyncStorage.setItem("theme", currentTheme);
|
await AsyncStorage.setItem("theme", currentTheme);
|
||||||
log.debug("Current theme: ", currentTheme);
|
await AsyncStorage.setItem("park", park);
|
||||||
|
log.debug("Current park: ", park);
|
||||||
setUserDataChanged(false);
|
setUserDataChanged(false);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error("Error saving user data:", error);
|
log.error("Error saving user data:", error);
|
||||||
@ -160,6 +172,8 @@ export const UserProvider: React.FC<UserProviderProps> = ({ children }) => {
|
|||||||
setUserName,
|
setUserName,
|
||||||
userImage,
|
userImage,
|
||||||
setUserImage,
|
setUserImage,
|
||||||
|
park,
|
||||||
|
setPark,
|
||||||
userStatus,
|
userStatus,
|
||||||
setUserStatus,
|
setUserStatus,
|
||||||
setUserDataChanged,
|
setUserDataChanged,
|
||||||
|
Loading…
Reference in New Issue
Block a user