import { View, Text, TouchableOpacity, Dialog, Button, ButtonSize, Checkbox, } from "react-native-ui-lib"; import React, { useEffect, useState } from "react"; import { useToDosContext } from "@/contexts/ToDosContext"; import { Ionicons } from "@expo/vector-icons"; import PointsSlider from "@/components/shared/PointsSlider"; import { IToDo } from "@/hooks/firebase/types/todoData"; import { ImageBackground, StyleSheet } from "react-native"; import AddChoreDialog from "@/components/pages/todos/AddChoreDialog"; import { useGetFamilyMembers } from "@/hooks/firebase/useGetFamilyMembers"; import RepeatIcon from "@/assets/svgs/RepeatIcon"; import { ProfileType, useAuthContext } from "@/contexts/AuthContext"; import { format } from "date-fns"; import { Image } from "react-native"; const ToDoItem = (props: { item: IToDo; isSettings?: boolean; is7Days?: boolean; localTodos: Array; setLocalTodos: Function; }) => { const { updateToDo } = useToDosContext(); const { data: members } = useGetFamilyMembers(); const { profileData } = useAuthContext(); const isParent = profileData?.userType === ProfileType.PARENT; const isChild = profileData?.userType === ProfileType.CHILD; const [showAnimation, setShowAnimation] = useState(false); const [visible, setVisible] = useState(false); const [points, setPoints] = useState(props.item.points); const [pointsModalVisible, setPointsModalVisible] = useState(false); const [creator, setCreator] = useState(""); useEffect(() => { let creatorMember = members?.find( (member) => member?.uid === props.item.creatorId ); const fullName = `${creatorMember?.firstName ?? ""}`; setCreator(fullName); }, []); const handlePointsChange = (text: string) => { const numericValue = parseInt(text, 10); if (!isNaN(numericValue) && numericValue >= 0 && numericValue <= 100) { setPoints(numericValue); } else if (text === "") { setPoints(0); } }; const getInitials = (firstName: string, lastName: string) => { return `${firstName.charAt(0)}${lastName.charAt(0)}`; }; const selectedMembers = members?.filter((x) => props?.item?.assignees?.includes(x?.uid!) ); let isTodoEditable; if (isParent) { isTodoEditable = true; } else { isTodoEditable = props.item.creatorId === profileData?.uid; } const handleTodoClickAnimation = () => { setShowAnimation(true); // Optionally hide animation after 2 seconds setTimeout(() => { setShowAnimation(false); }, 2000); }; return ( {showAnimation && ( )} {visible && ( )} { isTodoEditable ? setVisible(true) : null; }} hitSlop={{right: 150, top:10}} > {props.item.title} { const updatedTodos = props.localTodos?.map((item) => item.id === props.item.id ? { ...item, done: !props.item.done } : item ); props.setLocalTodos(updatedTodos); updateToDo({ id: props.item.id, done: !props.item.done }); if (!props.item.done && isChild) { handleTodoClickAnimation(); } }} /> {props.item.points && props.item.points > 0 ? ( { if (props.isSettings) { setPointsModalVisible(true); } }} > {props.item.points} points ) : ( )} {!(props.item.repeatType == "None") && ( {(() => { switch (props.item.repeatType) { case "Once a month": return "Monthly"; case "Every week": return "Weekly"; case "Once a year": return "Yearly"; default: return props.item.repeatType; } })()} {props.item.date && props.is7Days && " / " + format(props.item.date, "EEEE")} )} Created by: {creator} {selectedMembers?.map((member) => { return member?.pfp ? ( ) : ( {getInitials(member.firstName, member.lastName ?? "")} ); })} setPointsModalVisible(false)} containerStyle={{ padding: 20, borderRadius: 15, backgroundColor: "white", }} children={ Reward points {points && ( )}