Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5a7adf4537 | |||
| 45d5bd870f | |||
| 263c6740c5 | |||
| 07c1a8ae06 | |||
| bc2167e67a | |||
| 4d6a7380bb |
@@ -101,7 +101,7 @@ const DashboardHomeIntro: FC<DashboardHomeIntroProps> = ({
|
||||
|
||||
const [userLoanList, setUserLoanList] = useState<{
|
||||
loading: boolean;
|
||||
data: PendingTableList;
|
||||
data: Array<PendingTableList>;
|
||||
}>({ loading: true, data: [] });
|
||||
|
||||
useEffect(() => {
|
||||
@@ -120,6 +120,7 @@ const DashboardHomeIntro: FC<DashboardHomeIntroProps> = ({
|
||||
})
|
||||
.catch((err) => {
|
||||
setUserLoanList({ loading: false, data: [] });
|
||||
console.log(err)
|
||||
});
|
||||
}, []);
|
||||
|
||||
@@ -209,7 +210,7 @@ const DashboardHomeIntro: FC<DashboardHomeIntroProps> = ({
|
||||
</button>
|
||||
</td>
|
||||
<td className="flex justify-end px-1 py-2 text-right">
|
||||
<button className="flex flex-nowrap items-center px-2 py-1 border-2 border-black" onClick={()=>navigate(RouteHandler.dashboardPayments, {state:{application_uid: item?.application_uid}})}>
|
||||
<button className="flex flex-nowrap items-center px-2 py-1 border-2 border-black" onClick={()=>navigate(RouteHandler.dashboardReference, {state:{application_uid: item?.application_uid}})}>
|
||||
View
|
||||
<Icons name="arrow-right" />
|
||||
</button>
|
||||
|
||||
@@ -1,72 +1,111 @@
|
||||
import { InputCompOne } from "..";
|
||||
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { useSelector } from "react-redux";
|
||||
import {Formik, Form} from 'formik'
|
||||
import * as Yup from "yup";
|
||||
|
||||
import { RouteHandler } from "../../router/routes";
|
||||
|
||||
import { Button, InputCompOne } from "..";
|
||||
|
||||
// To get the validation schema
|
||||
const validationSchema = Yup.object().shape({
|
||||
firstname: Yup.string()
|
||||
.required("Required"),
|
||||
lastname: Yup.string()
|
||||
.required("Required"),
|
||||
internal_email : Yup.string().required("Required").email("Invalid"),
|
||||
});
|
||||
|
||||
export default function DashboardProfile() {
|
||||
let navigate = useNavigate();
|
||||
const navigateToProfile = () => navigate(RouteHandler.dashboardHome);
|
||||
const navigateToHome = () => navigate(RouteHandler.dashboardHome);
|
||||
|
||||
|
||||
const { userDetails } = useSelector((state:any) => state?.userDetails); // GETS USER DETAILS
|
||||
|
||||
const initialValues = {
|
||||
firstname: userDetails.firstname,
|
||||
lastname: userDetails.lastname,
|
||||
internal_email: userDetails.internal_email
|
||||
};
|
||||
|
||||
//FUNCTION TO HANDLE SUBMIT
|
||||
const handleSubmit = (values:any) => {
|
||||
console.log('good', values)
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="w-full">
|
||||
|
||||
<div className='my-[2rem] flex items-center'>
|
||||
<button onClick={navigateToProfile} className='w-6 h-6 text-lg flex justify-center items-center rounded-full bg-gray-500'><</button>
|
||||
</div>
|
||||
<div className="max-w-[25.875rem] w-full p-4 rounded-xl flex flex-col gap-1 bg-[#FBB700]/30">
|
||||
<InputCompOne
|
||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||
name="applyIshInput"
|
||||
label="Full name"
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="John James"
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||
name="applyIshInput"
|
||||
label="Phone number"
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="07000000000"
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||
name="applyIshInput"
|
||||
label="Residential address"
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="Somewhere in lagos"
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||
name="applyIshInput"
|
||||
label="Select your state"
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="Lagos"
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||
name="applyIshInput"
|
||||
label="Email address"
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="johndoe@gmail.com"
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||
name="applyIshInput"
|
||||
label="Date of birth"
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="12/10/1994"
|
||||
/>
|
||||
<button onClick={navigateToHome} className='py-2 px-4 text-lg text-white flex justify-center items-center bg-[#5C2684]'>< Back</button>
|
||||
</div>
|
||||
|
||||
<Formik
|
||||
initialValues={initialValues}
|
||||
validationSchema={validationSchema}
|
||||
onSubmit={handleSubmit}
|
||||
>
|
||||
{(props)=>(
|
||||
<Form>
|
||||
<div className="flex flex-col lg:flex-row items-start gap-[2rem]">
|
||||
<div className='w-full lg:max-w-[30rem] flex flex-col gap-[2rem]'>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
name="firstname"
|
||||
floatLabel="Firstname"
|
||||
// labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="Mr. Mark John"
|
||||
value={props.values.firstname}
|
||||
onChange={props.handleChange}
|
||||
// error={(props.errors.firstname && props.touched.firstname) ? props.errors.firstname : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
name="internal_email"
|
||||
floatLabel="Email"
|
||||
// labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
// disabled={true}
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="Mr. Mark John"
|
||||
value={props.values.internal_email}
|
||||
onChange={props.handleChange}
|
||||
// error={(props.errors.internal_email && props.touched.internal_email) ? props.errors.internal_email : ''}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='w-full lg:max-w-[30rem] flex flex-col gap-[2rem]'>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
name="lastname"
|
||||
floatLabel="Lastname"
|
||||
// labelClass="font-bold text-[1.125rem]"
|
||||
input
|
||||
// disabled={true}
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="Mr. Mark John"
|
||||
value={props.values.lastname}
|
||||
onChange={props.handleChange}
|
||||
// error={(props.errors.lastname && props.touched.lastname) ? props.errors.lastname : ''}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='hidden w-full lg:max-w-[416px] flex flex-col gap-[2rem]'>
|
||||
<div className="w-full">
|
||||
<Button
|
||||
className="my-4 btn-Y text-black w-full h-11"
|
||||
text="Update"
|
||||
type="submit"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</Form>
|
||||
)}
|
||||
</Formik>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import React, {useState} from 'react'
|
||||
import {useState} from 'react'
|
||||
import ModalWrapper from '../modal/ModalWrapper'
|
||||
import { PendingTableList } from '../../core/models'
|
||||
import { NewDateTimeFormatter } from '../../lib/NewDateTimeFormatter'
|
||||
@@ -19,7 +19,7 @@ export default function PendingLoanPopout({data, action}:Props<PendingTableList>
|
||||
msg: string
|
||||
}>({ loading: false, status: false, msg: ''});
|
||||
|
||||
const handleAddCard = (appID:string) => {
|
||||
const handleAddCard = (appID:string | undefined) => {
|
||||
let reqData = {
|
||||
application_uid: appID
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@ import { getEmployer } from '../../../core/apiRequest';
|
||||
import CustomSpinner from '../../CustomSpinner';
|
||||
import { FormatAmount } from '../../../lib/FormatAmount';
|
||||
|
||||
type Props = {
|
||||
handleNextStep?:(value:{})=>any
|
||||
}
|
||||
// type Props = {
|
||||
// handleNextStep?:(value:{})=>any
|
||||
// }
|
||||
|
||||
// type EmployerProps = {
|
||||
// loading?: boolean,
|
||||
@@ -87,7 +87,7 @@ const validationSchema = Yup.object().shape({
|
||||
}),
|
||||
});
|
||||
|
||||
export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
export default function EmploymentDetail() {
|
||||
|
||||
const [employerList, setEmployerList] = useState<any>({
|
||||
loading: true,
|
||||
@@ -96,21 +96,13 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
|
||||
|
||||
//FUNCTION TO HANDLE SUBMIT
|
||||
const handleSubmit = (values:any) => {
|
||||
// if(values.employer_uid){
|
||||
// let employer_uid = values.employer_uid
|
||||
// delete values.employer_uid
|
||||
// handleNextStep({employer_uid, employment: values})
|
||||
// }else{
|
||||
// handleNextStep({employment: values})
|
||||
// }
|
||||
const handleSubmit = () => {
|
||||
console.log('good')
|
||||
};
|
||||
|
||||
useEffect(()=>{
|
||||
getEmployer().then(res => {
|
||||
setEmployerList({loading:false, data:res?.data?.employer})
|
||||
// console.log('RES', res)
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
setEmployerList({loading:false, data:{}})
|
||||
@@ -178,7 +170,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="Mr. Mark John"
|
||||
value={props.values.name}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.name && props.touched.name) ? props.errors.name : ''}
|
||||
// error={(props.errors.name && props.touched.name) ? props.errors.name : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
@@ -191,7 +183,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="example@gmail.com"
|
||||
value={props.values.official_email}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.official_email && props.touched.official_email) ? props.errors.official_email : ''}
|
||||
// error={(props.errors.official_email && props.touched.official_email) ? props.errors.official_email : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
@@ -204,7 +196,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
selectOptions={props.values.industry}
|
||||
selectValue={props.values.industry}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.industry && props.touched.industry) ? props.errors.industry : ''}
|
||||
// error={(props.errors.industry && props.touched.industry) ? props.errors.industry : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
@@ -217,7 +209,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
selectOptions={props.values.job_sector}
|
||||
selectValue={props.values.job_sector}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.job_sector && props.touched.job_sector) ? props.errors.job_sector : ''}
|
||||
// error={(props.errors.job_sector && props.touched.job_sector) ? props.errors.job_sector : ''}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -234,7 +226,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="Software Engineer"
|
||||
value={props.values.job_title}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.job_title && props.touched.job_title) ? props.errors.job_title : ''}
|
||||
// error={(props.errors.job_title && props.touched.job_title) ? props.errors.job_title : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
@@ -247,7 +239,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
selectOptions={props.values.highest_eductaion}
|
||||
selectValue={props.values.highest_eductaion}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.highest_eductaion && props.touched.highest_eductaion) ? props.errors.highest_eductaion : ''}
|
||||
// error={(props.errors.highest_eductaion && props.touched.highest_eductaion) ? props.errors.highest_eductaion : ''}
|
||||
/>
|
||||
<div className="w-full flex flex-col sm:flex-row items-center gap-4">
|
||||
<InputCompOne
|
||||
@@ -262,7 +254,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="12/12/2015"
|
||||
value={props.values.start_date}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.start_date && props.touched.start_date) ? props.errors.start_date : ''}
|
||||
// error={(props.errors.start_date && props.touched.start_date) ? props.errors.start_date : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
@@ -276,7 +268,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="30th of every month"
|
||||
value={(props.values.salary_date)}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.salary_date && props.touched.salary_date) ? props.errors.salary_date : ''}
|
||||
// error={(props.errors.salary_date && props.touched.salary_date) ? props.errors.salary_date : ''}
|
||||
/>
|
||||
</div>
|
||||
<div className="w-full flex flex-col sm:flex-row items-center gap-4">
|
||||
@@ -291,7 +283,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="1,200,000"
|
||||
value={FormatAmount(props.values.annual_salary)}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.annual_salary && props.touched.annual_salary) ? props.errors.annual_salary : ''}
|
||||
// error={(props.errors.annual_salary && props.touched.annual_salary) ? props.errors.annual_salary : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full"
|
||||
@@ -304,7 +296,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="100,000"
|
||||
value={FormatAmount(props.values.net_montlty)}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.net_montlty && props.touched.net_montlty) ? props.errors.net_montlty : ''}
|
||||
// error={(props.errors.net_montlty && props.touched.net_montlty) ? props.errors.net_montlty : ''}
|
||||
/>
|
||||
</div>
|
||||
<InputCompOne
|
||||
@@ -318,7 +310,7 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
placeholder="LS/001/005"
|
||||
value={props.values.employee_id}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.employee_id && props.touched.employee_id) ? props.errors.employee_id : ''}
|
||||
// error={(props.errors.employee_id && props.touched.employee_id) ? props.errors.employee_id : ''}
|
||||
/>
|
||||
<div className="hidden w-full">
|
||||
<Button
|
||||
@@ -341,33 +333,33 @@ export default function EmploymentDetail({handleNextStep}:Props) {
|
||||
|
||||
|
||||
|
||||
interface SelectOption {
|
||||
loading: boolean;
|
||||
data: {value: string;
|
||||
label: string}[]
|
||||
}
|
||||
// interface SelectOption {
|
||||
// loading: boolean;
|
||||
// data: {value: string;
|
||||
// label: string}[]
|
||||
// }
|
||||
|
||||
|
||||
const jobSector: SelectOption = {
|
||||
loading: false,
|
||||
data: [
|
||||
{ value: "", label: "Please Select" },
|
||||
{ value: "private (non academic)", label: "Private (non academic)" },
|
||||
]
|
||||
}
|
||||
// const jobSector: SelectOption = {
|
||||
// loading: false,
|
||||
// data: [
|
||||
// { value: "", label: "Please Select" },
|
||||
// { value: "private (non academic)", label: "Private (non academic)" },
|
||||
// ]
|
||||
// }
|
||||
|
||||
const industry: SelectOption = {
|
||||
loading: false,
|
||||
data: [
|
||||
{ value: "", label: "Please Select" },
|
||||
{ value: "engineering", label: "Engineering" },
|
||||
]
|
||||
}
|
||||
// const industry: SelectOption = {
|
||||
// loading: false,
|
||||
// data: [
|
||||
// { value: "", label: "Please Select" },
|
||||
// { value: "engineering", label: "Engineering" },
|
||||
// ]
|
||||
// }
|
||||
|
||||
const highestEductaion: SelectOption = {
|
||||
loading: false,
|
||||
data: [
|
||||
{ value: "", label: "Please Select" },
|
||||
{ value: "b.sc + professional qualification", label: "B.Sc + Professional Qualification" },
|
||||
]
|
||||
}
|
||||
// const highestEductaion: SelectOption = {
|
||||
// loading: false,
|
||||
// data: [
|
||||
// { value: "", label: "Please Select" },
|
||||
// { value: "b.sc + professional qualification", label: "B.Sc + Professional Qualification" },
|
||||
// ]
|
||||
// }
|
||||
@@ -7,6 +7,18 @@ import { RouteHandler } from '../../../router/routes';
|
||||
import { getLoanDetail } from '../../../core/apiRequest';
|
||||
import CustomSpinner from '../../CustomSpinner';
|
||||
|
||||
interface LoanDetail {
|
||||
loan_amount: string;
|
||||
payment_month: string;
|
||||
sales_agent: string;
|
||||
[key: string]: any; // to accommodate any additional properties
|
||||
}
|
||||
|
||||
// interface InitialValues {
|
||||
// loan_amount: string;
|
||||
// payment_month: string;
|
||||
// sales_agent: string;
|
||||
// }
|
||||
|
||||
const initialValues = {
|
||||
loan_amount: "",
|
||||
@@ -29,36 +41,48 @@ const validationSchema = Yup.object().shape({
|
||||
sales_agent: Yup.string()
|
||||
});
|
||||
|
||||
type LocationState = {
|
||||
application_uid: string
|
||||
}
|
||||
|
||||
export default function ReferenceDetails() {
|
||||
|
||||
const location = useLocation()
|
||||
const navigate = useNavigate()
|
||||
|
||||
const applicationUID = location?.state?.application_uid
|
||||
// const applicationUID = location?.state?.application_uid
|
||||
const stateExist = location?.state as LocationState
|
||||
|
||||
//FUNCTION TO HANDLE SUBMIT
|
||||
const handleSubmit = (values:{}) => {
|
||||
// handleNextStep(values)
|
||||
console.log(values)
|
||||
};
|
||||
|
||||
const [loanDetail, setLoanDetail] = useState<any>({
|
||||
const [loanDetail, setLoanDetail] = useState<{loading:boolean, data:LoanDetail}>({
|
||||
loading: true,
|
||||
data: {}
|
||||
data: {
|
||||
loan_amount: '',
|
||||
payment_month: '',
|
||||
sales_agent: '',
|
||||
},
|
||||
})
|
||||
|
||||
useEffect(()=>{
|
||||
if(!applicationUID){
|
||||
navigate(RouteHandler.dashboardHome)
|
||||
if(!stateExist){
|
||||
navigate(RouteHandler.dashboardHome)
|
||||
return
|
||||
}
|
||||
getLoanDetail({application_uid:applicationUID}).then(res => {
|
||||
setLoanDetail({loading:false, data:res?.data?.loan})
|
||||
getLoanDetail({application_uid:stateExist.application_uid}).then(res => {
|
||||
setLoanDetail({loading:false, data:res?.data?.loan})
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
setLoanDetail({loading:false, data:{}})
|
||||
setLoanDetail((prev:any) => ({...prev, loading:false}))
|
||||
})
|
||||
},[])
|
||||
|
||||
const formInitialValue = (loanDetail.loading || Object.keys(loanDetail?.data)?.length < 1) ? initialValues : loanDetail?.data
|
||||
// const formInitialValue:LoanDetail = (loanDetail.loading) ? initialValues : loanDetail?.data
|
||||
const formInitialValue = (loanDetail.loading || Object.keys(loanDetail?.data)?.length < 1) ? initialValues : {...initialValues, ...loanDetail?.data}
|
||||
|
||||
return (
|
||||
<>
|
||||
{loanDetail.loading ?
|
||||
@@ -86,8 +110,9 @@ export default function ReferenceDetails() {
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem] text-right"
|
||||
placeholder="350,000"
|
||||
value={props.values.loan_amount}
|
||||
disabled={true}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.loan_amount && props.touched.loan_amount) ? props.errors.loan_amount : ''}
|
||||
// error={(props.errors.loan_amount && props.touched.loan_amount) ? props.errors.loan_amount : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full sm:max-w-[10rem] flex flex-col gap-4"
|
||||
@@ -95,11 +120,12 @@ export default function ReferenceDetails() {
|
||||
label="Months?"
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
select={true}
|
||||
disabled={true}
|
||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
selectOptions={paymentMonth}
|
||||
selectOptions={props.values.payment_month}
|
||||
selectValue={props.values.payment_month}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.payment_month && props.touched.payment_month) ? props.errors.payment_month : ''}
|
||||
// error={(props.errors.payment_month && props.touched.payment_month) ? props.errors.payment_month : ''}
|
||||
/>
|
||||
<InputCompOne
|
||||
parentClass="w-full sm:max-w-[10rem] flex flex-col gap-4"
|
||||
@@ -108,11 +134,12 @@ export default function ReferenceDetails() {
|
||||
labelClass="font-bold text-[1.125rem]"
|
||||
floatLabel='Enter agent ID'
|
||||
input
|
||||
disabled={true}
|
||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||
placeholder="Agent ID"
|
||||
value={props.values.sales_agent}
|
||||
onChange={props.handleChange}
|
||||
error={(props.errors.sales_agent && props.touched.sales_agent) ? props.errors.sales_agent : ''}
|
||||
// error={(props.errors.sales_agent && props.touched.sales_agent) ? props.errors.sales_agent : ''}
|
||||
/>
|
||||
</div>
|
||||
<Button
|
||||
@@ -130,20 +157,20 @@ export default function ReferenceDetails() {
|
||||
);
|
||||
}
|
||||
|
||||
interface SelectOption {
|
||||
loading: boolean;
|
||||
data: {value: string;
|
||||
label: string}[]
|
||||
}
|
||||
// interface SelectOption {
|
||||
// loading: boolean;
|
||||
// data: {value: string;
|
||||
// label: string}[]
|
||||
// }
|
||||
|
||||
|
||||
const paymentMonth: SelectOption = {
|
||||
loading: false,
|
||||
data: [
|
||||
{ value: "", label: "Please Select" },
|
||||
{ value: "6", label: "6 Months" },
|
||||
{ value: "12", label: "12 Months" },
|
||||
{ value: "18", label: "18 Months" },
|
||||
{ value: "24", label: "24 Months" },
|
||||
]
|
||||
}
|
||||
// const paymentMonth: SelectOption = {
|
||||
// loading: false,
|
||||
// data: [
|
||||
// { value: "", label: "Please Select" },
|
||||
// { value: "6", label: "6 Months" },
|
||||
// { value: "12", label: "12 Months" },
|
||||
// { value: "18", label: "18 Months" },
|
||||
// { value: "24", label: "24 Months" },
|
||||
// ]
|
||||
// }
|
||||
|
||||
@@ -1,7 +1,64 @@
|
||||
import React from 'react'
|
||||
import {useEffect, useState} from 'react'
|
||||
import { getPaymentDetails } from '../../core/apiRequest'
|
||||
|
||||
export default function Payment() {
|
||||
return (
|
||||
<div>Payment Page</div>
|
||||
)
|
||||
type Props = {
|
||||
reference: string | null
|
||||
}
|
||||
|
||||
// type PaymentPayloads = {
|
||||
// uid?: string
|
||||
// event?: string
|
||||
// customer_code?: string
|
||||
// plan_name?: string
|
||||
// plan_code?: string
|
||||
// subscription_code?: string | null,
|
||||
// amount?: string
|
||||
// authorization_code?: string
|
||||
// gateway_response?: string
|
||||
// gateway_status?: string
|
||||
// reference?: string
|
||||
// added?: string
|
||||
// }
|
||||
|
||||
export default function Payment({reference}:Props) {
|
||||
|
||||
const [paymentDetails, setPaymentDetails] = useState<any>({
|
||||
loading: true,
|
||||
data: {}
|
||||
})
|
||||
|
||||
useEffect(()=>{
|
||||
getPaymentDetails({reference}).then(res => {
|
||||
setPaymentDetails({loading:false, data:res?.data?.payment})
|
||||
console.log(res?.data?.payment)
|
||||
}).catch(err => {
|
||||
setPaymentDetails({loading:false, data:{}})
|
||||
console.log(err)
|
||||
})
|
||||
},[])
|
||||
|
||||
return (
|
||||
<div className='w-full'>
|
||||
<div className='p-4'>
|
||||
<h1 className='p-2 mb-3 text-2xl'>Confirmation</h1>
|
||||
<div className='p-8 w-full max-w-2xl bg-white shadow-md rounded-md'>
|
||||
{paymentDetails.loading ?
|
||||
<p>Loading...</p>
|
||||
:
|
||||
(paymentDetails?.data && Object.keys(paymentDetails?.data).length > 0) ?
|
||||
<>
|
||||
{Object.keys(paymentDetails?.data).map((item) => (
|
||||
<div key={item} className='p-2 flex gap-1'>
|
||||
<p className='w-64 font-semibold'>{item}</p>
|
||||
<p className=''>{paymentDetails?.data[item]}</p>
|
||||
</div>
|
||||
))}
|
||||
</>
|
||||
:
|
||||
<p className='p-2'>No Payment Found!</p>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import { ReactNode, useEffect, useState } from "react";
|
||||
import { PendingTableList } from "../../core/models";
|
||||
|
||||
type PaginatedListProps = {
|
||||
data: PendingTableList,
|
||||
data: Array<PendingTableList>,
|
||||
itemsPerPage?: number,
|
||||
filterItem?: string[],
|
||||
tableTitle?: string,
|
||||
@@ -28,12 +28,12 @@ export default function PendingList({
|
||||
|
||||
const handlePrev = () => {
|
||||
if (currentPage != 0) {
|
||||
setCurrentPage((prev) => prev - numberOfSelection);
|
||||
setCurrentPage((prev:any) => prev - numberOfSelection);
|
||||
}
|
||||
};
|
||||
const handleNext = () => {
|
||||
if (currentPage < data.length) {
|
||||
setCurrentPage((prev) => prev + numberOfSelection);
|
||||
setCurrentPage((prev:any) => prev + numberOfSelection);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ export interface InputCompOneProps {
|
||||
selectValue?: string;
|
||||
input?: boolean;
|
||||
select?: boolean;
|
||||
selectOptions?: {loading:boolean, data:{ [index: string]: string; }[]};
|
||||
selectOptions?: {loading:boolean, data:{ [index: string]: string; }[]} | any;
|
||||
inputType?: string;
|
||||
inputClass?: string;
|
||||
parentInputClass?: string;
|
||||
@@ -110,14 +110,14 @@ const InputCompOne = forwardRef<HTMLInputElement, InputCompOneProps>(
|
||||
: selectOptions.data.length && name == 'employer_uid' ?
|
||||
<>
|
||||
<option value=''>Please Select</option>
|
||||
{selectOptions.data.map(({ uid, name }) => (
|
||||
{selectOptions.data.map(({ uid, name }:any) => (
|
||||
<option key={uid} value={uid}>
|
||||
{name}
|
||||
</option>
|
||||
))}
|
||||
</>
|
||||
: selectOptions.data.length && name != 'employer_uid' ?
|
||||
selectOptions.data.map(({ value, label }) => (
|
||||
selectOptions.data.map(({ value, label }:any) => (
|
||||
<option key={value} value={value}>
|
||||
{label}
|
||||
</option>
|
||||
|
||||
@@ -67,6 +67,15 @@ export const getLoanDetail = (postData:any) => {
|
||||
return getAuxEnd(`/loan/loandetail?uid=${reqData?.uid}&application_uid=${reqData?.application_uid}`, null)
|
||||
}
|
||||
|
||||
// FUNCTION TO GET PAYMENT DETAILS
|
||||
export const getPaymentDetails = (postData:any) => {
|
||||
let reqData = {
|
||||
uid: localStorage.getItem('uid'),
|
||||
...postData
|
||||
}
|
||||
return getAuxEnd(`/payment/status?uid=${reqData?.uid}&reference=${reqData?.reference}`, null)
|
||||
}
|
||||
|
||||
// FUNCTION TO ADD CARD
|
||||
export const addCard = (postData:any) => {
|
||||
let reqData = {
|
||||
|
||||
+1
-1
@@ -29,4 +29,4 @@ export type PendingTableList = {
|
||||
button?: boolean
|
||||
advise?: string
|
||||
}
|
||||
}[];
|
||||
};
|
||||
@@ -207,7 +207,7 @@ const asideLinks: AsideLinksType = [
|
||||
},
|
||||
{
|
||||
name: 'Reference Details',
|
||||
link: '/dashboard/payments',
|
||||
link: "/dashboard/reference",
|
||||
icon: 'dash-icon',
|
||||
nestedLink: [],
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import ReferenceDetails from "../components/Dashboard/referenceDetails/ReferenceDetails";
|
||||
|
||||
export default function DashboardpaymentsPage() {
|
||||
export default function DashboardReferencePage() {
|
||||
return (
|
||||
<>
|
||||
<ReferenceDetails />
|
||||
@@ -1,4 +1,4 @@
|
||||
import React, {useEffect} from 'react'
|
||||
import {useEffect} from 'react'
|
||||
import {useLocation, useNavigate} from 'react-router-dom'
|
||||
import Payment from '../components/Payment/Payment'
|
||||
import { RouteHandler } from '../router/routes'
|
||||
@@ -9,7 +9,7 @@ export default function PaymentPage() {
|
||||
const queryParams = new URLSearchParams(location?.search);
|
||||
const trxRef = queryParams.get("trxref");
|
||||
const reference = queryParams.get("reference");
|
||||
console.log('LOC', trxRef, reference)
|
||||
// console.log('TEST', trxRef, reference)
|
||||
|
||||
useEffect(()=>{
|
||||
if(!trxRef || !reference){
|
||||
@@ -18,7 +18,7 @@ export default function PaymentPage() {
|
||||
},[])
|
||||
return (
|
||||
<>
|
||||
<Payment />
|
||||
<Payment reference={reference} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import DashboardHomePage from "./DashboardHomePage";
|
||||
import DashboardLegalsPage from "./DashboardLegalsPage";
|
||||
import DashboardProfilePage from "./DashboardProfilePage";
|
||||
import DashboardVerificationPage from "./DashboardVerificationPage";
|
||||
import DashboardpaymentsPage from "./DashboardPaymentsPage";
|
||||
import DashboardReferencePage from "./DashboardReferencePage";
|
||||
import TermsAndConditionPage from "./TermsAndConditionPage";
|
||||
import PersonalBankingPage from "./PersonalBankingPage";
|
||||
import BusinessBankingPage from "./BusinessBankingPage";
|
||||
@@ -21,7 +21,7 @@ export {
|
||||
DashboardLegalsPage,
|
||||
DashboardProfilePage,
|
||||
DashboardVerificationPage,
|
||||
DashboardpaymentsPage,
|
||||
DashboardReferencePage,
|
||||
TermsAndConditionPage,
|
||||
PersonalBankingPage,
|
||||
BusinessBankingPage,
|
||||
|
||||
@@ -8,7 +8,7 @@ import {
|
||||
DashboardLegalsPage,
|
||||
DashboardProfilePage,
|
||||
DashboardVerificationPage,
|
||||
DashboardpaymentsPage,
|
||||
DashboardReferencePage,
|
||||
TermsAndConditionPage,
|
||||
BusinessBankingPage,
|
||||
CooperateBankingPage,
|
||||
@@ -60,8 +60,8 @@ const Routers = () => {
|
||||
element={<DashboardVerificationPage />}
|
||||
/>
|
||||
<Route
|
||||
path={RouteHandler.dashboardPayments}
|
||||
element={<DashboardpaymentsPage />}
|
||||
path={RouteHandler.dashboardReference}
|
||||
element={<DashboardReferencePage />}
|
||||
/>
|
||||
<Route
|
||||
path={RouteHandler.dashboardLegals}
|
||||
|
||||
@@ -9,7 +9,7 @@ export class RouteHandler {
|
||||
static dashboardHome = "/dashboard/home";
|
||||
static dashboardProfile = "/dashboard/profile";
|
||||
static dashboardVerification = "/dashboard/verification";
|
||||
static dashboardPayments = "/dashboard/payments";
|
||||
static dashboardReference = "/dashboard/reference";
|
||||
static dashboardLegals = "/dashboard/legals";
|
||||
static termsAndConditions = "/terms-and-conditions";
|
||||
static paymentpage = "/payment";
|
||||
|
||||
Reference in New Issue
Block a user