Я сделал приложение response - mon go (MERN), в котором вы можете «покупать» товары в вашей корзине через PayPal. После поддельной покупки информация о приобретенных товарах сохраняется в компоненте order_history. Мне нужна помощь в выяснении того, как удалить функцию PayPal и заменить ее одной кнопкой «купить», которая идентично хранит информацию в компоненте order_history.
https://github.com/DimitarBelchev/React-Softuni-project
Связанные компоненты:
frontend / src / components / utils / paypal. js
export default class Paypal extends React.Component {
render() {
const onSuccess = (payment) => {
console.log("The payment was succeeded!", payment);
this.props.onSuccess(payment);
};
const onCancel = (data) => {
console.log("The payment was cancelled!", data);
};
const onError = (err) => {
console.log("Error!", err);
};
let env = "sandbox";
let currency = "USD";
let total = this.props.toPay;
const frontend = {
sandbox:
"AelMA7rUdxce2INjEX1y9KQ47L4J8Idv7rIROe3if2vnMqsIkIz5FFUvA5g-cZiRCnRl3X2EAZljDxWw",
production: "YOUR-PRODUCTION-APP-ID",
};
return (
<PaypalExpressBtn
env={env}
frontend={frontend}
currency={currency}
total={total}
onError={onError}
onSuccess={onSuccess}
onCancel={onCancel}
style={{
size: "large",
color: "blue",
shape: "rect",
label: "checkout",
}}
/>
);
}
}
frontend / src / components / views / HistoryPage / HistoryPage. js
function HistoryPage(props) {
return (
<div style={{ width: "80%", margin: "3rem auto" }}>
<div style={{ textAlign: "center" }}>
<h1>History</h1>
</div>
<br />
<table>
<thead>
<tr>
<th>Payment Id</th>
<th>Price</th>
<th>Quantity</th>
<th>Date of Purchase</th>
</tr>
</thead>
<tbody>
{props.user.userData &&
props.user.userData.history &&
props.user.userData.history.map((item) => (
<tr key={item.id}>
<td>{item.id}</td>
<td>{item.price}</td>
<td>{item.quantity}</td>
<td>{item.dateOfPurchase}</td>
</tr>
))}
</tbody>
</table>
</div>
);
}
export default HistoryPage;
frontend / src / components / views / CartPage / CartPage. js
import React, { useEffect, useState } from "react";
import { useDispatch } from "react-redux";
import {
getCartItems,
removeCartItem,
onSuccessBuy,
} from "../../../actions/user_actions";
import UserCardBlock from "./Sections/UserCardBlock";
import { Result, Empty } from "antd";
// import Axios from "axios";
import Paypal from "../../utils/Paypal";
function CartPage(props) {
const dispatch = useDispatch();
const [Total, setTotal] = useState(0);
const [ShowTotal, setShowTotal] = useState(false);
const [ShowSuccess, setShowSuccess] = useState(false);
useEffect(() => {
let cartItems = [];
if (props.user.userData && props.user.userData.cart) {
if (props.user.userData.cart.length > 0) {
props.user.userData.cart.forEach((item) => {
cartItems.push(item.id);
});
dispatch(getCartItems(cartItems, props.user.userData.cart)).then(
(response) => {
if (response.payload.length > 0) {
calculateTotal(response.payload);
}
}
);
}
}
}, [props.user.userData]);
const calculateTotal = (cartDetail) => {
let total = 0;
cartDetail.map((item) => {
total += parseInt(item.price, 10) * item.quantity;
});
setTotal(total);
setShowTotal(true);
};
const removeFromCart = (productId) => {
dispatch(removeCartItem(productId)).then((response) => {
if (response.payload.cartDetail.length <= 0) {
setShowTotal(false);
} else {
calculateTotal(response.payload.cartDetail);
}
});
};
const transactionSuccess = (data) => {
dispatch(
onSuccessBuy({
cartDetail: props.user.cartDetail,
paymentData: data,
})
).then((response) => {
if (response.payload.success) {
setShowSuccess(true);
setShowTotal(false);
}
});
};
const transactionError = () => {
console.log("Paypal error");
};
const transactionCanceled = () => {
console.log("Transaction canceled");
};
return (
<div style={{ width: "85%", margin: "3rem auto" }}>
<h1>My Cart</h1>
<div>
<UserCardBlock
products={props.user.cartDetail}
removeItem={removeFromCart}
/>
{ShowTotal ? (
<div style={{ marginTop: "3rem" }}>
<h2>Total amount: ${Total} </h2>
</div>
) : ShowSuccess ? (
<Result status="success" title="Successfully Purchased Items" />
) : (
<div
style={{
width: "100%",
display: "flex",
flexDirection: "column",
justifyContent: "center",
}}
>
<br />
<Empty description={false} />
<p>No Items In the Cart</p>
</div>
)}
</div>
{}
{ShowTotal && (
<Paypal
toPay={Total}
onSuccess={transactionSuccess}
transactionError={transactionError}
transactionCanceled={transactionCanceled}
/>
)}
</div>
);
}
export default CartPage;
Спасибо, что заглянули.