Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c4cc27490b | |||
| 90b609d457 | |||
| a6c6c36fbc | |||
| 03b79f0e0c | |||
| 0af52df1d2 | |||
| 9e1a68f81a | |||
| 12e4b7824a | |||
| 5769332e74 | |||
| bab0296f4f | |||
| d457550d58 | |||
| f106e17ce6 |
@@ -18,6 +18,9 @@ export default function Login() {
|
|||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
let [loginType, setLoginType] = useState({ full: true, family: false });
|
let [loginType, setLoginType] = useState({ full: true, family: false });
|
||||||
|
const [selectedLoginType, setSelectedLoginType] = useState(
|
||||||
|
document.cookie.includes("loginType=family") ? "loginfamily" : "loginfull"
|
||||||
|
);
|
||||||
|
|
||||||
const [checked, setValue] = useState(false);
|
const [checked, setValue] = useState(false);
|
||||||
const [loginLoading, setLoginLoading] = useState(false);
|
const [loginLoading, setLoginLoading] = useState(false);
|
||||||
@@ -77,6 +80,10 @@ export default function Login() {
|
|||||||
login_mode: 1100,
|
login_mode: 1100,
|
||||||
action: 11025,
|
action: 11025,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Clear the loginType cookie if the user switches to loginfull
|
||||||
|
document.cookie =
|
||||||
|
"loginType=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
|
||||||
} else if (name == "loginfamily") {
|
} else if (name == "loginfamily") {
|
||||||
// Post Data Info for family Login
|
// Post Data Info for family Login
|
||||||
postData = {
|
postData = {
|
||||||
@@ -86,6 +93,8 @@ export default function Login() {
|
|||||||
login_mode: 1105,
|
login_mode: 1105,
|
||||||
action: 11025,
|
action: 11025,
|
||||||
};
|
};
|
||||||
|
// Set the loginType cookie to remember the user's selection
|
||||||
|
document.cookie = "loginType=family; path=/;";
|
||||||
} else {
|
} else {
|
||||||
setLoginLoading(false);
|
setLoginLoading(false);
|
||||||
setMsgError("Invalid Login Type. Consider refreshing the page");
|
setMsgError("Invalid Login Type. Consider refreshing the page");
|
||||||
@@ -127,15 +136,24 @@ export default function Login() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const googleLogin = useGoogleLogin({
|
const googleLogin = useGoogleLogin({
|
||||||
flow: 'auth-code',
|
flow: "auth-code",
|
||||||
ux_mode:'redirect',
|
ux_mode: "redirect",
|
||||||
redirect_uri: process.env.REACT_APP_GOOGLE_REDIRECT_URL,
|
redirect_uri: process.env.REACT_APP_GOOGLE_REDIRECT_URL,
|
||||||
onSuccess: async (codeResponse) => {
|
onSuccess: async (codeResponse) => {
|
||||||
console.log("GOOGLE LOGIN GOOD --- ",codeResponse);
|
console.log("GOOGLE LOGIN GOOD --- ", codeResponse);
|
||||||
},
|
},
|
||||||
onError: (errorResponse) => console.log(errorResponse),
|
onError: (errorResponse) => console.log(errorResponse),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// In order to update the selected login type whenever the component renders
|
||||||
|
useEffect(() => {
|
||||||
|
setSelectedLoginType(
|
||||||
|
document.cookie.includes("loginType=family") ? "loginfamily" : "loginfull"
|
||||||
|
);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
console.log("Looking for the cookies >>", selectedLoginType)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setMail("");
|
setMail("");
|
||||||
setPassword("");
|
setPassword("");
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ export default function AvailableJobsCard({
|
|||||||
</div>
|
</div>
|
||||||
</div> */}
|
</div> */}
|
||||||
<div className="block sm:flex flex-wrap gap-4">
|
<div className="block sm:flex flex-wrap gap-4">
|
||||||
<p className="text-sm text-thin-light-gray">
|
<p className="text-sm text-thin-light-gray flex flext-start gap-1">
|
||||||
Price: <span className="text-purple">{thePrice}</span>
|
Price: <span className="text-purple">{thePrice}</span>
|
||||||
</p>
|
</p>
|
||||||
<p className="text-sm text-thin-light-gray">
|
<p className="text-sm text-thin-light-gray">
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export default function FamilyTasks({ familyData, className, loader }) {
|
|||||||
{value.title}
|
{value.title}
|
||||||
</h1>
|
</h1>
|
||||||
<div className="flex gap-4 items-center">
|
<div className="flex gap-4 items-center">
|
||||||
<span className="text-sm text-thin-light-gray">
|
<span className="text-sm text-thin-light-gray flex flex-start gap-1">
|
||||||
Price:{" "}
|
Price:{" "}
|
||||||
<span className="text-purple">
|
<span className="text-purple">
|
||||||
{thePrice}
|
{thePrice}
|
||||||
|
|||||||
@@ -1,16 +1,48 @@
|
|||||||
export const PriceFormatter = (price, currency, currencyName) => {
|
import React from 'react'
|
||||||
const supportedCurrencies = ["USD", "EUR", "GBP"];
|
|
||||||
const symbolFormatter = supportedCurrencies.includes(currency)
|
|
||||||
? currency
|
|
||||||
: undefined;
|
|
||||||
|
|
||||||
const formatter = new Intl.NumberFormat("en", {
|
// export const PriceFormatter = (price, currency, currencyName) => {
|
||||||
style: symbolFormatter,
|
// const supportedCurrencies = ["USD", "EUR", "GBP"];
|
||||||
currencyDisplay: "symbol",
|
// const symbolFormatter = supportedCurrencies.includes(currency)
|
||||||
minimumFractionDigits: 2,
|
// ? currency
|
||||||
});
|
// : undefined;
|
||||||
|
|
||||||
const displayCurrencyName = symbolFormatter ? "" : currencyName;
|
// const formatter = new Intl.NumberFormat("en", {
|
||||||
|
// style: symbolFormatter,
|
||||||
|
// currencyDisplay: "symbol",
|
||||||
|
// minimumFractionDigits: 2,
|
||||||
|
// });
|
||||||
|
|
||||||
return `${formatter.format(price)} ${displayCurrencyName}`;
|
// const displayCurrencyName = symbolFormatter ? "" : currencyName;
|
||||||
};
|
|
||||||
|
// return `${formatter.format(price)} ${displayCurrencyName}`;
|
||||||
|
// };
|
||||||
|
|
||||||
|
|
||||||
|
export const PriceFormatter = (price='00', currency='', currencyName='') => {
|
||||||
|
// Convert the number to a string
|
||||||
|
let numStr = String(price);
|
||||||
|
|
||||||
|
// Split the string into integer and decimal parts
|
||||||
|
let parts = numStr.split('.');
|
||||||
|
let integerPart = parts[0];
|
||||||
|
let decimalPart = parts[1] || '';
|
||||||
|
|
||||||
|
// Add thousands separators to the integer part
|
||||||
|
// let formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||||
|
let formattedInteger = integerPart;
|
||||||
|
|
||||||
|
// Truncate or pad the decimal part to two decimal points
|
||||||
|
let formattedDecimal = decimalPart.slice(0, 2).padEnd(2, '0');
|
||||||
|
|
||||||
|
// Combine the formatted integer and decimal parts
|
||||||
|
// let formattedNumber = formattedInteger + '.' + formattedDecimal;
|
||||||
|
|
||||||
|
// return formattedNumber;
|
||||||
|
return (
|
||||||
|
<span className='text-sm flex items-center'>
|
||||||
|
<sup>{currency || currencyName || ''}</sup>
|
||||||
|
<span className='px-1 font-bold text-lg'>{formattedInteger}</span>
|
||||||
|
<sup>{formattedDecimal}</sup>
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { toast } from "react-toastify";
|
|||||||
import { Form, Formik } from "formik";
|
import { Form, Formik } from "formik";
|
||||||
import usersService from "../../../services/UsersService";
|
import usersService from "../../../services/UsersService";
|
||||||
import LoadingSpinner from "../../Spinners/LoadingSpinner";
|
import LoadingSpinner from "../../Spinners/LoadingSpinner";
|
||||||
|
import { PriceFormatter } from "../../Helpers/PriceFormatter";
|
||||||
|
|
||||||
const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
||||||
const [marketMsg, setMarketMsg] = useState({
|
const [marketMsg, setMarketMsg] = useState({
|
||||||
@@ -96,14 +97,18 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
[apiCall, details, onClose, textValue]
|
[apiCall, details, onClose, textValue]
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log('Checking my mangeInt',manageInt)
|
let thePrice = PriceFormatter(
|
||||||
|
details?.price * 0.01,
|
||||||
|
details?.currency_code,
|
||||||
|
details?.currency
|
||||||
|
);
|
||||||
|
|
||||||
// let addedIntDate = marketInt?.added?.split(" ")[0];
|
// let addedIntDate = marketInt?.added?.split(" ")[0];
|
||||||
let expireIntDate = marketInt?.expire?.split(" ")[0];
|
let expireIntDate = marketInt?.expire?.split(" ")[0];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ModalCom action={onClose} situation={situation} className="edit-popup">
|
<ModalCom action={onClose} situation={situation} className="edit-popup">
|
||||||
<div className="logout-modal-wrapper md:w-[750px] md:h-[700px] h-full bg-white dark:bg-dark-white lg:rounded-2xl overflow-y-auto">
|
<div className="logout-modal-wrapper md:w-[750px] md:h-[660px] h-full bg-white dark:bg-dark-white lg:rounded-2xl overflow-y-auto">
|
||||||
<div className="logout-modal-header w-full flex items-center justify-between lg:p-6 px-[30px] py-[23px]">
|
<div className="logout-modal-header w-full flex items-center justify-between lg:p-6 px-[30px] py-[23px]">
|
||||||
<h1 className="text-26 font-bold text-dark-gray dark:text-white tracking-wide">
|
<h1 className="text-26 font-bold text-dark-gray dark:text-white tracking-wide">
|
||||||
{details.offer_code}
|
{details.offer_code}
|
||||||
@@ -112,8 +117,8 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="md:flex bg-white rounded-lg">
|
<div className="md:flex bg-white rounded-lg">
|
||||||
<div className="p-4 w-full md:w-3/4 md:border-r-1">
|
<div className="p-4 w-full md:w-[75%] md:border-r-1">
|
||||||
<div className="min-h-[290px]">
|
<div className="min-h-[263px]">
|
||||||
<h2 className="font-semibold text-slate-900 dark:text-black tracking-wide">
|
<h2 className="font-semibold text-slate-900 dark:text-black tracking-wide">
|
||||||
{details?.title}
|
{details?.title}
|
||||||
</h2>
|
</h2>
|
||||||
@@ -128,7 +133,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
name: "",
|
name: "",
|
||||||
content: {
|
content: {
|
||||||
text: `Timeline: ${details.timeline_days} day(s) -- `,
|
text: `Timeline: ${details.timeline_days} day(s) -- `,
|
||||||
bold: `Budget: ${details.price} naira`,
|
bold: `Budget: ${thePrice}`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -138,7 +143,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
},
|
},
|
||||||
].map(({ name, content, danger }, idx) => (
|
].map(({ name, content, danger }, idx) => (
|
||||||
<div className={`my-3 md:flex items-center`} key={idx}>
|
<div className={`my-3 md:flex items-center`} key={idx}>
|
||||||
<label className="w-full md:w-1/4 text-slate-900 tracking-wide font-semibold">
|
<label className="w-full md:w-[19%] text-slate-900 tracking-wide font-semibold whitespace-pre-wrap">
|
||||||
{name}
|
{name}
|
||||||
</label>
|
</label>
|
||||||
<div
|
<div
|
||||||
@@ -156,15 +161,19 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<p className={`w-full md:w-3/4 text-slate-900`}>
|
<p className={`w-full text-slate-900`}>
|
||||||
{name !== "Delivery Detail" ? (
|
{name !== "Delivery Detail" ? (
|
||||||
<>
|
<>
|
||||||
{typeof content !== "object" ? content : null}
|
{typeof content !== "object" ? content : null}
|
||||||
{typeof content === "object" && (
|
{typeof content === "object" && (
|
||||||
<span className="flex items-center gap-2">
|
<>
|
||||||
{content?.text}
|
<hr className="mb-1" />
|
||||||
<strong>{content?.bold}</strong>
|
<span className="flex items-center gap-2">
|
||||||
</span>
|
{content?.text}
|
||||||
|
<strong>{content?.bold}</strong>
|
||||||
|
</span>
|
||||||
|
<hr className="mt-1" />
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
@@ -207,15 +216,15 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full md:w-1/4 h-full ">
|
<div className="w-full md:w-[23%] h-full ">
|
||||||
<div className="w-[90%] mx-auto bg-[#f1f8ff] p-4 rounded-md md:min-h-[550px] flex flex-col justify-between">
|
<div className="mx-auto bg-[#f1f8ff] p-4 rounded-md md:min-h-[498px] flex flex-col justify-between">
|
||||||
<div className="w-full flex flex-col justify-center py-4 gap-2">
|
<div className="w-full flex flex-col justify-center py-4 gap-2">
|
||||||
<p className="w-full text-slate-900 tracking-wide my-1">
|
<p className="w-full text-slate-900 tracking-wide my-1">
|
||||||
Interested in the task?
|
Interested in the task?
|
||||||
</p>
|
</p>
|
||||||
<hr />
|
<hr />
|
||||||
<button
|
<button
|
||||||
className="bg-[#57cd89] text-center text-lg font-semibold text-white py-2 px-4 rounded-md inline-flex flex-col items-center justify-center"
|
className="bg-[#57cd89] text-center text-lg font-semibold text-white py-2 px-4 rounded-md inline-flex sm:flex-col flex-row sm:gap-0 gap-1 items-center justify-center"
|
||||||
name="market-interest"
|
name="market-interest"
|
||||||
onClick={marketCalls}
|
onClick={marketCalls}
|
||||||
>
|
>
|
||||||
@@ -251,6 +260,13 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
<p className="my-1">Expire: {expireIntDate}</p>
|
<p className="my-1">Expire: {expireIntDate}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<button
|
||||||
|
className="self-end w-[150px] mt-2 h-[52px] rounded-md text-base bg-transparent border border-red-500 text-red-500 mx-auto"
|
||||||
|
name="cancel"
|
||||||
|
onClick={onClose}
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{/* END OF ACTION SECTION */}
|
{/* END OF ACTION SECTION */}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ export default function MyActiveJobTable({ MyJobList, className }) {
|
|||||||
{value.title}
|
{value.title}
|
||||||
</h1>
|
</h1>
|
||||||
<div>{value.description}</div>
|
<div>{value.description}</div>
|
||||||
<span className="text-sm text-thin-light-gray">
|
<span className="text-sm text-thin-light-gray flex flext-start gap-1">
|
||||||
Price:{" "}
|
Price:{" "}
|
||||||
<span className="text-purple">
|
<span className="text-purple">
|
||||||
{thePrice}
|
{thePrice}
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ export default function MyJobTable({ MyJobList, reloadJobList, className }) {
|
|||||||
{value.title}
|
{value.title}
|
||||||
</h1>
|
</h1>
|
||||||
<div>{value.description}</div>
|
<div>{value.description}</div>
|
||||||
<span className="text-sm text-thin-light-gray">
|
<span className="text-sm text-thin-light-gray flex items-start gap-1">
|
||||||
Price: <span className="text-purple">{thePrice}</span>
|
Price: <span className="text-purple">{thePrice}</span>
|
||||||
</span>
|
</span>
|
||||||
<span className="text-sm text-thin-light-gray">
|
<span className="text-sm text-thin-light-gray">
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ export default function MyPendingJobTable({ MyJobList, className }) {
|
|||||||
{value.title}
|
{value.title}
|
||||||
</h1>
|
</h1>
|
||||||
<div>{value.description}</div>
|
<div>{value.description}</div>
|
||||||
<span className="text-sm text-thin-light-gray">
|
<span className="text-sm text-thin-light-gray flex items-start gap-1">
|
||||||
Price:{" "}
|
Price:{" "}
|
||||||
<span className="text-purple">
|
<span className="text-purple">
|
||||||
{thePrice}
|
{thePrice}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ export default function MyJobTable({ className, ActiveJobList }) {
|
|||||||
<span className="text-base text-gray-600">
|
<span className="text-base text-gray-600">
|
||||||
{task?.description}
|
{task?.description}
|
||||||
</span>
|
</span>
|
||||||
<span className="text-sm text-thin-light-gray">
|
<span className="text-sm text-thin-light-gray flex flext-start gap-1">
|
||||||
Price:
|
Price:
|
||||||
<span className="text-purple ml-1">{thePrice}</span>
|
<span className="text-purple ml-1">{thePrice}</span>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import RecentActivityTable from './WalletComponent/RecentActivityTable'
|
|||||||
import PurchasesTable from './WalletComponent/PurchasesTable'
|
import PurchasesTable from './WalletComponent/PurchasesTable'
|
||||||
import CouponTable from './WalletComponent/CouponTable'
|
import CouponTable from './WalletComponent/CouponTable'
|
||||||
import LoadingSpinner from '../Spinners/LoadingSpinner'
|
import LoadingSpinner from '../Spinners/LoadingSpinner'
|
||||||
|
import { PriceFormatter } from '../Helpers/PriceFormatter'
|
||||||
|
|
||||||
function Balance({wallet, coupon}) {
|
function Balance({wallet, coupon}) {
|
||||||
return (
|
return (
|
||||||
@@ -42,11 +43,11 @@ function Balance({wallet, coupon}) {
|
|||||||
</div>
|
</div>
|
||||||
<div className='balance-info'>
|
<div className='balance-info'>
|
||||||
<p className='py-2'>Balance</p>
|
<p className='py-2'>Balance</p>
|
||||||
<span className='py-1 px-2 bg-green-100 text-green-500 rounded-lg'>{item.symbol}{(item.amount*0.01).toFixed(2)}</span>
|
<span className='py-1 px-2 bg-green-100 text-green-500 rounded-lg flex flex-start gap-1'>{PriceFormatter(item.amount * 0.01, item.code)}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className='balance-info'>
|
<div className='balance-info'>
|
||||||
<p className='py-2'>Escrow</p>
|
<p className='py-2'>Escrow</p>
|
||||||
<span className='py-1 px-2 bg-red-100 text-red-500 rounded-lg'>{item.symbol}{(item.escrow*0.01).toFixed(2)}</span>
|
<span className='py-1 px-2 bg-red-100 text-red-500 rounded-lg flex flex-start gap-1'>{PriceFormatter(item.escrow * 0.01, item.code)}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import bank2 from "../../assets/images/bank-2.png";
|
|||||||
import bank3 from "../../assets/images/bank-3.png";
|
import bank3 from "../../assets/images/bank-3.png";
|
||||||
import bank4 from "../../assets/images/bank-4.png";
|
import bank4 from "../../assets/images/bank-4.png";
|
||||||
import Accordion from "../Helpers/Accordion";
|
import Accordion from "../Helpers/Accordion";
|
||||||
|
import { PriceFormatter } from "../Helpers/PriceFormatter";
|
||||||
|
|
||||||
export default function WalletHeader(props) {
|
export default function WalletHeader(props) {
|
||||||
// debugger;
|
// debugger;
|
||||||
@@ -58,10 +59,7 @@ export default function WalletHeader(props) {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p className="eth text-xl font-bold text-purple">
|
<p className="eth text-xl font-bold text-purple">
|
||||||
{(value.amount * 0.01).toFixed(2)} {value.code}
|
{PriceFormatter(value.amount * 0.01, value.code)}
|
||||||
</p>
|
|
||||||
<p className="usd text-base text-thin-light-gray text-right">
|
|
||||||
{/*(773.69 USD)*/}
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -143,13 +143,15 @@ export default function ManageInterestOffer(props) {
|
|||||||
{/* info tab */}
|
{/* info tab */}
|
||||||
{tab == 'info' ?
|
{tab == 'info' ?
|
||||||
<div className="info-details w-full border-t">
|
<div className="info-details w-full border-t">
|
||||||
<div className="my-3 flex items-center gap-1">
|
<div className="my-0 md:my-3 block md:flex items-center gap-10">
|
||||||
<span className="w-[200px] text-lg font-bold text-dark-gray dark:text-white tracking-wide">Name</span>
|
<div className="my-3 md:my-0 flex items-center gap-1">
|
||||||
<span className="min-w-[100px] text-sm font-bold text-dark-gray dark:text-white tracking-wide">{props.offerDetails?.client_name}</span>
|
<span className="w-[200px] text-lg font-bold text-dark-gray dark:text-white tracking-wide">Name</span>
|
||||||
</div>
|
<span className="min-w-[100px] text-sm font-bold text-dark-gray dark:text-white tracking-wide">{props.offerDetails?.client_name}</span>
|
||||||
<div className="my-3 flex items-center gap-1">
|
</div>
|
||||||
<span className="w-[200px] text-lg font-bold text-dark-gray dark:text-white tracking-wide">Member Since</span>
|
<div className="my-3 md:my-0 flex items-center gap-1">
|
||||||
<span className="min-w-[100px] text-sm font-bold text-dark-gray dark:text-white tracking-wide">{props.offerDetails?.client_added}</span>
|
<span className="w-[200px] text-lg font-bold text-dark-gray dark:text-white tracking-wide">Member Since</span>
|
||||||
|
<span className="min-w-[100px] text-sm font-bold text-dark-gray dark:text-white tracking-wide">{props.offerDetails?.client_added}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="my-3 flex items-center gap-1">
|
<div className="my-3 flex items-center gap-1">
|
||||||
<span className="w-[200px] text-lg font-bold text-dark-gray dark:text-white tracking-wide">Jobs completed</span>
|
<span className="w-[200px] text-lg font-bold text-dark-gray dark:text-white tracking-wide">Jobs completed</span>
|
||||||
@@ -226,7 +228,7 @@ export default function ManageInterestOffer(props) {
|
|||||||
{/* BUTTON section */}
|
{/* BUTTON section */}
|
||||||
<div className="p-4 w-full min-h-full bg-sky-100 dark:bg-dark-gray col-span-1">
|
<div className="p-4 w-full min-h-full bg-sky-100 dark:bg-dark-gray col-span-1">
|
||||||
<div className="w-full h-full">
|
<div className="w-full h-full">
|
||||||
<div className="mt-0 sm:mt-10 flex sm:flex-col justify-center items-center gap-10">
|
<div className="h-full flex sm:flex-col justify-center items-center gap-10">
|
||||||
{requestStatus.loading && requestStatus.processType == 'accept' ?
|
{requestStatus.loading && requestStatus.processType == 'accept' ?
|
||||||
<LoadingSpinner color='sky-blue' size='10' />
|
<LoadingSpinner color='sky-blue' size='10' />
|
||||||
:
|
:
|
||||||
@@ -235,9 +237,10 @@ export default function ManageInterestOffer(props) {
|
|||||||
name='accept'
|
name='accept'
|
||||||
disabled={requestStatus.loading}
|
disabled={requestStatus.loading}
|
||||||
onClick={interestOfferProcess}
|
onClick={interestOfferProcess}
|
||||||
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"
|
||||||
|
className='max-w-[150px] h-[100px] bg-[#57cd89] text-center text-lg font-semibold text-white py-2 px-4 rounded-md shadow-md'
|
||||||
>
|
>
|
||||||
Accept
|
Accept this Interest
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,9 +252,10 @@ export default function ManageInterestOffer(props) {
|
|||||||
name='reject'
|
name='reject'
|
||||||
disabled={requestStatus.loading}
|
disabled={requestStatus.loading}
|
||||||
onClick={interestOfferProcess}
|
onClick={interestOfferProcess}
|
||||||
className="px-2 py-1 h-11 flex justify-center items-center border-gradient text-base rounded-full text-black"
|
// className="px-2 py-1 h-11 flex justify-center items-center border-gradient text-base rounded-full text-black"
|
||||||
|
className='max-w-[150px] h-[100px] bg-red-300 text-center text-lg font-semibold text-white py-2 px-4 rounded-md shadow-md'
|
||||||
>
|
>
|
||||||
Reject
|
Reject this Interest
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ function DeleteJobPopout({ details, onClose, situation }) {
|
|||||||
<p className="text-xl tracking-wide text-dark-gray dark:text-white">
|
<p className="text-xl tracking-wide text-dark-gray dark:text-white">
|
||||||
{details.title}
|
{details.title}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-lg tracking-wide text-dark-gray dark:text-white">
|
<p className="text-lg tracking-wide text-dark-gray dark:text-white flex items-start gap-1">
|
||||||
Price: {details.thePrice}
|
Price: {details.thePrice}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-lg tracking-wide text-dark-gray dark:text-white">
|
<p className="text-lg tracking-wide text-dark-gray dark:text-white">
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import ModalCom from "../Helpers/ModalCom";
|
|||||||
import usersService from "../../services/UsersService";
|
import usersService from "../../services/UsersService";
|
||||||
import { toast } from "react-toastify";
|
import { toast } from "react-toastify";
|
||||||
import LoadingSpinner from "../Spinners/LoadingSpinner";
|
import LoadingSpinner from "../Spinners/LoadingSpinner";
|
||||||
|
import { PriceFormatter } from "../Helpers/PriceFormatter";
|
||||||
|
|
||||||
const showSuccessToast = (message) => {
|
const showSuccessToast = (message) => {
|
||||||
toast.success(message, {
|
toast.success(message, {
|
||||||
@@ -133,7 +134,8 @@ function PendingJobsPopout({ details, onClose, situation }) {
|
|||||||
<div className="my-2 md:flex">
|
<div className="my-2 md:flex">
|
||||||
<Detail
|
<Detail
|
||||||
label="Price"
|
label="Price"
|
||||||
value={`${details.price * 0.01} ${details.currency}`}
|
// value={`${details.price * 0.01} ${details.currency}`}
|
||||||
|
value={PriceFormatter(details.price * 0.01, details?.currency_code, details.currency)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user