import { FlatList, StyleSheet } from "react-native"; import React, { useEffect, useState } from "react"; import { Button, 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, MaterialIcons } 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 = () => { const { groceries, updateGroceryItem, isAddingGrocery, setIsAddingGrocery, addGrocery, } = useGroceryContext(); const { profileData } = useAuthContext(); const [approvedGroceries, setapprovedGroceries] = useState( groceries?.filter((item) => item.approved === true) ); const [pendingGroceries, setPendingGroceries] = useState( groceries?.filter((item) => item.approved !== true) ); 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(() => { /**/ }, [category]); useEffect(() => { setapprovedGroceries(groceries?.filter((item) => item.approved === true)); setPendingGroceries(groceries?.filter((item) => item.approved !== true)); }, [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 }) } /> )} keyExtractor={(item) => item.id.toString()} /> ) : pendingVisible && ( No items pending approval. )} {/* Approved Section */} Shopping List {approvedVisible && ( { setApprovedVisible(false); }} /> )} {!approvedVisible && ( { setApprovedVisible(true); }} /> )} {approvedGroceries?.length.toString()} {isAddingGrocery && ( )} {/* 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 }) } /> ) )} )} 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;