Compare commits

...

8 Commits

16 changed files with 148 additions and 68 deletions
+19
View File
@@ -75,4 +75,23 @@ export const AmountTo2DP = (
// return formattedNumber; // return formattedNumber;
return formattedNumber; return formattedNumber;
};
// FUNCTION TO RETURN CURRENCY SYMBOL
export const currencySymbol = (
currencyName = "naira",
amount = "00",
) => {
// Cureency Array
let currencyArray = [
{currencyName:'naira', symbol:'₦'},
{currencyName:'usd', symbol:'$'},
]
const matchedCurrency = currencyArray.filter(item => item.currencyName.toLocaleLowerCase() == currencyName.toLocaleLowerCase())
const amountTo2DP = AmountTo2DP(amount)
// return formattedNumber;
return matchedCurrency.length ? <><span>{matchedCurrency[0].symbol}</span><span>{amountTo2DP}</span></> : <><span>$</span><span>{amountTo2DP}</span></>;
}; };
+2 -5
View File
@@ -7,7 +7,7 @@ import PaginatedList from '../../components/Pagination/PaginatedList';
import LoadingSpinner from '../Spinners/LoadingSpinner'; import LoadingSpinner from '../Spinners/LoadingSpinner';
import { AmountTo2DP, PriceFormatter } from '../Helpers/PriceFormatter'; import { currencySymbol } from '../Helpers/PriceFormatter';
import {NewDateTimeFormatter} from '../../lib/NewDateTimeFormatter' import {NewDateTimeFormatter} from '../../lib/NewDateTimeFormatter'
function JobsCompleted() { function JobsCompleted() {
@@ -76,10 +76,7 @@ function JobsCompleted() {
</div> </div>
</div> </div>
</td> </td>
<td className="p-4 flex text-right justify-end items-center">{AmountTo2DP(item?.price*0.01)} {item?.currency_code}</td> <td className="p-4 flex text-right justify-end items-center">{currencySymbol(item?.currency_code, item?.price*0.01)}</td>
{/* <td className="p-4 text-right">{PriceFormatter(item?.price*0.01, item?.currency_code)}</td> */}
{/* <td className="p-4">{date}</td>
<td className="p-4">{item?.contract}</td> */}
</tr> </tr>
) )
} }
+9 -9
View File
@@ -7,7 +7,7 @@ import PaginatedList from '../../components/Pagination/PaginatedList';
import LoadingSpinner from '../Spinners/LoadingSpinner'; import LoadingSpinner from '../Spinners/LoadingSpinner';
import { AmountTo2DP } from '../Helpers/PriceFormatter'; import { currencySymbol } from '../Helpers/PriceFormatter';
export const RewardsTable = memo(() => { export const RewardsTable = memo(() => {
@@ -47,7 +47,7 @@ export const RewardsTable = memo(() => {
}, []) }, [])
return ( return (
<div className='py-4 flex flex-col justify-between min-h-[500px]'> <div className='py-4 flex flex-col justify-between min-h-[500px] w-full overflow-x-auto'>
{familyRewardHistory.loading ? {familyRewardHistory.loading ?
<LoadingSpinner size='16' color='sky-blue' height='h-[500px]' /> <LoadingSpinner size='16' color='sky-blue' height='h-[500px]' />
: familyRewardHistory.data.length ? : familyRewardHistory.data.length ?
@@ -55,9 +55,9 @@ export const RewardsTable = memo(() => {
<thead className='w-full'> <thead className='w-full'>
<tr className='text-slate-600 dark:text-white'> <tr className='text-slate-600 dark:text-white'>
<th className="p-4"></th> <th className="p-4"></th>
<th className="p-4 text-right">Amount</th> <th className="p-4 text-center">Amount</th>
<th className="p-4">Date</th> <th className="p-4 text-center">Date</th>
<th className="p-4">Confirmation</th> <th className="p-4 text-center">Confirmation</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -65,7 +65,7 @@ export const RewardsTable = memo(() => {
let date = new Date(item.added).toLocaleDateString() let date = new Date(item.added).toLocaleDateString()
return ( return (
<tr key={index} className='dark:text-white dark:bg-dark-white border-y dark:border-[#5356fb29] hover:bg-gray-50 dark:hover:bg-gray-50 dark:hover:text-black transition-all duration-300'> <tr key={index} className='dark:text-white dark:bg-dark-white border-y dark:border-[#5356fb29] hover:bg-gray-50 dark:hover:bg-gray-50 dark:hover:text-black transition-all duration-300'>
<td className="p-4 min-w-[350px] max-w-[400px]"> <td className="p-4 min-w-[300px]">
<div className='flex w-full items-center gap-2'> <div className='flex w-full items-center gap-2'>
<img src={item.icon} className='min-w-[60px] max-w-[60px] min-h-[60px] max-h-[60px] rounded-full bg-slate-500' alt='Reward Logo' /> <img src={item.icon} className='min-w-[60px] max-w-[60px] min-h-[60px] max-h-[60px] rounded-full bg-slate-500' alt='Reward Logo' />
<div className='flex flex-col w-full'> <div className='flex flex-col w-full'>
@@ -74,9 +74,9 @@ export const RewardsTable = memo(() => {
</div> </div>
</div> </div>
</td> </td>
<td className="p-4 text-right">{AmountTo2DP(item.amount*0.01)} {item.currency}</td> <td className="p-4 text-right flex-nowrap">{currencySymbol(item.currency, item.amount*0.01)}</td>
<td className="p-4">{date}</td> <td className="p-4 text-center">{date}</td>
<td className="p-4">{item.confirmation}</td> <td className="p-4 text-center">{item.confirmation}</td>
</tr> </tr>
) )
} }
+1 -1
View File
@@ -127,7 +127,7 @@ export default function History() {
</div> </div>
</div> </div>
<div className="w-[1px] bg-[#E3E4FE] dark:bg-[#a7a9b533] mr-10"></div> <div className="w-[1px] bg-[#E3E4FE] dark:bg-[#a7a9b533] mr-10"></div>
<div className="flex-1 overflow-y-auto min-h-[520px]"> <div className="w-full overflow-y-auto min-h-[520px]">
<> <>
{/* PURCHASE SECTION */} {/* PURCHASE SECTION */}
{selectedTab == 'purchases' && {selectedTab == 'purchases' &&
@@ -19,8 +19,7 @@ export default function ActiveJobMessage({ activeJobMesList }) {
// } // }
return ( return (
<div className='flex flex-col justify-between'> <div className="w-full h-full max-h-[345px] overflow-y-auto">
<div className="w-full h-full min-h-[250px] max-h-[300px] overflow-y-auto">
<table className="wallet-activity w-full table-auto border-collapse text-left"> <table className="wallet-activity w-full table-auto border-collapse text-left">
<thead className='border-b-2'> <thead className='border-b-2'>
<tr className='text-slate-600'> <tr className='text-slate-600'>
@@ -71,9 +70,10 @@ export default function ActiveJobMessage({ activeJobMesList }) {
</table> </table>
</div> </div>
{/* PAGINATION BUTTON */} // <div className='flex flex-col justify-between'>
{/* <PaginatedList onClick={handlePagination} prev={currentPage == 0 ? true : false} next={currentPage+Number(process.env.REACT_APP_ITEM_PER_PAGE) >= activeJobMesList?.data?.length ? true : false} data={activeJobMesList?.data} start={indexOfFirstItem} stop={indexOfLastItem} /> */} // PAGINATION BUTTON
{/* END OF PAGINATION BUTTON */} // <PaginatedList onClick={handlePagination} prev={currentPage == 0 ? true : false} next={currentPage+Number(process.env.REACT_APP_ITEM_PER_PAGE) >= activeJobMesList?.data?.length ? true : false} data={activeJobMesList?.data} start={indexOfFirstItem} stop={indexOfLastItem} />
</div> // END OF PAGINATION BUTTON
// </div>
) )
} }
+12 -10
View File
@@ -390,8 +390,8 @@ function ActiveJobs(props) {
{/* end of job details */} {/* end of job details */}
</div> </div>
<div className="my-4 py-[20px] bg-white dark:bg-black px-4 rounded-2xl shadow-md lg:flex justify-between items-start space-y-4 lg:space-x-4 lg:space-y-0"> <div className="my-4 py-[20px] bg-white dark:bg-black px-4 rounded-2xl shadow-md grid grid-cols-1 lg:grid-cols-2 gap-3">
<div className="w-full lg:w-1/2 mb-4 border-b pb-4 lg:pb-0 lg:mb-0 lg:border-b-0"> <div className="w-full mb-4 border-b pb-4 lg:pb-0 lg:mb-0 lg:border-b-0">
<div className=""> <div className="">
<h1 className="text-lg font-bold text-dark-gray dark:text-white tracking-wide"> <h1 className="text-lg font-bold text-dark-gray dark:text-white tracking-wide">
Actions Actions
@@ -545,14 +545,16 @@ function ActiveJobs(props) {
</div> </div>
{/* MESSAGE SECTION */} {/* MESSAGE SECTION */}
<div className="w-full lg:w-1/2"> <div className="w-full flex flex-col">
<div className="mb-4"> {props.details &&
<AttachFile <div className="mb-4">
data={props.details} <AttachFile
showOnData={true} data={props.details}
fontSize={'text-lg'} showOnData={true}
/> fontSize={'text-lg'}
</div> />
</div>
}
<div className="flex justify-between items-center gap-5"> <div className="flex justify-between items-center gap-5">
<p className="w-full text-lg font-bold text-dark-gray dark:text-white tracking-wide flex items-center gap-2 justify-between"> <p className="w-full text-lg font-bold text-dark-gray dark:text-white tracking-wide flex items-center gap-2 justify-between">
<span>Message</span> <span>Message</span>
@@ -3,6 +3,8 @@ import React, {useState} from 'react'
import PaginatedList from '../../Pagination/PaginatedList'; import PaginatedList from '../../Pagination/PaginatedList';
import { handlePagingFunc } from '../../Pagination/HandlePagination'; import { handlePagingFunc } from '../../Pagination/HandlePagination';
import { currencySymbol } from '../../Helpers/PriceFormatter';
function PurchasesTable({purchase}) { function PurchasesTable({purchase}) {
const [currentPage, setCurrentPage] = useState(0); const [currentPage, setCurrentPage] = useState(0);
@@ -31,8 +33,8 @@ function PurchasesTable({purchase}) {
<td className="p-4">{item.added_date}<br /> <td className="p-4">{item.added_date}<br />
<b>{item.confirmation} </b> <b>{item.confirmation} </b>
</td> </td>
<td className="p-4 text-right">{item.amount}</td> <td className="p-4 text-right">{currencySymbol(item.currency, item.amount)}</td>
<td className="p-4 text-right">{item.fee}</td> <td className="p-4 text-right">{currencySymbol(item.currency, item.fee)}</td>
</tr> </tr>
))} ))}
</tbody> </tbody>
@@ -3,6 +3,8 @@ import React, { useState } from "react";
import PaginatedList from "../../Pagination/PaginatedList"; import PaginatedList from "../../Pagination/PaginatedList";
import { handlePagingFunc } from "../../Pagination/HandlePagination"; import { handlePagingFunc } from "../../Pagination/HandlePagination";
import { currencySymbol } from '../../Helpers/PriceFormatter';
function RecentActivityTable({ payment }) { function RecentActivityTable({ payment }) {
const [currentPage, setCurrentPage] = useState(0); const [currentPage, setCurrentPage] = useState(0);
const indexOfFirstItem = Number(currentPage); const indexOfFirstItem = Number(currentPage);
@@ -38,9 +40,9 @@ function RecentActivityTable({ payment }) {
dangerouslySetInnerHTML={{ __html: item.recipient }} dangerouslySetInnerHTML={{ __html: item.recipient }}
></td> ></td>
<td className="p-4 text-right"> <td className="p-4 text-right">
{item.amount} {currencySymbol(item.currency, item.amount)}
<br /> <br />
{item.fee} {currencySymbol(item.currency, item.fee)}
</td> </td>
<td className="p-4">{item.status}</td> <td className="p-4">{item.status}</td>
</tr> </tr>
+1 -1
View File
@@ -413,7 +413,7 @@ export default function Header({ logoutModalHandler, sidebarHandler }) {
</div> </div>
</Link> </Link>
</li> </li>
{userDetails && userDetails?.account_type !== "FAMILY" && ( {(userDetails && userDetails?.account_type !== "FAMILY" && Number(process.env.REACT_APP_SHOW_USER_PAGE) == 1) && (
<li className="content-item my-2 hover:bg-slate-100 transition duration-500 rounded-lg"> <li className="content-item my-2 hover:bg-slate-100 transition duration-500 rounded-lg">
<Link to="/yourpage" className="notifications"> <Link to="/yourpage" className="notifications">
<div className="name"> <div className="name">
+1 -1
View File
@@ -457,7 +457,7 @@ export default function MediaHeader({ logoutModalHandler, sidebarHandler, backpa
</div> </div>
</Link> </Link>
</li> </li>
{userDetails && userDetails?.account_type !== "FAMILY" && ( {(userDetails && userDetails?.account_type !== "FAMILY" && Number(process.env.REACT_APP_SHOW_USER_PAGE) == 1) && (
<li className="content-item my-2 hover:bg-slate-100 transition duration-500 rounded-lg"> <li className="content-item my-2 hover:bg-slate-100 transition duration-500 rounded-lg">
<Link to="/yourpage" className="notifications"> <Link to="/yourpage" className="notifications">
<div className="name"> <div className="name">
+38 -26
View File
@@ -2,9 +2,10 @@ import ProductCardStyleTwo from "../../Cards/ProductCardStyleTwo";
import DataIteration from "../../Helpers/DataIteration"; import DataIteration from "../../Helpers/DataIteration";
import SearchCom from "../../Helpers/SearchCom"; import SearchCom from "../../Helpers/SearchCom";
import ResourceBlogCard from "../../Cards/ResourceBlogCard"; import ResourceBlogCard from "../../Cards/ResourceBlogCard";
import NewPaginatedList from '../../../components/Pagination/NewPaginatedList'
export default function BlogTab({ className, blogdata }) { export default function BlogTab({ className, blogdata }) {
console.log("Blog data here>> ", blogdata); // console.log("Blog data here>> ", blogdata);
// debugger; // debugger;
return ( return (
<> <>
@@ -15,33 +16,9 @@ export default function BlogTab({ className, blogdata }) {
<div className="sm:w-1/2 w-full sm:pr-20 pr-0 mb-5 sm:mb-0"> <div className="sm:w-1/2 w-full sm:pr-20 pr-0 mb-5 sm:mb-0">
<SearchCom placeholder='Search Blog Items...' /> <SearchCom placeholder='Search Blog Items...' />
</div> </div>
{/* filer-dropdown */}
<div className="flex-1 flex sm:justify-end">
{/* <div className="flex space-x-1 items-center">*/}
{/*<span className="text-18 text-thin-light-gray">*/}
{/* Recently Received*/}
{/*</span>*/}
{/* <span>*/}
{/* <svg*/}
{/* width="20"*/}
{/* height="10"*/}
{/* viewBox="0 0 13 6"*/}
{/* fill="none"*/}
{/* xmlns="http://www.w3.org/2000/svg"*/}
{/* >*/}
{/* <path*/}
{/* opacity="0.7"*/}
{/* d="M12.4124 0.247421C12.3327 0.169022 12.2379 0.106794 12.1335 0.0643287C12.0291 0.0218632 11.917 0 11.8039 0C11.6908 0 11.5787 0.0218632 11.4743 0.0643287C11.3699 0.106794 11.2751 0.169022 11.1954 0.247421L7.27012 4.07837C7.19045 4.15677 7.09566 4.219 6.99122 4.26146C6.88678 4.30393 6.77476 4.32579 6.66162 4.32579C6.54848 4.32579 6.43646 4.30393 6.33202 4.26146C6.22758 4.219 6.13279 4.15677 6.05312 4.07837L2.12785 0.247421C2.04818 0.169022 1.95338 0.106794 1.84895 0.0643287C1.74451 0.0218632 1.63249 0 1.51935 0C1.40621 0 1.29419 0.0218632 1.18975 0.0643287C1.08531 0.106794 0.990517 0.169022 0.910844 0.247421C0.751218 0.404141 0.661621 0.616141 0.661621 0.837119C0.661621 1.0581 0.751218 1.2701 0.910844 1.42682L4.84468 5.26613C5.32677 5.73605 5.98027 6 6.66162 6C7.34297 6 7.99647 5.73605 8.47856 5.26613L12.4124 1.42682C12.572 1.2701 12.6616 1.0581 12.6616 0.837119C12.6616 0.616141 12.572 0.404141 12.4124 0.247421Z"*/}
{/* fill="#374557"*/}
{/* fillOpacity="0.6"*/}
{/* />*/}
{/* </svg>*/}
{/*</span>*/}
{/* </div>*/}
</div>
</div> </div>
<div className="content-section w-full-width"> {/* <div className="content-section w-full-width">
<div className="grid lg:grid-cols-3 sm:grid-cols-2 grid-cols-1 gap-[30px]"> <div className="grid lg:grid-cols-3 sm:grid-cols-2 grid-cols-1 gap-[30px]">
<DataIteration <DataIteration
datas={blogdata?.blogdata} datas={blogdata?.blogdata}
@@ -57,7 +34,42 @@ export default function BlogTab({ className, blogdata }) {
)} )}
</DataIteration> </DataIteration>
</div> </div>
</div> */}
{blogdata?.blogdata?.length ?
<NewPaginatedList
data={blogdata?.blogdata}
itemsPerPage={9}
filterItem=''
tableTitle=''
>
{
({data})=>(
<div className="filter-navigate-content w-full min-h-[600px]">
<div
className={"grid lg:grid-cols-3 sm:grid-cols-2 gap-[30px]"}
>
{
data.map((datum, index) => (
<div key={index}>
<ResourceBlogCard
key={index}
datas={datum}
bg={blogdata.image_url}
/>
</div>
))
}
</div>
</div>
)
}
</NewPaginatedList>
:
<div className="w-full h-[40rem] bg-white dark:bg-dark-white flex justify-center items-center">
No Blog Found!
</div> </div>
}
</div> </div>
</div> </div>
</> </>
@@ -120,7 +120,7 @@ export default function ChangePasswordTab() {
className="input-label text-dark-gray dark:text-white text-xl font-bold block mb-2.5" className="input-label text-dark-gray dark:text-white text-xl font-bold block mb-2.5"
htmlFor="old_password" htmlFor="old_password"
> >
Old Password <span className="text-[10px] text-red-500 italic px-2">{(inputEmpty && !inputs.old_pwd) && 'required'}</span> Current Password <span className="text-[10px] text-red-500 italic px-2">{(inputEmpty && !inputs.old_pwd) && 'required'}</span>
</label> </label>
<div className="input-wrapper border border-light-purple dark:border-[#5356fb29] w-full rounded-[50px] h-[58px] overflow-hidden relative "> <div className="input-wrapper border border-light-purple dark:border-[#5356fb29] w-full rounded-[50px] h-[58px] overflow-hidden relative ">
<div className="absolute left-6 bottom-[17px] z-10"> <div className="absolute left-6 bottom-[17px] z-10">
@@ -0,0 +1,43 @@
import React from "react";
import Icons from "../../Helpers/Icons";
export default function Preferences() {
return (
<div className="login-activity-tab w-full">
<div className="relative w-full overflow-x-auto sm:rounded-lg">
<table className="w-full text-sm text-left text-gray-500 dark:text-gray-400">
{/* <thead>
<tr className="text-base text-thin-light-gray border-b dark:border-[#5356fb29] default-border-b ">
<td className="py-4 text-center">Channel</td>
<td className="py-4 text-center">Date</td>
<td className="py-4 text-center">Location</td>
</tr>
</thead>
<tbody>
<tr className="bg-white dark:bg-dark-white border-b dark:border-[#5356fb29] hover:bg-gray-50">
<td className="text-center py-4">
<div className="flex items-center justify-center">
<span className="text-base text-dark-gray dark:text-white font-medium whitespace-nowrap px-2">
Desktop
</span>
</div>
</td>
<td className="text-center py-4">
<div className="flex space-x-1 items-center justify-center">
<span className="text-base text-dark-gray dark:text-white font-medium whitespace-nowrap px-2">
10-10-2035
</span>
</div>
</td>
<td className="text-center py-4">
<span className="text-base text-dark-gray dark:text-white whitespace-nowrap px-2">
10.0.0.1000
</span>
</td>
</tr>
</tbody> */}
</table>
</div>
</div>
);
}
+2
View File
@@ -7,6 +7,7 @@ import PersonalInfoTab from "./PersonalInfoTab";
import PrivacyPolicyTab from "./PrivacyPolicyTab"; import PrivacyPolicyTab from "./PrivacyPolicyTab";
import RecentActivitiesTab from "./RecentActivitiesTab"; import RecentActivitiesTab from "./RecentActivitiesTab";
import TermsConditionTab from "./TermsConditionTab"; import TermsConditionTab from "./TermsConditionTab";
import Preferences from './Preferences'
export { export {
ChangePasswordTab, ChangePasswordTab,
@@ -18,4 +19,5 @@ export {
PrivacyPolicyTab, PrivacyPolicyTab,
RecentActivitiesTab, RecentActivitiesTab,
TermsConditionTab, TermsConditionTab,
Preferences
}; };
+4 -3
View File
@@ -13,6 +13,7 @@ import {
PrivacyPolicyTab, PrivacyPolicyTab,
RecentActivitiesTab, RecentActivitiesTab,
TermsConditionTab, TermsConditionTab,
Preferences,
} from "./Tabs"; } from "./Tabs";
import RecipientAccountTab from "./Tabs/RecipientAccountTab"; import RecipientAccountTab from "./Tabs/RecipientAccountTab";
@@ -91,8 +92,8 @@ export default function Settings({ faq }) {
}, },
{ {
id: 5, id: 5,
name: "login_activity", name: "preferences",
title: "Login Activity", title: "Preferences",
iconName: "login-activity", iconName: "login-activity",
}, },
{ {
@@ -166,7 +167,7 @@ export default function Settings({ faq }) {
<NotificationSettingTab /> <NotificationSettingTab />
</div> </div>
), ),
login_activity: <LoginActivityTab />, preferences: <Preferences />,
recent_activities: <RecentActivitiesTab />, recent_activities: <RecentActivitiesTab />,
password: <ChangePasswordTab />, password: <ChangePasswordTab />,
faq: <FaqTab datas={faq} />, faq: <FaqTab datas={faq} />,
+1 -1
View File
@@ -4,7 +4,7 @@ import Icons from '../Helpers/Icons'
export default function TabButton({ item='', iconName='', selectedTab='', setSelectedTab=()=>{} }) { export default function TabButton({ item='', iconName='', selectedTab='', setSelectedTab=()=>{} }) {
return ( return (
<button <button
className={`flex lg:space-x-4 space-x-2 hover:text-purple transition-all duration-300 ease-in-out items-center cursor-pointer lg:mb-11 mb-2 mr-6 lg:mr-0 float-left lg:float-none overflow-hidden ${ className={`flex lg:space-x-4 space-x-2 hover:text-purple transition-all duration-300 ease-in-out items-center cursor-pointer mb-2 mr-6 lg:mr-0 float-left lg:float-none overflow-hidden ${
selectedTab === item ? "text-purple" : " text-thin-light-gray" selectedTab === item ? "text-purple" : " text-thin-light-gray"
}`} }`}
value={item} value={item}