import { addDays, addWeeks, eachDayOfInterval, eachWeekOfInterval, format, isSameMonth, } from "date-fns"; import React, { useMemo } from "react"; import { StyleSheet, Text, View } from "react-native"; import { useCalendarContext } from "./context"; import { DayWrapper } from "./Day"; import { DayLabels } from "./DayLabels"; function Week({ days, firstDayOfMonth, }: { days: Date[]; firstDayOfMonth: Date; }) { const { WeekComponent } = useCalendarContext(); return WeekComponent ? ( ) : ( {days.map((day) => { const sameMonth = isSameMonth(day, firstDayOfMonth); const dayDateFormatted = format(day, "yyyy-MM-dd"); return ( ); })} ); } export default Week; export const WeekPage = React.memo(({ index }: { index: number }) => { const { referenceDate, HeaderComponent, theme, weekStartsOn } = useCalendarContext(); const weekOffset = useMemo( () => addWeeks(referenceDate, index), [referenceDate, index] ); const firstDayOfMonth = useMemo( () => new Date(addDays(weekOffset, 3)), [weekOffset] ); firstDayOfMonth.setDate(1); const weekWithStart = useMemo( () => eachWeekOfInterval( { start: weekOffset, end: weekOffset, }, { weekStartsOn, } ), [weekOffset, weekStartsOn] ); const daysOfWeek = useMemo( () => eachDayOfInterval({ start: weekWithStart[0], end: addDays(weekWithStart[0], 6), }), [weekWithStart] ); const headerText = format(firstDayOfMonth, theme.headerDateFormat); return ( <> {HeaderComponent ? ( ) : ( {headerText} )} ); }); const styles = StyleSheet.create({ weekContainer: { flexDirection: "row", justifyContent: "space-between", }, row: { flexDirection: "row", }, });