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 }) =>
@@ -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",