From 307e829c407f7a6a2ca8136fd43a2d69a1d1791c Mon Sep 17 00:00:00 2001 From: Kakabay <2kakabayashyrberdyew@gmail.com> Date: Mon, 25 Mar 2024 17:47:39 +0500 Subject: [PATCH] calculator done --- .../ImmediateCreditsStages/BorrowerInfo.js | 170 ++++---- .../ImmediateCreditsStages/BorrowerStage.js | 4 + .../ImmediateCreditsStages/CalculateStage.js | 370 ++++++++++++++++++ .../ImmediateCreditsStages/GuaranterInfo.js | 181 ++++----- .../immediateCredits/ImmediateCreditModal.js | 32 +- src/scss/_credit-modal.scss | 15 +- 6 files changed, 563 insertions(+), 209 deletions(-) create mode 100644 src/components/ImmediateCreditsStages/CalculateStage.js diff --git a/src/components/ImmediateCreditsStages/BorrowerInfo.js b/src/components/ImmediateCreditsStages/BorrowerInfo.js index a51d586..c2474cd 100644 --- a/src/components/ImmediateCreditsStages/BorrowerInfo.js +++ b/src/components/ImmediateCreditsStages/BorrowerInfo.js @@ -1,12 +1,12 @@ // IMPORT MODULES -import React, { useState, useContext } from "react"; -import { LanguageContext } from "../../backend/LanguageContext"; -import { useForm } from "react-hook-form"; -import { z } from "zod"; -import { zodResolver } from "@hookform/resolvers/zod"; +import React, { useState, useContext } from 'react'; +import { LanguageContext } from '../../backend/LanguageContext'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; +import { zodResolver } from '@hookform/resolvers/zod'; // IMPORT IMAGES -import next from "../../icons/next.svg"; -import next_reverse from "../../icons/next-reverse.svg"; +import next from '../../icons/next.svg'; +import next_reverse from '../../icons/next-reverse.svg'; // import arrow from "../../icons/arrow.svg"; // const schema = z.object({ @@ -36,11 +36,11 @@ const BorrowerInfo = ({ setStage, isGuranter, borrowerData }) => { } = useForm({ // resolver: zodResolver(schema), defaultValues: { - name: borrowerData.name ? borrowerData.name : "Loading", - surname: borrowerData.surname ? borrowerData.surname : "loading", - passportSerial: borrowerData.idSeria ? borrowerData.idSeria : "Loading", - passportNumber: borrowerData.idNo ? borrowerData.idNo : "Loading", - bankAccount: borrowerData.accountNo ? borrowerData.accountNo : "Loading", + name: borrowerData.name ? borrowerData.name : 'Loading', + surname: borrowerData.surname ? borrowerData.surname : 'loading', + passportSerial: borrowerData.idSeria ? borrowerData.idSeria : 'Loading', + passportNumber: borrowerData.idNo ? borrowerData.idNo : 'Loading', + bankAccount: borrowerData.accountNo ? borrowerData.accountNo : 'Loading', }, }); @@ -52,93 +52,84 @@ const BorrowerInfo = ({ setStage, isGuranter, borrowerData }) => {

- {locale === "TKM" - ? "Karzyň kalkulýatory" - : locale === "РУС" - ? "Подтвердите данные" - : locale === "ENG" - ? "Loan calculator" - : "Karzyň kalkulýatory"} + {locale === 'TKM' + ? 'Karzyň kalkulýatory' + : locale === 'РУС' + ? 'Подтвердите данные' + : locale === 'ENG' + ? 'Loan calculator' + : 'Karzyň kalkulýatory'}

- + {/* {errors.name && {errors.name.message}} */}
- + {/* {errors.surname && {errors.surname.message}} */}
- - {errors.passportSerial && ( - {errors.passportSerial.message} - )} + + {errors.passportSerial && {errors.passportSerial.message}}
- {errors.passportNumber && ( - {errors.passportNumber.message} - )} + {errors.passportNumber && {errors.passportNumber.message}}
{
-
) : ( - "Loading" + 'Loading' ); }; diff --git a/src/components/ImmediateCreditsStages/BorrowerStage.js b/src/components/ImmediateCreditsStages/BorrowerStage.js index 5d1647e..eccec20 100644 --- a/src/components/ImmediateCreditsStages/BorrowerStage.js +++ b/src/components/ImmediateCreditsStages/BorrowerStage.js @@ -30,6 +30,8 @@ const BorrowerStage = ({ setIsGuranter, setSignRecipient, setBorrowerData, + setMaxAmount, + setRecepientAmount, }) => { const { locale } = useContext(LanguageContext); @@ -90,6 +92,8 @@ const BorrowerStage = ({ const responseJson = await response.json(); setSignRecipient(responseJson.signRecipient); + setRecepientAmount(responseJson.availableAmount); + setMaxAmount(responseJson.availableAmount); setErrCode(await responseJson.errCode); setBorrowerData(responseJson); diff --git a/src/components/ImmediateCreditsStages/CalculateStage.js b/src/components/ImmediateCreditsStages/CalculateStage.js new file mode 100644 index 0000000..13e14f5 --- /dev/null +++ b/src/components/ImmediateCreditsStages/CalculateStage.js @@ -0,0 +1,370 @@ +// IMPORT MODULES +import React, { useState, useEffect, useRef, useContext } from 'react'; +import { LanguageContext } from '../../backend/LanguageContext'; + +// IMPORT IMAGES +import minus from '../../icons/minus.svg'; +import plus from '../../icons/plus.svg'; +import next from '../../icons/next.svg'; +import logo from '../../icons/logo-transp.svg'; + +// IMPORT IMAGES +import next_reverse from '../../icons/next-reverse.svg'; + +const CalculateStage = ({ + setStage, + isGuranter, + recepientAmount, + setRecepientAmount, + setCreditDuration, + maxAmount, +}) => { + const { locale } = useContext(LanguageContext); + const [max, setMax] = useState(maxAmount); + const [bet, setBet] = useState(12); + const [inputValue, setInputValue] = useState(recepientAmount); + const [radio, setRadio] = useState(1); + const [monthlyPayment, setMonthlyPayment] = useState( + (inputValue / (radio * 12) + (inputValue / (radio * 12)) * (bet / 100)).toFixed(2), + ); + + useEffect(() => { + setMonthlyPayment( + (inputValue / (radio * 12) + ((inputValue * (bet / 100)) / 365) * 30).toFixed(2), + ); + + setRecepientAmount(inputValue); + setCreditDuration(radio); + }, [inputValue, radio]); + + useEffect(() => { + setInputValue(recepientAmount); + }, [recepientAmount]); + + useEffect(() => { + input.current.value = inputValue; + }, [inputValue]); + + // useEffect(() => { + // if (creditData) { + // creditData.data.map((el) => { + // if (el.id === id) { + // setBet(el.bet); + // setMax(el.sum); + // } + // }); + // } + // }, [creditData]); + + const input = useRef(); + + return ( +
+
+
+

+ {locale === 'TKM' + ? 'Karzyň kalkulýatory' + : locale === 'РУС' + ? 'Калькулятор кредита' + : locale === 'ENG' + ? 'Loan calculator' + : 'Karzyň kalkulýatory'} +

+
+ +
+
+
{ + input.current.stepDown(1); + setInputValue(input.current.value); + }}> + minus +
+
{Math.ceil(inputValue)}
+
{ + input.current.stepUp(1); + setInputValue(input.current.value); + }}> + plus +
+
+ { + setInputValue(e.target.value); + }} + /> +
+
+
+ +
+ + + +
+
+
+ + +
+
+
+
+
+ logo +
+
+
+ {locale === 'TKM' + ? 'Her aý tölegi' + : locale === 'РУС' + ? 'Ежемесячный платеж' + : locale === 'ENG' + ? 'Monthly payment' + : 'Her aý tölegi'} + : +
+
+ {/*
{ + if ( + (parseInt(monthlyPayment) - + ( + ((inputValue * bet) / 100 / (radio * 365)) * + (radio * 30) + ).toFixed(2)) * + 12 - + 1 > + 100 + ) { + setInputValue( + (parseInt(monthlyPayment) - + ( + ((inputValue * bet) / 100 / (radio * 365)) * + (radio * 30) + ).toFixed(2)) * + 12 - + 1 + ); + } + }} + > + minus +
*/} +
{monthlyPayment} TMT
+ {/*
{ + if ( + (parseInt(monthlyPayment) + + 1 - + ( + ((inputValue * bet) / 100 / (radio * 365)) * + (radio * 30) + ).toFixed(2)) * + 12 < + max + ) { + setInputValue( + (parseInt(monthlyPayment) + + 1 - + ( + ((inputValue * bet) / 100 / (radio * 365)) * + (radio * 30) + ).toFixed(2)) * + 12 + ); + } + }} + > + plus +
*/} +
+
+
+ {locale === 'TKM' + ? 'Göterim töleg' + : locale === 'РУС' + ? 'Процентная ставка' + : locale === 'ENG' + ? 'Interest rate' + : 'Göterim töleg'} + : +
+
{bet} %
+
+
+
+
+
+ {locale === 'TKM' + ? 'Pul ýygymy' + : locale === 'РУС' + ? 'Процентный платеж' + : locale === 'ENG' + ? 'Interest payment' + : 'UgrPul ýygymyatmak'} + : +
+
{(((inputValue * (bet / 100)) / 365) * 30).toFixed(2)} TMT
+
+
+
+ {locale === 'TKM' + ? 'Karzyň esasy bergisiniň töleg möçberi' + : locale === 'РУС' + ? 'Платеж для погашения основной суммы' + : locale === 'ENG' + ? 'Principal payment' + : 'Karzyň esasy bergisiniň töleg möçberi'} + : +
+
{(inputValue / (radio * 12)).toFixed(2)} TMT
+
+
+
+
+ {locale === 'TKM' + ? 'Karz almak üçin bolmaly aýlyk zähmet haky' + : locale === 'РУС' + ? 'Необходимая заработная плата для кредита' + : locale === 'ENG' + ? 'Required salary for a loan' + : 'Karz almak üçin bolmaly aýlyk zähmet haky'} + : +
+
{monthlyPayment * 2} TMT
+
+
+
+
+
+ ); +}; + +export default CalculateStage; diff --git a/src/components/ImmediateCreditsStages/GuaranterInfo.js b/src/components/ImmediateCreditsStages/GuaranterInfo.js index b0fa50b..2a3b227 100644 --- a/src/components/ImmediateCreditsStages/GuaranterInfo.js +++ b/src/components/ImmediateCreditsStages/GuaranterInfo.js @@ -1,12 +1,12 @@ // IMPORT MODULES -import React, { useState, useContext } from "react"; -import { LanguageContext } from "../../backend/LanguageContext"; -import { useForm } from "react-hook-form"; -import { z } from "zod"; -import { zodResolver } from "@hookform/resolvers/zod"; +import React, { useState, useContext } from 'react'; +import { LanguageContext } from '../../backend/LanguageContext'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; +import { zodResolver } from '@hookform/resolvers/zod'; // IMPORT IMAGES -import next from "../../icons/next.svg"; -import next_reverse from "../../icons/next-reverse.svg"; +import next from '../../icons/next.svg'; +import next_reverse from '../../icons/next-reverse.svg'; // import arrow from "../../icons/arrow.svg"; const schema = z.object({ @@ -16,13 +16,13 @@ const schema = z.object({ passportNumber: z .number() .int() - .gte(100000, { message: "Must be equal to 6 digits" }) - .lte(999999, { message: "Must be equal to 6 digits" }), + .gte(100000, { message: 'Must be equal to 6 digits' }) + .lte(999999, { message: 'Must be equal to 6 digits' }), bankAccount: z .number() .int() - .gte(100000, { message: "Must be equal to 6 digits" }) - .lte(999999, { message: "Must be equal to 6 digits" }), + .gte(100000, { message: 'Must be equal to 6 digits' }) + .lte(999999, { message: 'Must be equal to 6 digits' }), // clientType: z.string(), }); @@ -36,13 +36,11 @@ const GuaranterInfo = ({ setStage, isGuranter, guaranterInfo }) => { } = useForm({ resolver: zodResolver(schema), defaultValues: { - name: guaranterInfo.name ? guaranterInfo.name : "Loading", - surname: guaranterInfo.surname ? guaranterInfo.surname : "loading", - passportSerial: guaranterInfo.idSeria ? guaranterInfo.idSeria : "Loading", - passportNumber: guaranterInfo.idNo ? guaranterInfo.idNo : "Loading", - bankAccount: guaranterInfo.accountNo - ? guaranterInfo.accountNo - : "Loading", + name: guaranterInfo.name ? guaranterInfo.name : 'Loading', + surname: guaranterInfo.surname ? guaranterInfo.surname : 'loading', + passportSerial: guaranterInfo.idSeria ? guaranterInfo.idSeria : 'Loading', + passportNumber: guaranterInfo.idNo ? guaranterInfo.idNo : 'Loading', + bankAccount: guaranterInfo.accountNo ? guaranterInfo.accountNo : 'Loading', }, }); @@ -56,93 +54,84 @@ const GuaranterInfo = ({ setStage, isGuranter, guaranterInfo }) => {

- {locale === "TKM" - ? "Karzyň kalkulýatory" - : locale === "РУС" - ? "Подтвердите данные" - : locale === "ENG" - ? "Loan calculator" - : "Karzyň kalkulýatory"} + {locale === 'TKM' + ? 'Karzyň kalkulýatory' + : locale === 'РУС' + ? 'Подтвердите данные' + : locale === 'ENG' + ? 'Loan calculator' + : 'Karzyň kalkulýatory'}

- + {errors.name && {errors.name.message}}
- + {errors.surname && {errors.surname.message}}
- - {errors.passportSerial && ( - {errors.passportSerial.message} - )} + + {errors.passportSerial && {errors.passportSerial.message}}
- {errors.passportNumber && ( - {errors.passportNumber.message} - )} + {errors.passportNumber && {errors.passportNumber.message}}
{
- -