import { Button, ButtonSize, DateTimePicker, Dialog, Picker, PickerModes, Switch, Text, TextField, TextFieldRef, View } from "react-native-ui-lib"; import React, {useEffect, useRef, useState} from "react"; import PointsSlider from "@/components/shared/PointsSlider"; import {repeatOptions, useToDosContext} from "@/contexts/ToDosContext"; import {Ionicons} from "@expo/vector-icons"; import {PanningDirectionsEnum} from "react-native-ui-lib/src/incubator/panView"; import {Alert, Dimensions, KeyboardAvoidingView, StyleSheet} from "react-native"; import DropModalIcon from "@/assets/svgs/DropModalIcon"; import {IToDo} from "@/hooks/firebase/types/todoData"; import AssigneesDisplay from "@/components/shared/AssigneesDisplay"; import {useGetFamilyMembers} from "@/hooks/firebase/useGetFamilyMembers"; import CalendarIcon from "@/assets/svgs/CalendarIcon"; import ProfileIcon from "@/assets/svgs/ProfileIcon"; import RepeatFreq from "./RepeatFreq"; import {useAuthContext} from "@/contexts/AuthContext"; import TodoRepeatIcon from "@/assets/svgs/TodoRepeatIcon"; interface IAddChoreDialog { isVisible: boolean; setIsVisible: (value: boolean) => void; selectedTodo?: IToDo; } const defaultTodo = { id: "", title: "", points: 10, date: new Date(), rotate: false, repeatType: "Every week", assignees: [], repeatDays: [] }; const AddChoreDialog = (addChoreDialogProps: IAddChoreDialog) => { const {user} = useAuthContext() const {addToDo, updateToDo} = useToDosContext(); const [todo, setTodo] = useState( addChoreDialogProps.selectedTodo ?? defaultTodo ); const [selectedAssignees, setSelectedAssignees] = useState( addChoreDialogProps?.selectedTodo?.assignees ?? [user?.uid] ); const {width} = Dimensions.get("screen"); const [points, setPoints] = useState(todo.points); const titleRef = useRef(null) const {data: members} = useGetFamilyMembers(); let sortedMembers = members?.sort((a, b) => { if (a.uid === user?.uid) return -1; if (b.uid === user?.uid) return 1; return 0; }) const handleClose = () => { setTodo(defaultTodo); setSelectedAssignees([]); addChoreDialogProps.setIsVisible(false); }; const handleChange = (text: string) => { const numericValue = parseInt(text, 10); if (!isNaN(numericValue) && numericValue >= 0 && numericValue <= 100) { setPoints(numericValue); } else if (text === "") { setPoints(0); } }; const handleRepeatDaysChange = (day: string, set: boolean) => { if (set) { const updatedTodo = { ...todo, repeatDays: [...todo.repeatDays, day] } setTodo(updatedTodo); } else { const array = todo.repeatDays ?? []; let index = array.indexOf(day); array.splice(index, 1); const updatedTodo = { ...todo, repeatDays: array } setTodo(updatedTodo); } } useEffect(() => { setTimeout(() => { titleRef?.current?.focus() }, 500) }, []); const repeatPickerRef = useRef(); const showRepeatPicker = () => { repeatPickerRef.current?.toggleExpandable(true); } const validateTodo = () => { if (!todo?.title) { Alert.alert('Alert', 'Title field cannot be empty'); return false; } if (!selectedAssignees || selectedAssignees?.length === 0) { Alert.alert('Alert', 'Cannot have a todo without any assignees'); return false; } return true; } return ( handleClose} containerStyle={{ borderRadius: 10, backgroundColor: "white", alignSelf: "stretch", padding: 0, paddingTop: 4, margin: 0, maxWidth: 600 }} visible={addChoreDialogProps.isVisible} > ); }; export default AddChoreDialog; const styles = StyleSheet.create({ divider: {height: 1, backgroundColor: "#e4e4e4", marginVertical: 15}, gradient: { height: "25%", position: "absolute", bottom: 0, width: "100%", }, buttonContainer: { position: "absolute", bottom: 25, width: "100%", }, button: { backgroundColor: "rgb(253, 23, 117)", paddingVertical: 20, }, topBtn: { backgroundColor: "white", color: "#05a8b6", }, rotateSwitch: { marginLeft: 35, marginBottom: 10, marginTop: 25, }, sub: { fontFamily: "Manrope_600SemiBold", fontSize: 18, }, });