Added a sticker selector componenet.
This commit is contained in:
@@ -66,6 +66,9 @@ const Day = ({
|
|||||||
// The step the modal is at.
|
// The step the modal is at.
|
||||||
const [step, setStep] = useState<number>(0);
|
const [step, setStep] = useState<number>(0);
|
||||||
|
|
||||||
|
// The current selected sticker.
|
||||||
|
const [selectedSticker, setSelectedSticker] = useState<StickerVal>(null);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Add logic to remove the onClick within overflow dates.
|
* TODO: Add logic to remove the onClick within overflow dates.
|
||||||
* Do not give dates for the next month an onClick.
|
* Do not give dates for the next month an onClick.
|
||||||
@@ -119,6 +122,7 @@ const Day = ({
|
|||||||
h="100%"
|
h="100%"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setStep(0);
|
setStep(0);
|
||||||
|
setSelectedSticker(null);
|
||||||
setIsOpen(true);
|
setIsOpen(true);
|
||||||
}}
|
}}
|
||||||
alignContent="center"
|
alignContent="center"
|
||||||
@@ -165,6 +169,8 @@ const Day = ({
|
|||||||
currSticker={stickerState}
|
currSticker={stickerState}
|
||||||
step={step}
|
step={step}
|
||||||
updateStep={setStep}
|
updateStep={setStep}
|
||||||
|
selectedSticker={selectedSticker}
|
||||||
|
updateSelectedSticker={setSelectedSticker}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</StickersContextProvider>
|
</StickersContextProvider>
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import {
|
|||||||
} from "@chakra-ui/react";
|
} from "@chakra-ui/react";
|
||||||
import React, { useState, useContext } from "react";
|
import React, { useState, useContext } from "react";
|
||||||
import { format, isSameDay } from "date-fns";
|
import { format, isSameDay } from "date-fns";
|
||||||
import DemoStickers from "../stickers/DemoStickers";
|
|
||||||
import { StickersContext } from "../../../contexts/StickerContext";
|
import { StickersContext } from "../../../contexts/StickerContext";
|
||||||
|
import StickerSelector from "./StickerSelector";
|
||||||
|
|
||||||
interface AddStickerProps {
|
interface AddStickerProps {
|
||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
@@ -23,6 +23,8 @@ interface AddStickerProps {
|
|||||||
currSticker: StickerVal;
|
currSticker: StickerVal;
|
||||||
step: number;
|
step: number;
|
||||||
updateStep: React.Dispatch<React.SetStateAction<number>>;
|
updateStep: React.Dispatch<React.SetStateAction<number>>;
|
||||||
|
selectedSticker: StickerVal;
|
||||||
|
updateSelectedSticker: React.Dispatch<React.SetStateAction<StickerVal>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,7 +44,9 @@ const AddSticker = ({
|
|||||||
updateSticker,
|
updateSticker,
|
||||||
currSticker,
|
currSticker,
|
||||||
step,
|
step,
|
||||||
updateStep
|
updateStep,
|
||||||
|
selectedSticker,
|
||||||
|
updateSelectedSticker
|
||||||
}: AddStickerProps): JSX.Element => {
|
}: AddStickerProps): JSX.Element => {
|
||||||
// TODO: Import the stickers array from the calender context.
|
// TODO: Import the stickers array from the calender context.
|
||||||
|
|
||||||
@@ -54,8 +58,6 @@ const AddSticker = ({
|
|||||||
* Show a message when a date before the current date is selected.
|
* Show a message when a date before the current date is selected.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const [selectedSticker, setSelectedSticker] = useState<StickerVal>(null);
|
|
||||||
|
|
||||||
const { addEditSticker } = useContext(StickersContext);
|
const { addEditSticker } = useContext(StickersContext);
|
||||||
|
|
||||||
const [modalVariant] = useState<"currDate" | "notCurrDate">(
|
const [modalVariant] = useState<"currDate" | "notCurrDate">(
|
||||||
@@ -65,7 +67,6 @@ const AddSticker = ({
|
|||||||
// ! Step is not setting back to 0 when modal is closet. Try to move out of this component and take it in as an arg.
|
// ! Step is not setting back to 0 when modal is closet. Try to move out of this component and take it in as an arg.
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
setSelectedSticker(null);
|
|
||||||
updateIsOpen(false);
|
updateIsOpen(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -88,41 +89,12 @@ const AddSticker = ({
|
|||||||
{
|
{
|
||||||
header: `Which sticker did you earn for ${format(date, "LLL d, y")}?`,
|
header: `Which sticker did you earn for ${format(date, "LLL d, y")}?`,
|
||||||
body: (
|
body: (
|
||||||
<HStack
|
<StickerSelector
|
||||||
w="100%"
|
stickerSet="Demo"
|
||||||
h="auto"
|
currSticker={currSticker}
|
||||||
justifyContent={"center"}
|
selectedSticker={selectedSticker}
|
||||||
alignContent={"center"}
|
updateSelectedSticker={updateSelectedSticker}
|
||||||
spacing={14}
|
/>
|
||||||
>
|
|
||||||
<Button
|
|
||||||
isDisabled={currSticker >= 1}
|
|
||||||
border={selectedSticker === 1 ? "1px solid #FFF" : "opx"}
|
|
||||||
bg={selectedSticker === 1 && "gray.800"}
|
|
||||||
onClick={() => setSelectedSticker(1)}
|
|
||||||
variant="stickerButton"
|
|
||||||
>
|
|
||||||
<DemoStickers stickerVal={1} />
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
isDisabled={currSticker === 0}
|
|
||||||
border={selectedSticker === 0 ? "1px solid #FFF" : "opx"}
|
|
||||||
bg={selectedSticker === 0 && "gray.800"}
|
|
||||||
onClick={() => setSelectedSticker(0)}
|
|
||||||
variant="stickerButton"
|
|
||||||
>
|
|
||||||
<DemoStickers stickerVal={0} />
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
isDisabled={currSticker <= -1}
|
|
||||||
border={selectedSticker === -1 ? "1px solid #FFF" : "opx"}
|
|
||||||
bg={selectedSticker === -1 && "gray.800"}
|
|
||||||
onClick={() => setSelectedSticker(-1)}
|
|
||||||
variant="stickerButton"
|
|
||||||
>
|
|
||||||
<DemoStickers stickerVal={-1} />
|
|
||||||
</Button>
|
|
||||||
</HStack>
|
|
||||||
),
|
),
|
||||||
footer: (
|
footer: (
|
||||||
<Button
|
<Button
|
||||||
@@ -144,15 +116,12 @@ const AddSticker = ({
|
|||||||
"LLL d, y"
|
"LLL d, y"
|
||||||
)}?`,
|
)}?`,
|
||||||
body: (
|
body: (
|
||||||
<Text
|
<StickerSelector
|
||||||
w="100%"
|
stickerSet="Demo"
|
||||||
h="auto "
|
currSticker={currSticker}
|
||||||
fontSize={"3xl"}
|
selectedSticker={selectedSticker}
|
||||||
textAlign={"center"}
|
updateSelectedSticker={updateSelectedSticker}
|
||||||
fontWeight={"bold"}
|
/>
|
||||||
>
|
|
||||||
{"Filler"}
|
|
||||||
</Text>
|
|
||||||
),
|
),
|
||||||
footer: (
|
footer: (
|
||||||
<Button
|
<Button
|
||||||
@@ -216,15 +185,6 @@ const AddSticker = ({
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
// const JSX = <></>;
|
|
||||||
// const example = {
|
|
||||||
// currDate: [{ header: JSX, body: JSX, footer: JSX }],
|
|
||||||
// notCurrDate: [
|
|
||||||
// { header: JSX, body: JSX, footer: JSX },
|
|
||||||
// { header: JSX, body: JSX, footer: JSX }
|
|
||||||
// ]
|
|
||||||
// };
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
isCentered
|
isCentered
|
||||||
|
|||||||
61
components/calender/modals/StickerSelector.tsx
Normal file
61
components/calender/modals/StickerSelector.tsx
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
import { HStack, Button } from "@chakra-ui/react";
|
||||||
|
import React from "react";
|
||||||
|
import DemoStickers from "../stickers/DemoStickers";
|
||||||
|
|
||||||
|
interface StickerSelectorProps {
|
||||||
|
stickerSet: "Demo";
|
||||||
|
currSticker: StickerVal;
|
||||||
|
selectedSticker: StickerVal;
|
||||||
|
updateSelectedSticker: React.Dispatch<React.SetStateAction<StickerVal>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const StickerSelector = ({
|
||||||
|
stickerSet,
|
||||||
|
currSticker,
|
||||||
|
selectedSticker,
|
||||||
|
updateSelectedSticker
|
||||||
|
}: StickerSelectorProps): JSX.Element => {
|
||||||
|
const stickers = {
|
||||||
|
Demo: (
|
||||||
|
<HStack
|
||||||
|
w="100%"
|
||||||
|
h="auto"
|
||||||
|
justifyContent={"center"}
|
||||||
|
alignContent={"center"}
|
||||||
|
spacing={14}
|
||||||
|
>
|
||||||
|
<Button
|
||||||
|
isDisabled={currSticker >= 1}
|
||||||
|
border={selectedSticker === 1 ? "1px solid #FFF" : "opx"}
|
||||||
|
bg={selectedSticker === 1 && "gray.800"}
|
||||||
|
onClick={() => updateSelectedSticker(1)}
|
||||||
|
variant="stickerButton"
|
||||||
|
>
|
||||||
|
<DemoStickers stickerVal={1} />
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
isDisabled={currSticker === 0}
|
||||||
|
border={selectedSticker === 0 ? "1px solid #FFF" : "opx"}
|
||||||
|
bg={selectedSticker === 0 && "gray.800"}
|
||||||
|
onClick={() => updateSelectedSticker(0)}
|
||||||
|
variant="stickerButton"
|
||||||
|
>
|
||||||
|
<DemoStickers stickerVal={0} />
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
isDisabled={currSticker <= -1}
|
||||||
|
border={selectedSticker === -1 ? "1px solid #FFF" : "opx"}
|
||||||
|
bg={selectedSticker === -1 && "gray.800"}
|
||||||
|
onClick={() => updateSelectedSticker(-1)}
|
||||||
|
variant="stickerButton"
|
||||||
|
>
|
||||||
|
<DemoStickers stickerVal={-1} />
|
||||||
|
</Button>
|
||||||
|
</HStack>
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
return stickers[stickerSet];
|
||||||
|
};
|
||||||
|
|
||||||
|
export default StickerSelector;
|
||||||
Reference in New Issue
Block a user