Added a sticker selector componenet.

This commit is contained in:
Lucid Kobold
2022-04-02 23:51:31 -05:00
parent 59509c51e2
commit 8a7adba7f2
3 changed files with 85 additions and 58 deletions

View File

@@ -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>

View File

@@ -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

View 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;