Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor ternary operations and callbacks in FeedbackModal.jsx #14

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
234 changes: 124 additions & 110 deletions src/components/FeedbackModal/FeedbackModal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
} from "@chakra-ui/react";
import axios from "axios";
import DataContext from "../../context/DataContext";
import { useState, useContext } from "react";
import { useState, useContext, useCallback } from "react";

export default function FeedbackModal({
setData,
Expand All @@ -24,40 +24,42 @@ export default function FeedbackModal({
}) {
const [feedbackHelped, setFeedbackHelped] = useState(null);
const { setLoading, token } = useContext(DataContext);
async function handleFeedback() {

const handleFeedback = useCallback(async () => {
if (!token) {
return;
}
setLoading(false);
axios
.put(
`${process.env.REACT_APP_AWS_BACKEND_URL}/items/${props.id}`,
{
...props,
isresolved: true,
ishelped: feedbackHelped,
},
{
headers: {
Authorization: `Bearer ${token}`, // verify auth
return;
}
setLoading(false);

axios
.put(
`${process.env.REACT_APP_AWS_BACKEND_URL}/items/${props.id}`,
{
...props,
isresolved: true,
ishelped: feedbackHelped,
},
}
)
.then(() => console.log("Success"))
.catch((err) => console.log(err));

setData((prevItems) => {
if (prevItems && prevItems.length > 0) {
return prevItems.map((item) => {
if (item.id === props.id) {
item.isresolved = true;
item.ishelped = feedbackHelped;
{
headers: {
Authorization: `Bearer ${token}`, // verify auth
},
}
return item;
});
}
return prevItems;
});
)
.then(console.log("Success"))
.catch((err) => console.log(err));

setData((prevItems) => {
if (prevItems && prevItems.length > 0) {
return prevItems.map((item) => {
if (item.id === props.id) {
item.isresolved = true;
item.ishelped = feedbackHelped;
}
return item;
});
}
return prevItems;
});

// Update the leaderboard
const pointsToAdd = props.islost ? 2 : 5;
Expand All @@ -82,90 +84,102 @@ export default function FeedbackModal({
);

setLoading(true);
}
}, [token, setLoading, props, feedbackHelped, setData, email, setLeaderboard]);

const handleNoButtonClick = useCallback(() => {
setFeedbackHelped(false);
}, []);

const handleYesButtonClick = useCallback(() => {
setFeedbackHelped(true);
}, []);

const handleCloseButtonClick = useCallback(() => {
handleFeedback();
onClose();
infoOnClose();
}, [handleFeedback, onClose, infoOnClose]);

const handleModalOnClose = useCallback(() => {
if (feedbackHelped === null) {
onClose();
} else {
onClose();
infoOnClose();
}
}, [feedbackHelped, onClose, infoOnClose]);

const feedbackRequestModal = (
<ModalContent>
<ModalHeader
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
⚠️ Feedback ⚠️
</ModalHeader>
<ModalCloseButton />
<Flex justifyContent={"center"} alignItems={"center"}>
<Text>Did ZotnFound help with resolving your item?</Text>
</Flex>
<ModalFooter
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
<Button
colorScheme="red"
mr={3}
onClick={handleNoButtonClick}
>
No 👎
</Button>
<Button
colorScheme="green"
onClick={handleYesButtonClick}
>
Yes 👍
</Button>
</ModalFooter>
</ModalContent>
);

const feedbackHelpedModal = (
<ModalContent>
<ModalHeader
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
❤️ Thank You For Your Feedback ❤️
</ModalHeader>
<ModalCloseButton />
<Flex justifyContent={"center"} alignItems={"center"}>
<Text>Your feedback has been recorded.</Text>
</Flex>
<ModalFooter
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
<Button
colorScheme="red"
mr={3}
onClick={handleCloseButtonClick}
>
Close
</Button>
</ModalFooter>
</ModalContent>
);

return (
<Modal
isOpen={isOpen}
onClose={() => {
if (feedbackHelped === null) {
onClose();
} else {
onClose();
infoOnClose();
}
}}
onClose={handleModalOnClose}
>
<ModalOverlay />
{feedbackHelped === null ? (
<ModalContent>
<ModalHeader
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
⚠️ Feedback ⚠️
</ModalHeader>
<ModalCloseButton />
<Flex justifyContent={"center"} alignItems={"center"}>
<Text>Did ZotnFound help with resolving your item?</Text>
</Flex>
<ModalFooter
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
<Button
colorScheme="red"
mr={3}
onClick={() => {
setFeedbackHelped(false);
}}
>
No 👎
</Button>
<Button
colorScheme="green"
onClick={() => {
setFeedbackHelped(true);
}}
>
Yes 👍
</Button>
</ModalFooter>
</ModalContent>
) : (
<ModalContent>
<ModalHeader
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
❤️ Thank You For Your Feedback ❤️
</ModalHeader>
<ModalCloseButton />
<Flex justifyContent={"center"} alignItems={"center"}>
<Text>Your feedback has been recorded.</Text>
</Flex>
<ModalFooter
display={"flex"}
alignItems={"center"}
justifyContent={"center"}
>
<Button
colorScheme="red"
mr={3}
onClick={() => {
handleFeedback();
onClose();
infoOnClose();
}}
>
Close
</Button>
</ModalFooter>
</ModalContent>
)}
{feedbackHelped === null ? feedbackRequestModal : feedbackHelpedModal}
</Modal>
);
}