Compare commits

...

8 Commits

6 changed files with 145 additions and 75 deletions
+42 -7
View File
@@ -6,15 +6,18 @@ import InputCom from "../../Helpers/Inputs/InputCom";
import AuthLayout from "../AuthLayout";
export default function SignUp() {
const queryParams = new URLSearchParams(location?.search);
const country = queryParams.get("cnt")?.toUpperCase();
const [signUpLoading, setSignUpLoading] = useState(false);
const [checked, setValue] = useState(false);
// for the catch error
const [msgError, setMsgError] = useState("");
const [showPassword, setShowPassword] = useState(false);
const [countries, setCountries] = useState([]);
const [countries, setCountries] = useState({loading:true, data:[]});
const [formData, setFormData] = useState({
country: "",
country: country? country : "",
first_name: "",
last_name: "",
email: "",
@@ -45,9 +48,18 @@ export default function SignUp() {
try {
if (res.status === 200) {
const { signup_country } = await res.data;
setCountries(signup_country);
// setCountries(signup_country);
if(country){ // IF LINK/PATHNAME HAS CNT QUERY VALUE
let cnt = signup_country.filter(item => item[0]==country) // test to see country passed in query param exist from list of countries supplied by API
if(!cnt.length){ // IF CNT EMPTY, SET FORMDATA COUNTRY BACK TO EMPTY STRING: RE: THIS IS BCOS WE INITAIL SET COUNTRY VALUE IN FORMDATA, IF COUNTRY PARAM IS PRESENT IN LINK
setFormData(prev => ({...prev, country: ''}))
return setCountries({loading: false, data: signup_country});
}
return setCountries({loading: false, data: cnt});
}
setCountries({loading: false, data:signup_country});
} else if (res.data.result !== 100) {
setCountries("Nothing see here!");
setCountries({loading: false, data:[]});
}
} catch (error) {
throw new Error(error);
@@ -172,6 +184,7 @@ export default function SignUp() {
name="country"
value={formData.country}
inputHandler={handleInputChange}
disable={country && countries?.data?.length <= 1 ? true : false}
/>
<div className="input-fl-name mb-5 sm:flex w-full sm:space-x-6 ">
<div className="input-item sm:w-1/2 w-full mb-5 sm:mb-0">
@@ -306,6 +319,7 @@ export default function SignUp() {
<div className="signin-area mb-1">
<div className="flex justify-center">
<button
disabled={countries.loading}
type="button"
onClick={handleSignUp}
className={`rounded-[0.475rem] mb-6 text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center h-[42px] py-[0.8875rem] px-[1.81rem] text-[14.95px] btn-login`}
@@ -333,6 +347,7 @@ const SelectOption = ({
inputHandler,
value,
data, // passing the data from parent
disable
}) => {
return (
<div className="input-com mb-7">
@@ -346,19 +361,39 @@ const SelectOption = ({
</div>
<div>
<select
disabled={disable}
name={name}
id={name}
className="input-wrapper border border-[#f5f8fa] dark:border-[#5e6278] w-full rounded-full h-[42px] overflow-hidden relative font-medium leading-6 bg-clip-padding text-[#5e6278] dark:text-gray-100 bg-[#f5f8fa] dark:bg-[#5e6278] text-base focus-visible:border-transparent focus-visible:outline-0 focus-visible:ring-transparent "
onChange={inputHandler}
value={value}
>
<option value={""}>Select your Country</option>
{data?.length > 0 &&
data?.map((item, idx) => (
{data?.data?.length > 1 ?
<>
<option value={""}>Select your Country</option>
{data?.data?.map((item, idx) => (
<option value={item[0]} key={idx}>
{item[1]}
</option>
))}
</>
:
data?.data?.length == 1 ?
data?.data?.map((item, idx) => (
<option value={item[0]} key={idx}>
{item[1]}
</option>
))
:
data?.data?.length < 1 && data.loading ?
<option value=''>
Loading...
</option>
:
<option value=''>
No Country Found!
</option>
}
</select>
</div>
</div>
@@ -1,5 +1,3 @@
import React from "react";
function CompleteConfirmCredit({ onClose, confirmCredit }) {
const { data } = confirmCredit;
return (
@@ -7,25 +7,32 @@ import usersService from "../../../services/UsersService";
import { tableReload } from "../../../store/TableReloads";
import LoadingSpinner from "../../Spinners/LoadingSpinner";
function ThePaymentText({ value, type }) {
const cardDetails = value;
value.description =
type === "new"
? cardDetails.cardNum[0] === "4"
? "Visa"
: cardDetails.cardNum[0] == "5"
? "Master"
: "ATM"
: value.description;
value.digits = type === "new" ? cardDetails.cardNum.slice(-4) : value.digits;
const { cardNum } = value;
let description = value.description;
let digits = value.digits;
if (type === "new") {
const firstDigit = cardNum[0];
if (firstDigit === "4") {
description = "Visa";
} else if (firstDigit === "5") {
description = "Master";
} else {
description = "ATM";
}
digits = cardNum.slice(-4);
}
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 space-x-1">
{value.description} Card
<h1 className="text-xl font-normal text-dark-gray dark:text-white tracking-tighter my-1 space-x-1">
{description} Card
</h1>
<p className="text-base font-bold text-dark-gray dark:text-white tracking-wide">
Bank **************{value.digits}
<p className="text-xl font-normal text-dark-gray dark:text-white tracking-wide">
Bank **************{digits}
</p>
</div>
</div>
@@ -41,7 +48,7 @@ function AmountSection({ currency, amount, country }) {
<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">
<span className="text-xl font-normal text-dark-gray dark:text-white tracking-tighter my-1">
{formattedAmount}
</span>
</div>
@@ -59,7 +66,7 @@ function TransactionFeeSection({ currency, fee, country }) {
<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">
<span className="text-xl font-normal text-dark-gray dark:text-white tracking-tighter my-1">
{formattedFee}
</span>
</div>
@@ -78,7 +85,7 @@ function TotalSection({ currency, amount, fee, country }) {
<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">
<span className="text-xl font-normal text-dark-gray dark:text-white tracking-tighter my-1">
{formattedTotal}
</span>
</div>
@@ -127,7 +134,7 @@ function ConfirmAddFund({
logo: "https://www.wrenchboard.com/assets/images/wrench-500-500-icon.png",
},
};
//debugger;
const fwConfig = {
...config,
text: "Proceed",
@@ -188,27 +195,40 @@ function ConfirmAddFund({
const debouncedSuccessPayment = debounce(onSuccessPayment, 5000);
/**
* Handles the process of making a payment using a previously saved card.
* Updates the state to show a loader while the payment is being processed,
* sends a request to the server to make the payment, and updates the state with the response.
* If the payment is successful, it also dispatches an action to reload the wallet table.
*/
const handlePrevCard = async () => {
const { amount, credit_reference, currency } = __confirmData;
const { card_uid } = __confirmCardDetails;
const reqData = {
amount: amount * 100,
card_uid,
credit_reference,
currency,
};
try {
// Show loader while the payment is being processed
setConfirmCredit((prev) => ({
...prev,
show: {
acceptConfirm: { loader: true },
},
}));
// Extract necessary data from confirmCredit and confirmCardDetails objects
const { amount, credit_reference, currency } = __confirmData;
const { card_uid } = __confirmCardDetails;
// Create request data object with required parameters for making the payment
const reqData = {
amount: amount * 100,
card_uid,
credit_reference,
currency,
};
// Send request to server to make the payment using getPaidPrevCard method of usersService
const res = await apiURL.getPaidPrevCard(reqData);
const _response = res.data;
if (res.data.internal_return < 0) {
// If internal_return value in the response is less than 0, hide the loader and return
if (_response.internal_return < 0) {
setConfirmCredit((prev) => ({
...prev,
show: {
@@ -218,6 +238,7 @@ function ConfirmAddFund({
return;
}
// Update state to show the acceptConfirm state and the response data
setTimeout(() => {
setConfirmCredit((prev) => ({
...prev,
@@ -227,9 +248,11 @@ function ConfirmAddFund({
},
data: _response,
}));
// Dispatch an action to reload the wallet table
dispatch(tableReload({ type: "WALLETTABLE" }));
}, 1500);
} catch (error) {
// Handle error and hide the loader
setConfirmCredit((prev) => ({
...prev,
show: {
@@ -240,45 +263,44 @@ function ConfirmAddFund({
}
};
/**
* Handles the payment process when a new card is used.
* @async
*/
const handleNewCard = async () => {
const { amount, credit_reference, uid } = __confirmData;
const { address, cardNum, cvv, expirationMonth, expirationYear } =
__confirmCardDetails;
const reqData = {
amount: amount * 100,
cardnumber: cardNum.replace(/\s/g, ""),
credit_reference,
cvc: cvv,
description: address,
exp_month: expirationMonth,
exp_year: expirationYear,
paymenttype: 100,
uid,
};
try {
// Extract necessary data from __confirmData and __confirmCardDetails
const { amount, credit_reference, uid } = __confirmData;
const { address, cardNum, cvv, expirationMonth, expirationYear } = __confirmCardDetails;
// Set loading state to indicate payment is being processed
setConfirmCredit((prev) => ({
...prev,
show: {
acceptConfirm: { loader: true },
},
}));
// Prepare request data
const reqData = {
amount: amount * 100,
cardnumber: cardNum.replace(/\s/g, ""),
credit_reference,
cvc: cvv,
description: address,
exp_month: expirationMonth,
exp_year: expirationYear,
paymenttype: 100,
uid,
};
// Send request to server to process payment
const res = await apiURL.getPaidNewCard(reqData);
const _response = res.data;
if (res.data.internal_return < 0) {
setConfirmCredit((prev) => ({
...prev,
show: {
awaitConfirm: { loader: false, state: false },
acceptConfirm: { loader: false, state: true },
},
data: _response,
}));
return;
}
setTimeout(() => {
// Handle response from server
if (res.data.internal_return < 0) {
// Payment could not be completed
setConfirmCredit((prev) => ({
...prev,
show: {
@@ -287,9 +309,23 @@ function ConfirmAddFund({
},
data: _response,
}));
dispatch(tableReload({ type: "WALLETTABLE" }));
}, 1500);
} else {
// Payment was successful
setTimeout(() => {
setConfirmCredit((prev) => ({
...prev,
show: {
awaitConfirm: { loader: false, state: false },
acceptConfirm: { loader: false, state: true },
},
data: _response,
}));
console.log("Show meeeeeeeeee");
dispatch(tableReload({ type: "WALLETTABLE" }));
}, 1500);
}
} catch (error) {
// Handle error during payment process
setConfirmCredit((prev) => ({
...prev,
show: {
@@ -362,7 +398,7 @@ function ConfirmAddFund({
<h1 className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
Reference No
</h1>
<span className="text-xl font-bold text-dark-gray dark:text-white tracking-tighter my-1">
<span className="text-xl font-normal text-dark-gray dark:text-white tracking-tighter my-1">
{__confirmData?.credit_reference}
</span>
</div>
@@ -6,7 +6,7 @@ import CompleteConfirmCredit from "./CompleteConfirmCredit";
import ConfirmAddFund from "./ConfirmAddFund";
const CreditPopup = ({ details, onClose, situation, walletItem }) => {
let [input, setInput] = useState("");
const [input, setInput] = useState("");
const [confirmCredit, setConfirmCredit] = useState({
show: {
awaitConfirm: { loader: false, state: false },
@@ -15,6 +15,8 @@ const CreditPopup = ({ details, onClose, situation, walletItem }) => {
data: {},
});
console.log(confirmCredit);
return (
<ModalCom
action={onClose}
+4 -1
View File
@@ -13,7 +13,10 @@ export default function WalletBox({ wallet, payment }) {
</div>
) : wallet.data.length ? (
wallet.data.map((item, index) => (
<div key={item.wallet_uid} className="lg:w-full h-full mb-10 lg:mb-0">
<div
key={item.wallet_uid}
className="lg:w-full h-full mb-10 lg:mb-0"
>
<WalletItemCard walletItem={item} payment={payment} />
</div>
))
@@ -7,10 +7,6 @@ import CreditPopup from "./Popup/CreditPopup";
import WalletAction from "./WalletAction";
export default function WalletItemCard({ walletItem, payment }) {
// const [eth] = useState(90);
// const [btc] = useState(85);
// const [ltc] = useState(20);
const { userDetails } = useSelector((state) => state?.userDetails);
let accountType = userDetails?.account_type == "FAMILY";