From 2ca6bab953d7438e88fa501e533c89ae5c6fda11 Mon Sep 17 00:00:00 2001 From: Lucid Kobold Date: Sun, 5 Dec 2021 16:47:26 -0600 Subject: [PATCH] Added dynamic calender route. --- pages/calendar/[...date].tsx | 78 ++++++++++++++++++++++++++++++++++++ pages/calendar/index.tsx | 23 +++++++++++ 2 files changed, 101 insertions(+) create mode 100644 pages/calendar/[...date].tsx create mode 100644 pages/calendar/index.tsx diff --git a/pages/calendar/[...date].tsx b/pages/calendar/[...date].tsx new file mode 100644 index 0000000..f5a91c1 --- /dev/null +++ b/pages/calendar/[...date].tsx @@ -0,0 +1,78 @@ +import React, { useEffect, useState } from "react"; +import { Box } from "@chakra-ui/react"; +import { useRouter } from "next/router"; +import ErrorPage from "next/error"; +import Calender from "../../components/calender"; +import { CalenderContextProvider } from "../../contexts/CalenderContext"; + +interface UpdateCalendarProps { + year: number; + month: number; + day: number; +} + +const DateRoute: React.FC = () => { + const router = useRouter(); + const { date: slug } = router.query; + + const [date, setDate] = useState(null); + + const validateDateInput = (dateArr: number[]): UpdateCalendarProps => { + if (!(dateArr.length >= 2) && !(dateArr.length <= 3)) { + return { + year: 0, + month: 0, + day: 0, + }; + } + + const date = { + year: 0, + month: 0, + day: 0, + } + + if (/^(19|20)\d{2}$/.test(`${dateArr[0]}`)) { + date.year = dateArr[0]; + } + + if ((dateArr[1] > 0) || (dateArr[1] <= 12)) { + date.month = dateArr[1] + } + + if (dateArr[2] && ((dateArr[2] > 0) || (dateArr[2] <= 31))) { + date.day = dateArr[2] + } else if (!dateArr[2]) { + date.day = 1; + } + + return date; + }; + + useEffect(() => { + if (slug && slug.length === 1 && slug[0] !== "now") { + return console.warn("improper date input"); + } + + if (slug && Array.isArray(slug) && slug.length >= 2 && slug.length <= 3) { + const parsedSlug = slug.map((e) => { + return parseInt(e); + }); + setDate({...validateDateInput(parsedSlug)}); + } + }, [slug]); + + if (router.isFallback) { + return ; + } + + return ( + + + + + + ); +}; + +export default DateRoute; diff --git a/pages/calendar/index.tsx b/pages/calendar/index.tsx new file mode 100644 index 0000000..7db5a70 --- /dev/null +++ b/pages/calendar/index.tsx @@ -0,0 +1,23 @@ +import React, { useEffect } from "react"; +import { useRouter } from "next/router"; +import { Box, Heading } from "@chakra-ui/react"; + +const DateRoute = () => { + const router = useRouter(); + + useEffect(() => { + if (router) { + router.push("calendar/now"); + } + }, [router]); + + return ( + + + Loading + + + ); +}; + +export default DateRoute;