diff --git a/components/calender/CalenderNav.tsx b/components/calender/CalenderNav.tsx index 74ea796..82b7220 100644 --- a/components/calender/CalenderNav.tsx +++ b/components/calender/CalenderNav.tsx @@ -2,12 +2,13 @@ import React, { useContext } from "react"; import { useRouter } from "next/router"; import { HStack, IconButton } from "@chakra-ui/react"; import { Icon } from "@iconify/react"; -import { sub, add, format } from "date-fns"; +import { sub, add, format, isSameMonth } from "date-fns"; import DatePicker from "./DatePicker"; import { CalenderContext } from "../../contexts/CalenderContext"; const CalenderNav = (): JSX.Element => { - const { selectedDate } = useContext(CalenderContext); + const { selectedDate, validDateRange } = useContext(CalenderContext); + const { start: validStart, end: validEnd } = validDateRange; const router = useRouter(); @@ -43,12 +44,14 @@ const CalenderNav = (): JSX.Element => { return ( } onClick={() => handleNavButtons("prev")} /> } onClick={() => handleNavButtons("next")} diff --git a/contexts/CalenderContext.tsx b/contexts/CalenderContext.tsx index acb60fb..5de9dba 100644 --- a/contexts/CalenderContext.tsx +++ b/contexts/CalenderContext.tsx @@ -208,6 +208,19 @@ const CalenderContextProvider = ({ // TODO: Make a function that will give the valid date range for the front end. Either starting at the chart creation date or the oldest month with stickers (when enabled in filters). + const setValidDateRange = (): ValidDateRange => { + const currDate = new Date(); // Current date. + const startDate = startOfMonth(currDate); // Will eventually be the creation date of the account or the creation date of the oldest chart within the account. Whichever is older. + const endDate = endOfMonth(currDate); // Always needs to be the last day on the current month within the current year. + + return { + start: startDate, + end: endDate + }; + }; + + const [validDateRange] = useState(setValidDateRange()); + // TODO: Add a function that validated if a date has at least one sticker in it. Use that within the nav function (when filter is enabled). // TODO: Add a function that will give the closest date, if available, when the nav func detects an empty month. @@ -246,6 +259,7 @@ const CalenderContextProvider = ({ selectedDate, title: selectedDateInfo.title, layout: selectedDateInfo.layout, + validDateRange, updateDate }; diff --git a/types/CalenderContext.d.ts b/types/CalenderContext.d.ts index 76df92d..1072376 100644 --- a/types/CalenderContext.d.ts +++ b/types/CalenderContext.d.ts @@ -48,6 +48,11 @@ interface MonthContext extends MonthInfo { layout: MonthLayout; } +interface ValidDateRange { + start: Date; + end: Date; +} + interface UpdateCalendarProps { year: number; month: number; @@ -58,5 +63,6 @@ interface CalenderContextState { selectedDate: Date; title: string; layout: MonthLayout; + validDateRange: ValidDateRange; updateDate: (input: UpdateCalendarProps) => void; }