import React, { useEffect, useRef, useState } from "react"; import { LayoutChangeEvent, StyleSheet } from "react-native"; import { Calendar } from "react-native-big-calendar"; import { Picker, PickerModes, SegmentedControl, View, Text } from "react-native-ui-lib"; import { MaterialIcons } from "@expo/vector-icons"; import { AddEventDialog } from "@/components/pages/calendar/AddEventDialog"; import { useAuthContext } from "@/contexts/AuthContext"; import HeaderTemplate from "@/components/shared/HeaderTemplate"; import CalendarViewSwitch from "@/components/pages/calendar/CalendarViewSwitch"; import { ManuallyAddEventModal } from "@/components/pages/calendar/ManuallyAddEventModal"; import { CalendarEvent, useCalendarContext } from "@/contexts/CalendarContext"; import { useSettingsContext } from "@/contexts/SettingsContext"; import EditEventDialog from "./EditEventDialog"; import {useGetEvents} from "@/hooks/firebase/useGetEvents"; const modeMap = new Map([ [0, "day"], [1, "week"], [2, "month"], ]); const months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ]; export default function CalendarPage() { const { calendarColor } = useSettingsContext(); const [editVisible, setEditVisible] = useState(false); const [eventForEdit, setEventForEdit] = useState(); const styles = StyleSheet.create({ segmentslblStyle: { fontSize: 14, }, calHeader: { borderWidth: 0, }, }); const { profileData } = useAuthContext(); const [isFamilyView, setIsFamilyView] = useState(true); const [calendarHeight, setCalendarHeight] = useState(0); const [mode, setMode] = useState<"week" | "month" | "day">("week"); const [selectedDate, setSelectedDate] = useState(new Date()); const [selectedNewEventDate, setSelectedNewEndDate] = useState< Date | undefined >(undefined); const calendarContainerRef = useRef(null); // const { events, familyEvents } = useCalendarContext(); const {data: events} = useGetEvents() const onLayout = (event: LayoutChangeEvent) => { const { height } = event.nativeEvent.layout; setCalendarHeight(height); }; const handleSegmentChange = (index: number) => { const selectedMode = modeMap.get(index); if (selectedMode) { setMode(selectedMode as "day" | "week" | "month"); } }; const handleMonthChange = (month: string) => { // Get the current day and year const currentDay = selectedDate.getDate(); const currentYear = selectedDate.getFullYear(); // Find the new month index const newMonthIndex = months.indexOf(month); // Create a new Date object with the selected month, preserving day and year const updatedDate = new Date(currentYear, newMonthIndex, currentDay); // Update both selectedDate and activeDate in the Calendar component setSelectedDate(updatedDate); }; return ( handleMonthChange(itemValue as string)} trailingAccessory={} > {months.map((month) => ( ))} {calendarHeight > 0 && ( { setEditVisible(true); setEventForEdit(event); }} height={calendarHeight} activeDate={selectedDate} date={selectedDate} onPressCell={setSelectedNewEndDate} /> )} {eventForEdit && ( { setEditVisible(!editVisible); }} event={eventForEdit} /> )} setSelectedNewEndDate(undefined)} /> ); }