From d9692c38902c1bd65d43bd53ee705217038e714f Mon Sep 17 00:00:00 2001 From: YasinShaikh123 <123150391+YasinShaikh123@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:55:38 +0530 Subject: [PATCH 1/3] update exchange rate numbar --- .../Master/ExchangeRate/EditExchangeRate.jsx | 90 ++++++++++++++++--- 1 file changed, 79 insertions(+), 11 deletions(-) diff --git a/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx b/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx index 51d9cbd..8f88239 100644 --- a/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx +++ b/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx @@ -30,8 +30,35 @@ import { } from "../../../Services/exchange.rate.service"; import ToastBox from "../../../Components/ToastBox"; import { getTomorrowDate } from "../../../Constants/Constants"; +import * as yup from "yup"; import FullscreenLoaders from "../../../Components/Loaders/FullscreenLoaders"; +// const editExchange = yup.object().shape({ +// rate: yup +// .number() +// .required("Rate is required") +// .positive("Rate must be greater than 0") +// .test( +// "is-decimal", +// "Rate must have at most 8 decimal places", +// (value) => +// value !== undefined && value.toString().match(/^\d+(\.\d{1,8})?$/) +// ), +// }); + +const editExchange = yup.object().shape({ + rate: yup + .number() + .required("Rate is required") + .positive("Rate must be greater than 0") + .test( + "is-decimal", + "Rate must have exactly 8 decimal places", + (value) => + value !== undefined && value.toString().match(/^\d+(\.\d{8})?$/) + ), +}); + // Convert date to YYYY-MM-DD format const formatDateValue = (date) => { if (!date) return ""; @@ -57,6 +84,7 @@ const EditExchangeRate = ({ const toast = useToast(); const {} = useDisclosure(); const [isBtnLoading, setIsBtnLoading] = useState(false); + const [rateError, setRateError] = useState(""); const { data, isLoading, errors } = useGetExchangeRateByIdQuery(id, { skip: !id, @@ -73,11 +101,27 @@ const EditExchangeRate = ({ } }, [foundObject]); + const validateRate = async () => { + try { + await editExchange.validate({ rate }); + setRateError(""); // Clear validation error if valid + return true; + } catch (error) { + setRateError(error.message); // Display validation error + return false; + } + }; + const handleSave = async () => { + const isValid = await validateRate(); + if (!isValid) { + return; // Prevent submission if validation fails + } + setIsBtnLoading(true); try { const data = { - rate: rate, + rate, }; const res = await updateExchange({ data, id }); if (res?.data?.statusCode === 200) { @@ -88,9 +132,31 @@ const EditExchangeRate = ({ setAlert(false); onClose(); } - } catch (error) {} + } catch (error) { + setIsBtnLoading(false); + // Handle error + } }; + const checkValidate = async (e) => { + e.preventDefault(); + + // Wait for the validation to complete + const isValid = await validateRate(); + + if (!isValid) { + return; // Prevent submission if validation fails + } else { + setAlert(true); // Only trigger modal if validation passes + } + }; + + useEffect(() => { + if (rate) { + validateRate(); + } + }, [rate]); + return ( <> -
{ - e.preventDefault(); - setAlert(true); - }} - > + checkValidate(e)}> @@ -153,16 +214,23 @@ const EditExchangeRate = ({ {formatDate(getTomorrowDate())} - + Rate setRate(e.target.value)} + onChange={(e) => { + return setRate(e.target.value); + // validateRate() + }} /> + {rateError && ( + + {rateError} + + )} From 01aece9bf6a08e90eae7b484285dc80714a56727 Mon Sep 17 00:00:00 2001 From: YasinShaikh123 <123150391+YasinShaikh123@users.noreply.github.com> Date: Tue, 7 Jan 2025 18:46:00 +0530 Subject: [PATCH 2/3] update --- .../Master/ExchangeRate/EditExchangeRate.jsx | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx b/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx index 8f88239..aaa7ac6 100644 --- a/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx +++ b/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx @@ -86,7 +86,7 @@ const EditExchangeRate = ({ const [isBtnLoading, setIsBtnLoading] = useState(false); const [rateError, setRateError] = useState(""); - const { data, isLoading, errors } = useGetExchangeRateByIdQuery(id, { + const { data, isLoading, errors,refetch } = useGetExchangeRateByIdQuery(id, { skip: !id, }); @@ -99,7 +99,13 @@ const EditExchangeRate = ({ if (foundObject) { setRate(foundObject.rate); } - }, [foundObject]); + }, [foundObject, isOpen]); + + useEffect(()=>{ + if (id) { + refetch() + } + },[isOpen]) const validateRate = async () => { try { @@ -222,7 +228,7 @@ const EditExchangeRate = ({ size={"sm"} value={rate} onChange={(e) => { - return setRate(e.target.value); + return setRate(e.target.value); // validateRate() }} /> @@ -241,6 +247,15 @@ const EditExchangeRate = ({ size={"sm"} mr={3} onClick={onClose} + // onClick={() => { + // window.location.reload(); + // onClose(); + // }} + // onClick={() => { + // setRate(""); + // setRateError(""); + // onClose(); + // }} > Cancel From 625f721325aaadbf2a3458a408e4e7d586026ccf Mon Sep 17 00:00:00 2001 From: YasinShaikh123 <123150391+YasinShaikh123@users.noreply.github.com> Date: Wed, 8 Jan 2025 13:16:44 +0530 Subject: [PATCH 3/3] correct exchange rate --- src/Layout/DefaultLayout.jsx | 2 +- .../InvestorDetails/InvestorDetails.jsx | 6 +-- .../Master/ExchangeRate/EditExchangeRate.jsx | 43 ++++++++++++------- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/Layout/DefaultLayout.jsx b/src/Layout/DefaultLayout.jsx index 23044a7..56976ec 100644 --- a/src/Layout/DefaultLayout.jsx +++ b/src/Layout/DefaultLayout.jsx @@ -167,7 +167,7 @@ const DashboardLayout = ({ isOnline }) => { return ( - Echange rate + Exchange rate ); case path.startsWith("/create-io"): diff --git a/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx b/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx index d0f3683..8459cc3 100644 --- a/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx +++ b/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx @@ -221,7 +221,7 @@ const InvestorDetails = () => { variant={"solid"} > {/* {item.KYCStatus ? "Completed" : "Not complete"} */} - {item?.KYCStatus === true ? "Completed" : "NotCompleted"} + {item?.KYCStatus === true ? "Completed" : "Not Completed"} ), @@ -321,7 +321,7 @@ const InvestorDetails = () => { KYC Status - + @@ -337,7 +337,7 @@ const InvestorDetails = () => { Country - + diff --git a/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx b/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx index aaa7ac6..5ee8d30 100644 --- a/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx +++ b/src/Pages/Master/ExchangeRate/EditExchangeRate.jsx @@ -48,14 +48,16 @@ import FullscreenLoaders from "../../../Components/Loaders/FullscreenLoaders"; const editExchange = yup.object().shape({ rate: yup - .number() + .string() .required("Rate is required") - .positive("Rate must be greater than 0") + .matches( + /^\d+\.\d{8}$/, + "Rate must have exactly 8 decimal places" + ) .test( - "is-decimal", - "Rate must have exactly 8 decimal places", - (value) => - value !== undefined && value.toString().match(/^\d+(\.\d{8})?$/) + "is-positive", + "Rate must be greater than 0", + (value) => parseFloat(value) > 0 ), }); @@ -86,7 +88,7 @@ const EditExchangeRate = ({ const [isBtnLoading, setIsBtnLoading] = useState(false); const [rateError, setRateError] = useState(""); - const { data, isLoading, errors,refetch } = useGetExchangeRateByIdQuery(id, { + const { data, isLoading, errors,refetch, isFetching } = useGetExchangeRateByIdQuery(id, { skip: !id, }); @@ -95,17 +97,23 @@ const EditExchangeRate = ({ const [rate, setRate] = useState(""); const [alert, setAlert] = useState(false); + console.log(rate); + + useEffect(() => { + if (id) {refetch()} if (foundObject) { - setRate(foundObject.rate); + const numericRate = parseFloat(foundObject.rate) || 0; // Convert to number or default to 0 if invalid + setRate(numericRate.toFixed(8)); // Set rate with exactly 8 decimal places } }, [foundObject, isOpen]); + - useEffect(()=>{ - if (id) { - refetch() - } - },[isOpen]) + // useEffect(()=>{ + // if (id) { + // refetch() + // } + // },[isOpen]) const validateRate = async () => { try { @@ -178,7 +186,7 @@ const EditExchangeRate = ({ Edit rate - {isLoading ? ( + {isFetching ? ( ) : ( <> @@ -228,8 +236,11 @@ const EditExchangeRate = ({ size={"sm"} value={rate} onChange={(e) => { - return setRate(e.target.value); - // validateRate() + const value = e.target.value; + // Match numbers with at most 8 decimal places + if (/^\d*\.?\d{0,8}$/.test(value)) { + setRate(value); + } }} /> {rateError && (