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",
},
});