From b7fd8daddff056dfe8026a28387b73ddb0e05bbf Mon Sep 17 00:00:00 2001 From: Dejan Date: Tue, 17 Dec 2024 23:33:59 +0100 Subject: [PATCH] - Added loading indicators when on groceries and todos, fixed margin issues in the todo page --- components/pages/grocery/GroceryList.tsx | 419 ++++++++++++----------- components/pages/todos/ToDoItem.tsx | 1 + components/pages/todos/ToDosList.tsx | 16 +- components/pages/todos/ToDosPage.tsx | 9 +- 4 files changed, 237 insertions(+), 208 deletions(-) diff --git a/components/pages/grocery/GroceryList.tsx b/components/pages/grocery/GroceryList.tsx index 7d3a19a..dd1ed68 100644 --- a/components/pages/grocery/GroceryList.tsx +++ b/components/pages/grocery/GroceryList.tsx @@ -1,17 +1,17 @@ -import {FlatList, StyleSheet} from "react-native"; -import React, {useEffect, useState} from "react"; -import {Text, TouchableOpacity, View} from "react-native-ui-lib"; +import { ActivityIndicator, Dimensions, FlatList, StyleSheet } from "react-native"; +import React, { useEffect, useState } from "react"; +import { Text, TouchableOpacity, View } from "react-native-ui-lib"; import GroceryItem from "./GroceryItem"; -import {GroceryCategory, GroceryFrequency, useGroceryContext,} from "@/contexts/GroceryContext"; +import { GroceryCategory, GroceryFrequency, useGroceryContext } from "@/contexts/GroceryContext"; import HeaderTemplate from "@/components/shared/HeaderTemplate"; -import {AntDesign} from "@expo/vector-icons"; +import { AntDesign } from "@expo/vector-icons"; import EditGroceryItem from "./EditGroceryItem"; -import {ProfileType, useAuthContext} from "@/contexts/AuthContext"; -import {IGrocery} from "@/hooks/firebase/types/groceryData"; +import { ProfileType, useAuthContext } from "@/contexts/AuthContext"; +import { IGrocery } from "@/hooks/firebase/types/groceryData"; import Ionicons from '@expo/vector-icons/Ionicons'; import AddChoreDialog from "@/components/pages/todos/AddChoreDialog"; -import {REPEAT_TYPE} from "@/hooks/firebase/types/todoData"; -import {ToDosContextProvider} from "@/contexts/ToDosContext"; +import { REPEAT_TYPE } from "@/hooks/firebase/types/todoData"; +import { ToDosContextProvider } from "@/contexts/ToDosContext"; const shoppingTodo = { id: "", @@ -32,7 +32,8 @@ const GroceryList = ({onInputFocus}: {onInputFocus: (y: number) => void}) => { setIsAddingGrocery, addGrocery, } = useGroceryContext(); - const {profileData} = useAuthContext(); + + const { profileData } = useAuthContext(); const [approvedGroceries, setApprovedGroceries] = useState( groceries?.filter((item) => item.approved) ); @@ -105,205 +106,212 @@ const GroceryList = ({onInputFocus}: {onInputFocus: (y: number) => void}) => { } return ( - - - - - - {approvedGroceries?.length} list{" "} - {approvedGroceries?.length === 1 ? ( - - item - - ) : ( - - items - - )} - - - - - {pendingGroceries?.length} pending - - - setChoreDialogVisible(true)}> - - - - {choreDialogVisible && - - } - + <> + {!groceries && + + - - - {/* Pending Approval Section */} - - - {setPendingVisible(!pendingVisible)}}> - Pending Approval - {pendingVisible && ( - - )} - {!pendingVisible && ( - - )} - - - + - - {pendingGroceries?.length.toString()} - - - - {pendingGroceries?.length > 0 - ? pendingVisible && ( - ( - - updateGroceryItem({...changes, id: id}) + + + + {approvedGroceries?.length} list{" "} + {approvedGroceries?.length === 1 ? ( + + item + + ) : ( + + items + + )} + + + + + {pendingGroceries?.length} pending + + + setChoreDialogVisible(true)}> + + + + {choreDialogVisible && + } - onInputFocus={onInputFocus} - /> - )} - keyExtractor={(item) => item.id.toString()} - /> - ) - : pendingVisible && ( - No items pending approval. - )} + + + - {/* Approved Section */} - - - {setApprovedVisible(!approvedVisible)}}> - Shopping List - {approvedVisible && ( - + + {setPendingVisible(!pendingVisible)}}> + Pending Approval + {pendingVisible && ( + - )} - {!approvedVisible && ( - - )} - - - - - {approvedGroceries?.length.toString()} - - - - - - - - {/* Render Approved Groceries Grouped by Category */} - {approvedGroceries?.length > 0 - ? approvedVisible && ( - { - if (a !== "Done") return -1; - if (b === "Done") return 1; - return 0; - })} - renderItem={({item: category}) => ( - - {/* Render Category Header */} - - {category} - - {/* Render Grocery Items for this Category */} - {approvedGroceriesByCategory[category].map( - (grocery: IGrocery) => ( - - updateGroceryItem({...changes, id: id}) - } - onInputFocus={onInputFocus} - approvedGroceries={approvedGroceries} - setApprovedGroceries={setApprovedGroceries} - /> - ) + /> + )} + {!pendingVisible && ( + )} - - )} - keyExtractor={(category) => category} - /> - ) - : approvedVisible && ( - No approved items. - )} - + + + + + {pendingGroceries?.length.toString()} + + + + {pendingGroceries?.length > 0 + ? pendingVisible && ( + ( + + updateGroceryItem({...changes, id: id}) + } + onInputFocus={onInputFocus} + /> + )} + keyExtractor={(item) => item.id.toString()} + /> + ) + : pendingVisible && ( + No items pending approval. + )} + + {/* Approved Section */} + + + {setApprovedVisible(!approvedVisible)}}> + Shopping List + {approvedVisible && ( + + )} + {!approvedVisible && ( + + )} + + + + + {approvedGroceries?.length.toString()} + + + + + + + + {/* Render Approved Groceries Grouped by Category */} + {approvedGroceries?.length > 0 + ? approvedVisible && ( + { + if (a !== "Done") return -1; + if (b === "Done") return 1; + return 0; + })} + renderItem={({item: category}) => ( + + {/* Render Category Header */} + + {category} + + {/* Render Grocery Items for this Category */} + {approvedGroceriesByCategory[category].map( + (grocery: IGrocery) => ( + + updateGroceryItem({...changes, id: id}) + } + onInputFocus={onInputFocus} + approvedGroceries={approvedGroceries} + setApprovedGroceries={setApprovedGroceries} + /> + ) + )} + + )} + keyExtractor={(category) => category} + /> + ) + : approvedVisible && ( + No approved items. + )} + + ); }; @@ -326,7 +334,16 @@ const styles = StyleSheet.create({ counterNr: { fontFamily: "PlusJakartaSans_600SemiBold", fontSize: 14 - } + }, + loaderContainer: { + ...StyleSheet.absoluteFillObject, + justifyContent: 'center', + alignItems: 'center', + height: Dimensions.get("window").height, + width: Dimensions.get("window").width, + backgroundColor: 'rgba(218,217,217,0.6)', + zIndex: 999, + }, }); export default GroceryList; diff --git a/components/pages/todos/ToDoItem.tsx b/components/pages/todos/ToDoItem.tsx index dfa77ef..1a82933 100644 --- a/components/pages/todos/ToDoItem.tsx +++ b/components/pages/todos/ToDoItem.tsx @@ -223,6 +223,7 @@ const ToDoItem = (props: { {selectedMembers?.map((member) => { return member?.pfp ? ( + + {!toDos && + + + + } { const { profileData } = useAuthContext(); @@ -19,7 +19,7 @@ const ToDosPage = () => { const { data: members } = useGetFamilyMembers(); - const { width, height } = Dimensions.get("screen"); + const { width } = Dimensions.get("screen"); const pageLink = ( setPageIndex(1)}> @@ -35,7 +35,6 @@ const ToDosPage = () => { > {pageIndex == 0 && (