From 489f22d298acd9a3cc149fab587fe6f0af4ba663 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GBA0BK8\\Admin" Date: Sun, 23 Apr 2023 06:43:11 -0400 Subject: [PATCH 01/12] Hero adjust --- src/components/Home/Hero.jsx | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/components/Home/Hero.jsx b/src/components/Home/Hero.jsx index 435bda2..e370778 100644 --- a/src/components/Home/Hero.jsx +++ b/src/components/Home/Hero.jsx @@ -43,10 +43,10 @@ export default function Hero({ className }) { {/* heading */}

- Lock and Lob x Fiesta Spurs + Welcome

- ID : 2320382 + Last Login : 10-10-2026
{/* user */} @@ -64,9 +64,9 @@ export default function Hero({ className }) { {/* countdown */}
-

Current Bid

+

Current Task

- 75,320 ETH + ABCDEFGH01

773.69 USD

@@ -74,7 +74,7 @@ export default function Hero({ className }) {

Next due in

- +

Hrs @@ -85,19 +85,13 @@ export default function Hero({ className }) {
{/* action */}
- - Place a Bid - {" "} - View Art Work + View All Task(s)
From eaa037dac92f9b734179831a246cd58bc8948c64 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Sun, 23 Apr 2023 12:33:17 +0100 Subject: [PATCH 02/12] add recipient component added --- src/components/MyWallet/AddRecipient.jsx | 166 ++++++++++++++++++++++ src/components/MyWallet/TransferFund.jsx | 2 +- src/components/MyWallet/Wallet.jsx | 2 + src/components/Partials/MobileSideBar.jsx | 2 +- src/components/Partials/Sidebar.jsx | 6 +- 5 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 src/components/MyWallet/AddRecipient.jsx diff --git a/src/components/MyWallet/AddRecipient.jsx b/src/components/MyWallet/AddRecipient.jsx new file mode 100644 index 0000000..0064eca --- /dev/null +++ b/src/components/MyWallet/AddRecipient.jsx @@ -0,0 +1,166 @@ +import React, {useState} from 'react' +import { Link } from 'react-router-dom' +import Icons from '../Helpers/Icons' + +function AddRecipient() { + + //STATE FOR CONTROLLED INPUTS + let [inputs, setInputs] = useState({ + firstname: '', + lastname: '', + country: '', + 'bank-name': '', + 'account-number': '', + 'repeat-account-number': '', + 'account-type': '', + state: '', + city: '' + }) + + // FUNCTION TO HANDLE INPUT CHANGE + const handleChange = ({target:{name, value}}) => { + setInputs(prev => ({...prev, [name]:value})) + } + + //FUNCTION TO HANDLE SUBMIT + const handleSubmit = (e) => { + e.preventDefault(); + + //valid inputs before submitting. Just for texting remove later + + // setInputs((prev)=>{ + // for(let input in prev){ + // prev[input] = '' + // } + // }) + // RETURN INPUTS TO EMPTY STRING + setInputs({ + firstname: '', + lastname: '', + country: '', + 'bank-name': '', + 'account-number': '', + 'repeat-account-number': '', + 'account-type': '', + state: '', + city: '' + }) + } + return ( +
+
+
+

ADD BANK ACCOUNT

+
+ + {/* inputs starts here */} +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + {/* end of inputs starts here */} + +
+ +
+
+
+
+ +
+ ) +} + +export default AddRecipient \ No newline at end of file diff --git a/src/components/MyWallet/TransferFund.jsx b/src/components/MyWallet/TransferFund.jsx index a754224..715dc69 100644 --- a/src/components/MyWallet/TransferFund.jsx +++ b/src/components/MyWallet/TransferFund.jsx @@ -83,7 +83,7 @@ function TransferFund() { * ! - Add New + Add New
+ + {data?.length > 0 && data?.map((item, idx) => ( + + ))} + +
+ + ) +} diff --git a/src/components/Helpers/Inputs/InputCom/index.jsx b/src/components/Helpers/Inputs/InputCom/index.jsx index 8fe4ade..3e14056 100644 --- a/src/components/Helpers/Inputs/InputCom/index.jsx +++ b/src/components/Helpers/Inputs/InputCom/index.jsx @@ -8,9 +8,11 @@ export default function InputCom({ name, placeholder, iconName, + passIcon, inputHandler, value, - forgotPassword + forgotPassword, + onClick }) { return (
@@ -25,7 +27,7 @@ export default function InputCom({ )} {forgotPassword && Forgot Password?}
-
+
{iconName && ( -
+
)} + {passIcon && ( +
+ +
+ )}
); diff --git a/src/index.css b/src/index.css index b2004bf..313642e 100644 --- a/src/index.css +++ b/src/index.css @@ -712,4 +712,18 @@ TODO: Responsive =========================== .content-wrapper.login{ --bg-color: 255,255,255; background: linear-gradient(90deg, rgba(236,237,240,1) 0%, rgba(255,255,255,1) 50%, rgba(236,237,240,1) 100%); +} + +.content-wrapper select { + /* for Firefox */ + -moz-appearance: none; + /* for Chrome */ + -webkit-appearance: none; + appearance: none; + padding-inline: 1rem; +} + +/* For IE10 */ +.content-wrapper select::-ms-expand { + display: none; } \ No newline at end of file diff --git a/src/services/UsersService.js b/src/services/UsersService.js index 1e1dd37..513fc9a 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -48,9 +48,9 @@ class usersService { return this.postAuxEnd("/apigate", null); } - CreateUser(){ - // localStorage.setItem("session_token", ``); - return this.postAuxEnd("/createuser", null); + CreateUser(reqData){ + localStorage.setItem("session_token", ``); + return this.postAuxEnd("/createuser", reqData); } getLoadProfile(){ @@ -162,6 +162,11 @@ class usersService { return this.postAuxEnd("/couponredeem", postData); } + // Country Data {GET} + getSignupCountryData() { + return this.postAuxEnd("/signupcountry", null); + } + /* - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username) - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password) From 867ff6c5715da3efe203563d42a11dcb2f6744c2 Mon Sep 17 00:00:00 2001 From: Ebube Date: Mon, 24 Apr 2023 09:21:52 +0100 Subject: [PATCH 05/12] little css fix --- src/components/AuthPages/SignUp/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/AuthPages/SignUp/index.jsx b/src/components/AuthPages/SignUp/index.jsx index 136224f..f902d38 100644 --- a/src/components/AuthPages/SignUp/index.jsx +++ b/src/components/AuthPages/SignUp/index.jsx @@ -221,7 +221,7 @@ export default function SignUp() { I agree with all
- {data?.length > 0 && data?.map((item, idx) => ( From ee4437753d8029f5b50be37af9601b80d33b0ae7 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Mon, 24 Apr 2023 10:06:51 +0100 Subject: [PATCH 06/12] wallet page implentation --- src/components/MyWallet/AddFund.jsx | 29 ++-- src/components/MyWallet/Balance.jsx | 138 +++++++++--------- src/components/MyWallet/TransferFund.jsx | 15 +- src/components/MyWallet/Wallet.jsx | 94 +++++++++++- .../MyWallet/WalletComponent/CouponTable.jsx | 47 ++++++ .../WalletComponent/PurchasesTable.jsx | 47 ++++++ .../WalletComponent/RecentActivityTable.jsx | 47 ++++++ src/components/MyWallet/WalletHeader.jsx | 51 ++++--- src/components/Spinners/LoadingSpinner.jsx | 16 ++ src/services/UsersService.js | 41 +++++- 10 files changed, 393 insertions(+), 132 deletions(-) create mode 100644 src/components/MyWallet/WalletComponent/CouponTable.jsx create mode 100644 src/components/MyWallet/WalletComponent/PurchasesTable.jsx create mode 100644 src/components/MyWallet/WalletComponent/RecentActivityTable.jsx create mode 100644 src/components/Spinners/LoadingSpinner.jsx diff --git a/src/components/MyWallet/AddFund.jsx b/src/components/MyWallet/AddFund.jsx index c50dda1..8660c34 100644 --- a/src/components/MyWallet/AddFund.jsx +++ b/src/components/MyWallet/AddFund.jsx @@ -1,6 +1,8 @@ import React, {useState} from 'react' +import RecentActivityTable from './WalletComponent/RecentActivityTable' +import LoadingSpinner from '../Spinners/LoadingSpinner' -function AddFund() { +function AddFund({payment}) { //STATE FOR CONTROLLED INPUTS let [inputs, setInputs] = useState('0') @@ -53,27 +55,14 @@ function AddFund() {
-
+

Recent Activity

Activity Report

- - - - - - - - - - - - - - - - - -
DateRecipientAmount/FeeConf/Status
ItemItemItemItem
+ {payment.loading ? + + : + + }
diff --git a/src/components/MyWallet/Balance.jsx b/src/components/MyWallet/Balance.jsx index 46e6965..3125134 100644 --- a/src/components/MyWallet/Balance.jsx +++ b/src/components/MyWallet/Balance.jsx @@ -1,10 +1,15 @@ import React, {useState} from 'react' import { Link } from 'react-router-dom' +import RecentActivityTable from './WalletComponent/RecentActivityTable' +import PurchasesTable from './WalletComponent/PurchasesTable' +import CouponTable from './WalletComponent/CouponTable' +import LoadingSpinner from '../Spinners/LoadingSpinner' -function Balance() { +function Balance({wallet, payment, coupon, purchase}) { return (
+ {/* WALLET SECTION */}
@@ -12,20 +17,25 @@ function Balance() {

Add New Wallet

{/* wallet balance */} -
+ {wallet.loading ? + + : + wallet.data.length ? + wallet.data.map((item, index)=> ( +

Currency

- Naira -

Naira

+ {item.description} +

{item.symbol}

balance

- ₦0.00 + {item.symbol}{(item.amount*1).toFixed(2)}

Escrow

- ₦0.00 + {item.symbol}{(item.escrow*1).toFixed(2)}
@@ -34,85 +44,71 @@ function Balance() { Top Up
+ )) + : + wallet.error ? + ( +
+

Opps! An Error occurred, please try again

+
+ ) + : + ( +
+

No Wallets Found!

+
+ ) + } {/* end of wallet balance */}
- + {/* END OF WALLET SECTION */} + + + {/* RECENT ACTIVITY SECTION */}
-
+

Recent Activity

Activity Report

- - - - - - - - - - - - - - - - - -
DateRecipientAmount/FeeConf/Status
ItemItemItemItem
+ {payment.loading ? + + : + + }
+ {/* END OF RECENT ACTIVITY SECTION */}
- + +
-
-
-

Purchases

- - - - - - - - - - - - - - - - - -
DateDescriptionAmountFee
ItemItemItemItem
-
-
- + {/* PURCHASE SECTION */}
-
-

Coupons

- - - - - - - - - - - - - - - - - -
DateDescriptionAmountActive
ItemItemItemItem
+
+

Purchases

+ {purchase.loading ? + + : + + }
+ {/* END OF PURCHASE SECTION */} + + {/* COUPON SECTION */} +
+
+

Coupons

+ {coupon.loading ? + + : + + } +
+
+ {/* END OF COUPON SECTION */}
+
) } diff --git a/src/components/MyWallet/TransferFund.jsx b/src/components/MyWallet/TransferFund.jsx index 715dc69..27b913b 100644 --- a/src/components/MyWallet/TransferFund.jsx +++ b/src/components/MyWallet/TransferFund.jsx @@ -1,7 +1,9 @@ import React, {useState} from 'react' import { Link } from 'react-router-dom' +import RecentActivityTable from './WalletComponent/RecentActivityTable' +import LoadingSpinner from '../Spinners/LoadingSpinner' -function TransferFund() { +function TransferFund({payment}) { //STATE FOR CONTROLLED INPUTS let [inputs, setInputs] = useState({ @@ -113,10 +115,10 @@ function TransferFund() {
-
+

Recent Activity

Activity Report

- + {/*
@@ -131,7 +133,12 @@ function TransferFund() { -
DateItem
+ */} + {payment.loading ? + + : + + }
diff --git a/src/components/MyWallet/Wallet.jsx b/src/components/MyWallet/Wallet.jsx index 2aeb381..884efb9 100644 --- a/src/components/MyWallet/Wallet.jsx +++ b/src/components/MyWallet/Wallet.jsx @@ -1,5 +1,6 @@ -import React from 'react' +import React, { useEffect, useState } from 'react' import {Routes, Route, Outlet, Navigate} from 'react-router-dom' +import usersService from '../../services/UsersService' import Layout from '../Partials/Layout' @@ -21,12 +22,97 @@ function Wallet() { const WalletRoutes = () => { + const apiCall = new usersService() + + let [walletList, setWalletList] = useState({ // FOR WALLET LIST + loading: true, + data: [], + error: false + }) + + let [paymentHistory, setPaymentHistory] = useState({ // FOR PAYMENT HISTORY + loading: true, + data: [], + error: false + }) + + let [purchaseHistory, setPurchaseHistory] = useState({ // FOR PURCHASE HISTORY + loading: true, + data: [], + error: false + }) + + let [couponHistory, setCouponHistory] = useState({ // FOR COUPON HISTORY + loading: true, + data: [], + error: false + }) + + //FUNCTION TO GET WALLET LIST + const getWalletList = ()=>{ + apiCall.getUserWallets(null).then((res)=>{ + if(res.data.internal_return < 0){ // success but no data + setWalletList(prev => ({...prev, loading: false})) + return + } + console.log('wallet', res) + setWalletList(prev => ({...prev, loading: false, data: res.data.result_list})) + }).catch((error)=>{ + setWalletList(prev => ({...prev, loading: false, error: true})) + }) + } + + //FUNCTION TO GET PAYMENT HISTORY + const getPaymentHistory = ()=>{ + apiCall.getPaymentHx().then((res)=>{ + if(res.data.internal_return < 0){ // success but no data + setPaymentHistory(prev => ({...prev, loading: false})) + return + } + setPaymentHistory(prev => ({...prev, loading: false, data: res.data.result_list})) + }).catch((error)=>{ + setPaymentHistory(prev => ({...prev, loading: false, error: true})) + }) + } + + //FUNCTION TO GET PURCHASE HISTORY + const getPurchaseHistory = ()=>{ + apiCall.getPurchaseHx().then((res)=>{ + if(res.data.internal_return < 0){ // success but no data + setPurchaseHistory(prev => ({...prev, loading: false})) + return + } + setPurchaseHistory(prev => ({...prev, loading: false, data: res.data.result_list})) + }).catch((error)=>{ + setPurchaseHistory(prev => ({...prev, loading: false, error: true})) + }) + } + + //FUNCTION TO GET COUPON HISTORY + const getCouponHistory = ()=>{ + apiCall.getCouponHx().then((res)=>{ + if(res.data.internal_return < 0){ // success but no data + setCouponHistory(prev => ({...prev, loading: false})) + return + } + setCouponHistory(prev => ({...prev, loading: false, data: res.data.result_list})) + }).catch((error)=>{ + setCouponHistory(prev => ({...prev, loading: false, error: true})) + }) + } + + useEffect(()=>{ + getWalletList() + getPaymentHistory() + getPurchaseHistory() + getCouponHistory() + }, []) return ( }> - } /> - } /> - } /> + } /> + } /> + } /> } /> } /> diff --git a/src/components/MyWallet/WalletComponent/CouponTable.jsx b/src/components/MyWallet/WalletComponent/CouponTable.jsx new file mode 100644 index 0000000..29a695c --- /dev/null +++ b/src/components/MyWallet/WalletComponent/CouponTable.jsx @@ -0,0 +1,47 @@ +import React from 'react' + +function CouponTable({coupon}) { + return ( + + + + + + + + + + {coupon.data.length ? + ( + + {coupon.data.map((item, index) => ( + + + + + + + ))} + + ) + : + coupon.error ? + ( + + + + + + ) + : + + + + + + } +
DateDescriptionAmountActive
{item.added}{item.code}{item.amount}{item.status}
Opps! an error occurred. Please try again!
No Purchase History Found!
+ ) +} + +export default CouponTable \ No newline at end of file diff --git a/src/components/MyWallet/WalletComponent/PurchasesTable.jsx b/src/components/MyWallet/WalletComponent/PurchasesTable.jsx new file mode 100644 index 0000000..8c90fdc --- /dev/null +++ b/src/components/MyWallet/WalletComponent/PurchasesTable.jsx @@ -0,0 +1,47 @@ +import React from 'react' + +function PurchasesTable({purchase}) { + return ( + + + + + + + + + + {purchase.data.length ? + ( + + {purchase.data.map((item, index) => ( + + + + + + + ))} + + ) + : + purchase.error ? + ( + + + + + + ) + : + + + + + + } +
DateDescriptionAmountFee
{item.trx_date}{item.amount}{item.status}
Opps! an error occurred. Please try again!
No Purchase History Found!
+ ) +} + +export default PurchasesTable \ No newline at end of file diff --git a/src/components/MyWallet/WalletComponent/RecentActivityTable.jsx b/src/components/MyWallet/WalletComponent/RecentActivityTable.jsx new file mode 100644 index 0000000..841002d --- /dev/null +++ b/src/components/MyWallet/WalletComponent/RecentActivityTable.jsx @@ -0,0 +1,47 @@ +import React from 'react' + +function RecentActivityTable({payment}) { + return ( + + + + + + + + + + {payment.data.length ? + ( + + {payment.data.map((item, index) => ( + + + + + + + ))} + + ) + : + payment.error ? + ( + + + + + + ) + : + + + + + + } +
DateRecipientAmount/FeeConf/Status
{item.trx_date}{item.amount}/{item.fee}{item.status}
Opps! an error occurred. Please try again!
No Payment History Found!
+ ) +} + +export default RecentActivityTable \ No newline at end of file diff --git a/src/components/MyWallet/WalletHeader.jsx b/src/components/MyWallet/WalletHeader.jsx index 1c19632..d769841 100644 --- a/src/components/MyWallet/WalletHeader.jsx +++ b/src/components/MyWallet/WalletHeader.jsx @@ -1,3 +1,4 @@ +import {Link} from 'react-router-dom' import Icons from "../Helpers/Icons"; import bank1 from "../../assets/images/bank-1.png"; import bank2 from "../../assets/images/bank-2.png"; @@ -41,33 +42,30 @@ export default function WalletHeader(props) { {props.myWalletList && props.myWalletList?.result_list?.length > 0 && - props.myWalletList.result_list.map((value) => ( - <> -
  • -
    -
    -
    - -
    -
    -

    - {value.description} -

    -
    + props.myWalletList.result_list.map((value, index) => ( +
  • +
    +
    +
    +
    -
    -

    - {value.amount*0.01} {value.code} -

    -

    - {/*(773.69 USD)*/} +

    +

    + {value.description}

    -
  • - - +
    +

    + {(value.amount*1).toFixed(2)} {value.code} +

    +

    + {/*(773.69 USD)*/} +

    +
    +
    + ))} {/*
  • */} @@ -163,14 +161,15 @@ export default function WalletHeader(props) { {/* */} {/*
  • */} -
    - + */} + Manage
    diff --git a/src/components/Spinners/LoadingSpinner.jsx b/src/components/Spinners/LoadingSpinner.jsx new file mode 100644 index 0000000..ed48666 --- /dev/null +++ b/src/components/Spinners/LoadingSpinner.jsx @@ -0,0 +1,16 @@ +import React from 'react' + +function LoadingSpinner({size, color}) { + return ( +
    +
    + +
    +
    + ) +} + +export default LoadingSpinner \ No newline at end of file diff --git a/src/services/UsersService.js b/src/services/UsersService.js index 1e1dd37..433c132 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -140,17 +140,44 @@ class usersService { return this.postAuxEnd("/couponpending", postData); } + // API FUNCTION TO GET COUPON HISTORY getCouponHx(){ - var postData = { - uuid: localStorage.getItem("uid"), - member_id: localStorage.getItem("member_id"), - sessionid: localStorage.getItem("session_token"), - page:0, - limit :100 -}; + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + page:1, + limit :20, + action: 85025 + }; return this.postAuxEnd("/couponhx", postData); } + getPurchaseHx(){ + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + page:1, + limit :20, + action: 15049 + }; + return this.postAuxEnd("/purchasehx", postData); + } + + // API FUNCTION TO GET PAYMENT HISTORY + getPaymentHx(){ + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + page:1, + limit :20, + action: 15046 + }; + return this.postAuxEnd("/paymenthx", postData); + } + getCouponRedeem(){ var postData = { uuid: localStorage.getItem("uid"), From 725b7f962c4234ff7d527e273c48093756171474 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Mon, 24 Apr 2023 10:27:11 +0100 Subject: [PATCH 07/12] api bug --- src/services/UsersService.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/services/UsersService.js b/src/services/UsersService.js index 042067d..bd32ae2 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -176,6 +176,8 @@ class usersService { action: 15046 }; return this.postAuxEnd("/paymenthx", postData); + } + //END POINT CALL FOR REFERRAL HISTORY getReferralHx(){ var postData = { From cd9e7f4c4dcd1fed24396e32fe3407398f1a9edf Mon Sep 17 00:00:00 2001 From: "DESKTOP-GBA0BK8\\Admin" Date: Mon, 24 Apr 2023 07:47:19 -0400 Subject: [PATCH 08/12] Job Card Format --- src/components/Cards/ActiveJobsCard.jsx | 37 +++++++++++++------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/components/Cards/ActiveJobsCard.jsx b/src/components/Cards/ActiveJobsCard.jsx index fb2ea87..4183771 100644 --- a/src/components/Cards/ActiveJobsCard.jsx +++ b/src/components/Cards/ActiveJobsCard.jsx @@ -77,26 +77,27 @@ export default function ActiveJobsCard({
    -
    - {datas.isActive && ( - - Active - - )} -
    + + {/*
    */} + {/* {datas.isActive && (*/} + {/* */} + {/* Active*/} + {/**/} + {/* )}*/} + {/*
    */} -
    - -
    + {/*
    */} + {/* */} + {/* */} + {/* */} + {/*
    */}
    From 1ff90991ddc2c0801e26c941832e3ad3441c3326 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GBA0BK8\\Admin" Date: Mon, 24 Apr 2023 07:50:14 -0400 Subject: [PATCH 09/12] Cards added --- src/components/Cards/AvailableJobsCard.jsx | 127 +++++++++++++++++++++ src/components/MarketPlace/MainSection.jsx | 7 +- 2 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 src/components/Cards/AvailableJobsCard.jsx diff --git a/src/components/Cards/AvailableJobsCard.jsx b/src/components/Cards/AvailableJobsCard.jsx new file mode 100644 index 0000000..0eb70d9 --- /dev/null +++ b/src/components/Cards/AvailableJobsCard.jsx @@ -0,0 +1,127 @@ +import React, { useState } from "react"; +import { Link } from "react-router-dom"; +import { toast } from "react-toastify"; +import localImgLoad from "../../lib/localImgLoad"; +import Icons from "../Helpers/Icons"; + +export default function AvailableJobsCard({ + className, + datas, + hidden = false, + }) { + //debugger; + const [addFavorite, setValue] = useState(datas.whishlisted); + const [options, setOption] = useState(false); + const favoriteHandler = () => { + if (!addFavorite) { + setValue(true); + toast.success("Added to Favorite List"); + } else { + setValue(false); + toast.warn("Remove to Favorite List"); + } + }; + return ( +
    +
    + +

    + {datas.title} +

    + + +
    +
    +
    +

    Added

    +

    + {datas.offer_added} +

    +
    +
    +
    +
    +
    +

    + Expires +

    +

    + {datas.expire} +

    +
    +
    +
    +
    +
    +
    + {datas.description} +
    + + + + + +
    + +
    +
    +
    + + {/*
    */} + {/* {datas.isActive && (*/} + {/* */} + {/* Active*/} + {/**/} + {/* )}*/} + {/*
    */} + + + {/*
    */} + {/* */} + {/* */} + {/* */} + {/*
    */} +
    + +
    +
    +
    +

    + {datas.price*0.01}{datas.currency} | {datas.timeline_days} day(s) +

    +

    + ( {datas.offer_code}) +

    +
    +
    +
    + +
    +
    +
    +
    +
    + ); +} diff --git a/src/components/MarketPlace/MainSection.jsx b/src/components/MarketPlace/MainSection.jsx index 063695a..fec95a8 100644 --- a/src/components/MarketPlace/MainSection.jsx +++ b/src/components/MarketPlace/MainSection.jsx @@ -1,8 +1,9 @@ import React, { useEffect, useState } from "react"; //import ProductCardStyleTwo from "../Cards/ProductCardStyleTwo"; import DataIteration from "../Helpers/DataIteration"; -import SearchCom from "../Helpers/SearchCom"; -import ActiveJobsCard from "../Cards/ActiveJobsCard"; +// import SearchCom from "../Helpers/SearchCom"; +// import ActiveJobsCard from "../Cards/ActiveJobsCard"; +import AvailableJobsCard from "../Cards/AvailableJobsCard"; export default function MainSection({ className, marketPlaceProduct }) { const [tab, setTab] = useState("explore"); @@ -98,7 +99,7 @@ export default function MainSection({ className, marketPlaceProduct }) { endLength={products?.length} > {({ datas }) => ( - + )}
    From 0a00e12b58f744d568219477671d29ecceffc1dc Mon Sep 17 00:00:00 2001 From: Ebube Date: Mon, 24 Apr 2023 15:40:46 +0100 Subject: [PATCH 10/12] added session expiration --- .env | 3 +- src/components/AuthPages/SignUp/index.jsx | 4 +- src/middleware/AuthRoute.jsx | 50 ++++++++++++++++++++++- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/.env b/.env index 5e1b33c..426eb40 100644 --- a/.env +++ b/.env @@ -17,7 +17,8 @@ REACT_APP_USERS_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/svs/user" #"https://devapi.mermsemr.com/en/desktop/api/v2/myfituser" -REACT_APP_SESSION_EXPIRE_MINUTES=5 +REACT_APP_SESSION_EXPIRE_MINUTES=300000 +REACT_APP_SESSION_EXPIRE_CHECKER=60000 REACT_APP_LOGIN_ERROR_TIMEOUT=7000 diff --git a/src/components/AuthPages/SignUp/index.jsx b/src/components/AuthPages/SignUp/index.jsx index f902d38..3cd6a12 100644 --- a/src/components/AuthPages/SignUp/index.jsx +++ b/src/components/AuthPages/SignUp/index.jsx @@ -113,7 +113,7 @@ export default function SignUp() { return ( <>
    -
    +
    @@ -122,7 +122,7 @@ export default function SignUp() { wrenchboard
    -
    +

    { + const [lastActivityTime, setLastActivityTime] = useState(Date.now()); const isLogin = localStorage.getItem("email"); + + const navigate = useNavigate(); + const { pathname } = useLocation(); + + + //Removing Data stored at localStorage after session expires + const expireSession = () => { + localStorage.removeItem("email"); + localStorage.removeItem('session_token'); + localStorage.removeItem('firstname'); + localStorage.removeItem('member_id'); + localStorage.removeItem('lastname'); + localStorage.removeItem('state'); + localStorage.removeItem('last_login'); + localStorage.removeItem('uid'); + localStorage.removeItem('session'); + localStorage.removeItem('city'); + localStorage.removeItem('country'); + localStorage.removeItem('loglevel'); + localStorage.removeItem('zip_code'); + localStorage.removeItem('added'); + navigate("/login", { replace: true }); // redirects user to login page after session expires + }; + + const checkInactivity = setInterval(() => { + if (Date.now() - lastActivityTime > process.env.REACT_APP_SESSION_EXPIRE_MINUTES) { + expireSession() + } + }, process.env.REACT_APP_SESSION_EXPIRE_CHECKER) // Checks for inactivity every minute + + // Reset last activity time on user input + const resetTime = () => { + setLastActivityTime(Date.now()); + } + window.addEventListener('mousemove', resetTime) + window.addEventListener('keydown', resetTime) + + useEffect(() => { + // cleaning up listeners + return () => { + clearInterval(checkInactivity) + window.removeEventListener('mouseover', resetTime) + window.removeEventListener('keydown', resetTime) + } + }, [pathname, lastActivityTime]) + if (!isLogin) { return ; } From f42fabbfbbe2ea5886809ddfb2d172476d01b9c9 Mon Sep 17 00:00:00 2001 From: Ebube Date: Mon, 24 Apr 2023 16:08:19 +0100 Subject: [PATCH 11/12] fixed typo --- src/middleware/AuthRoute.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/AuthRoute.jsx b/src/middleware/AuthRoute.jsx index 6d67366..f7b4b9c 100644 --- a/src/middleware/AuthRoute.jsx +++ b/src/middleware/AuthRoute.jsx @@ -45,7 +45,7 @@ const AuthRoute = ({ redirectPath = "/login", children }) => { // cleaning up listeners return () => { clearInterval(checkInactivity) - window.removeEventListener('mouseover', resetTime) + window.removeEventListener('mousemove', resetTime) window.removeEventListener('keydown', resetTime) } }, [pathname, lastActivityTime]) From bd956cb4706011e0cd34486954ca77f1461b73a2 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Mon, 24 Apr 2023 17:06:45 +0100 Subject: [PATCH 12/12] added recipient and fee charge api --- src/components/MyWallet/TransferFund.jsx | 131 +++++++++++++----- src/components/MyWallet/Wallet.jsx | 4 +- .../WalletComponent/PurchasesTable.jsx | 6 +- src/services/UsersService.js | 25 ++++ 4 files changed, 125 insertions(+), 41 deletions(-) diff --git a/src/components/MyWallet/TransferFund.jsx b/src/components/MyWallet/TransferFund.jsx index 27b913b..06c90dc 100644 --- a/src/components/MyWallet/TransferFund.jsx +++ b/src/components/MyWallet/TransferFund.jsx @@ -1,19 +1,58 @@ -import React, {useState} from 'react' +import React, {useEffect, useState} from 'react' import { Link } from 'react-router-dom' import RecentActivityTable from './WalletComponent/RecentActivityTable' import LoadingSpinner from '../Spinners/LoadingSpinner' -function TransferFund({payment}) { - +import usersService from '../../services/UsersService' + +function TransferFund({payment, wallet}) { + const apiCall = new usersService() + + let [newFee, setNewFee] = useState(false) + + let [recepients, setRecipients] = useState({ // FOR COUPON HISTORY + loading: true, + data: [], + error: false + }) + + let [sendMoneyFee, setSendMoneyFee] = useState({fee: 0, total: 0}) // HOLD THE VALUE FOR SEND MONEY FEE + //STATE FOR CONTROLLED INPUTS let [inputs, setInputs] = useState({ amount: '0', - fee: '0', recipient: '', - total: '0', comment: '' }) + //FUNCTION TO GET RECIPIENT LIST + const getRecipients = ()=>{ + apiCall.getRecipient().then((res)=>{ + if(res.data.internal_return < 0){ // success but no data + setRecipients(prev => ({...prev, loading: false})) + return + } + setRecipients(prev => ({...prev, loading: false, data: res.data.result_list})) + }).catch((error)=>{ + setRecipients(prev => ({...prev, loading: false, error: true})) + }) + } + + //FUNCTION TO GET SEND MONEY FEE + const getSendMoneyFee = ()=>{ + let {amount} = inputs + if(Number(amount) <= 0 || amount=='' || isNaN(amount)){ + setSendMoneyFee({fee: 0, total: 0}) + return + } + apiCall.getSendMoneyFee(Number(amount)).then((res)=>{ + setSendMoneyFee({fee: res.data.processing_fee, total: res.data.total_amount}) + }).catch((error)=>{ + setSendMoneyFee({fee: 0, total: 0}) + }) + } + + // FUNCTION TO HANDLE INPUT CHANGE const handleChange = ({target:{name, value}}) => { setInputs(prev => ({...prev, [name]:value})) @@ -23,22 +62,41 @@ function TransferFund({payment}) { const handleSubmit = (e) => { e.preventDefault(); - //valid inputs before submitting. Just for texting remove later + //valid inputs before submitting. Just for texting remove later. check amoutn to be number setInputs({ amount: '0', - fee: '0', recipient: '', - total: '0', comment: '' }) } + + useEffect(()=>{ + getRecipients() + getSendMoneyFee() + },[newFee]) return (
    -
    -

    Withdraw from Naira Wallet : ₦0.00

    + + {wallet.loading ? + + : + wallet.data.length ? +

    + {wallet.data.map(item => { + if(item.description == 'Naira'){ + return `Withdraw from Naira Wallet : ${item.symbol}${(item.amount*1).toFixed(2)}` + } + })} +

    + : + wallet.error ? +

    Opps! An Error Occured

    + : +

    No Wallet Information Found!

    + }
    @@ -49,31 +107,33 @@ function TransferFund({payment}) { placeholder='Amount' required onChange={handleChange} + onMouseEnter={()=>{setNewFee(false)}} + onMouseLeave={()=>{setNewFee(true)}} />
    -
    - - Total * +
    @@ -87,8 +147,23 @@ function TransferFund({payment}) { Add New
    - + {recepients.loading ? + + : + recepients.data.length ? + <> + + {recepients.data.map((item, index)=>( + + ))} + + : + recepients.error ? + + : + + }
    @@ -108,7 +183,7 @@ function TransferFund({payment}) {

    - +
    @@ -118,22 +193,6 @@ function TransferFund({payment}) {

    Recent Activity

    Activity Report

    - {/* - - - - - - - - - - - - - - -
    DateRecipientAmount/FeeConf/Status
    ItemItemItem
    */} {payment.loading ? : diff --git a/src/components/MyWallet/Wallet.jsx b/src/components/MyWallet/Wallet.jsx index 884efb9..0af9a45 100644 --- a/src/components/MyWallet/Wallet.jsx +++ b/src/components/MyWallet/Wallet.jsx @@ -55,7 +55,6 @@ const WalletRoutes = () => { setWalletList(prev => ({...prev, loading: false})) return } - console.log('wallet', res) setWalletList(prev => ({...prev, loading: false, data: res.data.result_list})) }).catch((error)=>{ setWalletList(prev => ({...prev, loading: false, error: true})) @@ -82,6 +81,7 @@ const WalletRoutes = () => { setPurchaseHistory(prev => ({...prev, loading: false})) return } + // console.log('purchase',res.data) setPurchaseHistory(prev => ({...prev, loading: false, data: res.data.result_list})) }).catch((error)=>{ setPurchaseHistory(prev => ({...prev, loading: false, error: true})) @@ -111,7 +111,7 @@ const WalletRoutes = () => { }> } /> - } /> + } /> } /> } /> } /> diff --git a/src/components/MyWallet/WalletComponent/PurchasesTable.jsx b/src/components/MyWallet/WalletComponent/PurchasesTable.jsx index 8c90fdc..20202ae 100644 --- a/src/components/MyWallet/WalletComponent/PurchasesTable.jsx +++ b/src/components/MyWallet/WalletComponent/PurchasesTable.jsx @@ -16,10 +16,10 @@ function PurchasesTable({purchase}) { {purchase.data.map((item, index) => ( - {item.trx_date} - + {item.added_date} + {item.confirmation} {item.amount} - {item.status} + {item.fee} ))} diff --git a/src/services/UsersService.js b/src/services/UsersService.js index bd32ae2..cab41ac 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -140,6 +140,31 @@ class usersService { return this.postAuxEnd("/couponpending", postData); } + // API FUNCTION TO GET COUPON HISTORY + getRecipient(){ + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + page:1, + limit :20, + action: 11175 + }; + return this.postAuxEnd("/recipients", postData); + } + + // API FUNCTION TO GET SEND MONEY FEE + getSendMoneyFee(amount){ + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + amount, + action: 33025 + }; + return this.postAuxEnd("/sendmoneyfee", postData); + } + // API FUNCTION TO GET COUPON HISTORY getCouponHx(){ var postData = {