import { Avatar, Colors, DateTimePicker, LoaderScreen, Modal, Picker, Switch, Text, TextField, View } from "react-native-ui-lib"; import {ScrollView, TouchableOpacity} from "react-native-gesture-handler"; import {useSafeAreaInsets} from "react-native-safe-area-context"; import {useState} from "react"; import {MaterialIcons} from "@expo/vector-icons"; import {PickerMultiValue} from "react-native-ui-lib/src/components/picker/types"; import {useAuthContext} from "@/contexts/AuthContext"; import {useCreateEvent} from "@/hooks/firebase/useCreateEvent"; import {EventData} from "@/hooks/firebase/types/eventData"; const daysOfWeek = [ {label: "Monday", value: "monday"}, {label: "Tuesday", value: "tuesday"}, {label: "Wednesday", value: "wednesday"}, {label: "Thursday", value: "thursday"}, {label: "Friday", value: "friday"}, {label: "Saturday", value: "saturday"}, {label: "Sunday", value: "sunday"}, ]; export const ManuallyAddEventModal = ({show, close}: { show: boolean, close: () => void }) => { const {user} = useAuthContext() const insets = useSafeAreaInsets(); const [title, setTitle] = useState(""); const [isAllDay, setIsAllDay] = useState(false); const [startTime, setStartTime] = useState(new Date()); const [endTime, setEndTime] = useState(new Date()) const [startDate, setStartDate] = useState(new Date()); const [endDate, setEndDate] = useState(new Date()) const [repeatInterval, setRepeatInterval] = useState([]); const {mutateAsync: createEvent, isLoading, isError} = useCreateEvent() const formatDateTime = (date: Date) => { return date.toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric' }); }; const combineDateAndTime = (date: Date, time: Date): Date => { const combined = new Date(date); combined.setHours(time.getHours()); combined.setMinutes(time.getMinutes()); combined.setSeconds(0); combined.setMilliseconds(0); return combined; }; const handleSave = async () => { let finalStartDate: Date; let finalEndDate: Date; if (isAllDay) { finalStartDate = new Date(startDate); finalStartDate.setHours(0, 0, 0, 0); finalEndDate = new Date(startDate); finalEndDate.setHours(23, 59, 59, 999); } else { finalStartDate = combineDateAndTime(startDate, startTime); finalEndDate = combineDateAndTime(endDate, endTime); } const eventData: Partial = { title, startDate: finalStartDate, endDate: finalEndDate, repeatDays: repeatInterval.map(x => x.toString()), allDay: isAllDay }; await createEvent(eventData) close(); }; const getRepeatLabel = () => { const selectedDays = repeatInterval const allDays = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]; const workDays = ["monday", "tuesday", "wednesday", "thursday", "friday"]; const isEveryWorkDay = workDays.every(day => selectedDays.includes(day)); const isEveryDay = allDays.every(day => selectedDays.includes(day)); if (isEveryDay) { return "Every day"; } else if (isEveryWorkDay && !selectedDays.includes("saturday") && !selectedDays.includes("sunday")) { return "Every work day"; } else { return selectedDays .map(item => daysOfWeek.find(day => day.value === item)?.label) .join(", "); } }; if (isLoading && !isError) { return ( ) } return ( Cancel Add event Save All-day setIsAllDay(value)} /> {!isAllDay && ( )} {!isAllDay && ( )} setRepeatInterval(items)} placeholder="Doest not repeat" style={{marginLeft: 10, flex: 1}} mode={Picker.modes.MULTI} getLabel={getRepeatLabel} > {daysOfWeek.map((option) => ( ))} Other {user?.email} ); };