import {Checkbox, Text, TouchableOpacity, View,} from "react-native-ui-lib"; import React, {useEffect, useState} from "react"; import {AntDesign} from "@expo/vector-icons"; import {GroceryCategory, useGroceryContext,} from "@/contexts/GroceryContext"; import EditGroceryFrequency from "./EditGroceryFrequency"; import EditGroceryItem from "./EditGroceryItem"; import {StyleSheet} from "react-native"; import {IGrocery} from "@/hooks/firebase/types/groceryData"; import firestore from "@react-native-firebase/firestore"; import {UserProfile} from "@/hooks/firebase/types/profileTypes"; const GroceryItem = ({ item, handleItemApproved, }: { item: IGrocery; handleItemApproved: (id: string, changes: Partial) => void; }) => { const { updateGroceryItem } = useGroceryContext(); const [openFreqEdit, setOpenFreqEdit] = useState(false); const [isEditingTitle, setIsEditingTitle] = useState(false); const [newTitle, setNewTitle] = useState(""); const [category, setCategory] = useState( GroceryCategory.None ); const [itemCreator, setItemCreator] = useState(null); const handleTitleChange = (newTitle: string) => { updateGroceryItem({id: item?.id, title: newTitle}); }; const handleCategoryChange = (newCategory: GroceryCategory) => { updateGroceryItem({id: item?.id, category: newCategory}); }; useEffect(() => { setNewTitle(item.title); getItemCreator(item?.creatorId); }, []); const getItemCreator = async (uid: string | undefined) => { if (uid) { const documentSnapshot = await firestore() .collection("Profiles") .doc(uid) .get(); if (documentSnapshot.exists) { setItemCreator(documentSnapshot.data() as UserProfile) } } } return ( { setOpenFreqEdit(false); }} /> {!isEditingTitle ? ( setIsEditingTitle(true)}> {item.title} ) : ( )} {!item.approved ? ( { handleItemApproved(item.id, { approved: true }); }} /> { handleItemApproved(item.id, { approved: false }); }} /> ) : ( updateGroceryItem({ id: item.id, bought: !item.bought }) } /> )} {!item.approved && ( Requested by {itemCreator?.firstName} )} ); }; const styles = StyleSheet.create({ checkbox: { borderRadius: 50, borderWidth: 1, color: "#bfbfbf", borderColor: "#bfbfbf", width: 28, aspectRatio: 1, }, }); export default GroceryItem;