import {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 HeaderTemplate from "@/components/shared/HeaderTemplate"; import {AntDesign} from "@expo/vector-icons"; import EditGroceryItem from "./EditGroceryItem"; import {ProfileType, useAuthContext} from "@/contexts/AuthContext"; import {IGrocery} from "@/hooks/firebase/types/groceryData"; import AddPersonIcon from "@/assets/svgs/AddPersonIcon"; const GroceryList = ({onInputFocus}: {onInputFocus: (y: number) => void}) => { const { groceries, updateGroceryItem, isAddingGrocery, setIsAddingGrocery, addGrocery, } = useGroceryContext(); const {profileData} = useAuthContext(); const [approvedGroceries, setapprovedGroceries] = useState( groceries?.filter((item) => item.approved) ); const [pendingGroceries, setPendingGroceries] = useState( groceries?.filter((item) => !item.approved) ); const [category, setCategory] = useState( GroceryCategory.None ); const [title, setTitle] = useState(""); const [submit, setSubmitted] = useState(false); const [pendingVisible, setPendingVisible] = useState(true); const [approvedVisible, setApprovedVisible] = useState(true); // Group approved groceries by category const approvedGroceriesByCategory = approvedGroceries?.reduce( (groups: any, item: IGrocery) => { const category = item.category || "Uncategorized"; if (!groups[category]) { groups[category] = []; } groups[category].push(item); return groups; }, {} ); useEffect(() => { if (submit) { if (title?.length > 2 && title?.length <= 25) { addGrocery({ id: "", title: title, category: category, approved: profileData?.userType === ProfileType.PARENT, recurring: false, frequency: GroceryFrequency.Never, bought: false, }); setIsAddingGrocery(false); setSubmitted(false); setTitle(""); } } }, [submit]); useEffect(() => { setapprovedGroceries(groceries?.filter((item) => item.approved)); setPendingGroceries(groceries?.filter((item) => !item.approved)); }, [groceries]); return ( {approvedGroceries?.length} list{" "} {approvedGroceries?.length === 1 ? ( item ) : ( items )} {pendingGroceries?.length} pending {/* Pending Approval Section */} Pending Approval {pendingVisible && ( { setPendingVisible(false); }} /> )} {!pendingVisible && ( { setPendingVisible(true); }} /> )} {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 */} Shopping List {approvedVisible && ( { setApprovedVisible(false); }} /> )} {!approvedVisible && ( { setApprovedVisible(true); }} /> )} {approvedGroceries?.length.toString()} {isAddingGrocery && ( setIsAddingGrocery(false) }} onInputFocus={onInputFocus} /> )} {/* Render Approved Groceries Grouped by Category */} {approvedGroceries?.length > 0 ? approvedVisible && ( ( {/* Render Category Header */} {category} {/* Render Grocery Items for this Category */} {approvedGroceriesByCategory[category].map( (grocery: IGrocery) => ( updateGroceryItem({...changes, id: id}) } onInputFocus={onInputFocus} /> ) )} )} keyExtractor={(category) => category} /> ) : approvedVisible && ( No approved items. )} ); }; const styles = StyleSheet.create({ dropIcon: { marginHorizontal: 10, }, noItemTxt: { fontFamily: "Manrope_400Regular", fontSize: 14, }, counterText: { fontSize: 14, fontFamily: "PlusJakartaSans_600SemiBold", }, subHeader: { fontSize: 15, fontFamily: "Manrope_700Bold", }, counterNr: { fontFamily: "PlusJakartaSans_600SemiBold", fontSize: 14 } }); export default GroceryList;