disbursements dummy page added
This commit is contained in:
+4
-3
@@ -3,9 +3,10 @@ const RouteLinks = {
|
||||
errorPage: '*',
|
||||
homePage: '/',
|
||||
usersPage: '/users',
|
||||
approvedLoans: '/loans/approved',
|
||||
applyPage: '/loans/apply',
|
||||
selectPage: '/loans/select',
|
||||
approvedLoansPage: '/loans/approved',
|
||||
applicationsLoanPage: '/loans/apply',
|
||||
disbursementsLoanPage: '/loans/disbursements',
|
||||
selectedLoanPage: '/loans/select',
|
||||
}
|
||||
|
||||
export default RouteLinks
|
||||
+7
-5
@@ -9,8 +9,9 @@ import LoginPage from './pages/LoginPage' // LOGIN PAGE
|
||||
import HomePage from './pages/HomePage' // Home PAGE
|
||||
import UsersPage from './pages/UsersPage' // Users PAGE
|
||||
import ApprovedLoansPage from './pages/ApprovedLoansPage' // APPROVED LOANS PAGE
|
||||
import ApplyPage from './pages/ApplyPage' // APPLY LOANS PAGE
|
||||
import SelectPage from './pages/SelectPage' // SELECT LOANS PAGE
|
||||
import DisbursementsLoanPage from './pages/DisbursementsLoanPage' // DISBURSEMENTS LOANS PAGE
|
||||
import ApplicationsLoanPage from './pages/ApplicationsLoanPage' // APPLICATIONS LOANS PAGE
|
||||
import SelectedLoanPage from './pages/SelectedLoanPage' // SELECTED LOANS PAGE
|
||||
|
||||
|
||||
// const Home = lazy(() => import('./pages/Home'));
|
||||
@@ -23,9 +24,10 @@ export default function SiteRoutes() {
|
||||
<Route element={<UserExist />}>
|
||||
<Route path={RouteLinks.homePage} element={<HomePage />} /> {`*/HOME PAGE*/`}
|
||||
<Route path={RouteLinks.usersPage} element={<UsersPage />} /> {`*/USERS PAGE*/`}
|
||||
<Route path={RouteLinks.approvedLoans} element={<ApprovedLoansPage />} /> {`*/APPROVED LOANS PAGE*/`}
|
||||
<Route path={RouteLinks.applyPage} element={<ApplyPage />} /> {`*/APPLY LOANS PAGE*/`}
|
||||
<Route path={RouteLinks.selectPage} element={<SelectPage />} /> {`*/SELECT LOANS PAGE*/`}
|
||||
<Route path={RouteLinks.approvedLoansPage} element={<ApprovedLoansPage />} /> {`*/APPROVED LOANS PAGE*/`}
|
||||
<Route path={RouteLinks.disbursementsLoanPage} element={<DisbursementsLoanPage />} /> {`*/DISBURSEMENTS LOANS PAGE*/`}
|
||||
<Route path={RouteLinks.applicationsLoanPage} element={<ApplicationsLoanPage />} /> {`*/APPLICATIONS LOANS PAGE*/`}
|
||||
<Route path={RouteLinks.selectedLoanPage} element={<SelectedLoanPage />} /> {`*/SELECTED LOANS PAGE*/`}
|
||||
</Route>
|
||||
|
||||
{/* ERROR PAGE */}
|
||||
|
||||
@@ -20,15 +20,15 @@ export default function Icons({name, className}) {
|
||||
:name.toLowerCase() == 'product' ?
|
||||
<AiFillProduct className={`text-base ${className}`} />
|
||||
:name.toLowerCase() == 'trash' ?
|
||||
<IoTrash lassName={`text-base ${className}`} />
|
||||
<IoTrash className={`text-base ${className}`} />
|
||||
:name.toLowerCase() == 'eye' ?
|
||||
<FaEye lassName={`text-base ${className}`} />
|
||||
<FaEye className={`text-base ${className}`} />
|
||||
:name.toLowerCase() == 'next' ?
|
||||
<TbPlayerTrackNext lassName={`text-base ${className}`} />
|
||||
<TbPlayerTrackNext className={`text-base ${className}`} />
|
||||
:name.toLowerCase() == 'prev' ?
|
||||
<TbPlayerTrackPrev lassName={`text-base ${className}`} />
|
||||
<TbPlayerTrackPrev className={`text-base ${className}`} />
|
||||
:name.toLowerCase() == 'edit' ?
|
||||
<FaEdit lassName={`text-base ${className}`} />
|
||||
<FaEdit className={`text-base ${className}`} />
|
||||
:
|
||||
null
|
||||
}
|
||||
|
||||
+6
-12
@@ -13,7 +13,7 @@ import { applyLoan } from '../../services/siteServices'
|
||||
import getTimeFromDateString from '../../helpers/GetTimeFromDateString';
|
||||
import getDateFromDateString from '../../helpers/GetDateFromDateString';
|
||||
|
||||
export default function ApplyCom() {
|
||||
export default function ApplicationsLoanCom() {
|
||||
|
||||
const {data, isFetching, isError, error} = useQuery({
|
||||
queryKey: queryKeys.apply_loan,
|
||||
@@ -24,7 +24,7 @@ export default function ApplyCom() {
|
||||
|
||||
return (
|
||||
<div className='w-full flex flex-col gap-8'>
|
||||
<BreadcrumbCom title='Apply' paths={['Dashboard', 'Apply']} />
|
||||
<BreadcrumbCom title='Applications' paths={['Dashboard', 'Applications']} />
|
||||
|
||||
{isFetching ?
|
||||
<>
|
||||
@@ -37,7 +37,7 @@ export default function ApplyCom() {
|
||||
<p className='text-red-500'>{error.message}</p>
|
||||
</div>
|
||||
:
|
||||
<TableWrapper data={appliedUsers} itemsPerPage={8}>
|
||||
<TableWrapper data={appliedUsers} itemsPerPage={15}>
|
||||
{({ data }) => (
|
||||
<>
|
||||
<table className="py-2 w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
@@ -96,15 +96,9 @@ export default function ApplyCom() {
|
||||
</Link> */}
|
||||
{/* <i onClick={handleShowEditModal} className="fa-solid fa-pen-to-square text-base md:text-lg cursor-pointer p-2"></i> */}
|
||||
{/* <i onClick={handleDeleteModal} className="fa-solid fa-trash text-base md:text-lg cursor-pointer p-2 text-red-500"></i> */}
|
||||
<span className='text-primary text-xl'>
|
||||
<Icons name='edit' />
|
||||
</span>
|
||||
<span className='text-primary text-xl'>
|
||||
<Icons name='eye' />
|
||||
</span>
|
||||
<span className='hidden text-red-500 text-xl'>
|
||||
<Icons name='trash' />
|
||||
</span>
|
||||
<Icons name='edit' />
|
||||
<Icons name='eye' />
|
||||
<Icons name='trash' className={'hidden text-red-500'} />
|
||||
</td>
|
||||
</tr>
|
||||
))
|
||||
@@ -23,7 +23,7 @@ export default function ApprovedLoanCom() {
|
||||
|
||||
return (
|
||||
<div className='w-full flex flex-col gap-8'>
|
||||
<BreadcrumbCom title='Approved Loan' paths={['Dashboard', 'Approved Loan']} />
|
||||
<BreadcrumbCom title='Approved' paths={['Dashboard', 'Approved']} />
|
||||
|
||||
{isFetching ?
|
||||
<>
|
||||
@@ -36,7 +36,7 @@ export default function ApprovedLoanCom() {
|
||||
<p className='text-red-500'>{error.message}</p>
|
||||
</div>
|
||||
:
|
||||
<TableWrapper data={approvedUsers} itemsPerPage={8}>
|
||||
<TableWrapper data={approvedUsers} itemsPerPage={15}>
|
||||
{({ data }) => (
|
||||
<>
|
||||
<table className="py-2 w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
@@ -81,15 +81,9 @@ export default function ApprovedLoanCom() {
|
||||
</Link> */}
|
||||
{/* <i onClick={handleShowEditModal} className="fa-solid fa-pen-to-square text-base md:text-lg cursor-pointer p-2"></i> */}
|
||||
{/* <i onClick={handleDeleteModal} className="fa-solid fa-trash text-base md:text-lg cursor-pointer p-2 text-red-500"></i> */}
|
||||
<span className='text-primary text-xl'>
|
||||
<Icons name='edit' />
|
||||
</span>
|
||||
<span className='text-primary text-xl'>
|
||||
<Icons name='eye' />
|
||||
</span>
|
||||
<span className='hidden text-red-500 text-xl'>
|
||||
<Icons name='trash' />
|
||||
</span>
|
||||
<Icons name='edit' />
|
||||
<Icons name='eye' />
|
||||
<Icons name='trash' className={'hidden text-red-500'} />
|
||||
</td>
|
||||
</tr>
|
||||
))
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import { MdKeyboardDoubleArrowRight } from 'react-icons/md'
|
||||
import { TiHomeOutline } from 'react-icons/ti'
|
||||
|
||||
export default function BreadcrumbCom({title, paths}) {
|
||||
export default function BreadcrumbCom({title, span, paths}) {
|
||||
return (
|
||||
<div className='w-full py-2 flex justify-between items-center'>
|
||||
<h1 className='text-12 sm:text-lg md:text-2xl text-black dark:text-black-gray font-semibold'>{title}</h1>
|
||||
<div className='flex flex-col md:flex-row gap-1 md:items-center'>
|
||||
<h1 className='text-12 sm:text-lg md:text-2xl text-black dark:text-black-gray font-semibold'>{title}</h1>
|
||||
<span className='text-red-500 text-10 sm:text-base md:text-xl'>{span && span}</span>
|
||||
</div>
|
||||
<div className='flex gap-2 items-center text-black-gray dark:text-black-gray text-base'>
|
||||
<TiHomeOutline className='text-black dark:text-black-gray' />
|
||||
{paths.map((item, index) => (
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
import React from 'react'
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import {Link} from 'react-router-dom'
|
||||
|
||||
import BreadcrumbCom from '../breadcrumb/BreadcrumbCom'
|
||||
import TableWrapper from '../tableWrapper/TableWrapper'
|
||||
import Icons from '../Icons'
|
||||
|
||||
import Avatar from '../../assets/user_avatar.jpg'
|
||||
import queryKeys from '../../services/queryKeys'
|
||||
import { approvedLoan } from '../../services/siteServices'
|
||||
import getDateFromDateString from '../../helpers/GetDateFromDateString';
|
||||
import getTimeFromDateString from '../../helpers/GetTimeFromDateString';
|
||||
|
||||
export default function DisbursementsLoanCom() {
|
||||
|
||||
const {data, isFetching, isError, error} = useQuery({
|
||||
queryKey: queryKeys.approved_loan,
|
||||
queryFn: () => approvedLoan()
|
||||
})
|
||||
|
||||
const approvedUsers = data?.data?.result_data?.data // DISBURSED LOAN LIST
|
||||
|
||||
return (
|
||||
<div className='w-full flex flex-col gap-8'>
|
||||
<BreadcrumbCom title='Disbursements' paths={['Dashboard', 'Disbursements']} />
|
||||
|
||||
{isFetching ?
|
||||
<>
|
||||
<div className="w-full py-4">
|
||||
<p className='text-slate-800'>Loading...</p>
|
||||
</div>
|
||||
</>
|
||||
: isError ?
|
||||
<div className="w-full py-4">
|
||||
<p className='text-red-500'>{error.message}</p>
|
||||
</div>
|
||||
:
|
||||
<TableWrapper data={approvedUsers} itemsPerPage={15}>
|
||||
{({ data }) => (
|
||||
<>
|
||||
<table className="py-2 w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
<thead className="text-sm md:text-base text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400">
|
||||
<tr>
|
||||
<th scope="col" className="px-4 py-2">
|
||||
Name
|
||||
</th>
|
||||
<th scope="col" className="px-4 py-2">
|
||||
Loan
|
||||
</th>
|
||||
<th scope="col" className="px-4 py-2">
|
||||
Added
|
||||
</th>
|
||||
<th scope="col" className="px-4 py-2">
|
||||
Action
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{(data && data.length > 0) ? data?.map((item, index) => (
|
||||
<tr key={index} className="bg-white border-b dark:bg-gray-800 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600">
|
||||
<th scope="row" className="mr-4 flex items-center px-3 py-2 text-gray-900 whitespace-nowrap dark:text-white">
|
||||
<img className="w-10 h-10 rounded-full" src={Avatar} alt="Jese image" />
|
||||
<div className="px-3">
|
||||
<div className="text-base font-semibold">{item?.name || ''}</div>
|
||||
<div className="font-normal text-gray-500">{item?.bvn}</div>
|
||||
</div>
|
||||
</th>
|
||||
<td className="px-3 py-2">
|
||||
{item?.loan} - {item?.description}
|
||||
</td>
|
||||
<td className="px-3 py-2">
|
||||
<div className="flex items-center">
|
||||
{getDateFromDateString(item?.added)} {getTimeFromDateString(item?.added)}
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-3 py-2 flex gap-3 md:gap-4">
|
||||
{/* <!-- Modal toggle --> */}
|
||||
{/* <Link to={RouteLinks.manageAdminPage}>
|
||||
<i onClick={handleShowEditModal} className="fa-solid fa-eye text-base md:text-lg cursor-pointer p-2 text-sky-600"></i>
|
||||
</Link> */}
|
||||
{/* <i onClick={handleShowEditModal} className="fa-solid fa-pen-to-square text-base md:text-lg cursor-pointer p-2"></i> */}
|
||||
{/* <i onClick={handleDeleteModal} className="fa-solid fa-trash text-base md:text-lg cursor-pointer p-2 text-red-500"></i> */}
|
||||
<Icons name='edit' />
|
||||
<Icons name='eye' />
|
||||
<Icons name='trash' className={'hidden text-red-500'} />
|
||||
</td>
|
||||
</tr>
|
||||
))
|
||||
:
|
||||
<tr className="w-3 p-3">
|
||||
<td className="px-3 py-2" colSpan={4}>
|
||||
<div className="flex justify-center items-center">
|
||||
No Record Found
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</>
|
||||
)}
|
||||
</TableWrapper>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -45,7 +45,9 @@ export default function DashboardAside({shrinkAside=false}) {
|
||||
let hasSubLinks = (link.subLinks && link.subLinks.length > 0) ? true : false
|
||||
if(active && !hasSubLinks){
|
||||
return (
|
||||
<AsideLink key={index} to={link.to} shrinkAside={shrinkAside} name={link.name} icon={link.icon} />
|
||||
<div key={index}>
|
||||
<AsideLink key={index} to={link.to} shrinkAside={shrinkAside} name={link.name} icon={link.icon} />
|
||||
</div>
|
||||
)
|
||||
}else if(active && hasSubLinks){
|
||||
return (
|
||||
@@ -59,9 +61,9 @@ export default function DashboardAside({shrinkAside=false}) {
|
||||
let active = subItem.status == 1 ? true : false
|
||||
if(active){
|
||||
return (
|
||||
<>
|
||||
<div key={index}>
|
||||
<AsideLink key={index} to={subItem.to} shrinkAside={shrinkAside} name={subItem.name} icon={subItem.icon} />
|
||||
</>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
})}
|
||||
@@ -93,11 +95,12 @@ export default function DashboardAside({shrinkAside=false}) {
|
||||
const asideNavLinks = [
|
||||
{name:'Dashboard', status:1, icon: 'dashboard', to: RouteLinks.homePage},
|
||||
{name:'Salary Loan', title:'Loan', status:1, icon: 'money', subLinks: [
|
||||
{name: 'Select', status:1, icon: 'dot', to: RouteLinks.selectPage},
|
||||
{name: 'Apply', status:1, icon: 'dot', to: RouteLinks.applyPage},
|
||||
{name: 'Approved', status:1, icon: 'dot', to: RouteLinks.approvedLoans},
|
||||
{name: 'Selected Loans', status:1, icon: 'dot', to: RouteLinks.selectedLoanPage},
|
||||
{name: 'Applications', status:1, icon: 'dot', to: RouteLinks.applicationsLoanPage},
|
||||
{name: 'Approved Loans', status:1, icon: 'dot', to: RouteLinks.approvedLoansPage},
|
||||
{name: 'Disbursements', status:1, icon: 'dot', to: RouteLinks.disbursementsLoanPage},
|
||||
{name: 'Payments', status:1, icon: 'dot', to: '#'},
|
||||
{name: 'Configuration', status:1, icon: 'dot', to: '#'},
|
||||
{name: 'Configurations', status:1, icon: 'dot', to: '#'},
|
||||
],
|
||||
},
|
||||
{name:'Product 2', title:'Product 2', status:1, icon: 'product', subLinks: [
|
||||
|
||||
+6
-12
@@ -12,7 +12,7 @@ import { selectLoan } from '../../services/siteServices'
|
||||
import getDateFromDateString from '../../helpers/GetDateFromDateString';
|
||||
import getTimeFromDateString from '../../helpers/GetTimeFromDateString';
|
||||
|
||||
export default function SelectLoanCom() {
|
||||
export default function SelectedLoanCom() {
|
||||
|
||||
const {data, isFetching, isError, error} = useQuery({
|
||||
queryKey: queryKeys.select_loan,
|
||||
@@ -23,7 +23,7 @@ export default function SelectLoanCom() {
|
||||
|
||||
return (
|
||||
<div className='w-full flex flex-col gap-8'>
|
||||
<BreadcrumbCom title='Apply' paths={['Dashboard', 'Apply']} />
|
||||
<BreadcrumbCom title='Selected - ' span='Loan options selected by the users before applying' paths={['Dashboard', 'Selected']} />
|
||||
|
||||
{isFetching ?
|
||||
<>
|
||||
@@ -36,7 +36,7 @@ export default function SelectLoanCom() {
|
||||
<p className='text-red-500'>{error.message}</p>
|
||||
</div>
|
||||
:
|
||||
<TableWrapper data={selectUsers} itemsPerPage={8}>
|
||||
<TableWrapper data={selectUsers} itemsPerPage={15}>
|
||||
{({ data }) => (
|
||||
<>
|
||||
<table className="py-2 w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
@@ -81,15 +81,9 @@ export default function SelectLoanCom() {
|
||||
</Link> */}
|
||||
{/* <i onClick={handleShowEditModal} className="fa-solid fa-pen-to-square text-base md:text-lg cursor-pointer p-2"></i> */}
|
||||
{/* <i onClick={handleDeleteModal} className="fa-solid fa-trash text-base md:text-lg cursor-pointer p-2 text-red-500"></i> */}
|
||||
<span className='text-primary text-xl'>
|
||||
<Icons name='edit' />
|
||||
</span>
|
||||
<span className='text-primary text-xl'>
|
||||
<Icons name='eye' />
|
||||
</span>
|
||||
<span className='hidden text-red-500 text-xl'>
|
||||
<Icons name='trash' />
|
||||
</span>
|
||||
<Icons name='edit' />
|
||||
<Icons name='eye' />
|
||||
<Icons name='trash' className={'hidden text-red-500'} />
|
||||
</td>
|
||||
</tr>
|
||||
))
|
||||
@@ -0,0 +1,8 @@
|
||||
import React from 'react'
|
||||
import ApplicationsLoanCom from '../components/applicationsloancom/ApplicationsLoanCom'
|
||||
|
||||
export default function ApplicationsLoanPage() {
|
||||
return (
|
||||
<ApplicationsLoanCom />
|
||||
)
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
import React from 'react'
|
||||
import ApplyCom from '../components/applyloancom/ApplyCom'
|
||||
|
||||
export default function ApplyPage() {
|
||||
return (
|
||||
<ApplyCom />
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import React from 'react'
|
||||
import DisbursementsLoanCom from '../components/disbursementsloancom/DisbursementsLoanCom'
|
||||
|
||||
export default function DisbursementsLoanPage() {
|
||||
return (
|
||||
<DisbursementsLoanCom />
|
||||
)
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
import React from 'react'
|
||||
import SelectLoanCom from '../components/selectloancom/SelectLoanCom'
|
||||
|
||||
export default function SelectPage() {
|
||||
return (
|
||||
<SelectLoanCom />
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import React from 'react'
|
||||
import SelectedLoanCom from '../components/selectedloancom/SelectedLoanCom'
|
||||
|
||||
export default function SelectedLoanPage() {
|
||||
return (
|
||||
<SelectedLoanCom />
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user