Date Selector and Dynamic Routes #16

Merged
LucidKobold merged 17 commits from calendar-nav into main 2021-12-05 23:23:41 -05:00
12 changed files with 624 additions and 133 deletions
Showing only changes of commit bd7f3f7da6 - Show all commits

View File

@@ -26,6 +26,7 @@ import {
} from "formik"; } from "formik";
import { format } from "date-fns"; import { format } from "date-fns";
import { CalenderContext } from "../../contexts/CalenderContext"; import { CalenderContext } from "../../contexts/CalenderContext";
import FormValidateEmoji from "./FormValidateEmoji";
interface UpdateCalendarProps { interface UpdateCalendarProps {
year: number; year: number;
@@ -129,7 +130,7 @@ const DatePicker = (): JSX.Element => {
const initRef = useRef(); const initRef = useRef();
return ( return (
<Popover placement="bottom" initialFocusRef={initRef}> <Popover w="100%" h="auto" placement="bottom" initialFocusRef={initRef}>
<PopoverTrigger> <PopoverTrigger>
<Button border="none" variant="outline"> <Button border="none" variant="outline">
<Heading w="100%" h="auto"> <Heading w="100%" h="auto">
@@ -179,6 +180,10 @@ const DatePicker = (): JSX.Element => {
spacing={6} spacing={6}
py={4} py={4}
> >
<Heading as="h4" size="sm" fontWeight="semibold">
Required fields indicated with{" "}
<FormValidateEmoji type="Required" />
</Heading>
<Field name="date" validate={validateDate}> <Field name="date" validate={validateDate}>
{({ field, form }: FieldProps) => ( {({ field, form }: FieldProps) => (
<FormControl <FormControl
@@ -196,10 +201,10 @@ const DatePicker = (): JSX.Element => {
<HStack <HStack
alignContent="center" alignContent="center"
alignItems="center" alignItems="center"
pl={6} pl={4}
w="100%" w="100%"
h="auto" h="auto"
spacing={0} spacing={2}
> >
<FormLabel fontWeight="semibold" htmlFor="date"> <FormLabel fontWeight="semibold" htmlFor="date">
{"Date:"} {"Date:"}
@@ -214,15 +219,24 @@ const DatePicker = (): JSX.Element => {
textAlign="center" textAlign="center"
{...(!form.errors.date && form.touched.date {...(!form.errors.date && form.touched.date
? { ? {
borderColor: "brand.valid",
boxShadow: "0 0 0 1px #00c17c",
_hover: {
borderColor: "brand.valid", borderColor: "brand.valid",
boxShadow: "0 0 0 1px #00c17c", boxShadow: "0 0 0 1px #00c17c",
_hover: { },
borderColor: "brand.valid", }
boxShadow: "0 0 0 1px #00c17c",
},
}
: "")} : "")}
/> />
{!form.touched.date && (
<FormValidateEmoji type="Required" />
)}
{form.errors.name && form.touched.date && (
<FormValidateEmoji type="Error" />
)}
{!form.errors.name && form.touched.date && (
<FormValidateEmoji type="Valid" />
)}
</HStack> </HStack>
<FormErrorMessage> <FormErrorMessage>
{form.errors.date} {form.errors.date}

View File

@@ -1,12 +1,12 @@
import React, { FC } from "react"; import React, { FC } from "react";
interface EmojiValidateEmojiProps { interface FormValidateEmojiProps {
type: string; type: string;
} }
const EmojiValidateEmoji: FC<EmojiValidateEmojiProps> = ({ const FormValidateEmoji: FC<FormValidateEmojiProps> = ({
type, type,
}: EmojiValidateEmojiProps) => { }: FormValidateEmojiProps) => {
interface Validations { interface Validations {
[key: string]: JSX.Element; [key: string]: JSX.Element;
} }
@@ -32,4 +32,4 @@ const EmojiValidateEmoji: FC<EmojiValidateEmojiProps> = ({
return validations[`${type}`]; return validations[`${type}`];
}; };
export default EmojiValidateEmoji; export default FormValidateEmoji