From 46f824dc33809965b53982dde8d1503a42dfad9c Mon Sep 17 00:00:00 2001 From: Bahl-Aryan Date: Thu, 12 Sep 2024 23:03:10 -0500 Subject: [PATCH 1/2] more updates --- navigation/EventDaysNavigator.tsx | 40 ++++++++++++++++++------------- screens/Home.tsx | 37 +++++++++++++++++----------- screens/Profile.tsx | 2 +- 3 files changed, 48 insertions(+), 31 deletions(-) diff --git a/navigation/EventDaysNavigator.tsx b/navigation/EventDaysNavigator.tsx index f3d2c7d..ae4ffae 100644 --- a/navigation/EventDaysNavigator.tsx +++ b/navigation/EventDaysNavigator.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useRef, useCallback } from "react"; import { createMaterialTopTabNavigator } from "@react-navigation/material-top-tabs"; import DayEvent from "./DayEvent"; import Colors from "../constants/Colors"; @@ -16,23 +16,31 @@ const WeekTab = createMaterialTopTabNavigator(); const EventDaysNavigator = () => { const [eventsData, setEventsData] = useState([]); + const loaded = useRef(false) - useFocusEffect(() => { - const fetchEvents = async () => { - try { - const response = await fetch(eventsURL); - if (!response.ok) { - throw new Error("Network response was not ok"); - } - const data = await response.json(); - setEventsData(data); // Update eventsData state with fetched data - } catch (error) { - console.error("Error fetching events:", error); + useFocusEffect( + useCallback(() => { + if (!loaded.current) { + const fetchEvents = async () => { + try { + const response = await fetch(eventsURL); + if (!response.ok) { + throw new Error("Network response was not ok"); + } + const data = await response.json(); + setEventsData(data); // Update eventsData state with fetched data + } catch (error) { + console.error("Error fetching events:", error); + } + }; + fetchEvents(); + loaded.current = true; } - }; - - fetchEvents(); - }); // Empty dependency array ensures useEffect runs only once + return () => { + loaded.current = false; + } + }, []) + ); // Empty dependency array ensures useEffect runs only once const filterEventsByDay = (day) => { return eventsData.filter((event) => { diff --git a/screens/Home.tsx b/screens/Home.tsx index 8ce7f0b..b818c9d 100644 --- a/screens/Home.tsx +++ b/screens/Home.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useCallback, useRef } from "react"; import { SafeAreaView } from "react-native-safe-area-context"; import { Dimensions, View, StyleSheet, ActivityIndicator } from "react-native"; import { useFonts, PressStart2P_400Regular } from "@expo-google-fonts/press-start-2p"; @@ -21,20 +21,29 @@ const Home: React.FC = () => { const [currNextEvent, setCurrNextEvent] = useState(null); const [loading, setLoading] = useState(true); // To track loading state - useFocusEffect(() => { - const fetchCurrNext = async () => { - try { - const event = await getCurrentOrNext(token); - setCurrNextEvent(event); - } catch (error) { - console.error("error fetching current/next event:", error); - } finally { - setLoading(false); // Stop loading once the fetch is complete - } - }; + const loaded = useRef(false) - fetchCurrNext(); - }); + useFocusEffect( + useCallback(() => { + if (!loaded.current) { + const fetchEvents = async () => { + try { + const event = await getCurrentOrNext(token); + setCurrNextEvent(event); // Update eventsData state with fetched data + } catch (error) { + console.error("Error fetching events:", error); + } finally { + setLoading(false) + } + }; + fetchEvents(); + loaded.current = true; + } + return () => { + loaded.current = false; + } + }, []) + ); // Empty dependency array ensures useEffect runs only once if (loading) { return ( diff --git a/screens/Profile.tsx b/screens/Profile.tsx index 4a997a2..f716489 100644 --- a/screens/Profile.tsx +++ b/screens/Profile.tsx @@ -59,7 +59,7 @@ const Profile: React.FC = () => { }) useEffect(() => { - const interval = setInterval(async () => {await getQRCode(token, setQRCode)}, 20000); + const interval = setInterval(async () => {await getQRCode(token, setQRCode)}, 18000 + (Math.random() * 5000)); //return () => clearInterval(interval); }, [token]); From b2510a7827c121974da12bf972b4137a6f266d3d Mon Sep 17 00:00:00 2001 From: Bahl-Aryan Date: Thu, 12 Sep 2024 23:10:48 -0500 Subject: [PATCH 2/2] more updates --- screens/Profile.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/screens/Profile.tsx b/screens/Profile.tsx index f716489..5edf982 100644 --- a/screens/Profile.tsx +++ b/screens/Profile.tsx @@ -48,6 +48,9 @@ const Profile: React.FC = () => { if (token && !attendee) { dispatch(getAttendee(token)); } + if (token && !qrcode) { + getQRCode(token, setQRCode); + } }, [token, attendee, dispatch]); useFocusEffect(() => { @@ -61,7 +64,7 @@ const Profile: React.FC = () => { useEffect(() => { const interval = setInterval(async () => {await getQRCode(token, setQRCode)}, 18000 + (Math.random() * 5000)); //return () => clearInterval(interval); - }, [token]); + }); const handleLogOut = () => { console.log("logging out")