Another fix

This commit is contained in:
2023-07-16 01:36:27 +01:00
parent feb301c3c0
commit fb7913c563
2 changed files with 148 additions and 149 deletions
@@ -95,7 +95,7 @@ function AddFundDollars(props) {
return; return;
} }
if (!prevCardDetails) { if (!prevCardDetails["payment-card"]?.card_uid) {
return; return;
} }
@@ -171,6 +171,8 @@ function AddFundDollars(props) {
const handleClose = props.onClose; const handleClose = props.onClose;
console.log(prevCardDetails)
return ( return (
<> <>
<div className="w-full"> <div className="w-full">
+145 -148
View File
@@ -1,11 +1,78 @@
import { FlutterWaveButton, closePaymentModal } from "flutterwave-react-v3"; import { FlutterWaveButton, closePaymentModal } from "flutterwave-react-v3";
import React, { useState } from "react"; import React, { useState } from "react";
import { useSelector } from "react-redux";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import usersService from "../../../services/UsersService"; import usersService from "../../../services/UsersService";
import LoadingSpinner from "../../Spinners/LoadingSpinner"; import LoadingSpinner from "../../Spinners/LoadingSpinner";
function ThePaymentText({ value }) {
return (
<div className="my-2 flex items-center gap-5">
<div className="card-details flex items-center gap-3">
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
{value.description} Card
</h1>
<p className="text-base font-bold text-dark-gray dark:text-white tracking-wide">
Bank **************{value.digits}
</p>
</div>
</div>
);
}
function AmountSection({ currency, amount, country }) {
const formattedAmount = (Number(amount) / 100).toFixed(2);
return (
<div
className={`flex items-center ${country == "US" ? "gap-14" : "gap-4"}`}
>
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
Amount({currency})
</h1>
<span className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
{formattedAmount}
</span>
</div>
);
}
function TransactionFeeSection({ currency, fee, country }) {
const formattedFee = (Number(fee) / 100).toFixed(2);
return (
<div
className={`flex items-center border-b border-gray-600 ${
country == "US" ? "gap-[2.7rem]" : "gap-4"
}`}
>
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
Transaction Fee
</h1>
<span className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
{formattedFee}
</span>
</div>
);
}
function TotalSection({ currency, amount, fee, country }) {
const total = (Number(amount) + Number(fee)) / 100;
const formattedTotal = total.toFixed(2);
return (
<div
className={`flex items-center ${
country == "US" ? "gap-[8rem]" : "gap-[6.3rem]"
}`}
>
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
Total
</h1>
<span className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
{formattedTotal}
</span>
</div>
);
}
function ConfirmAddFund({ function ConfirmAddFund({
confirmCredit, confirmCredit,
onClose, onClose,
@@ -17,65 +84,21 @@ function ConfirmAddFund({
const __confirmCardDetails = __confirmData.card const __confirmCardDetails = __confirmData.card
? JSON.parse(__confirmData.card) ? JSON.parse(__confirmData.card)
: ""; : "";
let { userDetails } = useSelector((state) => state.userDetails); // TO GET LOGGEDIN USER DETAILS
let [requestStatus, setRequestStatus] = useState({
message: "",
loading: false,
status: false,
}); // STATE FOR API REQUEST
const apiURL = new usersService(); const apiURL = new usersService();
const navigate = useNavigate(); const navigate = useNavigate();
//FUNCTION TO HANDLE SUBMIT const [requestStatus, setRequestStatus] = useState({
const onSuccessPayment = () => { message: "",
setRequestStatus({ message: "", loading: true, status: false }); loading: false,
let reqData = { amount: __confirmData?.account, currency: "NGN" }; status: false,
apiURL });
.startTopUp(reqData)
.then((res) => {
if (res.data.internal_return < 0) {
setRequestStatus({
message: "Could not finish transaction",
loading: false,
status: false,
});
toast.success("Opps! something went wrong");
}
// do something
setRequestStatus({
message: "Topup successful",
loading: false,
status: true,
});
toast.success("Account Topup was successful");
setTimeout(() => {
navigate("/my-wallet", { replace: true });
}, 1000);
})
.catch((err) => {
// do something
setRequestStatus({
message: "Opps! An Error Occured",
loading: false,
status: false,
});
toast.success("Opps! something went wrong");
});
};
const config = { const config = {
public_key: process.env.REACT_APP_FLUTTERWAVE_APIKEY, public_key: process.env.REACT_APP_FLUTTERWAVE_APIKEY,
tx_ref: Date.now(), tx_ref: Date.now(),
amount: __confirmData?.amount,
currency: "NGN", currency: "NGN",
payment_options: "card,mobilemoney,ussd", payment_options: "card,mobilemoney,ussd",
customer: {
email: `${userDetails.email}`,
phone_number: userDetails.phone,
name: `${userDetails.lastname} ${userDetails.firstname}`,
},
customizations: { customizations: {
title: "WrenchBoard", title: "WrenchBoard",
description: "Topup Payment", description: "Topup Payment",
@@ -88,12 +111,47 @@ function ConfirmAddFund({
text: "Proceed", text: "Proceed",
callback: (response) => { callback: (response) => {
onSuccessPayment(); onSuccessPayment();
closePaymentModal(); // this will close the modal programmatically closePaymentModal();
}, },
onClose: () => {}, onClose: () => {},
}; };
// Handling Previous Card const onSuccessPayment = () => {
setRequestStatus({ message: "", loading: true, status: false });
const reqData = { amount: __confirmData?.account, currency: "NGN" };
apiURL
.startTopUp(reqData)
.then((res) => {
if (res.data.internal_return < 0) {
setRequestStatus({
message: "Could not finish transaction",
loading: false,
status: false,
});
toast.success("Opps! something went wrong");
} else {
setRequestStatus({
message: "Topup successful",
loading: false,
status: true,
});
toast.success("Account Topup was successful");
setTimeout(() => {
navigate("/my-wallet", { replace: true });
}, 1000);
}
})
.catch((err) => {
setRequestStatus({
message: "Opps! An Error Occured",
loading: false,
status: false,
});
toast.success("Opps! something went wrong");
});
};
const handlePrevCard = async () => { const handlePrevCard = async () => {
const { amount, credit_reference, currency } = __confirmData; const { amount, credit_reference, currency } = __confirmData;
const { card_uid } = __confirmCardDetails; const { card_uid } = __confirmCardDetails;
@@ -124,18 +182,16 @@ function ConfirmAddFund({
return; return;
} }
return setTimeout( setTimeout(() => {
() => setConfirmCredit((prev) => ({
setConfirmCredit((prev) => ({ ...prev,
...prev, show: {
show: { awaitConfirm: { loader: false, state: false },
awaitConfirm: { loader: false, state: false }, acceptConfirm: { loader: false, state: true },
acceptConfirm: { loader: false, state: true }, },
}, data: _response,
data: _response, }));
})), }, 1500);
1500
);
} catch (error) { } catch (error) {
setConfirmCredit((prev) => ({ setConfirmCredit((prev) => ({
...prev, ...prev,
@@ -147,107 +203,48 @@ function ConfirmAddFund({
} }
}; };
const ThePaymentText = ({ value }) => (
<div className="my-2 flex items-center gap-5">
<div className="card-details flex items-center gap-3">
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
{value.description} Card
</h1>
<p className="text-base font-bold text-dark-gray dark:text-white tracking-wide">
Bank **************{value.digits}
</p>
</div>
</div>
);
return ( return (
<div className="content-wrapper w-full h-[32rem]"> <div className="content-wrapper w-full h-[32rem]">
<div className="w-full mb-10"> <div className="w-full mb-10">
<div className="add-fund w-full bg-white dark:bg-dark-white rounded-2xl"> <div className="add-fund w-full bg-white dark:bg-dark-white rounded-2xl">
<div className="px-4 md:p-8 py-4 add-fund-info"> <div className="px-4 md:p-8 py-4 add-fund-info">
<div className="field w-full mb-3 min-h-[45px]"> <div className="field w-full mb-3 min-h-[45px]">
{confirmCredit?.show?.awaitConfirm?.state ? ( {confirmCredit?.show?.awaitConfirm?.state && (
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
{/* Amount */} <AmountSection
<div currency={__confirmData?.currency}
className={`flex items-center ${ amount={__confirmData?.amount}
__confirmCountry == "US" ? "gap-14" : "gap-4" country={__confirmCountry}
}`} />
> <TransactionFeeSection
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1"> currency={__confirmData?.currency}
Amount({__confirmData?.currency}) fee={__confirmData?.fee}
</h1> country={__confirmCountry}
<span className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1"> />
{`${walletItem?.symbol} ${ <TotalSection
Number(__confirmData?.amount).toLocaleString( currency={__confirmData?.currency}
undefined, amount={__confirmData?.amount}
{ fee={__confirmData?.fee}
minimumFractionDigits: 2, country={__confirmCountry}
maximumFractionDigits: 2, />
} {__confirmCountry === "US" && (
) || ""
}`}
</span>
</div>
{/* Transaction Fee */}
<div
className={`flex items-center border-b border-gray-600 ${
__confirmCountry == "US" ? "gap-[2.7rem]" : "gap-4"
}`}
>
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
Transaction Fee
</h1>
<span className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
{`${walletItem?.symbol} ${
Number(__confirmData?.fee).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}) || ""
}`}
</span>
</div>
{/* Total */}
<div
className={`flex items-center ${
__confirmCountry == "US" ? "gap-[8rem]" : "gap-[6.3rem]"
}`}
>
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
Total
</h1>
<span className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
{`${walletItem?.symbol} ${
(
Number(__confirmData?.amount) +
Number(__confirmData?.fee)
).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}) || ""
}`}
</span>
</div>
{__confirmCountry == "US" && (
<div className="flex items-center gap-8"> <div className="flex items-center gap-8">
<label <label
htmlFor="payment" htmlFor="payment"
className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1" className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1"
> >
{__confirmCountry == "US" && "Payment Method"} Payment Method
</label> </label>
<span className="text-[#181c32] dark:text-white "> <span className="text-[#181c32] dark:text-white">
{__confirmCardDetails ? ( {__confirmCardDetails ? (
<ThePaymentText value={__confirmCardDetails} /> <ThePaymentText value={__confirmCardDetails} />
) : null} ) : null}
</span> </span>
</div> </div>
)} )}
<div <div
className={`${ className={`${
__confirmCountry == "US" __confirmCountry === "US"
? "gap-[3.7rem]" ? "gap-[3.7rem]"
: "gap-[9.81rem]" : "gap-[9.81rem]"
} flex items-center`} } flex items-center`}
@@ -260,13 +257,13 @@ function ConfirmAddFund({
</span> </span>
</div> </div>
</div> </div>
) : null} )}
</div> </div>
</div> </div>
<div <div
className={ className={
__confirmCountry == "US" ? "min-h-[96px]" : "min-h-[200px]" __confirmCountry === "US" ? "min-h-[96px]" : "min-h-[200px]"
} }
></div> ></div>
<hr /> <hr />
@@ -277,7 +274,7 @@ function ConfirmAddFund({
> >
Cancel Cancel
</button> </button>
{__confirmCountry == "US" && ( {__confirmCountry === "US" && (
<button <button
className="px-4 h-11 flex justify-center items-center btn-gradient text-white text-base rounded-full" className="px-4 h-11 flex justify-center items-center btn-gradient text-white text-base rounded-full"
onClick={ onClick={
@@ -293,7 +290,7 @@ function ConfirmAddFund({
)} )}
</button> </button>
)} )}
{__confirmCountry == "NG" && ( {__confirmCountry === "NG" && (
<FlutterWaveButton <FlutterWaveButton
{...fwConfig} {...fwConfig}
className="px-2 py-1 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white" className="px-2 py-1 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white"