Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2cb5c471f6 | |||
| 4b008f6785 | |||
| f632099128 | |||
| 122eb31732 | |||
| 0207bf631a | |||
| 378ff4a625 | |||
| f88b6df24c | |||
| fe759c6d0a |
@@ -14,5 +14,7 @@ services:
|
|||||||
- "5173"
|
- "5173"
|
||||||
environment:
|
environment:
|
||||||
- PORT=${DIGIFI_PORT}
|
- PORT=${DIGIFI_PORT}
|
||||||
|
tty: true
|
||||||
|
stdin_open: true
|
||||||
volumes:
|
volumes:
|
||||||
src:
|
src:
|
||||||
@@ -1,73 +1,118 @@
|
|||||||
import { Button, InputCompOne, Stepper } from "..";
|
import { Button, InputCompOne, Stepper } from "..";
|
||||||
// import { useNavigate } from "react-router-dom";
|
import {Formik, Form} from 'formik'
|
||||||
// import { RouteHandler } from "../../router/routes";
|
import * as Yup from "yup";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
handleNextStep:()=>any
|
handleNextStep:()=>any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
amount: "",
|
||||||
|
duration: "",
|
||||||
|
id: "",
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
duration: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
amount: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.test("no-e", "Invalid", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}),
|
||||||
|
id: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
});
|
||||||
|
|
||||||
export default function DashboardFormInit({handleNextStep}:Props) {
|
export default function DashboardFormInit({handleNextStep}:Props) {
|
||||||
|
|
||||||
// let navigate = useNavigate();
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
// const navigateToProfile = () => navigate(RouteHandler.dashboardProfile);
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
handleNextStep()
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<div className="w-full flex justify-center">
|
<div className="w-full flex justify-center">
|
||||||
<Stepper step={0} />
|
<Stepper step={0} />
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-[3.25rem] flex flex-col gap-9">
|
<Formik
|
||||||
<InputCompOne
|
initialValues={initialValues}
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
validationSchema={validationSchema}
|
||||||
name="applyIshInput"
|
onSubmit={handleSubmit}
|
||||||
label="How Much Do You Want To Apply For?"
|
>
|
||||||
labelClass="font-bold text-[1.125rem]"
|
{(props)=>(
|
||||||
input
|
<Form>
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
<div className="mt-[3.25rem] flex flex-col gap-9">
|
||||||
placeholder="350,000"
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
<InputCompOne
|
name="amount"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
label="How Much Do You Want To Apply For?"
|
||||||
name="applyIshInput"
|
labelClass="font-bold text-[1.125rem]"
|
||||||
label="For How Many Months?"
|
input
|
||||||
labelClass="font-bold text-[1.125rem]"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem] text-right"
|
||||||
select={true}
|
placeholder="350,000"
|
||||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
value={props.values.amount}
|
||||||
// selectValue=''
|
onChange={props.handleChange}
|
||||||
selectOptions={duration}
|
error={(props.errors.amount && props.touched.amount) ? props.errors.amount : ''}
|
||||||
// onChange={()=>{}}
|
/>
|
||||||
/>
|
<InputCompOne
|
||||||
<InputCompOne
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
name="duration"
|
||||||
name="applyIshInput"
|
label="For How Many Months?"
|
||||||
label="Direct sales agent ID ( Optional )"
|
labelClass="font-bold text-[1.125rem]"
|
||||||
labelClass="font-bold text-[1.125rem]"
|
select={true}
|
||||||
floatLabel='Enter agent ID'
|
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
input
|
selectOptions={duration}
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
selectValue={props.values.duration}
|
||||||
placeholder="Agent ID"
|
onChange={props.handleChange}
|
||||||
/>
|
error={(props.errors.duration && props.touched.duration) ? props.errors.duration : ''}
|
||||||
<Button
|
/>
|
||||||
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
<InputCompOne
|
||||||
text="Next"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
type="button"
|
name="id"
|
||||||
onClick={handleNextStep}
|
label="Direct sales agent ID ( Optional )"
|
||||||
/>
|
labelClass="font-bold text-[1.125rem]"
|
||||||
</div>
|
floatLabel='Enter agent ID'
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
|
placeholder="Agent ID"
|
||||||
|
value={props.values.id}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.id && props.touched.id) ? props.errors.id : ''}
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
||||||
|
text="Next"
|
||||||
|
type="submit"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Option {
|
interface SelectOption {
|
||||||
value: string;
|
loading: boolean;
|
||||||
label: string;
|
data: {value: string;
|
||||||
|
label: string}[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const duration: Option[] = [
|
const duration: SelectOption = {
|
||||||
{ value: "", label: "Please Select" },
|
loading: false,
|
||||||
{ value: "6", label: "6 Months" },
|
data: [
|
||||||
{ value: "12", label: "12 Months" },
|
{ value: "", label: "Please Select" },
|
||||||
{ value: "18", label: "18 Months" },
|
{ value: "6", label: "6 Months" },
|
||||||
{ value: "24", label: "24 Months" },
|
{ value: "12", label: "12 Months" },
|
||||||
];
|
{ value: "18", label: "18 Months" },
|
||||||
|
{ value: "24", label: "24 Months" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
||||||
|
|
||||||
|
import {Formik, Form} from 'formik'
|
||||||
|
import * as Yup from "yup";
|
||||||
// import { useNavigate } from "react-router-dom";
|
// import { useNavigate } from "react-router-dom";
|
||||||
// import { RouteHandler } from '../../../router/routes';
|
// import { RouteHandler } from '../../../router/routes';
|
||||||
|
|
||||||
@@ -6,9 +9,29 @@ type Props = {
|
|||||||
handleNextStep:()=>any
|
handleNextStep:()=>any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
account_number: "",
|
||||||
|
checked: false
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
account_number: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
checked: Yup.bool() // use bool instead of boolean
|
||||||
|
.oneOf([true], "You must accept the terms and conditions")
|
||||||
|
});
|
||||||
|
|
||||||
export default function DashboardHomeAttestation({handleNextStep}:Props) {
|
export default function DashboardHomeAttestation({handleNextStep}:Props) {
|
||||||
// let navigate = useNavigate();
|
// let navigate = useNavigate();
|
||||||
// const navigateToProfile = () => navigate(RouteHandler.dashboardProfile);
|
// const navigateToProfile = () => navigate(RouteHandler.dashboardProfile);
|
||||||
|
|
||||||
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
handleNextStep()
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<div className="w-full flex justify-center">
|
<div className="w-full flex justify-center">
|
||||||
@@ -16,31 +39,51 @@ export default function DashboardHomeAttestation({handleNextStep}:Props) {
|
|||||||
</div>
|
</div>
|
||||||
<p className='my-10 text-red-500 text-lg md:text-2xl'>Applicant's Attestation and Debit Instruction</p>
|
<p className='my-10 text-red-500 text-lg md:text-2xl'>Applicant's Attestation and Debit Instruction</p>
|
||||||
<p className='text-red-500 text-base'>NB: Must be your FCMB account number</p>
|
<p className='text-red-500 text-base'>NB: Must be your FCMB account number</p>
|
||||||
<div className="flex flex-col gap-9">
|
<Formik
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
initialValues={initialValues}
|
||||||
<InputCompOne
|
validationSchema={validationSchema}
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
onSubmit={handleSubmit}
|
||||||
name="applyIshInput"
|
>
|
||||||
floatLabel="Disbursement account number"
|
{(props)=>(
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
<Form>
|
||||||
input
|
<div className="flex flex-col gap-9">
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
placeholder="0102547896"
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
</div>
|
name="account_number"
|
||||||
<div className='max-w-[25.875rem] flex gap-4 items-start'>
|
floatLabel="Disbursement account number"
|
||||||
<input type='checkbox' className='w-4 h-4 p-2 accent-purple-600 text-purple-600 bg-gray-100 border-gray-300 rounded focus:ring-purple-500' />
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
<p className='text-[12px] text-justify'>By pressing, you agree that you have read, understood and accept the <span className='text-blue-600'>applicatant's attestation</span> and <span className='text-blue-600'>terms and conditions</span> for FCMB
|
input
|
||||||
premium salary loan. You also give us permission to collect financial information and run credit checks on the account provided through our partners
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
</p>
|
placeholder="0102547896"
|
||||||
</div>
|
value={props.values.account_number}
|
||||||
<Button
|
onChange={props.handleChange}
|
||||||
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
error={(props.errors.account_number && props.touched.account_number) ? props.errors.account_number : ''}
|
||||||
text="Apply"
|
/>
|
||||||
type="button"
|
</div>
|
||||||
onClick={handleNextStep}
|
<div className='max-w-[25.875rem]'>
|
||||||
/>
|
<div className='flex gap-4 items-start'>
|
||||||
</div>
|
<input
|
||||||
|
type='checkbox'
|
||||||
|
name="checked"
|
||||||
|
className='w-4 h-4 p-2 accent-purple-600 text-purple-600 bg-gray-100 border-gray-300 rounded focus:ring-purple-500'
|
||||||
|
onChange={props.handleChange}
|
||||||
|
/>
|
||||||
|
<p className='text-[12px] text-justify'>By pressing, you agree that you have read, understood and accept the <span className='text-blue-600'>applicatant's attestation</span> and <span className='text-blue-600'>terms and conditions</span> for FCMB
|
||||||
|
premium salary loan. You also give us permission to collect financial information and run credit checks on the account provided through our partners
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{props.errors.checked && props.touched.checked && <span className='text-[10px] text-red-500'>{props.errors.checked}</span>}
|
||||||
|
</div>
|
||||||
|
<Button
|
||||||
|
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
||||||
|
text="Apply"
|
||||||
|
type="submit"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,105 +1,166 @@
|
|||||||
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
||||||
|
|
||||||
|
import {Formik, Form} from 'formik'
|
||||||
|
import * as Yup from "yup";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
handleNextStep:()=>any
|
handleNextStep:()=>any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
gender: "",
|
||||||
|
address: "",
|
||||||
|
marital_status: "",
|
||||||
|
state: "",
|
||||||
|
email:""
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
gender: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
address: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
marital_status: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
state: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
email: Yup.string()
|
||||||
|
.email("Invalid")
|
||||||
|
.required("Required"),
|
||||||
|
});
|
||||||
|
|
||||||
export default function DashboardHomeDetail({handleNextStep}:Props) {
|
export default function DashboardHomeDetail({handleNextStep}:Props) {
|
||||||
|
|
||||||
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
handleNextStep()
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<div className="w-full flex justify-center">
|
<div className="w-full flex justify-center">
|
||||||
<Stepper step={1} />
|
<Stepper step={1} />
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-[3.25rem] flex flex-col gap-9">
|
<Formik
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
initialValues={initialValues}
|
||||||
<InputCompOne
|
validationSchema={validationSchema}
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
onSubmit={handleSubmit}
|
||||||
name="applyIshInput"
|
>
|
||||||
label="Select your gender"
|
{(props)=>(
|
||||||
labelClass="font-bold text-[1.125rem]"
|
<Form>
|
||||||
select={true}
|
<div className="mt-[3.25rem] flex flex-col gap-9">
|
||||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
// selectValue=''
|
<InputCompOne
|
||||||
selectOptions={gender}
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
// onChange={()=>{}}
|
name="gender"
|
||||||
/>
|
label="Select your gender"
|
||||||
<InputCompOne
|
labelClass="font-bold text-[1.125rem]"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
select={true}
|
||||||
name="applyIshInput"
|
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
label="Residential address"
|
selectOptions={gender}
|
||||||
labelClass="font-bold text-[1.125rem]"
|
selectValue={props.values.gender}
|
||||||
input
|
onChange={props.handleChange}
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
error={(props.errors.gender && props.touched.gender) ? props.errors.gender : ''}
|
||||||
placeholder="Somewhere in lagos"
|
/>
|
||||||
/>
|
<InputCompOne
|
||||||
</div>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
name="address"
|
||||||
<InputCompOne
|
label="Residential address"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
labelClass="font-bold text-[1.125rem]"
|
||||||
name="applyIshInput"
|
input
|
||||||
label="Marital status"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
labelClass="font-bold text-[1.125rem]"
|
placeholder="Somewhere in lagos"
|
||||||
select={true}
|
value={props.values.address}
|
||||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
onChange={props.handleChange}
|
||||||
// selectValue=''
|
error={(props.errors.address && props.touched.address) ? props.errors.address : ''}
|
||||||
selectOptions={maritalStatus}
|
/>
|
||||||
// onChange={()=>{}}
|
</div>
|
||||||
/>
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
<InputCompOne
|
<InputCompOne
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
name="applyIshInput"
|
name="marital_status"
|
||||||
label="Select your state"
|
label="Marital status"
|
||||||
labelClass="font-bold text-[1.125rem]"
|
labelClass="font-bold text-[1.125rem]"
|
||||||
select={true}
|
select={true}
|
||||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
// selectValue=''
|
selectOptions={maritalStatus}
|
||||||
selectOptions={state}
|
selectValue={props.values.marital_status}
|
||||||
// onChange={()=>{}}
|
onChange={props.handleChange}
|
||||||
/>
|
error={(props.errors.marital_status && props.touched.marital_status) ? props.errors.marital_status : ''}
|
||||||
</div>
|
/>
|
||||||
<InputCompOne
|
<InputCompOne
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
name="applyIshInput"
|
name="state"
|
||||||
label="Email address"
|
label="Select your state"
|
||||||
labelClass="font-bold text-[1.125rem]"
|
labelClass="font-bold text-[1.125rem]"
|
||||||
input
|
select={true}
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
placeholder="johndoe@gmail.com"
|
selectOptions={state}
|
||||||
/>
|
selectValue={props.values.state}
|
||||||
<Button
|
onChange={props.handleChange}
|
||||||
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
error={(props.errors.state && props.touched.state) ? props.errors.state : ''}
|
||||||
text="Next"
|
/>
|
||||||
type="button"
|
</div>
|
||||||
onClick={handleNextStep}
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
</div>
|
name="email"
|
||||||
|
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"
|
||||||
|
value={props.values.email}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.email && props.touched.email) ? props.errors.email : ''}
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
||||||
|
text="Next"
|
||||||
|
type="submit"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Option {
|
interface SelectOption {
|
||||||
value: string;
|
loading: boolean;
|
||||||
label: string;
|
data: {value: string;
|
||||||
|
label: string}[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const gender: Option[] = [
|
const gender: SelectOption = {
|
||||||
{ value: "", label: "Please Select" },
|
loading: false,
|
||||||
{ value: "male", label: "Male" },
|
data: [
|
||||||
{ value: "female", label: "Female" },
|
{ value: "", label: "Please Select" },
|
||||||
{ value: "others", label: "Prefer not to say" },
|
{ value: "male", label: "Male" },
|
||||||
];
|
{ value: "female", label: "Female" },
|
||||||
|
{ value: "others", label: "Prefer not to say" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
const maritalStatus: Option[] = [
|
const maritalStatus: SelectOption = {
|
||||||
{ value: "", label: "Please Select" },
|
loading: false,
|
||||||
{ value: "single", label: "Single" },
|
data: [
|
||||||
{ value: "married", label: "Married" },
|
{ value: "", label: "Please Select" },
|
||||||
{ value: "divorced", label: "Divorced" },
|
{ value: "single", label: "Single" },
|
||||||
];
|
{ value: "married", label: "Married" },
|
||||||
|
{ value: "divorced", label: "Divorced" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
const state: Option[] = [
|
const state: SelectOption = {
|
||||||
{ value: "", label: "Please Select" },
|
loading: false,
|
||||||
{ value: "abia", label: "Abia" },
|
data: [
|
||||||
{ value: "imo", label: "Imo" },
|
{ value: "", label: "Please Select" },
|
||||||
{ value: "lagos", label: "Lagos" },
|
{ value: "abia", label: "Abia" },
|
||||||
];
|
{ value: "imo", label: "Imo" },
|
||||||
|
{ value: "lagos", label: "Lagos" },
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,162 +1,275 @@
|
|||||||
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
||||||
|
|
||||||
|
import {Formik, Form} from 'formik'
|
||||||
|
import * as Yup from "yup";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
handleNextStep:()=>any
|
handleNextStep:()=>any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
job_title: "",
|
||||||
|
employer_name: "",
|
||||||
|
job_sector: "",
|
||||||
|
industry: "",
|
||||||
|
date_of_resumption: "",
|
||||||
|
employer_email:"",
|
||||||
|
annual_income: "",
|
||||||
|
monthly_salary: "",
|
||||||
|
salary_payment_date: "",
|
||||||
|
employee_id: "",
|
||||||
|
qualification: ""
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
job_title: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
employer_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
job_sector: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
industry: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
date_of_resumption: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
employer_email: Yup.string()
|
||||||
|
.email("Invalid")
|
||||||
|
.required("Required"),
|
||||||
|
annual_income: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.test("no-e", "Invalid", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}),
|
||||||
|
monthly_salary: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.test("no-e", "Invalid", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}),
|
||||||
|
salary_payment_date: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
employee_id: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
qualification: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
});
|
||||||
|
|
||||||
export default function DashboardHomeEmploymentInfo({handleNextStep}:Props) {
|
export default function DashboardHomeEmploymentInfo({handleNextStep}:Props) {
|
||||||
|
|
||||||
|
|
||||||
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
handleNextStep()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<div className="w-full flex justify-center">
|
<div className="w-full flex justify-center">
|
||||||
<Stepper step={2} />
|
<Stepper step={2} />
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-[3.25rem] flex flex-col gap-9">
|
<Formik
|
||||||
<p className='text-red-500 text-lg md:text-2xl'>Employment Informaton</p>
|
initialValues={initialValues}
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
validationSchema={validationSchema}
|
||||||
<InputCompOne
|
onSubmit={handleSubmit}
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
>
|
||||||
name="applyIshInput"
|
{(props)=>(
|
||||||
floatLabel="Job Title"
|
<Form>
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
<div className="mt-[3.25rem] flex flex-col gap-9">
|
||||||
input
|
<p className='text-red-500 text-lg md:text-2xl'>Employment Informaton</p>
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
placeholder="Software Engineer"
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
<InputCompOne
|
name="job_title"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
floatLabel="Job Title"
|
||||||
name="applyIshInput"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
floatLabel="Employer name"
|
input
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
input
|
placeholder="Software Engineer"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
value={props.values.job_title}
|
||||||
placeholder="Mr. Mark John"
|
onChange={props.handleChange}
|
||||||
/>
|
error={(props.errors.job_title && props.touched.job_title) ? props.errors.job_title : ''}
|
||||||
</div>
|
/>
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
<InputCompOne
|
||||||
<InputCompOne
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
name="employer_name"
|
||||||
name="applyIshInput"
|
floatLabel="Employer name"
|
||||||
floatLabel="Job Sector"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
input
|
||||||
select={true}
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
placeholder="Mr. Mark John"
|
||||||
// selectValue=''
|
value={props.values.employer_name}
|
||||||
selectOptions={jobSection}
|
onChange={props.handleChange}
|
||||||
// onChange={()=>{}}
|
error={(props.errors.employer_name && props.touched.employer_name) ? props.errors.employer_name : ''}
|
||||||
/>
|
/>
|
||||||
<InputCompOne
|
</div>
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
name="applyIshInput"
|
<InputCompOne
|
||||||
floatLabel="Select your industry"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
name="job_sector"
|
||||||
select={true}
|
floatLabel="Job Sector"
|
||||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
// selectValue=''
|
select={true}
|
||||||
selectOptions={industry}
|
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
// onChange={()=>{}}
|
selectOptions={jobSector}
|
||||||
/>
|
selectValue={props.values.job_sector}
|
||||||
</div>
|
onChange={props.handleChange}
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
error={(props.errors.job_sector && props.touched.job_sector) ? props.errors.job_sector : ''}
|
||||||
<InputCompOne
|
/>
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
<InputCompOne
|
||||||
name="applyIshInput"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
floatLabel="Date of resumption"
|
name="industry"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
floatLabel="Select your industry"
|
||||||
input
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
select={true}
|
||||||
placeholder="12/12/2015"
|
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
/>
|
selectOptions={industry}
|
||||||
<InputCompOne
|
selectValue={props.values.industry}
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
onChange={props.handleChange}
|
||||||
name="applyIshInput"
|
error={(props.errors.industry && props.touched.industry) ? props.errors.industry : ''}
|
||||||
floatLabel="Employers official email"
|
/>
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
</div>
|
||||||
input
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
<InputCompOne
|
||||||
placeholder="example@gmail.com"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
/>
|
name="date_of_resumption"
|
||||||
</div>
|
floatLabel="Date of resumption"
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
<InputCompOne
|
input
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
inputType='date'
|
||||||
name="applyIshInput"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
floatLabel="Annual Income"
|
placeholder="12/12/2015"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
value={props.values.date_of_resumption}
|
||||||
input
|
onChange={props.handleChange}
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
error={(props.errors.date_of_resumption && props.touched.date_of_resumption) ? props.errors.date_of_resumption : ''}
|
||||||
placeholder="1,200,000"
|
/>
|
||||||
/>
|
<InputCompOne
|
||||||
<InputCompOne
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
name="employer_email"
|
||||||
name="applyIshInput"
|
floatLabel="Employers official email"
|
||||||
floatLabel="Net monthly salary"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
input
|
||||||
input
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
placeholder="example@gmail.com"
|
||||||
placeholder="100,000"
|
value={props.values.employer_email}
|
||||||
/>
|
onChange={props.handleChange}
|
||||||
</div>
|
error={(props.errors.employer_email && props.touched.employer_email) ? props.errors.employer_email : ''}
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
/>
|
||||||
<InputCompOne
|
</div>
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
name="applyIshInput"
|
<InputCompOne
|
||||||
floatLabel="Salary payment date"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
name="annual_income"
|
||||||
input
|
floatLabel="Annual Income"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
placeholder="30th of every month"
|
input
|
||||||
/>{" "}
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem] text-right"
|
||||||
<InputCompOne
|
placeholder="1,200,000"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
value={props.values.annual_income}
|
||||||
name="applyIshInput"
|
onChange={props.handleChange}
|
||||||
floatLabel="Employee ID"
|
error={(props.errors.annual_income && props.touched.annual_income) ? props.errors.annual_income : ''}
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
/>
|
||||||
input
|
<InputCompOne
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
placeholder="LS/001/005"
|
name="monthly_salary"
|
||||||
/>
|
floatLabel="Net monthly salary"
|
||||||
</div>
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
<InputCompOne
|
input
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem] text-right"
|
||||||
name="applyIshInput"
|
placeholder="100,000"
|
||||||
floatLabel="Highest level of education"
|
value={props.values.monthly_salary}
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
onChange={props.handleChange}
|
||||||
select={true}
|
error={(props.errors.monthly_salary && props.touched.monthly_salary) ? props.errors.monthly_salary : ''}
|
||||||
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
/>
|
||||||
// selectValue=''
|
</div>
|
||||||
selectOptions={qualification}
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
// onChange={()=>{}}
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
<Button
|
name="salary_payment_date"
|
||||||
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
floatLabel="Salary payment date"
|
||||||
text="Next"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
type="button"
|
input
|
||||||
onClick={handleNextStep}
|
inputType='date'
|
||||||
/>
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
</div>
|
placeholder="30th of every month"
|
||||||
|
value={props.values.salary_payment_date}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.salary_payment_date && props.touched.salary_payment_date) ? props.errors.salary_payment_date : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
|
name="employee_id"
|
||||||
|
floatLabel="Employee ID"
|
||||||
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
|
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 : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
|
name="qualification"
|
||||||
|
floatLabel="Highest level of education"
|
||||||
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
|
select={true}
|
||||||
|
selectClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
|
selectOptions={qualification}
|
||||||
|
selectValue={props.values.qualification}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.qualification && props.touched.qualification) ? props.errors.qualification : ''}
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
||||||
|
text="Next"
|
||||||
|
type="submit"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
interface Option {
|
interface SelectOption {
|
||||||
value: string;
|
loading: boolean;
|
||||||
label: string;
|
data: {value: string;
|
||||||
|
label: string}[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const jobSection: Option[] = [
|
const jobSector: SelectOption = {
|
||||||
{ value: "", label: "Please Select" },
|
loading: false,
|
||||||
{ value: "private (non academic)", label: "Private (non academic)" },
|
data: [
|
||||||
];
|
{ value: "", label: "Please Select" },
|
||||||
|
{ value: "private (non academic)", label: "Private (non academic)" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
const industry: Option[] = [
|
const industry: SelectOption = {
|
||||||
{ value: "", label: "Please Select" },
|
loading: false,
|
||||||
{ value: "engineering", label: "Engineering" },
|
data: [
|
||||||
];
|
{ value: "", label: "Please Select" },
|
||||||
|
{ value: "engineering", label: "Engineering" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
const qualification: Option[] = [
|
const qualification: SelectOption = {
|
||||||
{ value: "", label: "Please Select" },
|
loading: false,
|
||||||
{ value: "b.sc + professional qualification", label: "B.Sc + Professional Qualification" },
|
data: [
|
||||||
];
|
{ value: "", label: "Please Select" },
|
||||||
|
{ value: "b.sc + professional qualification", label: "B.Sc + Professional Qualification" },
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,126 +1,231 @@
|
|||||||
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
import { Button, InputCompOne, Stepper } from '../../shared/index';
|
||||||
|
|
||||||
|
import {Formik, Form} from 'formik'
|
||||||
|
import * as Yup from "yup";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
handleNextStep:()=>any
|
handleNextStep:()=>any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
ref_name: "",
|
||||||
|
ref_email: "",
|
||||||
|
ref_number: "",
|
||||||
|
ref_relationship: "",
|
||||||
|
ref_bvn: "",
|
||||||
|
ref_two_name: "",
|
||||||
|
ref_two_email: "",
|
||||||
|
ref_two_number: "",
|
||||||
|
ref_two_relationship: "",
|
||||||
|
ref_two_bvn: "",
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
ref_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_email: Yup.string()
|
||||||
|
.email("Invalid")
|
||||||
|
.required("Required"),
|
||||||
|
ref_number: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_relationship: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_bvn: Yup.string()
|
||||||
|
.required("BVN is required")
|
||||||
|
.test("no-e", "Invalid number", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.min(11, "must be 11 digits")
|
||||||
|
.max(11, "must be 11 digits"),
|
||||||
|
ref_two_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_email: Yup.string()
|
||||||
|
.email("Invalid")
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_number: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_relationship: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_bvn: Yup.string()
|
||||||
|
.required("BVN is required")
|
||||||
|
.test("no-e", "Invalid number", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.min(11, "must be 11 digits")
|
||||||
|
.max(11, "must be 11 digits"),
|
||||||
|
});
|
||||||
|
|
||||||
export default function DashboardHomeRefereeInfo({handleNextStep}:Props) {
|
export default function DashboardHomeRefereeInfo({handleNextStep}:Props) {
|
||||||
|
|
||||||
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
handleNextStep()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<div className="w-full flex justify-center">
|
<div className="w-full flex justify-center">
|
||||||
<Stepper step={3} />
|
<Stepper step={3} />
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-[3.25rem] flex flex-col gap-9">
|
<Formik
|
||||||
<p className='text-red-500 text-lg md:text-2xl'>Reference Details <span className='text-base'>(Must be 18 years and above)</span></p>
|
initialValues={initialValues}
|
||||||
<div className="flex items-center gap-[4.125rem]">
|
validationSchema={validationSchema}
|
||||||
<div className='w-full max-w-[25.875rem]'>
|
onSubmit={handleSubmit}
|
||||||
<p className='text-red-500 text-base'>Reference one</p>
|
>
|
||||||
<div className='w-full flex flex-col gap-9'>
|
{(props)=>(
|
||||||
<InputCompOne
|
<Form>
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
<div className="mt-[3.25rem] flex flex-col gap-9">
|
||||||
name="applyIshInput"
|
<p className='text-red-500 text-lg md:text-2xl'>Reference Details <span className='text-base'>(Must be 18 years and above)</span></p>
|
||||||
floatLabel="Full name"
|
<div className="flex items-center gap-[4.125rem]">
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
<div className='w-full max-w-[25.875rem]'>
|
||||||
input
|
<p className='text-red-500 text-base'>Reference one</p>
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
<div className='w-full flex flex-col gap-9'>
|
||||||
placeholder="John James"
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
<InputCompOne
|
name="ref_name"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
floatLabel="Full name"
|
||||||
name="applyIshInput"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
floatLabel="Relationship"
|
input
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
input
|
placeholder="John James"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
value={props.values.ref_name}
|
||||||
placeholder="Sister"
|
onChange={props.handleChange}
|
||||||
/>
|
error={(props.errors.ref_name && props.touched.ref_name) ? props.errors.ref_name : ''}
|
||||||
<InputCompOne
|
/>
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
<InputCompOne
|
||||||
name="applyIshInput"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
floatLabel="Phone number"
|
name="ref_relationship"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
floatLabel="Relationship"
|
||||||
input
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
input
|
||||||
placeholder="07000000000"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
/>
|
placeholder="Sister"
|
||||||
<InputCompOne
|
value={props.values.ref_relationship}
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
onChange={props.handleChange}
|
||||||
name="applyIshInput"
|
error={(props.errors.ref_relationship && props.touched.ref_relationship) ? props.errors.ref_relationship : ''}
|
||||||
floatLabel="Email address"
|
/>
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
<InputCompOne
|
||||||
input
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
name="ref_number"
|
||||||
placeholder="demo@gamil.com"
|
floatLabel="Phone number"
|
||||||
/>
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
<InputCompOne
|
input
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
name="applyIshInput"
|
placeholder="07000000000"
|
||||||
floatLabel="BVN"
|
value={props.values.ref_number}
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
onChange={props.handleChange}
|
||||||
input
|
error={(props.errors.ref_number && props.touched.ref_number) ? props.errors.ref_number : ''}
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
/>
|
||||||
placeholder="2228457896"
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
</div>
|
name="ref_email"
|
||||||
</div>
|
floatLabel="Email address"
|
||||||
<div className='w-full max-w-[25.875rem]'>
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
<p className='text-red-500 text-base'>Reference two</p>
|
input
|
||||||
<div className='w-full flex flex-col gap-9'>
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
<InputCompOne
|
placeholder="demo@gamil.com"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
value={props.values.ref_email}
|
||||||
name="applyIshInput"
|
onChange={props.handleChange}
|
||||||
floatLabel="Full name"
|
error={(props.errors.ref_email && props.touched.ref_email) ? props.errors.ref_email : ''}
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
/>
|
||||||
input
|
<InputCompOne
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
placeholder="John James"
|
name="ref_bvn"
|
||||||
/>
|
floatLabel="BVN"
|
||||||
<InputCompOne
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
input
|
||||||
name="applyIshInput"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
floatLabel="Relationship"
|
placeholder="2228457896"
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
value={props.values.ref_bvn}
|
||||||
input
|
onChange={props.handleChange}
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
error={(props.errors.ref_bvn && props.touched.ref_bvn) ? props.errors.ref_bvn : ''}
|
||||||
placeholder="Sister"
|
/>
|
||||||
/>
|
</div>
|
||||||
<InputCompOne
|
</div>
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
<div className='w-full max-w-[25.875rem]'>
|
||||||
name="applyIshInput"
|
<p className='text-red-500 text-base'>Reference two</p>
|
||||||
floatLabel="Phone number"
|
<div className='w-full flex flex-col gap-9'>
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
<InputCompOne
|
||||||
input
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
name="ref_two_name"
|
||||||
placeholder="07000000000"
|
floatLabel="Full name"
|
||||||
/>
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
<InputCompOne
|
input
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
name="applyIshInput"
|
placeholder="John James"
|
||||||
floatLabel="Email address"
|
value={props.values.ref_two_name}
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
onChange={props.handleChange}
|
||||||
input
|
error={(props.errors.ref_two_name && props.touched.ref_two_name) ? props.errors.ref_two_name : ''}
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
/>
|
||||||
placeholder="demo@gamil.com"
|
<InputCompOne
|
||||||
/>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
<InputCompOne
|
name="ref_two_relationship"
|
||||||
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
floatLabel="Relationship"
|
||||||
name="applyIshInput"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
floatLabel="BVN"
|
input
|
||||||
// labelClass="font-bold text-[1.125rem]"
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
input
|
placeholder="Sister"
|
||||||
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
value={props.values.ref_two_relationship}
|
||||||
placeholder="2228457896"
|
onChange={props.handleChange}
|
||||||
/>
|
error={(props.errors.ref_two_relationship && props.touched.ref_two_relationship) ? props.errors.ref_two_relationship : ''}
|
||||||
</div>
|
/>
|
||||||
</div>
|
<InputCompOne
|
||||||
</div>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
<Button
|
name="ref_two_number"
|
||||||
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
floatLabel="Phone number"
|
||||||
text="Next"
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
type="button"
|
input
|
||||||
onClick={handleNextStep}
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
/>
|
placeholder="07000000000"
|
||||||
</div>
|
value={props.values.ref_two_number}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_number && props.touched.ref_two_number) ? props.errors.ref_two_number : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
|
name="ref_two_email"
|
||||||
|
floatLabel="Email address"
|
||||||
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
|
placeholder="demo@gamil.com"
|
||||||
|
value={props.values.ref_two_email}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_email && props.touched.ref_two_email) ? props.errors.ref_two_email : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
|
name="ref_two_bvn"
|
||||||
|
floatLabel="BVN"
|
||||||
|
// labelClass="font-bold text-[1.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[3.625rem] bg-[#EFEFEF] px-4 rounded-[.375rem]"
|
||||||
|
placeholder="2228457896"
|
||||||
|
value={props.values.ref_two_bvn}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_bvn && props.touched.ref_two_bvn) ? props.errors.ref_two_bvn : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Button
|
||||||
|
className="my-8 max-w-[25.875rem] btn-Y text-black w-full h-11"
|
||||||
|
text="Next"
|
||||||
|
type="submit"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import DebitAccount from "./DebitAccount";
|
import DebitAccount from "./DebitAccount";
|
||||||
|
|
||||||
|
|
||||||
const ApplicantsAttestation: React.FC = () => {
|
const ApplicantsAttestation: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ const BVN = ({handleNextStep}:Props) => {
|
|||||||
|
|
||||||
const handleSubmit = (values:any) => {
|
const handleSubmit = (values:any) => {
|
||||||
console.log('values', values)
|
console.log('values', values)
|
||||||
|
handleNextStep()
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -70,7 +71,6 @@ const BVN = ({handleNextStep}:Props) => {
|
|||||||
<button
|
<button
|
||||||
type='submit'
|
type='submit'
|
||||||
className="w-full h-[3.625rem] rounded bg-[#FBB700] rounded-2 px-4 text-[18px] text-[#282828] font-semibold disabled:text-[#282828] disabled:text-opacity-50"
|
className="w-full h-[3.625rem] rounded bg-[#FBB700] rounded-2 px-4 text-[18px] text-[#282828] font-semibold disabled:text-[#282828] disabled:text-opacity-50"
|
||||||
onClick={handleNextStep}
|
|
||||||
>
|
>
|
||||||
Enter
|
Enter
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -1,61 +1,87 @@
|
|||||||
import React, { useRef, useState } from "react";
|
import React from "react";
|
||||||
import InputDetails from "./IntroDetails";
|
|
||||||
import OTPSection from "./OtpSection";
|
|
||||||
import SpouseDetails from "./SpouseDetails";
|
|
||||||
import { Button } from "..";
|
|
||||||
|
|
||||||
// interface Option {
|
import { Button, InputCompOne } from "..";
|
||||||
// value: string;
|
|
||||||
// label: string;
|
import {Formik, Form} from 'formik'
|
||||||
// }
|
import * as Yup from "yup";
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
title: "",
|
||||||
|
marital_status: "",
|
||||||
|
agent_id: "",
|
||||||
|
bvn: "",
|
||||||
|
first_name: "",
|
||||||
|
phone: "",
|
||||||
|
email: "",
|
||||||
|
surname: "",
|
||||||
|
dob: "",
|
||||||
|
second_name: "",
|
||||||
|
spouse_bvn: "",
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
title: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
marital_status: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
agent_id: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
bvn: Yup.string()
|
||||||
|
.required("BVN is required")
|
||||||
|
.test("no-e", "Invalid number", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.min(11, "must be 11 digits")
|
||||||
|
.max(11, "must be 11 digits"),
|
||||||
|
first_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
phone: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
email: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.email("Wrong email format"),
|
||||||
|
surname: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
dob: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
});
|
||||||
|
|
||||||
interface BasicInfoProps {
|
interface BasicInfoProps {
|
||||||
inputValues: {
|
|
||||||
title: string;
|
|
||||||
marital: string;
|
|
||||||
agentId: string;
|
|
||||||
bvn: string;
|
|
||||||
firstName: string;
|
|
||||||
phone: string;
|
|
||||||
email: string;
|
|
||||||
surname: string;
|
|
||||||
dob: string;
|
|
||||||
secondName: string;
|
|
||||||
spouseBVN: string;
|
|
||||||
};
|
|
||||||
setInputValues: React.Dispatch<React.SetStateAction<any>>;
|
|
||||||
handleNextStep: any;
|
handleNextStep: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BasicInfo: React.FC<BasicInfoProps> = ({
|
const BasicInfo: React.FC<BasicInfoProps> = ({
|
||||||
inputValues,
|
|
||||||
setInputValues,
|
|
||||||
handleNextStep,
|
handleNextStep,
|
||||||
}) => {
|
}) => {
|
||||||
const [hideOTPComponent, setHideOTPComponent] = useState<boolean>(false);
|
// const inputRef = useRef<HTMLInputElement>(null);
|
||||||
const inputRef = useRef<HTMLInputElement>(null);
|
|
||||||
|
|
||||||
const handleChange = (e: React.FormEvent<HTMLInputElement>) => {
|
// const handleInput = (e: React.FormEvent<HTMLInputElement>) => {
|
||||||
const { name, value } = e.target as HTMLInputElement;
|
// const { name, value } = e.target as HTMLInputElement;
|
||||||
setInputValues((prev: typeof inputValues) => ({ ...prev, [name]: value }));
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleInput = (e: React.FormEvent<HTMLInputElement>) => {
|
// if (name === "bvn") {
|
||||||
const { name, value } = e.target as HTMLInputElement;
|
// const isNumeric = /^[0-9]+$/.test(value);
|
||||||
|
|
||||||
if (name === "bvn") {
|
// if (isNumeric) {
|
||||||
const isNumeric = /^[0-9]+$/.test(value);
|
// if (value.length === 10) {
|
||||||
|
// setHideOTPComponent(false);
|
||||||
|
// } else {
|
||||||
|
// setHideOTPComponent(true);
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// console.log("Invalid BVN");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
|
||||||
if (isNumeric) {
|
|
||||||
if (value.length === 10) {
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
setHideOTPComponent(false);
|
const handleSubmit = (values:any) => {
|
||||||
} else {
|
console.log(values)
|
||||||
setHideOTPComponent(true);
|
handleNextStep()
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log("Invalid BVN");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -64,38 +90,222 @@ const BasicInfo: React.FC<BasicInfoProps> = ({
|
|||||||
<h1 className="font-semibold text-[2.375rem] text-[#5C2684] my-[.5rem]">
|
<h1 className="font-semibold text-[2.375rem] text-[#5C2684] my-[.5rem]">
|
||||||
Let’s Get You Started
|
Let’s Get You Started
|
||||||
</h1>
|
</h1>
|
||||||
<form>
|
<Formik
|
||||||
<InputDetails
|
initialValues={initialValues}
|
||||||
inputValues={inputValues}
|
validationSchema={validationSchema}
|
||||||
handleChange={handleChange}
|
onSubmit={handleSubmit}
|
||||||
handleInput={handleInput}
|
>
|
||||||
inputRef={inputRef}
|
{(props)=>(
|
||||||
/>
|
<Form>
|
||||||
{!hideOTPComponent && (
|
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
||||||
<>
|
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
||||||
<OTPSection
|
BASIC INFORMATION
|
||||||
inputValues={inputValues}
|
</p>
|
||||||
handleChange={handleChange}
|
</div>
|
||||||
handleInput={handleInput}
|
<div className="mt-8 grid grid-cols-2">
|
||||||
inputRef={inputRef}
|
<div className="flex flex-col gap-4 max-w-[15.6875rem]">
|
||||||
/>
|
<InputCompOne
|
||||||
<SpouseDetails
|
parentInputClass="max-w-[224px] w-full"
|
||||||
inputValues={inputValues}
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
handleChange={handleChange}
|
name="title"
|
||||||
handleInput={handleInput}
|
label="Title"
|
||||||
inputRef={inputRef}
|
labelClass="font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
/>
|
select={true}
|
||||||
<Button
|
selectClass="w-full h-[36px] rounded-[6px]"
|
||||||
className="mt-8 btn-R bg-[#5A2C82]"
|
selectOptions={titleOptions}
|
||||||
text="Enter"
|
selectValue={props.values.title}
|
||||||
type="button"
|
onChange={props.handleChange}
|
||||||
onClick={handleNextStep}
|
error={(props.errors.title && props.touched.title) ? props.errors.title : ''}
|
||||||
/>
|
/>
|
||||||
</>
|
<InputCompOne
|
||||||
)}
|
parentInputClass="max-w-[224px] w-full"
|
||||||
</form>
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
|
name="marital_status"
|
||||||
|
label="Marital Status"
|
||||||
|
labelClass="font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
|
select={true}
|
||||||
|
selectClass="w-full h-[36px] rounded-[6px]"
|
||||||
|
selectOptions={maritalStatusOptions}
|
||||||
|
selectValue={props.values.marital_status}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.marital_status && props.touched.marital_status) ? props.errors.marital_status : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentInputClass="max-w-[224px] w-full"
|
||||||
|
parentClass="max-w-[25.875rem] w-full flex flex-col gap-4"
|
||||||
|
name="agent_id"
|
||||||
|
label="Direct Sales Agent ID"
|
||||||
|
labelClass="font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
|
select={true}
|
||||||
|
selectClass="w-full h-[36px] rounded-[6px]"
|
||||||
|
selectOptions={{loading: false, data:[{ value: "", label: "Select" }, { value: "dd", label: "AB001" }]}}
|
||||||
|
selectValue={props.values.agent_id}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.agent_id && props.touched.agent_id) ? props.errors.agent_id : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
label="BVN"
|
||||||
|
name="bvn"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelSpan="( To get your BVN, dial *565*0# )"
|
||||||
|
labelSpanClass="text-[11px] text-[#7a7373]"
|
||||||
|
placeholder="Enter your BVN"
|
||||||
|
labelClass="font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px] gap-[2px]"
|
||||||
|
input={true}
|
||||||
|
inputClass="w-full h-[36px] bg-[#EFEFEF] rounded-[6px]"
|
||||||
|
value={props.values.bvn}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.bvn && props.touched.bvn) ? props.errors.bvn : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="mt-5">
|
||||||
|
<div className="grid grid-cols-2 gap-4">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="First Name"
|
||||||
|
name="first_name"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.first_name}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.first_name && props.touched.first_name) ? props.errors.first_name : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="Phone Number"
|
||||||
|
name="phone"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.phone}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.phone && props.touched.phone) ? props.errors.phone : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="Email Address"
|
||||||
|
name="email"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.email}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.email && props.touched.email) ? props.errors.email : ''}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="Surname"
|
||||||
|
name="surname"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem] px-3"
|
||||||
|
value={props.values.surname}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.surname && props.touched.surname) ? props.errors.surname : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="Date of Birth"
|
||||||
|
name="dob"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputType='date'
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem] px-3"
|
||||||
|
value={props.values.dob}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.dob && props.touched.dob) ? props.errors.dob : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="Second Name"
|
||||||
|
name="second_name"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem] px-3"
|
||||||
|
value={props.values.second_name}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.second_name && props.touched.second_name) ? props.errors.second_name : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className='w-full'>
|
||||||
|
<div className="w-full rounded py-3 bg-[#5C2684] px-5 mt-5">
|
||||||
|
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
||||||
|
SPOUSE DETAILS ( If not applicable, please move to the next stage )
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="mt-8 grid grid-cols-2">
|
||||||
|
<div className="flex flex-col gap-4 max-w-[15.6875rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="BVN"
|
||||||
|
name="spouse_bvn"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelSpan="( To get your BVN, dial *565*0# )"
|
||||||
|
labelSpanClass="text-[11px] text-[#7a7373]"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.spouse_bvn}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.spouse_bvn && props.touched.spouse_bvn) ? props.errors.spouse_bvn : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
className="mt-8 btn-R bg-[#5A2C82]"
|
||||||
|
text="Enter"
|
||||||
|
type="submit"
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default BasicInfo;
|
export default BasicInfo;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
interface SelectOption {
|
||||||
|
loading: boolean;
|
||||||
|
data: {value: string;
|
||||||
|
label: string}[]
|
||||||
|
}
|
||||||
|
|
||||||
|
const maritalStatusOptions: SelectOption = {
|
||||||
|
loading: false,
|
||||||
|
data: [
|
||||||
|
{ value: "", label: "Select" },
|
||||||
|
{ value: "single", label: "Single" },
|
||||||
|
{ value: "married", label: "Married" },
|
||||||
|
{ value: "divorced", label: "Divorced" },
|
||||||
|
{ value: "widowed", label: "Widowed" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
const titleOptions: SelectOption = {
|
||||||
|
loading: false,
|
||||||
|
data: [
|
||||||
|
{ value: "", label: "Select" },
|
||||||
|
{ value: "ms", label: "Ms" },
|
||||||
|
{ value: "mr", label: "Mr" },
|
||||||
|
{ value: "miss", label: "Miss" },
|
||||||
|
{ value: "mrs", label: "Mrs" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,8 +3,40 @@ import {useNavigate} from 'react-router-dom'
|
|||||||
import { Button, InputCompOne } from "..";
|
import { Button, InputCompOne } from "..";
|
||||||
import { RouteHandler } from "../../router/routes";
|
import { RouteHandler } from "../../router/routes";
|
||||||
|
|
||||||
|
import {Formik, Form} from 'formik'
|
||||||
|
import * as Yup from "yup";
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
disburse_account: "",
|
||||||
|
bank_name: "",
|
||||||
|
account_name: "",
|
||||||
|
account_number: "",
|
||||||
|
checked: false
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
disburse_account: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
bank_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
account_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
account_number: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
checked: Yup.bool() // use bool instead of boolean
|
||||||
|
.oneOf([true], "You must accept the terms and conditions")
|
||||||
|
});
|
||||||
|
|
||||||
const DebitAccount: React.FC = () => {
|
const DebitAccount: React.FC = () => {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
|
|
||||||
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
navigate(RouteHandler.letsGetStarted, {replace:true})
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="w-full rounded py-3 mb-9 bg-[#5C2684] px-5">
|
<div className="w-full rounded py-3 mb-9 bg-[#5C2684] px-5">
|
||||||
@@ -12,78 +44,101 @@ const DebitAccount: React.FC = () => {
|
|||||||
CREDIT ACCOUNT ( Your account to receive your loan )
|
CREDIT ACCOUNT ( Your account to receive your loan )
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<InputCompOne
|
<Formik
|
||||||
parentClass="max-w-[29.4375rem] w-full my-5 ml-5"
|
initialValues={initialValues}
|
||||||
label="Disbursement Account Number "
|
validationSchema={validationSchema}
|
||||||
name="disbursementAccountNumber"
|
onSubmit={handleSubmit}
|
||||||
labelSpan="( Your FCMB Account )"
|
>
|
||||||
labelSpanClass="text-[12px] text-[#5C2684] ml-1"
|
{(props)=>(
|
||||||
parentInputClass="w-full"
|
<Form>
|
||||||
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
<InputCompOne
|
||||||
input
|
parentClass="max-w-[29.4375rem] w-full my-5 ml-5"
|
||||||
inputClass="w-full h-[36px] bg-[#EFEFEF] px-[2px] rounded-[6px]"
|
label="Disbursement Account Number "
|
||||||
/>
|
name="disburse_account"
|
||||||
|
labelSpan="( Your FCMB Account )"
|
||||||
|
labelSpanClass="text-[12px] text-[#5C2684] ml-1"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[36px] bg-[#EFEFEF] rounded-[6px]"
|
||||||
|
value={props.values.disburse_account}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.disburse_account && props.touched.disburse_account) ? props.errors.disburse_account : ''}
|
||||||
|
/>
|
||||||
|
|
||||||
<div className="mt-9 flex flex-col gap-9">
|
<div className="mt-9 flex flex-col gap-9">
|
||||||
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
||||||
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
||||||
DEBIT ACCOUNT ( Your salary account for monthly repayment )
|
DEBIT ACCOUNT ( Your salary account for monthly repayment )
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<InputCompOne
|
<InputCompOne
|
||||||
parentClass="max-w-[471px] w-full ml-5"
|
parentClass="max-w-[471px] w-full ml-5"
|
||||||
label="Bank Name"
|
label="Bank Name"
|
||||||
name="bankName"
|
name="bank_name"
|
||||||
parentInputClass="w-full"
|
parentInputClass="w-full"
|
||||||
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
input
|
input
|
||||||
inputClass="w-full h-[36px] bg-[#EFEFEF] px-[2px] rounded-[6px]"
|
inputClass="w-full h-[36px] bg-[#EFEFEF] rounded-[6px]"
|
||||||
/>
|
value={props.values.bank_name}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.bank_name && props.touched.bank_name) ? props.errors.bank_name : ''}
|
||||||
|
/>
|
||||||
|
|
||||||
<div className="flex items-center gap-[59px]">
|
<div className="flex items-center gap-[59px]">
|
||||||
<InputCompOne
|
<InputCompOne
|
||||||
parentClass="max-w-[471px] w-full ml-5"
|
parentClass="max-w-[471px] w-full ml-5"
|
||||||
label="Account Number"
|
label="Account Number"
|
||||||
name="accountNumber"
|
name="account_number"
|
||||||
parentInputClass="w-full"
|
parentInputClass="w-full"
|
||||||
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
input
|
input
|
||||||
inputClass="w-full h-[36px] bg-[#EFEFEF] px-[2px] rounded-[6px]"
|
inputClass="w-full h-[36px] bg-[#EFEFEF] rounded-[6px]"
|
||||||
/>
|
value={props.values.account_number}
|
||||||
<InputCompOne
|
onChange={props.handleChange}
|
||||||
parentClass="max-w-[471px] w-full ml-5"
|
error={(props.errors.account_number && props.touched.account_number) ? props.errors.account_number : ''}
|
||||||
label="Account Name"
|
/>
|
||||||
name="accountName"
|
<InputCompOne
|
||||||
parentInputClass="w-full"
|
parentClass="max-w-[471px] w-full ml-5"
|
||||||
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
label="Account Name"
|
||||||
input
|
name="account_name"
|
||||||
inputClass="w-full h-[36px] bg-[#EFEFEF] px-[2px] rounded-[6px]"
|
parentInputClass="w-full"
|
||||||
/>
|
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
</div>
|
input
|
||||||
|
inputClass="w-full h-[36px] bg-[#EFEFEF] rounded-[6px]"
|
||||||
|
value={props.values.account_name}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.account_name && props.touched.account_name) ? props.errors.account_name : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="max-w-[578px] flex items-center">
|
<div className="max-w-[578px] flex items-center">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
// checked={true}
|
// checked={true}
|
||||||
defaultChecked
|
|
||||||
// onChange={onChange}
|
name='checked'
|
||||||
className="form-checkbox h-[25px] w-[25px] rounded-sm text-[#5c2684] "
|
onChange={props.handleChange}
|
||||||
style={{ backgroundColor: "#5C2684" }}
|
className="form-checkbox h-[25px] w-[25px] rounded-sm text-[#5c2684] "
|
||||||
/>
|
style={{ backgroundColor: "#5C2684" }}
|
||||||
<label className="ml-2 text-gray-700">
|
/>
|
||||||
I have read, understood and accept the{" "}
|
<label className="ml-2 text-gray-700">
|
||||||
<span className="text-[#4545CB]">applicant's attestation</span> and
|
I have read, understood and accept the{" "}
|
||||||
all the <span className="text-[#4545CB]">terms and conditions</span>{" "}
|
<span className="text-[#4545CB]">applicant's attestation</span> and
|
||||||
for FCMB premium salary loan.
|
all the <span className="text-[#4545CB]">terms and conditions</span>{" "}
|
||||||
</label>
|
for FCMB premium salary loan.
|
||||||
</div>
|
</label>
|
||||||
<Button
|
{props.errors.checked && props.touched.checked && <span className='text-[10px] text-red-500'>{props.errors.checked}</span>}
|
||||||
className="my-8 max-w-[33.875rem] btn-R bg-[#5A2C82] w-full h-11"
|
</div>
|
||||||
text="Apply"
|
<Button
|
||||||
type="button"
|
className="my-8 max-w-[33.875rem] btn-R bg-[#5A2C82] w-full h-11"
|
||||||
onClick={()=>navigate(RouteHandler.letsGetStarted, {replace:true})}
|
text="Apply"
|
||||||
/>
|
type="submit"
|
||||||
</div>
|
/>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { InputCompOne } from "..";
|
|
||||||
|
|
||||||
const EmploymentDetails: React.FC = () => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
|
||||||
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
|
||||||
EMPLOYMENT DETAILS
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="flex flex-col gap-4">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[17.9375rem] w-full"
|
|
||||||
label="Job Title"
|
|
||||||
name="jobTitle"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<div className="flex items-center gap-[3.6875rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[23.1875rem] w-full"
|
|
||||||
label="Employer’s Name"
|
|
||||||
name="employerName"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[23.1875rem] w-full"
|
|
||||||
label="Employer’s Official Email"
|
|
||||||
name="employerOfficialEmail"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center gap-[9rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[17.9375rem] w-full"
|
|
||||||
label="Resumption Date"
|
|
||||||
name="resumptionDate"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[17.9375rem] w-full"
|
|
||||||
label="Employee ID."
|
|
||||||
name="employeeID"
|
|
||||||
labelSpan="Upload your work ID"
|
|
||||||
labelSpanClass="text-[11px] text-[#7a7373]"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center gap-[3.6875rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[23.1875rem] w-full"
|
|
||||||
label="Salary ( Gross annual income )"
|
|
||||||
name="salaryGross"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[23.1875rem] w-full"
|
|
||||||
label="Salary ( Net monthly Income )"
|
|
||||||
name="salaryNet"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="Salary Payment Date"
|
|
||||||
name="salary-payment-date"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default EmploymentDetails;
|
|
||||||
@@ -1,35 +1,9 @@
|
|||||||
import React from "react";
|
|
||||||
import BasicInfo from "./BasicInfo";
|
import BasicInfo from "./BasicInfo";
|
||||||
import YourAreAlmostThere from "./YourAreAlmostThere";
|
import YourAreAlmostThere from "./YourAreAlmostThere";
|
||||||
import LoanAmountComp from "./LoanAmountComp";
|
import LoanAmountComp from "./LoanAmountComp";
|
||||||
import ApplicantsAttestation from "./ApplicantsAttestation";
|
import ApplicantsAttestation from "./ApplicantsAttestation";
|
||||||
|
|
||||||
const GetStarted = ({handleNextStep, step}:{handleNextStep:any, step:string|number|any}) => {
|
const GetStarted = ({handleNextStep, step}:{handleNextStep:any, step:string|number|any}) => {
|
||||||
// const [step, setStep] = React.useState(1);
|
|
||||||
|
|
||||||
// const handleNextStep = () => {
|
|
||||||
// if (step < 5) {
|
|
||||||
// setStep(step + 1);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
// const handlePreviousStep: React.MouseEvent<HTMLButtonElement> = () => {
|
|
||||||
// setStep(step - 1);
|
|
||||||
// };
|
|
||||||
|
|
||||||
const [inputValues, setInputValues] = React.useState({
|
|
||||||
title: "",
|
|
||||||
marital: "",
|
|
||||||
agentId: "",
|
|
||||||
bvn: "",
|
|
||||||
firstName: "",
|
|
||||||
phone: "",
|
|
||||||
email: "",
|
|
||||||
surname: "",
|
|
||||||
dob: "",
|
|
||||||
secondName: "",
|
|
||||||
spouseBVN: "",
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full flex items-center justify-center">
|
<div className="w-full flex items-center justify-center">
|
||||||
@@ -38,8 +12,6 @@ const GetStarted = ({handleNextStep, step}:{handleNextStep:any, step:string|numb
|
|||||||
<main>
|
<main>
|
||||||
{step === 2 && (
|
{step === 2 && (
|
||||||
<BasicInfo
|
<BasicInfo
|
||||||
inputValues={inputValues}
|
|
||||||
setInputValues={setInputValues}
|
|
||||||
handleNextStep={handleNextStep}
|
handleNextStep={handleNextStep}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -1,133 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import InputCompOne from "../shared/InputCompOne";
|
|
||||||
|
|
||||||
interface Option {
|
|
||||||
value: string;
|
|
||||||
label: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface InputSectionProps {
|
|
||||||
inputValues: {
|
|
||||||
title: string;
|
|
||||||
marital: string;
|
|
||||||
agentId: string;
|
|
||||||
bvn: string;
|
|
||||||
};
|
|
||||||
handleChange: (e: React.FormEvent<HTMLInputElement>) => void;
|
|
||||||
handleInput: (e: React.FormEvent<HTMLInputElement>) => void;
|
|
||||||
inputRef: React.RefObject<HTMLInputElement>;
|
|
||||||
}
|
|
||||||
|
|
||||||
const InputSection: React.FC<InputSectionProps> = ({
|
|
||||||
inputValues,
|
|
||||||
handleChange,
|
|
||||||
handleInput,
|
|
||||||
inputRef,
|
|
||||||
}) => {
|
|
||||||
const basicInfoInputFields = [
|
|
||||||
{
|
|
||||||
label: "Title",
|
|
||||||
name: "title",
|
|
||||||
parentInputClass: "max-w-[224px] w-full",
|
|
||||||
labelClass:
|
|
||||||
"font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px]",
|
|
||||||
select: true,
|
|
||||||
selectClass: "w-full h-[36px] rounded-[6px]",
|
|
||||||
selectOptions: titleOptions,
|
|
||||||
value: inputValues.title,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Marital Status",
|
|
||||||
name: "marital",
|
|
||||||
parentInputClass: "max-w-[224px] w-full",
|
|
||||||
labelClass:
|
|
||||||
"font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px]",
|
|
||||||
select: true,
|
|
||||||
selectClass: "w-full h-[36px] rounded-[6px]",
|
|
||||||
selectOptions: maritalStatusOptions,
|
|
||||||
value: inputValues.marital,
|
|
||||||
onInput: handleInput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Direct Sales Agent ID",
|
|
||||||
name: "agentId",
|
|
||||||
parentInputClass: "max-w-[224px] w-full",
|
|
||||||
labelClass:
|
|
||||||
"font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px]",
|
|
||||||
select: true,
|
|
||||||
selectClass: "w-full h-[36px] rounded-[6px]",
|
|
||||||
selectOptions: [{ value: "", label: "Select" }],
|
|
||||||
value: inputValues.agentId,
|
|
||||||
onInput: handleInput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "BVN",
|
|
||||||
name: "bvn",
|
|
||||||
parentInputClass: " w-full",
|
|
||||||
labelSpan: "( To get your BVN, dial *565*0# )",
|
|
||||||
labelSpanClass: "text-[11px] text-[#7a7373]",
|
|
||||||
placeholder: "Enter your BVN",
|
|
||||||
labelClass:
|
|
||||||
"font-bold text-[18px] leading-[21.78px] tracking-[2%] text-[#5C2684] mb-[2px] gap-[2px]",
|
|
||||||
input: true,
|
|
||||||
inputClass: "w-full h-[36px] bg-[#EFEFEF] px-[2px] rounded-[6px]",
|
|
||||||
value: inputValues.bvn,
|
|
||||||
onInput: handleInput,
|
|
||||||
maxLength: 10,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
|
||||||
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
|
||||||
BASIC INFORMATION
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="mt-8 grid grid-cols-2">
|
|
||||||
<div className="flex flex-col gap-4 max-w-[15.6875rem]">
|
|
||||||
{basicInfoInputFields.map((field, index) => (
|
|
||||||
<InputCompOne
|
|
||||||
key={index}
|
|
||||||
label={field.label}
|
|
||||||
name={field.name}
|
|
||||||
parentInputClass={field.parentInputClass}
|
|
||||||
labelClass={field.labelClass}
|
|
||||||
select={field.select}
|
|
||||||
selectClass={field.selectClass}
|
|
||||||
selectOptions={field.selectOptions}
|
|
||||||
value={field.value}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={field.onInput}
|
|
||||||
placeholder={field.placeholder}
|
|
||||||
labelSpan={field.labelSpan}
|
|
||||||
labelSpanClass={field.labelSpanClass}
|
|
||||||
input={field.input}
|
|
||||||
inputClass={field.inputClass}
|
|
||||||
maxLength={field.maxLength}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default InputSection;
|
|
||||||
|
|
||||||
const maritalStatusOptions: Option[] = [
|
|
||||||
{ value: "", label: "Select" },
|
|
||||||
{ value: "single", label: "Single" },
|
|
||||||
{ value: "married", label: "Married" },
|
|
||||||
{ value: "divorced", label: "Divorced" },
|
|
||||||
{ value: "widowed", label: "Widowed" },
|
|
||||||
];
|
|
||||||
|
|
||||||
const titleOptions: Option[] = [
|
|
||||||
{ value: "", label: "Select" },
|
|
||||||
{ value: "ms", label: "Ms" },
|
|
||||||
{ value: "mr", label: "Mr" },
|
|
||||||
{ value: "miss", label: "Miss" },
|
|
||||||
{ value: "mrs", label: "Mrs" },
|
|
||||||
];
|
|
||||||
@@ -1,20 +1,56 @@
|
|||||||
import React from "react";
|
|
||||||
import { Button, InputCompOne } from "..";
|
import { Button, InputCompOne } from "..";
|
||||||
|
|
||||||
interface SliderProps {
|
import {Formik, Form} from 'formik'
|
||||||
handleSliderChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
import * as Yup from "yup";
|
||||||
value: number;
|
|
||||||
}
|
const initialValues = {
|
||||||
|
monthly_salary: "",
|
||||||
|
loan_amount: "",
|
||||||
|
duration: 6
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
duration: Yup.number()
|
||||||
|
.required("Required"),
|
||||||
|
monthly_salary: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.test("no-e", "Invalid", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}),
|
||||||
|
loan_amount: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.test("no-e", "Invalid", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
// interface SliderProps {
|
||||||
|
// handleSliderChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
||||||
|
// value: number;
|
||||||
|
// }
|
||||||
|
|
||||||
interface LoanAmountProps {
|
interface LoanAmountProps {
|
||||||
handleNextStep: any;
|
handleNextStep: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
const LoanAmountComp: React.FC<LoanAmountProps> = ({ handleNextStep }) => {
|
const LoanAmountComp: React.FC<LoanAmountProps> = ({ handleNextStep }) => {
|
||||||
const [value, setValue] = React.useState(6);
|
// const [value, setValue] = React.useState(6);
|
||||||
|
|
||||||
const handleSliderChange = (e: any) => {
|
// const handleSliderChange = (e: any) => {
|
||||||
setValue(e.target.value);
|
// setValue(e.target.value);
|
||||||
|
// };
|
||||||
|
|
||||||
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
handleNextStep()
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -35,95 +71,132 @@ const LoanAmountComp: React.FC<LoanAmountProps> = ({ handleNextStep }) => {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-[45px] justify-center ml-[40px] mb-[40px]">
|
<Formik
|
||||||
<InputCompOne
|
initialValues={initialValues}
|
||||||
parentClass="max-w-[29.4375rem] w-full"
|
validationSchema={validationSchema}
|
||||||
label="Your Monthly Salary*"
|
onSubmit={handleSubmit}
|
||||||
name="salary"
|
>
|
||||||
parentInputClass="w-full"
|
{(props)=>(
|
||||||
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
<Form>
|
||||||
input
|
<div className="flex flex-col gap-[45px] justify-center ml-[40px] mb-[40px]">
|
||||||
inputClass="w-full h-[51px] bg-[#EFEFEF] rounded-[6px] placeholder:text-green-600 placeholder:font-bold px-4"
|
<InputCompOne
|
||||||
placeholder="150,000"
|
parentClass="max-w-[29.4375rem] w-full"
|
||||||
/>
|
label="Your Monthly Salary*"
|
||||||
|
name="monthly_salary"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[51px] bg-[#EFEFEF] rounded-[6px] placeholder:text-green-600 placeholder:font-bold px-4"
|
||||||
|
placeholder="150,000"
|
||||||
|
value={props.values.monthly_salary}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.monthly_salary && props.touched.monthly_salary) ? props.errors.monthly_salary : ''}
|
||||||
|
/>
|
||||||
|
|
||||||
<div className="w-full border-[.1875rem] rounded-xl border-black min-h-[884px] py-4 px-8 max-w-[784px]">
|
<div className="w-full border-[.1875rem] rounded-xl border-black min-h-[884px] py-4 px-8 max-w-[784px]">
|
||||||
<p className="leading-[22px] tracking-[3%] text-[#5C2684] w-[729px] mb-[2.625rem]">
|
<p className="leading-[22px] tracking-[3%] text-[#5C2684] w-[729px] mb-[2.625rem]">
|
||||||
The maximum amount you can apply for on this offer is based on the
|
The maximum amount you can apply for on this offer is based on the
|
||||||
information you shared with us in your loan application. We have
|
information you shared with us in your loan application. We have
|
||||||
made this offer to suit your monthly remuneration and to enable you
|
made this offer to suit your monthly remuneration and to enable you
|
||||||
pay your loan on-time
|
pay your loan on-time
|
||||||
</p>
|
</p>
|
||||||
<InputCompOne
|
<InputCompOne
|
||||||
parentClass="max-w-[45.8125rem] w-full mb-3"
|
parentClass="max-w-[45.8125rem] w-full mb-3"
|
||||||
label="How much do you want to apply for?"
|
label="How much do you want to apply for?"
|
||||||
name="loan"
|
name="loan_amount"
|
||||||
parentInputClass="w-full"
|
parentInputClass="w-full"
|
||||||
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
labelClass="font-bold text-[18px] leading-[21.7808px] tracking-[2%] text-[#5C2684] mb-[2px]"
|
||||||
input
|
input
|
||||||
inputClass="w-full h-[51px] bg-[#EFEFEF] rounded-[6px] placeholder:text-green-600 placeholder:font-bold px-9"
|
inputClass="w-full h-[51px] bg-[#EFEFEF] rounded-[6px] placeholder:text-green-600 placeholder:font-bold px-9"
|
||||||
placeholder="350,000"
|
placeholder="350,000"
|
||||||
/>
|
value={props.values.loan_amount}
|
||||||
<div className="flex items-center justify-between w-full">
|
onChange={props.handleChange}
|
||||||
<div className=" h-[68px] flex flex-col py-1 px-[13px] shadow-md text-[#5C2684]">
|
error={(props.errors.loan_amount && props.touched.loan_amount) ? props.errors.loan_amount : ''}
|
||||||
<span>Minimum Offer:</span>
|
/>
|
||||||
<p>
|
<div className="flex items-center justify-between w-full">
|
||||||
<b>N</b>100,000
|
<div className=" h-[68px] flex flex-col py-1 px-[13px] shadow-md text-[#5C2684]">
|
||||||
</p>
|
<span>Minimum Offer:</span>
|
||||||
</div>
|
<p>
|
||||||
|
<b>N</b>100,000
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="h-[68px] flex flex-col py-1 px-[13px] shadow-md text-[#5C2684]">
|
<div className="h-[68px] flex flex-col py-1 px-[13px] shadow-md text-[#5C2684]">
|
||||||
<span>Maximum Offer:</span>
|
<span>Maximum Offer:</span>
|
||||||
<p>
|
<p>
|
||||||
<b>N</b>500,000
|
<b>N</b>500,000
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Slider handleSliderChange={handleSliderChange} value={value} />
|
<>
|
||||||
|
<div className="flex flex-col items-start mt-11 mb-16">
|
||||||
|
<p className="text-lg font-semibold">For how many months? <span className='text-[10px] text-red-500'>{(props.errors.duration && props.touched.duration) ? props.errors.duration : ''}</span></p>
|
||||||
|
<div className="w-full">
|
||||||
|
<input
|
||||||
|
type="range"
|
||||||
|
min="6"
|
||||||
|
max="24"
|
||||||
|
value={props.values.duration}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
className="slider w-full h-2 bg-gray-300 rounded-lg appearance-none cursor-pointer"
|
||||||
|
style={{
|
||||||
|
background: `linear-gradient(90deg, #6B21A8 ${
|
||||||
|
((props.values.duration - 6) / 18) * 100
|
||||||
|
}%, #D1D5DB ${((props.values.duration - 6) / 18) * 100}%)`,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="mt-4 text-lg font-semibold text-gray-700 w-full flex items-center text-center justify-center">
|
||||||
|
{props.values.duration} months
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
|
||||||
<div className="w-full flex items-center justify-center flex-col">
|
<div className="w-full flex items-center justify-center flex-col">
|
||||||
<div className="w-[279px] h-[130px] mb-[76px] flex items-center justify-center flex-col">
|
<div className="w-[279px] h-[130px] mb-[76px] flex items-center justify-center flex-col">
|
||||||
<p className="text-[#FBB700]">Your Monthly Repayment</p>
|
<p className="text-[#FBB700]">Your Monthly Repayment</p>
|
||||||
<p>N</p>
|
<p>N</p>
|
||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
className="max-w-[462px] w-full bg-[#5C2684] rounded h-[2.75rem]"
|
className="max-w-[462px] w-full bg-[#5C2684] rounded h-[2.75rem]"
|
||||||
text="Submit"
|
text="Submit"
|
||||||
type="button"
|
type='submit'
|
||||||
onClick={handleNextStep}
|
/>
|
||||||
/>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default LoanAmountComp;
|
export default LoanAmountComp;
|
||||||
|
|
||||||
const Slider: React.FC<SliderProps> = ({ handleSliderChange, value }) => {
|
// const Slider: React.FC<SliderProps> = ({ handleSliderChange, value }) => {
|
||||||
return (
|
// return (
|
||||||
<div className="flex flex-col items-start mt-11 mb-16">
|
// <div className="flex flex-col items-start mt-11 mb-16">
|
||||||
<p className="text-lg font-semibold">For how many months?</p>
|
// <p className="text-lg font-semibold">For how many months?</p>
|
||||||
<div className="w-full">
|
// <div className="w-full">
|
||||||
<input
|
// <input
|
||||||
type="range"
|
// type="range"
|
||||||
min="6"
|
// min="6"
|
||||||
max="24"
|
// max="24"
|
||||||
value={value}
|
// value={value}
|
||||||
onChange={handleSliderChange}
|
// onChange={handleSliderChange}
|
||||||
className="slider w-full h-2 bg-gray-300 rounded-lg appearance-none cursor-pointer"
|
// className="slider w-full h-2 bg-gray-300 rounded-lg appearance-none cursor-pointer"
|
||||||
style={{
|
// style={{
|
||||||
background: `linear-gradient(90deg, #6B21A8 ${
|
// background: `linear-gradient(90deg, #6B21A8 ${
|
||||||
((value - 6) / 18) * 100
|
// ((value - 6) / 18) * 100
|
||||||
}%, #D1D5DB ${((value - 6) / 18) * 100}%)`,
|
// }%, #D1D5DB ${((value - 6) / 18) * 100}%)`,
|
||||||
}}
|
// }}
|
||||||
/>
|
// />
|
||||||
</div>
|
// </div>
|
||||||
<div className="mt-4 text-lg font-semibold text-gray-700 w-full flex items-center text-center justify-center">
|
// <div className="mt-4 text-lg font-semibold text-gray-700 w-full flex items-center text-center justify-center">
|
||||||
{value} months
|
// {value} months
|
||||||
</div>
|
// </div>
|
||||||
</div>
|
// </div>
|
||||||
);
|
// );
|
||||||
};
|
// };
|
||||||
|
|||||||
@@ -1,111 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import InputCompOne from "../shared/InputCompOne";
|
|
||||||
|
|
||||||
interface OTPSectionProps {
|
|
||||||
inputValues: {
|
|
||||||
firstName: string;
|
|
||||||
phone: string;
|
|
||||||
email: string;
|
|
||||||
surname: string;
|
|
||||||
dob: string;
|
|
||||||
secondName: string;
|
|
||||||
};
|
|
||||||
handleChange: (e: React.FormEvent<HTMLInputElement>) => void;
|
|
||||||
handleInput: (e: React.FormEvent<HTMLInputElement>) => void;
|
|
||||||
inputRef: React.RefObject<HTMLInputElement>;
|
|
||||||
}
|
|
||||||
|
|
||||||
const OTPSection: React.FC<OTPSectionProps> = ({
|
|
||||||
inputValues,
|
|
||||||
handleChange,
|
|
||||||
handleInput,
|
|
||||||
inputRef,
|
|
||||||
}) => {
|
|
||||||
return (
|
|
||||||
<div className="mt-5">
|
|
||||||
<div className="grid grid-cols-2 gap-4">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="First Name"
|
|
||||||
name="firstName"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
value={inputValues.firstName}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={handleInput}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="Phone Number"
|
|
||||||
name="phone"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
value={inputValues.phone}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={handleInput}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="Email Address"
|
|
||||||
name="email"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
value={inputValues.email}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={handleInput}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="Surname"
|
|
||||||
name="surname"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem] px-3"
|
|
||||||
value={inputValues.surname}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={handleInput}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="Date of Birth"
|
|
||||||
name="dob"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem] px-3"
|
|
||||||
value={inputValues.dob}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={handleInput}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="Second Name"
|
|
||||||
name="secondName"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem] px-3"
|
|
||||||
value={inputValues.secondName}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={handleInput}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default OTPSection;
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { InputCompOne } from "..";
|
|
||||||
|
|
||||||
const ReferenceDetails: React.FC = () => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
|
||||||
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
|
||||||
REFERENCE DETAILS ( Must be 18 years and above )
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="">
|
|
||||||
<div className="flex flex-col gap-[3.4375rem]">
|
|
||||||
<div className="flex flex-col gap-4">
|
|
||||||
<div className="flex items-center gap-[6.5625rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Name"
|
|
||||||
name="referenceName"
|
|
||||||
labelSpan="1st reference"
|
|
||||||
labelSpanClass="text-[12px] text-[#5C2684] ml-1"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Relationship with He/She"
|
|
||||||
name="referenceRelationship"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center gap-[6.5625rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Phone Number"
|
|
||||||
name="referencePhoneNumber"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Email Address"
|
|
||||||
name="referenceEmail"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="BVN"
|
|
||||||
name="ReferenceBvn"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="flex flex-col gap-4">
|
|
||||||
<div className="flex items-center gap-[6.5625rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Name"
|
|
||||||
name="referenceName2"
|
|
||||||
labelSpan="2nd reference"
|
|
||||||
labelSpanClass="text-[12px] text-[#5C2684] ml-[4px]"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Relationship with He/She"
|
|
||||||
name="referenceRelationship2"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center gap-[6.5625rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Phone Number"
|
|
||||||
name="referencePhoneNumber2"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="Email Address"
|
|
||||||
name="referenceEmail2"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem] w-full"
|
|
||||||
label="BVN"
|
|
||||||
name="ReferenceBvn2"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default ReferenceDetails;
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { InputCompOne } from "..";
|
|
||||||
|
|
||||||
interface SpouseDetailsProps {
|
|
||||||
inputValues: {
|
|
||||||
spouseBVN: string;
|
|
||||||
};
|
|
||||||
handleChange: (e: React.FormEvent<HTMLInputElement>) => void;
|
|
||||||
handleInput: (e: React.FormEvent<HTMLInputElement>) => void;
|
|
||||||
inputRef: React.RefObject<HTMLInputElement>;
|
|
||||||
}
|
|
||||||
|
|
||||||
const SpouseDetails: React.FC<SpouseDetailsProps> = ({
|
|
||||||
inputValues,
|
|
||||||
handleChange,
|
|
||||||
handleInput,
|
|
||||||
inputRef,
|
|
||||||
}) => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<div className="w-full rounded py-3 bg-[#5C2684] px-5 mt-5">
|
|
||||||
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
|
||||||
SPOUSE DETAILS ( If not applicable, please move to the next stage )
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="mt-8 grid grid-cols-2">
|
|
||||||
<div className="flex flex-col gap-4 max-w-[15.6875rem]">
|
|
||||||
<InputCompOne
|
|
||||||
parentClass="max-w-[20.3125rem]"
|
|
||||||
label="BVN"
|
|
||||||
name="spouseBVN"
|
|
||||||
parentInputClass="w-full"
|
|
||||||
labelSpan="( To get your BVN, dial *565*0# )"
|
|
||||||
labelSpanClass="text-[11px] text-[#7a7373]"
|
|
||||||
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
|
||||||
input
|
|
||||||
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
|
||||||
value={inputValues.spouseBVN}
|
|
||||||
onChange={handleChange}
|
|
||||||
onInput={handleInput}
|
|
||||||
ref={inputRef}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default SpouseDetails;
|
|
||||||
@@ -1,29 +1,400 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
// import { useNavigate } from "react-router-dom";
|
import { Button, InputCompOne } from "..";
|
||||||
import EmploymentDetails from "./EmploymentDetails";
|
|
||||||
import ReferenceDetails from "./ReferenceDetails";
|
import {Formik, Form} from 'formik'
|
||||||
import { Button } from "..";
|
import * as Yup from "yup";
|
||||||
|
|
||||||
|
const initialValues = {
|
||||||
|
job_title: "",
|
||||||
|
employer_name: "",
|
||||||
|
employer_email:"",
|
||||||
|
date_of_resumption: "",
|
||||||
|
employee_id: "",
|
||||||
|
annual_income: "",
|
||||||
|
monthly_salary: "",
|
||||||
|
salary_payment_date: "",
|
||||||
|
ref_name: "",
|
||||||
|
ref_email: "",
|
||||||
|
ref_number: "",
|
||||||
|
ref_relationship: "",
|
||||||
|
ref_bvn: "",
|
||||||
|
ref_two_name: "",
|
||||||
|
ref_two_email: "",
|
||||||
|
ref_two_number: "",
|
||||||
|
ref_two_relationship: "",
|
||||||
|
ref_two_bvn: "",
|
||||||
|
};
|
||||||
|
|
||||||
|
// To get the validation schema
|
||||||
|
const validationSchema = Yup.object().shape({
|
||||||
|
job_title: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
employer_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
date_of_resumption: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
employer_email: Yup.string()
|
||||||
|
.email("Invalid")
|
||||||
|
.required("Required"),
|
||||||
|
annual_income: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.test("no-e", "Invalid", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}),
|
||||||
|
monthly_salary: Yup.string()
|
||||||
|
.required("Required")
|
||||||
|
.test("no-e", "Invalid", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}),
|
||||||
|
salary_payment_date: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
employee_id: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_email: Yup.string()
|
||||||
|
.email("Invalid")
|
||||||
|
.required("Required"),
|
||||||
|
ref_number: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_relationship: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_bvn: Yup.string()
|
||||||
|
.required("BVN is required")
|
||||||
|
.test("no-e", "Invalid number", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.min(11, "must be 11 digits")
|
||||||
|
.max(11, "must be 11 digits"),
|
||||||
|
ref_two_name: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_email: Yup.string()
|
||||||
|
.email("Invalid")
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_number: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_relationship: Yup.string()
|
||||||
|
.required("Required"),
|
||||||
|
ref_two_bvn: Yup.string()
|
||||||
|
.required("BVN is required")
|
||||||
|
.test("no-e", "Invalid number", (value:any) => {
|
||||||
|
if (value && /^[0-9]*$/.test(value) == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.min(11, "must be 11 digits")
|
||||||
|
.max(11, "must be 11 digits"),
|
||||||
|
});
|
||||||
|
|
||||||
interface YourAreAlmostThereProps {
|
interface YourAreAlmostThereProps {
|
||||||
handleNextStep: any;
|
handleNextStep: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
const YourAreAlmostThere: React.FC<YourAreAlmostThereProps> = ({ handleNextStep }) => {
|
const YourAreAlmostThere: React.FC<YourAreAlmostThereProps> = ({ handleNextStep }) => {
|
||||||
|
|
||||||
|
//FUNCTION TO HANDLE SUBMIT
|
||||||
|
const handleSubmit = (values:any) => {
|
||||||
|
console.log(values)
|
||||||
|
handleNextStep()
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<h1 className="font-semibold text-[2.375rem] text-[#5C2684] my-[.5rem]">
|
<h1 className="font-semibold text-[2.375rem] text-[#5C2684] my-[.5rem]">
|
||||||
You’re almost there
|
You’re almost there
|
||||||
</h1>
|
</h1>
|
||||||
<form action="" className="flex flex-col gap-6">
|
<Formik
|
||||||
<EmploymentDetails />
|
initialValues={initialValues}
|
||||||
<ReferenceDetails />
|
validationSchema={validationSchema}
|
||||||
<Button
|
onSubmit={handleSubmit}
|
||||||
className="my-8 max-w-[20.3125rem] btn-R bg-[#5A2C82]"
|
>
|
||||||
text="Continue"
|
{(props)=>(
|
||||||
type="button"
|
<Form>
|
||||||
onClick={handleNextStep}
|
<div className="flex flex-col gap-6">
|
||||||
/>
|
<>
|
||||||
</form>
|
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
||||||
|
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
||||||
|
EMPLOYMENT DETAILS
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[17.9375rem] w-full"
|
||||||
|
label="Job Title"
|
||||||
|
name="job_title"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.job_title}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.job_title && props.touched.job_title) ? props.errors.job_title : ''}
|
||||||
|
/>
|
||||||
|
<div className="flex items-center gap-[3.6875rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[23.1875rem] w-full"
|
||||||
|
label="Employer’s Name"
|
||||||
|
name="employer_name"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.employer_name}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.employer_name && props.touched.employer_name) ? props.errors.employer_name : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[23.1875rem] w-full"
|
||||||
|
label="Employer’s Official Email"
|
||||||
|
name="employer_email"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.employer_email}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.employer_email && props.touched.employer_email) ? props.errors.employer_email : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-[9rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[17.9375rem] w-full"
|
||||||
|
label="Resumption Date"
|
||||||
|
name="date_of_resumption"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputType='date'
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.date_of_resumption}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.date_of_resumption && props.touched.date_of_resumption) ? props.errors.date_of_resumption : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[17.9375rem] w-full"
|
||||||
|
label="Employee ID."
|
||||||
|
name="employee_id"
|
||||||
|
labelSpan="Upload your work ID"
|
||||||
|
labelSpanClass="text-[11px] text-[#7a7373]"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.employee_id}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.employee_id && props.touched.employee_id) ? props.errors.employee_id : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-[3.6875rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[23.1875rem] w-full"
|
||||||
|
label="Salary ( Gross annual income )"
|
||||||
|
name="annual_income"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.annual_income}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.annual_income && props.touched.annual_income) ? props.errors.annual_income : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[23.1875rem] w-full"
|
||||||
|
label="Salary ( Net monthly Income )"
|
||||||
|
name="monthly_salary"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.monthly_salary}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.monthly_salary && props.touched.monthly_salary) ? props.errors.monthly_salary : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem]"
|
||||||
|
label="Salary Payment Date"
|
||||||
|
name="salary_payment_date"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputType='date'
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.salary_payment_date}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.salary_payment_date && props.touched.salary_payment_date) ? props.errors.salary_payment_date : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
|
||||||
|
<>
|
||||||
|
<div className="w-full rounded py-3 bg-[#5C2684] px-5">
|
||||||
|
<p className="text-base text-[#FBB700] tracking-[3%] font-extrabold w-fit">
|
||||||
|
REFERENCE DETAILS ( Must be 18 years and above )
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="">
|
||||||
|
<div className="flex flex-col gap-[3.4375rem]">
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
<div className="flex items-center gap-[6.5625rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Name"
|
||||||
|
name="ref_name"
|
||||||
|
labelSpan="1st reference"
|
||||||
|
labelSpanClass="text-[12px] text-[#5C2684] ml-1"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_name}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_name && props.touched.ref_name) ? props.errors.ref_name : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Relationship with He/She"
|
||||||
|
name="ref_relationship"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] px-[.125rem] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_relationship}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_relationship && props.touched.ref_relationship) ? props.errors.ref_relationship : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-[6.5625rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Phone Number"
|
||||||
|
name="ref_number"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_number}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_number && props.touched.ref_number) ? props.errors.ref_number : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Email Address"
|
||||||
|
name="ref_email"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_email}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_email && props.touched.ref_email) ? props.errors.ref_email : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="BVN"
|
||||||
|
name="ref_bvn"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_bvn}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_bvn && props.touched.ref_bvn) ? props.errors.ref_bvn : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
<div className="flex items-center gap-[6.5625rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Name"
|
||||||
|
name="ref_two_name"
|
||||||
|
labelSpan="2nd reference"
|
||||||
|
labelSpanClass="text-[12px] text-[#5C2684] ml-[4px]"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_two_name}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_name && props.touched.ref_two_name) ? props.errors.ref_two_name : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Relationship with He/She"
|
||||||
|
name="ref_two_relationship"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_two_relationship}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_relationship && props.touched.ref_two_relationship) ? props.errors.ref_two_relationship : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-[6.5625rem]">
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Phone Number"
|
||||||
|
name="ref_two_number"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_two_number}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_number && props.touched.ref_two_number) ? props.errors.ref_two_number : ''}
|
||||||
|
/>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="Email Address"
|
||||||
|
name="ref_two_email"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_two_email}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_email && props.touched.ref_two_email) ? props.errors.ref_two_email : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<InputCompOne
|
||||||
|
parentClass="max-w-[20.3125rem] w-full"
|
||||||
|
label="BVN"
|
||||||
|
name="ref_two_bvn"
|
||||||
|
parentInputClass="w-full"
|
||||||
|
labelClass="font-bold text-[1.125rem] leading-[1.3613rem] tracking-[2%] text-[#5C2684] mb-[.125rem]"
|
||||||
|
input
|
||||||
|
inputClass="w-full h-[2.25rem] bg-[#EFEFEF] rounded-[.375rem]"
|
||||||
|
value={props.values.ref_two_bvn}
|
||||||
|
onChange={props.handleChange}
|
||||||
|
error={(props.errors.ref_two_bvn && props.touched.ref_two_bvn) ? props.errors.ref_two_bvn : ''}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
className="my-8 max-w-[20.3125rem] btn-R bg-[#5A2C82]"
|
||||||
|
text="Continue"
|
||||||
|
type="submit"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,16 +8,16 @@ export interface InputCompOneProps {
|
|||||||
labelSpanClass?: string;
|
labelSpanClass?: string;
|
||||||
floatLabel?: string;
|
floatLabel?: string;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
value?: string;
|
value?: string | any;
|
||||||
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
onChange?: (e:any) => any;
|
||||||
onInput?: (e: React.FormEvent<HTMLInputElement>) => void;
|
onInput?: (e:any) => any;
|
||||||
name: string;
|
name: string;
|
||||||
tabIndex?: number;
|
tabIndex?: number;
|
||||||
ref?: React.RefObject<HTMLInputElement>;
|
ref?: React.RefObject<HTMLInputElement>;
|
||||||
selectValue?: string;
|
selectValue?: string;
|
||||||
input?: boolean;
|
input?: boolean;
|
||||||
select?: boolean;
|
select?: boolean;
|
||||||
selectOptions?: { value: string; label: string }[];
|
selectOptions?: {loading:boolean, data:{ value: string; label: string }[]};
|
||||||
inputType?: string;
|
inputType?: string;
|
||||||
inputClass?: string;
|
inputClass?: string;
|
||||||
parentInputClass?: string;
|
parentInputClass?: string;
|
||||||
@@ -44,7 +44,7 @@ const InputCompOne = forwardRef<HTMLInputElement, InputCompOneProps>(
|
|||||||
selectValue,
|
selectValue,
|
||||||
input = false,
|
input = false,
|
||||||
select = false,
|
select = false,
|
||||||
selectOptions = [],
|
selectOptions = {loading:false, data:[]},
|
||||||
inputType = "text",
|
inputType = "text",
|
||||||
inputClass,
|
inputClass,
|
||||||
parentInputClass,
|
parentInputClass,
|
||||||
@@ -58,10 +58,10 @@ const InputCompOne = forwardRef<HTMLInputElement, InputCompOneProps>(
|
|||||||
return (
|
return (
|
||||||
<div className={parentClass}>
|
<div className={parentClass}>
|
||||||
{label && (
|
{label && (
|
||||||
<label htmlFor={label ? label : floatLabel} className={labelClass}>
|
<label htmlFor={label ? label : floatLabel} className={`flex gap-2 items-center flex-wrap ${labelClass}`}>
|
||||||
{label}
|
{label}
|
||||||
{labelSpan && <span className={labelSpanClass}>{labelSpan}</span>}
|
{labelSpan && <span className={labelSpanClass}>{labelSpan}</span>}
|
||||||
{error && <span className='text-[10px] text-red-500'>{error}</span>}
|
{error && label && <span className='text-[10px] text-red-500'>{error}</span>}
|
||||||
</label>
|
</label>
|
||||||
)}
|
)}
|
||||||
{input && (
|
{input && (
|
||||||
@@ -82,8 +82,11 @@ const InputCompOne = forwardRef<HTMLInputElement, InputCompOneProps>(
|
|||||||
{floatLabel &&
|
{floatLabel &&
|
||||||
<label
|
<label
|
||||||
htmlFor={label ? label : floatLabel}
|
htmlFor={label ? label : floatLabel}
|
||||||
className={`cursor-pointer text-sm text-black/70 dark:text-white absolute left-4 top-0 translate-y-0 peer-focus:top-0 peer-focus:translate-y-0 peer-placeholder-shown:top-1/2 peer-placeholder-shown:-translate-y-1/2 transition-all duration-500`}
|
className={`flex items-center gap-2 cursor-pointer text-sm text-black/70 dark:text-white absolute left-4 top-0 translate-y-0 peer-focus:top-0 peer-focus:translate-y-0 peer-placeholder-shown:top-1/2 peer-placeholder-shown:-translate-y-1/2 transition-all duration-500`}
|
||||||
>{floatLabel}</label>
|
>
|
||||||
|
{floatLabel}
|
||||||
|
{error && floatLabel && !label && <span className='text-[10px] text-red-500'>{error}</span>}
|
||||||
|
</label>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@@ -94,19 +97,33 @@ const InputCompOne = forwardRef<HTMLInputElement, InputCompOneProps>(
|
|||||||
id={label ? label : floatLabel}
|
id={label ? label : floatLabel}
|
||||||
value={selectValue}
|
value={selectValue}
|
||||||
className={`px-4 appearance-none ${floatLabel && 'peer pt-4'} ${selectClass}`}
|
className={`px-4 appearance-none ${floatLabel && 'peer pt-4'} ${selectClass}`}
|
||||||
// onChange={onChange}
|
onChange={onChange}
|
||||||
>
|
>
|
||||||
{selectOptions.map(({ value, label }) => (
|
{selectOptions.loading ?
|
||||||
|
<option value=''>Loading</option>
|
||||||
|
: selectOptions.data.length ?
|
||||||
|
selectOptions.data.map(({ value, label }) => (
|
||||||
|
<option key={value} value={value}>
|
||||||
|
{label}
|
||||||
|
</option>
|
||||||
|
))
|
||||||
|
:
|
||||||
|
<option value=''>Not Found</option>
|
||||||
|
}
|
||||||
|
{/* {selectOptions.map(({ value, label }) => (
|
||||||
<option key={value} value={value}>
|
<option key={value} value={value}>
|
||||||
{label}
|
{label}
|
||||||
</option>
|
</option>
|
||||||
))}
|
))} */}
|
||||||
</select>
|
</select>
|
||||||
{floatLabel &&
|
{floatLabel &&
|
||||||
<label
|
<label
|
||||||
htmlFor={label ? label : floatLabel}
|
htmlFor={label ? label : floatLabel}
|
||||||
className={`cursor-pointer text-sm text-black/70 dark:text-white absolute left-4 top-0 translate-y-0 peer-focus:top-0 peer-focus:translate-y-0 transition-all duration-500`}
|
className={`flex items-center gap-2 cursor-pointer text-sm text-black/70 dark:text-white absolute left-4 top-0 translate-y-0 peer-focus:top-0 peer-focus:translate-y-0 transition-all duration-500`}
|
||||||
>{floatLabel}</label>
|
>
|
||||||
|
{floatLabel}
|
||||||
|
{error && floatLabel && !label && <span className='text-[10px] text-red-500'>{error}</span>}
|
||||||
|
</label>
|
||||||
}
|
}
|
||||||
{/* select custon arrow */}
|
{/* select custon arrow */}
|
||||||
<div className='absolute right-4 top-1/2 -translate-y-1/2'>
|
<div className='absolute right-4 top-1/2 -translate-y-1/2'>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ interface GetStartedLayoutProps {
|
|||||||
const GetStartedLayout: React.FC<GetStartedLayoutProps> = ({ children }) => {
|
const GetStartedLayout: React.FC<GetStartedLayoutProps> = ({ children }) => {
|
||||||
return (
|
return (
|
||||||
<div className="containerMode mb-[5.4375rem]">
|
<div className="containerMode mb-[5.4375rem]">
|
||||||
<div className='sticky top-0 bg-white'>
|
<div className='sticky z-50 top-0 bg-white'>
|
||||||
<Header hideSidebar={true} hideMenu={true} />
|
<Header hideSidebar={true} hideMenu={true} />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col min-h-[70vh] justify-between">
|
<div className="flex flex-col min-h-[70vh] justify-between">
|
||||||
|
|||||||
Reference in New Issue
Block a user