Merge branch 'main'

This commit is contained in:
Kakabay 2024-03-31 23:41:42 +05:00
commit 83f1f3fdfe
19 changed files with 1188 additions and 363 deletions

View File

@ -1,7 +1,7 @@
{
"files": {
"main.css": "/static/css/main.05644332.css",
"main.js": "/static/js/main.b473c851.js",
"main.css": "/static/css/main.148e73e6.css",
"main.js": "/static/js/main.a831ae15.js",
"static/media/logo-transp.svg": "/static/media/logo-transp.66d6235f12fb5d9a6264c592bce58c5a.svg",
"static/media/logo-bg.jpg": "/static/media/logo-bg.1d55df78b7376108f96c.jpg",
"static/media/credit-card.jpg": "/static/media/credit-card.ff2990f7d50439a8f34d.jpg",
@ -68,7 +68,7 @@
"static/media/arrow.svg": "/static/media/arrow.c8492a68102634ab2875008b3e67164c.svg"
},
"entrypoints": [
"static/css/main.05644332.css",
"static/js/main.b473c851.js"
"static/css/main.148e73e6.css",
"static/js/main.a831ae15.js"
]
}

View File

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/><meta name="theme-color" content="#000000"/><meta name="Content-Security-Policy" content="default-src 'self'; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Shahsy Otag</title><script defer="defer" src="/static/js/main.b473c851.js"></script><link href="/static/css/main.05644332.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="//www.google.com/recaptcha/api.js" nonce="{NONCE}" async defer="defer"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/><meta name="theme-color" content="#000000"/><meta name="Content-Security-Policy" content="default-src https://shahsyotag.halkbank.gov.tm 'self'; content-src 'self' https://shahsyotag.halkbank.gov.tm; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Shahsy Otag</title><script defer="defer" src="/static/js/main.a831ae15.js"></script><link href="/static/css/main.148e73e6.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="//www.google.com/recaptcha/api.js" nonce="{NONCE}" async defer="defer"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,14 +3,11 @@
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="Content-Security-Policy"
content="default-src 'self'; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"
content="default-src https://shahsyotag.halkbank.gov.tm 'self'; content-src 'self' https://shahsyotag.halkbank.gov.tm; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
@ -21,11 +18,6 @@
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script
src="//www.google.com/recaptcha/api.js"
nonce="{NONCE}"
async
defer
></script>
<script src="//www.google.com/recaptcha/api.js" nonce="{NONCE}" async defer></script>
</body>
</html>

View File

@ -24,8 +24,13 @@ const AcceptStage = ({
borrowerData,
guaranterData,
isGuranter,
setErrMessage,
setAcceptedMessage,
setUserDataRes,
userDataRes,
}) => {
const { locale } = useContext(LanguageContext);
const userToken = localStorage.getItem("userToken");
const handleCardDetails = (e) => {
setCardDetails(e.target.value);
@ -46,52 +51,10 @@ const AcceptStage = ({
},
});
// console.log(borrowerData);
const fetchData = async () => {
try {
setIsLoading(true);
// const response = await fetch(
// `http://shahsyotag.halkbank.gov.tm/onlineloancre-services/api/loancre`,
// {
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json',
// },
// body: JSON.stringify({
// clientRecipient: {
// idSeria: 'I-AŞ',
// idNo: '478992',
// accountNo: '23908934160170143144000',
// name: 'BATYROVA',
// surname: 'Sulgun',
// availableAmount: 40900,
// clientType: 'recipient',
// signRecipient: {
// key1: '6SQbdKd6qWdP8Wa11rF2CVLfo+0H6a0RUZOfyTFBeiWmoQAIC2+zip5SD0xBAlKqE4rRUt+WDBBOasVG3EEC3ANA+yXkrVUXT4OPJBxDGg==',
// key2: 'AAECAwQFBgcICQoLDA0ODw==',
// },
// },
// clientGuarantor: {
// idSeria: 'I-AH',
// idNo: '435937',
// accountNo: '23908934160170851604201',
// name: 'Kirtow',
// surname: 'Mämmetniýaz',
// availableAmount: 40900,
// clientType: 'guarantor',
// signGuarantor: {
// key1: '6SQbdKd6qWdP8Wa11rF2CVLfLkcA66wbX5OewzhJey+hpAcOCmm0gppXCk1BBFKraKHicumzDoWrVN1Pz1oFYuv6t01fz2E9C1oLE6a2Ta0RsRo=',
// key2: 'AAECAwQFBgcICQoLDA0ODw==',
// },
// },
// availableAmount: 40900,
// creditCardAccountNumber: '23908934160170770960000',
// mrtIsInsuarance: 0,
// termInYears: 1,
// }),
// },
// );
const response = await fetch(
`https://shahsyotag.halkbank.gov.tm/onlineloancre-services/api/loancre`,
{
@ -119,12 +82,12 @@ const AcceptStage = ({
surname: guaranterData.surname,
availableAmount: guaranterData.availableAmount,
clientType: "guarantor",
signRecipient: guaranterData.signRecipient,
signGuarantor: guaranterData.signGuarantor,
}
: null,
availableAmount: recepientAmount,
creditCardAccountNumber: cardDetails,
mrtIsInsuarance: isGuranter ? 1 : 0,
mrtIsInsuarance: isGuranter ? 0 : 1,
termInYears: creditDuration,
}),
}
@ -136,9 +99,12 @@ const AcceptStage = ({
const responseJson = await response.json();
console.log("RESPONSE!!!! ", responseJson);
setIsLoading(false);
if (responseJson.errCode === 0) {
sendData(responseJson);
} else {
setErrMessage(responseJson.messageRu);
setStage(10);
}
} catch (error) {
console.error(error.toString());
// Handle errors as needed
@ -146,9 +112,35 @@ const AcceptStage = ({
}
};
const onSubmit = (data) => {
const sendData = async (requestBody) => {
try {
const headers = {
Accept: "application/json",
Authorization: `Bearer ${userToken}`,
};
const response = await fetch(
"https://shahsyotag.halkbank.gov.tm/app/api/quick_loans",
{
method: "POST",
headers: headers,
body: JSON.stringify(requestBody),
}
);
const jsonedResponse = await response.json();
setAcceptedMessage(jsonedResponse.message);
setIsLoading(false);
setStage(11);
} catch (error) {
console.error(error.toString());
setError(true);
}
};
const onSubmit = () => {
fetchData();
// console.log(data);
};
if (error) {
@ -250,7 +242,9 @@ const AcceptStage = ({
id="code"
placeholder="6435980023168745"
/>
<span className="another-option">Оформить карту</span>
<span className="another-option" onClick={() => setStage(12)}>
Оформить карту
</span>
{/* {errors.code && <span>{errors.code.message}</span>} */}
</div>
</div>
@ -278,7 +272,7 @@ const AcceptStage = ({
<button
type="submit"
className="sign-btn cu-btn"
disabled={cardDetails.length !== 16 && !isLoading ? true : false}
disabled={cardDetails.length !== 23 && !isLoading ? true : false}
onClick={onSubmit}
>
<div>

View File

@ -40,6 +40,7 @@ const BorrowerInfo = ({ setStage, isGuranter, borrowerData }) => {
defaultValues: {
name: borrowerData.name ? borrowerData.name : 'Loading',
surname: borrowerData.surname ? borrowerData.surname : 'loading',
lastname: borrowerData.lastname ? borrowerData.lastname : 'loading',
passportSerial: borrowerData.idSeria ? borrowerData.idSeria : 'Loading',
passportNumber: borrowerData.idNo ? borrowerData.idNo : 'Loading',
bankAccount: borrowerData.accountNo ? borrowerData.accountNo : 'Loading',
@ -77,12 +78,26 @@ const BorrowerInfo = ({ setStage, isGuranter, borrowerData }) => {
<input {...register('name')} type="text" id="name" disabled />
{/* {errors.name && <span>{errors.name.message}</span>} */}
</div>
<div className="input-block">
<label htmlFor="lastname">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Фамилия'
: locale === 'ENG'
? 'lastname'
: 'At'}
</label>
<input {...register('lastname')} type="text" id="lastname" disabled />
{/* {errors.surname && <span>{errors.surname.message}</span>} */}
</div>
<div className="input-block">
<label htmlFor="surname">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Фамилия'
? 'Отчество'
: locale === 'ENG'
? 'Surname'
: 'At'}

View File

@ -6,7 +6,7 @@ import { z } from 'zod';
import { zodResolver } from '@hookform/resolvers/zod';
// IMPORT IMAGES
import next from '../../icons/next.svg';
import arrow from '../../icons/arrow-gray.svg';
import next_reverse from '../../icons/next-reverse.svg';
import Select from '../global/Select';
// import arrow from "../../icons/arrow.svg";
@ -107,7 +107,9 @@ const BorrowerStage = ({
setStage(3);
}
} catch (error) {
setStage(3);
// setStage(3);
setIsLoading(false);
console.error(error.toString());
// Handle errors as needed
setErr(true);
@ -126,10 +128,28 @@ const BorrowerStage = ({
);
}
// if (errCode !== 0) {
// if (err) {
// return (
// <section className="imm-cs-1">
// <h1>Not a user</h1>
// <h1 className="cs-2-title">Failed to fetch...</h1>
// <div className="cu-bottom cd-2-title">
// <button type="button" className="sign-btn reg-btn" onClick={onSubmit}>
// <div>
// <div className="btn-img">
// <img src={next_reverse} alt="logout" />
// </div>
// <h3>
// {locale === 'TKM'
// ? 'Yza'
// : locale === 'РУС'
// ? 'Заново'
// : locale === 'ENG'
// ? 'Back'
// : 'Yza'}
// </h3>
// </div>
// </button>
// </div>
// </section>
// );
// }

View File

@ -0,0 +1,356 @@
// IMPORT MODULES
import React, { useState, useContext } from 'react';
import { LanguageContext } from '../../backend/LanguageContext';
import { UserContext } from '../../backend/UserContext';
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';
const CardRegistration = ({ borrowerData, setStage, setPaymentLink, setPaymentDetails }) => {
const { locale } = useContext(LanguageContext);
const userToken = localStorage.getItem('userToken');
const [error, setError] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const {
register,
handleSubmit,
formState: { errors },
} = useForm({
// resolver: zodResolver(schema),
defaultValues: {
name: borrowerData.name ? borrowerData.name : 'Loading',
surname: borrowerData.surname ? borrowerData.surname : 'Loading',
lastname: borrowerData.lastname ? borrowerData.lastname : 'loading',
passportSerial: borrowerData.idSeria ? borrowerData.idSeria : 'Loading',
passportNumber: borrowerData.idNo ? borrowerData.idNo : 'Loading',
birthDate: borrowerData.birthDate ? borrowerData.birthDate : 'Loading',
passDate: borrowerData.passDate ? borrowerData.passDate : 'Loading',
passOrg: borrowerData.passOrg ? borrowerData.passOrg : 'Loading',
workPlace: borrowerData.workPlace ? borrowerData.workPlace : '',
workPosition: borrowerData.workPosition ? borrowerData.workPosition : '',
address: borrowerData.address ? borrowerData.address : '',
},
});
const [workPlace, setWorkPlace] = useState('');
const [workPosition, setWorkPosition] = useState('');
const [address, setAddress] = useState('');
const handleWorkPlace = (e) => {
setWorkPlace(e.target.value);
};
const handleWorkPosition = (e) => {
setWorkPosition(e.target.value);
};
const handleAdress = (e) => {
setAddress(e.target.value);
};
const sendData = async () => {
try {
const headers = { Accept: 'application/json', Authorization: `Bearer ${userToken}` };
const response = await fetch(
'https://shahsyotag.halkbank.gov.tm/app/api/online_credit_card',
{
method: 'POST',
headers: headers,
body: JSON.stringify({
id_seria: borrowerData.idSeria,
id_no: borrowerData.idNo,
name: borrowerData.name,
lastname: borrowerData.lastname,
surname: borrowerData.surname,
birth_date: borrowerData.birthDate,
pass_date: borrowerData.passDate,
pass_org: borrowerData.passOrg,
dep_code: borrowerData.depCode,
address: address,
}),
},
);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const jsonedResponse = await response.json();
sendPaymentRequest(jsonedResponse);
setPaymentLink(jsonedResponse);
} catch (error) {
console.error(error.toString());
}
};
const sendPaymentRequest = async (link) => {
try {
const headers = {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
};
const formData = new URLSearchParams();
formData.append('app', 'sanlykarz');
formData.append('id', borrowerData.idNo);
formData.append('url', link);
const response = await fetch('https://shahsyotag.halkbank.gov.tm/api/v1/start-hack', {
method: 'POST',
headers: headers,
body: formData.toString(),
});
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const jsonedResponse = await response.json();
setPaymentDetails(jsonedResponse);
setStage(13);
setIsLoading(false);
} catch (error) {
console.error(error.toString());
setError(true);
}
};
const onSubmit = () => {
sendData();
};
if (error) {
return (
<section className="imm-cs-1">
<h1 className="cs-2-title">Error...</h1>
<div className="cu-bottom cd-2-title">
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
<div>
<div className="btn-img">
<img src={next_reverse} alt="logout" />
</div>
<h3>
{locale === 'TKM'
? 'Yza'
: locale === 'РУС'
? 'Назад'
: locale === 'ENG'
? 'Back'
: 'Yza'}
</h3>
</div>
</button>
</div>
</section>
);
}
if (isLoading) {
return (
<section className="imm-cs-1">
<h1 className="cs-2-title">Loading...</h1>
</section>
);
}
return (
<section className="imm-cs-1">
<form onSubmit={handleSubmit()}>
<h2 className="cs-2-title">
{locale === 'TKM'
? 'Karzyň kalkulýatory'
: locale === 'РУС'
? 'Подтвердите данные'
: locale === 'ENG'
? 'Loan calculator'
: 'Karzyň kalkulýatory'}
</h2>
<div className="imm-credit-form-wrapper">
<div className="input-block">
<label htmlFor="name">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Имя'
: locale === 'ENG'
? 'name'
: 'At'}
</label>
<input {...register('name')} type="text" id="name" disabled />
</div>
<div className="input-block">
<label htmlFor="lastname">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Фамилия'
: locale === 'ENG'
? 'lastname'
: 'At'}
</label>
<input {...register('lastname')} type="text" id="lastname" disabled />
{/* {errors.surname && <span>{errors.surname.message}</span>} */}
</div>
<div className="input-block">
<label htmlFor="surname">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Отчество'
: locale === 'ENG'
? 'duration'
: 'At'}
</label>
<input {...register('surname')} type="text" id="surname" disabled />
</div>
<div className="input-block">
<label htmlFor="birthDate">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Дата рождения'
: locale === 'ENG'
? 'duration'
: 'At'}
</label>
<input {...register('birthDate')} type="text" id="birthDate" disabled />
</div>
<div className="input-block">
<label htmlFor="passDate">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Дата выдачи паспорта'
: locale === 'ENG'
? 'duration'
: 'At'}
</label>
<input {...register('passDate')} type="text" id="passDate" disabled />
</div>
<div className="input-block">
<label htmlFor="passOrg">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Кем выдан паспорт'
: locale === 'ENG'
? 'duration'
: 'At'}
</label>
<input {...register('passOrg')} type="text" id="passOrg" disabled />
</div>
<div className="input-block">
<label htmlFor="workPlace">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Место работы'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
{...register('workPlace')}
value={workPlace}
onChange={handleWorkPlace}
type="text"
id="workPlace"
placeholder=""
/>
</div>
<div className="input-block">
<label htmlFor="workPosition">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Должность'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
{...register('workPosition')}
value={workPosition}
onChange={handleWorkPosition}
type="text"
id="workPosition"
placeholder=""
/>
</div>
<div className="input-block">
<label htmlFor="address">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Адрес'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
{...register('address')}
value={address}
onChange={handleAdress}
type="text"
id="address"
placeholder=""
/>
</div>
</div>
<div className="cu-bottom cd-2-title">
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
<div>
<div className="btn-img">
<img src={next_reverse} alt="logout" />
</div>
<h3>
{locale === 'TKM'
? 'Yza'
: locale === 'РУС'
? 'Назад'
: locale === 'ENG'
? 'Back'
: 'Yza'}
</h3>
</div>
</button>
<button
type="submit"
className="sign-btn cu-btn"
disabled={
workPlace.length < 3 || workPosition.length < 3 || address.length < 3 || isLoading
? true
: false
}
onClick={onSubmit}>
<div>
<h3>
{locale === 'TKM'
? 'Dowam et'
: locale === 'РУС'
? 'Подтвердить '
: locale === 'ENG'
? 'Proceed'
: 'Dowam et'}
</h3>
<div className="btn-img">
<img src={next} alt="logout" />
</div>
</div>
</button>
</div>
</form>
</section>
);
};
export default CardRegistration;

View File

@ -26,7 +26,7 @@ const schema = z.object({
// clientType: z.string(),
});
const GuaranterInfo = ({ setStage, isGuranter, guaranterInfo }) => {
const GuaranterInfo = ({ setStage, isGuranter, guaranterData }) => {
const { locale } = useContext(LanguageContext);
const {
@ -36,11 +36,13 @@ 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: guaranterData.name ? guaranterData.name : 'Loading',
surname: guaranterData.surname ? guaranterData.surname : 'loading',
lastname: guaranterData.lastname ? guaranterData.lastname : 'loading',
passportSerial: guaranterData.idSeria ? guaranterData.idSeria : 'Loading',
passportNumber: guaranterData.idNo ? guaranterData.idNo : 'Loading',
bankAccount: guaranterData.accountNo ? guaranterData.accountNo : 'Loading',
},
});
@ -74,12 +76,26 @@ const GuaranterInfo = ({ setStage, isGuranter, guaranterInfo }) => {
<input {...register('name')} type="text" id="name" disabled />
{errors.name && <span>{errors.name.message}</span>}
</div>
<div className="input-block">
<label htmlFor="lastname">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Фамилия'
: locale === 'ENG'
? 'lastname'
: 'At'}
</label>
<input {...register('lastname')} type="text" id="lastname" disabled />
{/* {errors.surname && <span>{errors.surname.message}</span>} */}
</div>
<div className="input-block">
<label htmlFor="surname">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Фамилия'
? 'Отчество'
: locale === 'ENG'
? 'Surname'
: 'At'}

View File

@ -31,6 +31,7 @@ const GuaranterStage = ({
setGuaranterData,
setSignGuaranter,
setErrMessage,
borrowerData,
}) => {
const { locale } = useContext(LanguageContext);
@ -71,8 +72,9 @@ const GuaranterStage = ({
idSeria: idSeria,
idNo: idNo,
accountNo: accountNo,
clientType: 'guaranter',
clientType: 'guarantor',
signRecipient: signRecipient,
availableAmount: borrowerData.availableAmount,
}),
},
);

View File

@ -0,0 +1,65 @@
import React, { useContext } from 'react';
import { LanguageContext } from '../../backend/LanguageContext';
import exit from '../../icons/exit.svg';
const LoanAccepted = ({ setStage, setModalOpen, acceptedMessage }) => {
const { locale } = useContext(LanguageContext);
return (
<section className="imm-cs-1">
<form>
<h2 className="loan-accepted-title">
{locale === 'TKM'
? 'Karzyň kalkulýatory'
: locale === 'РУС'
? acceptedMessage
: locale === 'ENG'
? 'Loan calculator'
: 'Karzyň kalkulýatory'}
</h2>
<div className="cu-bottom cd-2-title">
<button type="button" className="sign-btn reg-btn" onClick={() => setModalOpen(false)}>
<div>
<div className="btn-img">
{/* <img src={exit} alt="exit" /> */}
{/* <img src={next_reverse} alt="logout" /> */}
</div>
<h3>
{locale === 'TKM'
? 'Yza'
: locale === 'РУС'
? 'Закрыть'
: locale === 'ENG'
? 'Back'
: 'Yza'}
</h3>
</div>
</button>
{/* <button
type="button"
className="sign-btn cu-btn"
onClick={() => setStage(4)}
>
<div>
<h3>
{locale === "TKM"
? "Dowam et"
: locale === "РУС"
? "Подтвердить "
: locale === "ENG"
? "Proceed"
: "Dowam et"}
</h3>
<div className="btn-img">
<img src={next} alt="logout" />
</div>
</div>
</button> */}
</div>
</form>
</section>
);
};
export default LoanAccepted;

View File

@ -0,0 +1,298 @@
// IMPORT MODULES
import React, { useState, useContext, useEffect } 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 CardDetails from './CardDetails';
// import arrow from "../../icons/arrow.svg";
const schema = z.object({
code: z.string().min(1),
// surname: z.string().min(1),
});
const PaymentDetails = ({ setStage, paymentDetails, borrowerData, setSumbitCardDetails }) => {
const { locale } = useContext(LanguageContext);
const [invalidData, setInvalidData] = useState(false);
const [timeLeft, setTimeLeft] = useState(paymentDetails['remaining-time']);
const [paymentName, setPaymentName] = useState('');
const [paymentCard, setPaymentCard] = useState('');
const [paymentCv, setPaymentCv] = useState('');
const [paymentCardDurationYear, setPaymentCardDurationYear] = useState('');
const [paymentCardDurationMonth, setPaymentCardDurationMonth] = useState('');
const handlePaymentCard = (e) => {
setPaymentCard(e.target.value);
};
const handlePaymentName = (e) => {
setPaymentName(e.target.value.toUpperCase());
};
const handlePaymentCv = (e) => {
setPaymentCv(e.target.value);
};
const handlePaymentCardDurationYear = (e) => {
setPaymentCardDurationYear(e.target.value);
};
const handlePaymentCardDurationMonth = (e) => {
setPaymentCardDurationMonth(e.target.value);
};
useEffect(() => {
const interval = setInterval(() => {
if (timeLeft > 0) {
setTimeLeft(timeLeft - 1);
}
}, 1000);
return () => clearInterval(interval);
}, [timeLeft]);
const sendPaymentRequest = async () => {
try {
const headers = {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
};
const formData = new URLSearchParams();
formData.append('app', 'sanlykarz');
formData.append('id', borrowerData.idNo);
formData.append('md-order', paymentDetails['md-order']);
formData.append('card-number', paymentCard.toString());
formData.append(
'card-expiry',
'20' + paymentCardDurationYear.toString() + paymentCardDurationMonth.toString(),
);
formData.append('name-on-card', paymentName);
formData.append('card-cvc', paymentCv.toString());
const response = await fetch('https://shahsyotag.halkbank.gov.tm/api/v1/submit-card', {
method: 'POST',
headers: headers,
body: formData.toString(),
});
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const jsonedResponse = await response.json();
if (jsonedResponse.status === 'other-error') {
setInvalidData(true);
} else if (jsonedResponse.status === 'ok') {
setSumbitCardDetails(jsonedResponse);
setInvalidData(false);
setStage(14);
} else {
setInvalidData(false);
}
// setIsLoading(false);
} catch (error) {
console.error(error.toString());
// setError(true);
}
};
const {
register,
handleSubmit,
formState: { errors },
} = useForm({
resolver: zodResolver(schema),
});
const onSubmit = (data) => {
sendPaymentRequest();
};
if (timeLeft <= 0) {
setStage(12);
}
return (
<section className="imm-cs-1">
<form onSubmit={handleSubmit(onSubmit)}>
<h2 className="cs-2-title">
{locale === 'TKM'
? 'Karzyň kalkulýatory'
: locale === 'РУС'
? 'Введите данные для оплаты'
: locale === 'ENG'
? 'Loan calculator'
: 'Karzyň kalkulýatory'}
</h2>
<div className="payment-details">
<h2>Сумма к оплате: {paymentDetails['amount-info']}</h2>
<h2>
Оставшееся время: {Math.floor((timeLeft % 3600) / 60)}:{timeLeft % 60}
</h2>
</div>
<div className="imm-credit-form-wrapper">
<div className="input-block">
<label htmlFor="card">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Имя на карте'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
value={paymentName}
onChange={handlePaymentName}
type="text"
id="card"
placeholder="6435980023168745"
/>
{/* {errors.code && <span>{errors.code.message}</span>} */}
</div>
<div className="input-block">
<label htmlFor="card">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Номер карты'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
value={paymentCard}
onChange={handlePaymentCard}
type="number"
id="card"
placeholder="6435980023168745"
/>
{/* {errors.code && <span>{errors.code.message}</span>} */}
</div>
{paymentDetails['is-cvc-required'] && (
<div className="input-block">
<label htmlFor="cvc">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'CVC карты'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
value={paymentCv}
onChange={handlePaymentCv}
type="number"
id="cvc"
// maxLength={3}
max={999}
placeholder="123"
/>
{/* {errors.code && <span>{errors.code.message}</span>} */}
</div>
)}
<div className="input-block">
<label htmlFor="duration-month">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Срок годности карты (месяц)'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
value={paymentCardDurationMonth}
onChange={handlePaymentCardDurationMonth}
type="number"
id="duration-month"
placeholder="08"
/>
{/* {errors.code && <span>{errors.code.message}</span>} */}
</div>
<div className="input-block">
<label htmlFor="duration-year">
{locale === 'TKM'
? 'At'
: locale === 'РУС'
? 'Срок годности карты (год)'
: locale === 'ENG'
? 'amount'
: 'At'}
</label>
<input
value={paymentCardDurationYear}
onChange={handlePaymentCardDurationYear}
type="number"
id="duration-year"
placeholder="42"
/>
{/* {errors.code && <span>{errors.code.message}</span>} */}
</div>
</div>
{invalidData && (
<section className="imm-cs-1">
<h1 className="cs-2-title">Ошибкаб проверьте данные</h1>
</section>
)}
<div className="cu-bottom cd-2-title">
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(12)}>
<div>
<div className="btn-img">
<img src={next_reverse} alt="logout" />
</div>
<h3>
{locale === 'TKM'
? 'Yza'
: locale === 'РУС'
? 'Назад'
: locale === 'ENG'
? 'Back'
: 'Yza'}
</h3>
</div>
</button>
<button
disabled={
paymentName.length < 4 ||
paymentName.length > 32 ||
paymentCard.toString().length !== 16 ||
paymentCv.toString().length !== 3 ||
paymentCardDurationYear.toString().length !== 2 ||
paymentCardDurationMonth.toString().length !== 2 ||
+paymentCardDurationMonth <= 0 ||
+paymentCardDurationMonth > 12
? true
: false
}
type="submit"
className="sign-btn cu-btn"
onClick={() => onSubmit()}>
<div>
<h3>
{locale === 'TKM'
? 'Dowam et'
: locale === 'РУС'
? 'Подтвердить '
: locale === 'ENG'
? 'Proceed'
: 'Dowam et'}
</h3>
<div className="btn-img">
<img src={next} alt="logout" />
</div>
</div>
</button>
</div>
</form>
</section>
);
};
export default PaymentDetails;

View File

@ -0,0 +1,64 @@
import React, { useContext } from 'react';
import { LanguageContext } from '../../backend/LanguageContext';
import next_reverse from '../../icons/next-reverse.svg';
const PaymentSuccess = ({ setStage, stage, setModalOpen }) => {
const { locale } = useContext(LanguageContext);
return (
<section className="imm-cs-1">
<form>
<h2 className="succes-title">
{locale === 'TKM'
? 'Karzyň kalkulýatory'
: locale === 'РУС'
? 'Оплата прошла успешно. Ваша заявка принята'
: locale === 'ENG'
? 'Loan calculator'
: 'Karzyň kalkulýatory'}
</h2>
<div className="cu-bottom cd-2-title">
<button type="button" className="sign-btn reg-btn" onClick={() => setModalOpen(false)}>
<div>
<div className="btn-img">
<img src={next_reverse} alt="logout" />
</div>
<h3>
{locale === 'TKM'
? 'Yza'
: locale === 'РУС'
? 'Закрыть'
: locale === 'ENG'
? 'Back'
: 'Yza'}
</h3>
</div>
</button>
{/* <button
type="button"
className="sign-btn cu-btn"
onClick={() => setStage(4)}
>
<div>
<h3>
{locale === "TKM"
? "Dowam et"
: locale === "РУС"
? "Подтвердить "
: locale === "ENG"
? "Proceed"
: "Dowam et"}
</h3>
<div className="btn-img">
<img src={next} alt="logout" />
</div>
</div>
</button> */}
</div>
</form>
</section>
);
};
export default PaymentSuccess;

View File

@ -14,12 +14,14 @@ const schema = z.object({
// surname: z.string().min(1),
});
const PhoneAccept = ({ setStage }) => {
const PhoneAccept = ({ setStage, borrowerData, submitCardDetails, paymentDetails }) => {
const { locale } = useContext(LanguageContext);
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(false);
const [invalidData, setInvalidData] = useState(false);
const [codeValue, setPhoneValue] = useState('');
const handleCodeChange = (e) => {
@ -30,60 +32,61 @@ const PhoneAccept = ({ setStage }) => {
resolver: zodResolver(schema),
});
const fetchData = async () => {
const confirmPayment = async () => {
try {
setIsLoading(true);
const response = await fetch(
`http://shahsyotag.halkbank.gov.tm/onlineloancre-services/api/loancre`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
clientRecipient: {
idSeria: 'I-AŞ',
idNo: '478992',
accountNo: '23908934160170143144000',
name: 'BATYROVA',
surname: 'Sulgun',
availableAmount: 40900,
clientType: 'recipient',
signRecipient: {
key1: '6SQbdKd6qWdP8Wa11rF2CVLfo+0H6a0RUZOfyTFBeiWmoQAIC2+zip5SD0xBAlKqE4rRUt+WDBBOasVG3EEC3ANA+yXkrVUXT4OPJBxDGg==',
key2: 'AAECAwQFBgcICQoLDA0ODw==',
},
},
clientGuarantor: {
idSeria: 'I-AH',
idNo: '435937',
accountNo: '23908934160170851604201',
name: 'Kirtow',
surname: 'Mämmetniýaz',
availableAmount: 40900,
clientType: 'guarantor',
signGuarantor: {
key1: '6SQbdKd6qWdP8Wa11rF2CVLfLkcA66wbX5OewzhJey+hpAcOCmm0gppXCk1BBFKraKHicumzDoWrVN1Pz1oFYuv6t01fz2E9C1oLE6a2Ta0RsRo=',
key2: 'AAECAwQFBgcICQoLDA0ODw==',
},
},
availableAmount: 40900,
creditCardAccountNumber: '23908934160170770960000',
mrtIsInsuarance: 0,
termInYears: 1,
}),
},
);
const headers = {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
};
const formData = new URLSearchParams();
formData.append('app', 'sanlykarz');
formData.append('id', borrowerData.idNo);
formData.append('md-order', paymentDetails['md-order']);
formData.append('acs-req-id', submitCardDetails['acs-request-id']);
formData.append('acs-session-url', submitCardDetails['acs-session-url']);
formData.append('otp', codeValue);
formData.append('term-url', submitCardDetails['terminate-url']);
const response = await fetch('https://shahsyotag.halkbank.gov.tm/api/v1/confirm-payment', {
method: 'POST',
headers: headers,
body: formData.toString(),
});
const jsonedResponse = await response.json();
if (jsonedResponse.status === 'ok') {
setInvalidData(false);
setStage(15);
} else {
setInvalidData(true);
}
} catch (error) {}
};
const codeResend = async () => {
try {
const headers = {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
};
const formData = new URLSearchParams();
formData.append('app', 'sanlykarz');
formData.append('id', borrowerData.idNo);
formData.append('acs-req-id', submitCardDetails['acs-request-id']);
formData.append('acs-session-url', submitCardDetails['acs-session-url']);
const response = await fetch('https://shahsyotag.halkbank.gov.tm/app/api/v1/resend-code', {
method: 'POST',
headers: headers,
body: formData.toString(),
});
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const responseJson = await response.json();
console.log(responseJson);
setIsLoading(false);
const jsonedResponse = await response.json();
} catch (error) {
console.error(error.toString());
// Handle errors as needed
@ -92,8 +95,7 @@ const PhoneAccept = ({ setStage }) => {
};
const onSubmit = (data) => {
console.log('fetch');
fetchData();
confirmPayment();
};
if (isLoading) {
@ -104,29 +106,29 @@ const PhoneAccept = ({ setStage }) => {
);
}
if (error) {
return (
<section className="imm-cs-1">
<h1 className="cs-2-title">Error...</h1>
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
<div>
<div className="btn-img">
<img src={next_reverse} alt="logout" />
</div>
<h3>
{locale === 'TKM'
? 'Yza'
: locale === 'РУС'
? 'Назад'
: locale === 'ENG'
? 'Back'
: 'Yza'}
</h3>
</div>
</button>
</section>
);
}
// if (error) {
// return (
// <section className="imm-cs-1">
// <h1 className="cs-2-title">Error...</h1>
// <button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
// <div>
// <div className="btn-img">
// <img src={next_reverse} alt="logout" />
// </div>
// <h3>
// {locale === 'TKM'
// ? 'Yza'
// : locale === 'РУС'
// ? 'Назад'
// : locale === 'ENG'
// ? 'Back'
// : 'Yza'}
// </h3>
// </div>
// </button>
// </section>
// );
// }
return (
<section className="imm-cs-1">
@ -135,10 +137,11 @@ const PhoneAccept = ({ setStage }) => {
{locale === 'TKM'
? 'Karzyň kalkulýatory'
: locale === 'РУС'
? 'Введите код с СМС оповещения'
? 'Введите код с СМС оповещения, отправленный на номер '
: locale === 'ENG'
? 'Loan calculator'
: 'Karzyň kalkulýatory'}
{submitCardDetails['three-d-secure-number']}
</h2>
<div className="imm-credit-form-wrapper">
<div className="input-block">
@ -152,12 +155,19 @@ const PhoneAccept = ({ setStage }) => {
: 'At'}
</label>
<input value={codeValue} onChange={handleCodeChange} type="text" id="code" />
<span className="another-option">Отправить код снова</span>
{/* <span className="another-option" onClick={codeResend}>
Отправить код снова
</span> */}
{/* {errors.code && <span>{errors.code.message}</span>} */}
</div>
</div>
{invalidData && (
<section className="imm-cs-1">
<h1 className="cs-2-title">Ошибкаб проверьте данные</h1>
</section>
)}
<div className="cu-bottom cd-2-title">
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(13)}>
<div>
<div className="btn-img">
<img src={next_reverse} alt="logout" />
@ -174,7 +184,7 @@ const PhoneAccept = ({ setStage }) => {
</div>
</button>
<button
disabled={codeValue.length !== 6 && !isLoading ? true : false}
disabled={codeValue.length !== 5 && !isLoading ? true : false}
type="submit"
onClick={onSubmit}
className="sign-btn cu-btn">

View File

@ -24,6 +24,10 @@ import CalculateStage from '../ImmediateCreditsStages/CalculateStage';
import AcceptStage from '../ImmediateCreditsStages/AcceptStage';
import PhoneAccept from '../ImmediateCreditsStages/PhoneAccept';
import CardDetails from '../ImmediateCreditsStages/CardDetails';
import LoanAccepted from '../ImmediateCreditsStages/LoanAccepted';
import CardRegistration from '../ImmediateCreditsStages/CardRegistration';
import PaymentDetails from '../ImmediateCreditsStages/PaymentDetails';
import PaymentSuccess from '../ImmediateCreditsStages/PaymentSuccess';
const ImmediateCreditModal = ({
modalOpen,
@ -43,6 +47,7 @@ const ImmediateCreditModal = ({
const [error, setError] = useState();
const [errMessage, setErrMessage] = useState('');
const [acceptedMessage, setAcceptedMessage] = useState('');
const [borrowerData, setBorrowerData] = useState();
const [guaranterData, setGuaranterData] = useState();
@ -55,9 +60,11 @@ const ImmediateCreditModal = ({
const [phoneNumber, setPhoneNumber] = useState('');
const [cardDetails, setCardDetails] = useState('');
console.log(borrowerData);
const [userDataRes, setUserDataRes] = useState();
const [paymentLink, setPaymentLink] = useState('');
const userToken = localStorage.getItem('userToken');
const [paymentDetails, setPaymentDetails] = useState();
const [submitCardDetails, setSumbitCardDetails] = useState();
return (
<section className={modalOpen ? 'modal credit-modal active' : 'modal credit-modal'}>
@ -298,6 +305,7 @@ const ImmediateCreditModal = ({
signRecipient={signRecipient}
setErrMessage={setErrMessage}
setSignGuaranter={setSignGuaranter}
borrowerData={borrowerData}
/>
) : stage === 5 ? (
<GuaranterInfo
@ -329,6 +337,10 @@ const ImmediateCreditModal = ({
borrowerData={borrowerData}
guaranterData={guaranterData}
isGuranter={isGuranter}
setErrMessage={setErrMessage}
setAcceptedMessage={setAcceptedMessage}
setUserDataRes={setUserDataRes}
userDataRes={userDataRes}
/>
) : stage === 9 ? (
<PhoneAccept
@ -339,6 +351,41 @@ const ImmediateCreditModal = ({
recepientAmount={recepientAmount}
creditDuration={creditDuration}
/>
) : stage === 10 ? (
<NotAUser setStage={setStage} stage={stage} errMessage={errMessage} />
) : stage === 11 ? (
<LoanAccepted
setModalOpen={setModalOpen}
setStage={setStage}
stage={stage}
acceptedMessage={acceptedMessage}
/>
) : stage === 12 ? (
<CardRegistration
setStage={setStage}
stage={stage}
borrowerData={borrowerData}
setPaymentLink={setPaymentLink}
paymentLink={paymentLink}
setPaymentDetails={setPaymentDetails}
/>
) : stage === 13 ? (
<PaymentDetails
setStage={setStage}
paymentLink={paymentLink}
paymentDetails={paymentDetails}
borrowerData={borrowerData}
setSumbitCardDetails={setSumbitCardDetails}
/>
) : stage === 14 ? (
<PhoneAccept
borrowerData={borrowerData}
setStage={setStage}
paymentDetails={paymentDetails}
submitCardDetails={submitCardDetails}
/>
) : stage === 15 ? (
<PaymentSuccess setStage={setStage} setModalOpen={setModalOpen} />
) : (
''
)}

View File

@ -1,23 +1,23 @@
// IMPORT MODULES
import React, { useState, useEffect, useContext } from "react";
import { UserContext } from "../backend/UserContext";
import { LanguageContext } from "../backend/LanguageContext";
import axios from "axios";
import React, { useState, useEffect, useContext } from 'react';
import { UserContext } from '../backend/UserContext';
import { LanguageContext } from '../backend/LanguageContext';
import axios from 'axios';
// IMPORT COMPONENTS
import Breadcrumb from "../components/global/Breadcrumb";
import ImmediateCreditModal from "../components/immediateCredits/ImmediateCreditModal";
import ProgressLoader from "../components/global/ProgressLoader";
import Success from "../components/global/Success";
import Error from "../components/global/Error";
import Breadcrumb from '../components/global/Breadcrumb';
import ImmediateCreditModal from '../components/immediateCredits/ImmediateCreditModal';
import ProgressLoader from '../components/global/ProgressLoader';
import Success from '../components/global/Success';
import Error from '../components/global/Error';
// IMPORT HELPERS
import { dataDestination } from "../destinationUrl";
import { dataDestination } from '../destinationUrl';
// IMPORT IMAGES
import credit from "../icons/credit-black.svg";
import add from "../icons/add.svg";
import allert from "../icons/info-circle.svg";
import credit from '../icons/credit-black.svg';
import add from '../icons/add.svg';
import allert from '../icons/info-circle.svg';
const ImmediateCredit = () => {
const { locale } = useContext(LanguageContext);
@ -29,44 +29,75 @@ const ImmediateCredit = () => {
const [loader, setLoader] = useState(false);
// const [immediateCreditData, setImmediateCreditData] = useState();
const [progress, setProgress] = useState(0);
const userToken = localStorage.getItem('userToken');
const [loansData, setLoansData] = useState();
const [loanStatus, setLoanStatus] = useState();
useEffect(() => {
if (modalOpen) {
document.body.style.overflowY = "hidden";
document.body.style.overflowY = 'hidden';
} else {
document.body.style.overflowY = "visible";
document.body.style.overflowY = 'visible';
}
}, [modalOpen]);
// useEffect(() => {
// let isMounted = true;
// axios
// .get(`${dataDestination}/credit_data`)
// .then((res) => {
// if (isMounted) {
// setImmediateCreditData(res.data);
// }
// })
// .catch();
// return () => {
// isMounted = false;
// };
// }, []);
const fetchData = async () => {
try {
const headers = { Accept: 'application/json', Authorization: `Bearer ${userToken}` };
// console.log(immediateCreditData);
const response = await fetch(`https://shahsyotag.halkbank.gov.tm/app/api/quick_loans`, {
headers,
});
const jsonedResponse = await response.json();
setLoansData(jsonedResponse);
// console.log('loan data', jsonedResponse);
checkStatus(jsonedResponse.request_hash.sign);
} catch (error) {
console.error(error);
}
};
const checkStatus = async (sign) => {
try {
const response = await fetch(
`https://shahsyotag.halkbank.gov.tm/onlineloan-services/api/loancheck`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
sign: sign,
}),
},
);
const jsonedResponse = await response.json();
setLoanStatus(jsonedResponse);
} catch (error) {}
};
useEffect(() => {
fetchData();
}, []);
return (
<section className="cards">
{success ? (
<Success
message={
locale === "TKM"
? "Ýüzlenme ugradyldy!"
: locale === "РУС"
? "Ваш запрос успешно отправлен!"
: locale === "ENG"
? "Request was successfully sent!"
: "Ýüzlenme ugradyldy!"
locale === 'TKM'
? 'Ýüzlenme ugradyldy!'
: locale === 'РУС'
? 'Ваш запрос успешно отправлен!'
: locale === 'ENG'
? 'Request was successfully sent!'
: 'Ýüzlenme ugradyldy!'
}
setSuccess={setSuccess}
/>
@ -74,28 +105,28 @@ const ImmediateCredit = () => {
{error ? (
<Error
message={
locale === "TKM"
? "Ýüzlenme ugradylmady"
: locale === "РУС"
? "Не удалось отправить запрос"
: locale === "ENG"
? "Failed to send request"
: "Ýüzlenme ugradylmady"
locale === 'TKM'
? 'Ýüzlenme ugradylmady'
: locale === 'РУС'
? 'Не удалось отправить запрос'
: locale === 'ENG'
? 'Failed to send request'
: 'Ýüzlenme ugradylmady'
}
setError={setError}
/>
) : null}
<Breadcrumb
image={credit}
link={"/home/immediate-credits"}
link={'/home/immediate-credits'}
linkTitle={
locale === "TKM"
? "Çalt Karzlar"
: locale === "РУС"
? "Быстрые Кредиты"
: locale === "ENG"
? "Immediate Loans"
: "Çalt Karzlar"
locale === 'TKM'
? 'Çalt Karzlar'
: locale === 'РУС'
? 'Быстрые Кредиты'
: locale === 'ENG'
? 'Immediate Loans'
: 'Çalt Karzlar'
}
/>
<ImmediateCreditModal
@ -115,13 +146,13 @@ const ImmediateCredit = () => {
<div className="cards-inner">
<div className="card-title">
<h2 className="cards-title">
{locale === "TKM"
? "Çalt karz almak üçin onlaýn-ýüzlenme"
: locale === "РУС"
? "Онлайн-заявка для получения быстрого кредита"
: locale === "ENG"
? "Online application for immediate loan issuance"
: "Çalt karz almak üçin onlaýn-ýüzlenme"}
{locale === 'TKM'
? 'Çalt karz almak üçin onlaýn-ýüzlenme'
: locale === 'РУС'
? 'Онлайн-заявка для получения быстрого кредита'
: locale === 'ENG'
? 'Online application for immediate loan issuance'
: 'Çalt karz almak üçin onlaýn-ýüzlenme'}
</h2>
<button
type="button"
@ -130,19 +161,18 @@ const ImmediateCredit = () => {
window.scrollTo(0, 0);
setStage(1);
setModalOpen(true);
}}
>
}}>
<div className="card-img">
<img src={add} alt="add" />
</div>
<h3>
{locale === "TKM"
? "Ýüzlenme doldurmak"
: locale === "РУС"
? "Заполнить заявку"
: locale === "ENG"
? "Fill in application"
: "Ýüzlenme doldurmak"}
{locale === 'TKM'
? 'Ýüzlenme doldurmak'
: locale === 'РУС'
? 'Заполнить заявку'
: locale === 'ENG'
? 'Fill in application'
: 'Ýüzlenme doldurmak'}
</h3>
</button>
</div>
@ -152,144 +182,41 @@ const ImmediateCredit = () => {
<tr className="table-head">
<th>ID</th>
<th>
{locale === "TKM"
? "Görnüşi"
: locale === "РУС"
? "Тип"
: locale === "ENG"
? "Type"
: "Görnüşi"}
{locale === 'TKM'
? 'Görnüşi'
: locale === 'РУС'
? 'Дата заявки'
: locale === 'ENG'
? 'Type'
: 'Görnüşi'}
</th>
<th>
{locale === "TKM"
? "Senesi"
: locale === "РУС"
? "Дата"
: locale === "ENG"
? "Date"
: "Senesi"}
</th>
<th>
{locale === "TKM"
? "Ýagdaýy"
: locale === "РУС"
? "Статус"
: locale === "ENG"
? "Status"
: "Ýagdaýy"}
</th>
<th>
{locale === "TKM"
? "Amal"
: locale === "РУС"
? "Действие"
: locale === "ENG"
? "Operation"
: "Amal"}
{locale === 'TKM'
? 'Ýagdaýy'
: locale === 'РУС'
? 'Статус'
: locale === 'ENG'
? 'Status'
: 'Ýagdaýy'}
</th>
</tr>
{user ? (
user.online_credit.length !== 0 ? (
[...user.online_credit].reverse().map((el, i) => {
return (
<tr key={i}>
<td>#{el.id}</td>
<td>{el.type}</td>
<td>{el.date}</td>
<td
className={
el.status === "kart_chykarylmady"
? "red"
: el.status === "kart_chykaryldy" ||
el.status === "kabul_edildi"
? "green"
: ""
}
>
{el.status === "ugradyldy"
? locale === "TKM"
? "Ugradyldy"
: locale === "РУС"
? "Отправлено"
: locale === "ENG"
? "Sent"
: "Ugradyldy"
: el.status === "kabul_edildi"
? locale === "TKM"
? "Kabul edildi"
: locale === "РУС"
? "Принята"
: locale === "ENG"
? "Accepted"
: "Kabul edildi"
: el.status === "seredilyar"
? locale === "TKM"
? "Görülyar"
: locale === "РУС"
? "На стадии рассмотрения"
: locale === "ENG"
? "Under consideration"
: "Görülyar"
: el.status === "kart_chykaryldy"
? locale === "TKM"
? "Tassyklandy"
: locale === "РУС"
? "Утверждено"
: locale === "ENG"
? "Approved"
: "Tassyklandy"
: el.status === "kart_chykarylmady"
? locale === "TKM"
? "Ret edildi"
: locale === "РУС"
? "Отказано"
: locale === "ENG"
? "Denied"
: "Ret edildi"
: ""}
</td>
<td>
{el.status === "5" ? (
<div className="reject">
<div className="reason">
<h4>{el.action}</h4>
</div>
<img src={allert} alt="reject" />
</div>
) : (
""
)}
</td>
</tr>
);
})
) : (
<tr>
<td>
{locale === "TKM"
? "Tabşyrlan ýüzlenme ýok"
: locale === "РУС"
? "Заявок на кредиты нет"
: locale === "ENG"
? "There are no applications for loan issuance"
: "Tabşyrlan ýüzlenme ýok"}
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
)
{loansData && loanStatus ? (
<tr>
<td>#{loansData.id}</td>
<td>{loansData.created_at}</td>
<td>{loanStatus.messageRu}</td>
</tr>
) : (
<tr>
<td>
{locale === "TKM"
? "Tabşyrlan ýüzlenme ýok"
: locale === "РУС"
? "Заявок на кредиты нет"
: locale === "ENG"
? "There are no applications for loan issuance"
: "Tabşyrlan ýüzlenme ýok"}
{locale === 'TKM'
? 'Tabşyrlan ýüzlenme ýok'
: locale === 'РУС'
? 'Заявок на кредиты нет'
: locale === 'ENG'
? 'There are no applications for loan issuance'
: 'Tabşyrlan ýüzlenme ýok'}
</td>
<td></td>
<td></td>

View File

@ -87,3 +87,22 @@
font-size: 3rem;
color: red;
}
.succes-title {
font-size: 3rem;
color: $base-green;
}
.loan-accepted-title {
color: $base-green;
}
.payment-details {
display: flex;
gap: 2.4rem;
h2 {
font-weight: normal;
font-size: 1.8rem;
}
}