From a51c4930e65e973f2b8285f590ce4e0e5e1aac2f Mon Sep 17 00:00:00 2001 From: squishyhoshi Date: Sun, 17 Dec 2023 05:38:15 -0500 Subject: [PATCH] added refresh --- .../src/screens/Energy/energyEntryEdit.tsx | 2 +- frontend/src/screens/Food/foodEntryEdit.tsx | 2 +- .../transportationEntryEdit.tsx | 2 +- frontend/src/screens/communityHub.tsx | 41 ++++++++- frontend/src/screens/dashboard.tsx | 90 +++++++++++++------ frontend/src/screens/yourForms.tsx | 43 ++++++++- 6 files changed, 146 insertions(+), 34 deletions(-) diff --git a/frontend/src/screens/Energy/energyEntryEdit.tsx b/frontend/src/screens/Energy/energyEntryEdit.tsx index 72664cf..f69801d 100644 --- a/frontend/src/screens/Energy/energyEntryEdit.tsx +++ b/frontend/src/screens/Energy/energyEntryEdit.tsx @@ -45,7 +45,7 @@ export default function EnergyEntryEdit(): JSX.Element { household: user.household, }; void EnergyAPI.updateEnergy(newEntry).then(() => { - navigation.navigate('DashBoard'); + navigation.navigate('YourForms'); }); } }; diff --git a/frontend/src/screens/Food/foodEntryEdit.tsx b/frontend/src/screens/Food/foodEntryEdit.tsx index 81106f5..e285899 100644 --- a/frontend/src/screens/Food/foodEntryEdit.tsx +++ b/frontend/src/screens/Food/foodEntryEdit.tsx @@ -92,7 +92,7 @@ export default function FoodEntryEdit(): JSX.Element { food_waste: foodWaste, }; void FoodAPI.updateFood(newEntry).then(() => { - navigation.navigate('DashBoard'); + navigation.navigate('YourForms'); }); } }; diff --git a/frontend/src/screens/Transportation/transportationEntryEdit.tsx b/frontend/src/screens/Transportation/transportationEntryEdit.tsx index 4385786..3fd6845 100644 --- a/frontend/src/screens/Transportation/transportationEntryEdit.tsx +++ b/frontend/src/screens/Transportation/transportationEntryEdit.tsx @@ -82,7 +82,7 @@ export default function TransportationEntryEdit(): JSX.Element { fuel_efficiency: user.fuel_efficiency, }; void TransportationAPI.updateTransportation(newEntry).then(() => { - navigation.navigate('DashBoard'); + navigation.navigate('YourForms'); }); } }; diff --git a/frontend/src/screens/communityHub.tsx b/frontend/src/screens/communityHub.tsx index dedce10..7d01c37 100644 --- a/frontend/src/screens/communityHub.tsx +++ b/frontend/src/screens/communityHub.tsx @@ -7,6 +7,7 @@ import { ScrollView, ImageBackground, FlatList, + RefreshControl, } from 'react-native'; import { useFonts } from 'expo-font'; import Colors from '../../assets/colorConstants'; @@ -32,6 +33,7 @@ export default function DashBoardScreen(): JSX.Element { const [topUsersMonthly, setMonthlyUsers] = useState([]); const [, setYearlyUsers] = useState([]); const [topUsersOverall, setOverallUsers] = useState([]); + const [refreshing, setRefreshing] = useState(false); // User's monthly rank const userRankMonthly: RankUser = { rank: 89, name: 'Squishyhoshi', footprint: 200, score: 5 }; @@ -160,23 +162,56 @@ export default function DashBoardScreen(): JSX.Element { useEffect(() => { void UsersAPI.getTopUsers(10).then(async (res) => { if (res != null) { - if (res.top_monthly_users != null && res.top_yearly_users != null && res.top_overall_users != null) { + if ( + res.top_monthly_users != null && + res.top_yearly_users != null && + res.top_overall_users != null + ) { setMonthlyUsers(res.top_monthly_users); setYearlyUsers(res.top_yearly_users); setOverallUsers(res.top_overall_users); - console.log(res.top_overall_users) + console.log(res.top_overall_users); } } }); }, [loaded]); + const onRefresh = (): void => { + // Simulate a refresh action (e.g., fetch new data) + setRefreshing(true); + + void UsersAPI.getTopUsers(10).then(async (res) => { + if (res != null) { + if ( + res.top_monthly_users != null && + res.top_yearly_users != null && + res.top_overall_users != null + ) { + setMonthlyUsers(res.top_monthly_users); + setYearlyUsers(res.top_yearly_users); + setOverallUsers(res.top_overall_users); + console.log(res.top_overall_users); + } + } + }); + + setTimeout(() => { + setRefreshing(false); // Set refreshing to false after data is fetched + }, 2000); // Simulating a 2-second delay + }; + if (!loaded) { return <>; } return ( - + + } + style={styles.scrollContainer} + > (); const [foodEntry, setFoodEntry] = useState(); const [energyEntry, setEnergyEntry] = useState(); - + const [refreshing, setRefreshing] = useState(false); const navigation = useNavigation(); @@ -44,47 +44,85 @@ export default function DashBoardScreen(): JSX.Element { }); void TransportationAPI.getTransportationMetricForToday().then((res) => { if (res != null) { - setTransportationEntry(res) + setTransportationEntry(res); } }); void FoodAPI.getFoodMetricForToday().then((res) => { if (res != null) { - setFoodEntry(res) + setFoodEntry(res); } }); void EnergyAPI.getEnergyMetricForToday().then((res) => { if (res != null) { - setEnergyEntry(res) + setEnergyEntry(res); } }); }, [loaded]); - if (!loaded || user === undefined || transportationEntry === undefined || foodEntry === undefined || energyEntry === undefined) { + const onRefresh = (): void => { + // Simulate a refresh action (e.g., fetch new data) + setRefreshing(true); + + void UsersAPI.GetLoggedInUser().then((res) => { + if (res != null) { + setUser(res); + } + }); + void TransportationAPI.getTransportationMetricForToday().then((res) => { + if (res != null) { + setTransportationEntry(res); + } + }); + void FoodAPI.getFoodMetricForToday().then((res) => { + if (res != null) { + setFoodEntry(res); + } + }); + void EnergyAPI.getEnergyMetricForToday().then((res) => { + if (res != null) { + setEnergyEntry(res); + } + }); + + setTimeout(() => { + setRefreshing(false); // Set refreshing to false after data is fetched + }, 2000); // Simulating a 2-second delay + }; + + if ( + !loaded || + user === undefined || + transportationEntry === undefined || + foodEntry === undefined || + energyEntry === undefined + ) { return <>; } return ( - + + } + style={styles.container} + > - - - - { - navigation.navigate('FootprintDecomp'); - }} - > - - - - - - + + + + { + navigation.navigate('FootprintDecomp'); + }} + > + + + + + + - ); } @@ -95,8 +133,8 @@ const styles = StyleSheet.create({ flexGrow: 1, }, profileWidgetContainer: { - alignItems: 'center', - marginHorizontal: 10 + alignItems: 'center', + marginHorizontal: 10, }, widgetBoarder: { padding: 10, diff --git a/frontend/src/screens/yourForms.tsx b/frontend/src/screens/yourForms.tsx index aac7490..c688372 100644 --- a/frontend/src/screens/yourForms.tsx +++ b/frontend/src/screens/yourForms.tsx @@ -1,5 +1,13 @@ import React, { useState } from 'react'; -import { Text, StyleSheet, ScrollView, View, TouchableOpacity, Image } from 'react-native'; +import { + Text, + StyleSheet, + ScrollView, + View, + TouchableOpacity, + Image, + RefreshControl, +} from 'react-native'; import { useFonts } from 'expo-font'; import Colors from '../../assets/colorConstants'; import { useNavigation, useFocusEffect } from '@react-navigation/native'; @@ -27,6 +35,7 @@ export default function YourForms(): JSX.Element { const [transportationEntry, setTransportationEntry] = useState(); const [foodEntry, setFoodEntry] = useState(); const [energyEntry, setEnergyEntry] = useState(); + const [refreshing, setRefreshing] = useState(false); useFocusEffect( React.useCallback(() => { @@ -78,6 +87,31 @@ export default function YourForms(): JSX.Element { }, [startDate, endDate]) // Include startDate and endDate in the dependency array ); + const onRefresh = (): void => { + // Simulate a refresh action (e.g., fetch new data) + setRefreshing(true); + + void TransportationAPI.getTransportationMetricForToday().then((res) => { + if (res != null) { + setTransportationEntry(res); + } + }); + void FoodAPI.getFoodMetricForToday().then((res) => { + if (res != null) { + setFoodEntry(res); + } + }); + void EnergyAPI.getEnergyMetricForToday().then((res) => { + if (res != null) { + setEnergyEntry(res); + } + }); + + setTimeout(() => { + setRefreshing(false); // Set refreshing to false after data is fetched + }, 2000); // Simulating a 2-second delay + }; + if ( !loaded || monthlyData === undefined || @@ -89,7 +123,12 @@ export default function YourForms(): JSX.Element { } return ( - + + } + contentContainerStyle={styles.container} + >