diff --git a/src/assets/coin.gif b/src/assets/coin.gif new file mode 100644 index 0000000..297566d Binary files /dev/null and b/src/assets/coin.gif differ diff --git a/src/assets/index.jsx b/src/assets/index.jsx index 36e0385..95d9164 100644 --- a/src/assets/index.jsx +++ b/src/assets/index.jsx @@ -2,5 +2,6 @@ import coin from "./coin.svg"; import buy from "./buy-blue.svg"; import error from "./error.gif"; import success from "./success.gif"; +import coin_animated from "./coin.gif"; -export { coin, buy, error, success }; +export { coin, buy, error, success, coin_animated }; diff --git a/src/components/Modals/CoinsModal.jsx b/src/components/Modals/CoinsModal.jsx index f5c80a9..9d6502c 100644 --- a/src/components/Modals/CoinsModal.jsx +++ b/src/components/Modals/CoinsModal.jsx @@ -1,10 +1,33 @@ -import React from "react"; +import React, { useState, useContext } from "react"; import { createPortal } from "react-dom"; import "./modal.scss"; -import { success } from "../../assets/index"; +import { coin_animated } from "../../assets/index"; +import { addPoints } from "../../services/userService"; +import { UserContext } from "../../providers/UserProvider"; -const CoinsModal = ({ isShowing, hide }) => - isShowing +const CoinsModal = ({ isShowing, hide }) => { + const [selected, setSelected] = useState(1000); + + const { setUserResponse } = useContext(UserContext); + + const handleSubmit = (event) => { + event.preventDefault(); + addPoints(Number.parseInt(selected)) + .then((res) => { + console.log("response", res); + setUserResponse(res); + hide(); + }) + .catch((err) => { + console.log("error", err); + }); + }; + + const handleChange = (event) => { + setSelected(event.target.value); + }; + + return isShowing ? createPortal( <>
@@ -28,20 +51,38 @@ const CoinsModal = ({ isShowing, hide }) =>
-
+ + error
- +
- +
- +
- +
@@ -50,5 +91,5 @@ const CoinsModal = ({ isShowing, hide }) => document.body ) : null; - +}; export default CoinsModal; diff --git a/src/components/Modals/modal.scss b/src/components/Modals/modal.scss index 5640c91..7bc9468 100644 --- a/src/components/Modals/modal.scss +++ b/src/components/Modals/modal.scss @@ -83,6 +83,14 @@ button { color: #43a764; } + .coins { + cursor: pointer; + font-size: 20px; + margin-top: 10px; + outline: none; + color: #c7aa0a; + } + .gif { align-self: center; max-width: 200px; diff --git a/src/components/Products/Product.jsx b/src/components/Products/Product.jsx index e59eec7..cd804e4 100644 --- a/src/components/Products/Product.jsx +++ b/src/components/Products/Product.jsx @@ -15,8 +15,9 @@ const Product = ({ cost, img: { url }, }, + onFetch, }) => { - const user = useContext(UserContext); + const { user, setUserResponse } = useContext(UserContext); useEffect(() => { if (!user) return; @@ -30,12 +31,14 @@ const Product = ({ const { points } = user; - const canBuy = cost >= points; + const canBuy = cost <= points; const showResponseModal = () => { redeemProduct(_id) .then((res) => { toggleSuccessModal(); + setUserResponse(res); + onFetch(res); }) .catch((err) => { toggleErrorModal(); diff --git a/src/components/Products/ProductsList.jsx b/src/components/Products/ProductsList.jsx index 6ec0672..d1c4edd 100644 --- a/src/components/Products/ProductsList.jsx +++ b/src/components/Products/ProductsList.jsx @@ -5,7 +5,7 @@ import { ProductsContext } from "../../providers/index"; import "./products.scss"; const ProductsList = () => { - const products = useContext(ProductsContext); + const { products, setProductResponse } = useContext(ProductsContext); useEffect(() => { if (!products) return; @@ -18,7 +18,7 @@ const ProductsList = () => { <>
{currentData().map((item, key) => { - return ; + return ; })}
diff --git a/src/components/Products/products.scss b/src/components/Products/products.scss index 74ae507..0453c97 100644 --- a/src/components/Products/products.scss +++ b/src/components/Products/products.scss @@ -17,6 +17,10 @@ border-radius: 12px; box-shadow: 0px 13px 10px -7px rgba(0, 0, 0, 0.1); + button { + cursor: pointer; + } + .img { background-size: contain; background-position: center; diff --git a/src/components/User/UserPanel.jsx b/src/components/User/UserPanel.jsx index 56149ae..831b904 100644 --- a/src/components/User/UserPanel.jsx +++ b/src/components/User/UserPanel.jsx @@ -4,7 +4,7 @@ import { UserContext } from "../../providers/UserProvider"; import "./user.scss"; const UserPanel = () => { - const user = useContext(UserContext); + const { user } = useContext(UserContext); useEffect(() => { if (!user) return; diff --git a/src/providers/ProductsProvider.jsx b/src/providers/ProductsProvider.jsx index 8a836df..0ff9859 100644 --- a/src/providers/ProductsProvider.jsx +++ b/src/providers/ProductsProvider.jsx @@ -6,14 +6,16 @@ export const ProductsContext = React.createContext(); const ProductsProvider = ({ children }) => { const [products, setProducts] = useState({}); + const [productResponse, setProductResponse] = useState({}); + useEffect(() => { getProducts().then((products) => { setProducts(products); }); - }, []); + }, [productResponse]); return ( - + {children} ); diff --git a/src/providers/UserProvider.jsx b/src/providers/UserProvider.jsx index 7b85234..0659398 100644 --- a/src/providers/UserProvider.jsx +++ b/src/providers/UserProvider.jsx @@ -6,13 +6,19 @@ export const UserContext = React.createContext(); const UserProvider = ({ children }) => { const [user, setUser] = useState({}); + const [userResponse, setUserResponse] = useState({}); + useEffect(() => { getUser().then((user) => { setUser(user); }); - }, []); + }, [userResponse]); - return {children}; + return ( + + {children} + + ); }; export default UserProvider; diff --git a/src/services/userService.jsx b/src/services/userService.jsx index 6fb352d..04f5771 100644 --- a/src/services/userService.jsx +++ b/src/services/userService.jsx @@ -5,7 +5,7 @@ const headers = { Authorization: `Bearer ${API.AUTH_TOKEN}`, }; -export const getUser = async () => { +export const getUser = () => { return fetch(API.USER, { headers }) .then((response) => { if (!response.ok) { @@ -16,7 +16,7 @@ export const getUser = async () => { .then((response) => response.json()); }; -export const addPoints = async (coins) => { +export const addPoints = (coins) => { return fetch(API.ADD_POINTS, { headers, method: "POST",