From cea0ebfe82a363c8df13a99728c3dacb8db30096 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Thu, 24 Apr 2025 14:18:51 +0100 Subject: [PATCH] transactions endpoint added --- src/components/request/RequestCom.jsx | 44 ++++--- .../tableWrapper/TablePaginatedWrapper.jsx | 121 ++++++++++++++++++ src/services/queryKeys.js | 1 + src/services/siteServices.js | 8 +- 4 files changed, 153 insertions(+), 21 deletions(-) create mode 100644 src/components/tableWrapper/TablePaginatedWrapper.jsx diff --git a/src/components/request/RequestCom.jsx b/src/components/request/RequestCom.jsx index 8cca011..79c22ab 100644 --- a/src/components/request/RequestCom.jsx +++ b/src/components/request/RequestCom.jsx @@ -1,39 +1,43 @@ -import React from 'react' -import { useQuery } from "@tanstack/react-query"; +import React, { useState } from 'react' +import { keepPreviousData, useQuery } from "@tanstack/react-query"; import {Link} from 'react-router-dom' import BreadcrumbCom from '../breadcrumb/BreadcrumbCom' -import TableWrapper from '../tableWrapper/TableWrapper' +import TablePaginatedWrapper from '../tableWrapper/TablePaginatedWrapper' import Icons from '../Icons' import Avatar from '../../assets/user_avatar.jpg' import queryKeys from '../../services/queryKeys' -import { selectLoan } from '../../services/siteServices' +import { getTransactions } from '../../services/siteServices' import getDateFromDateString from '../../helpers/GetDateFromDateString'; import getTimeFromDateString from '../../helpers/GetTimeFromDateString'; export default function RequestCom() { - const {data, isFetching, isError, error} = useQuery({ - queryKey: queryKeys.select_loan, - queryFn: () => selectLoan() + const [page, setPage] = useState(1) + + const {data, isFetching, isError, error, isPlaceholderData, isPending} = useQuery({ + queryKey: [...queryKeys.transactions, page], + queryFn: () => getTransactions({page}), + placeholderData: keepPreviousData, }) - const selectUsers = data?.data?.result_data?.data // APPLY LOAN LIST + const selectUsers = data?.data?.transactions // TRANSACTIONS LIST + const pagination = data?.data?.pagination return (
- {isFetching ? + {isPending ? <>

Loading...

: isError ?

{error.message}

: - + {({ data }) => ( <> @@ -42,9 +46,9 @@ export default function RequestCom() { - + */} @@ -55,25 +59,25 @@ export default function RequestCom() { {(data && data.length > 0) ? data?.map((item, index) => ( - + - + */} -
Name + {/* Loan - Added
Jese image
-
{item?.name || ''}
-
{item?.bvn}
+
{item?.account_id || ''}
+
{item?.transaction_id}
+ {/*
{item?.loan}
{item?.description}
-
-
{getDateFromDateString(item?.added)} {getTimeFromDateString(item?.added)}
+
{getDateFromDateString(item?.created_at)}
@@ -93,7 +97,7 @@ export default function RequestCom() { )) :
+
No Record Found
@@ -104,7 +108,7 @@ export default function RequestCom() {
)} -
+ }
diff --git a/src/components/tableWrapper/TablePaginatedWrapper.jsx b/src/components/tableWrapper/TablePaginatedWrapper.jsx new file mode 100644 index 0000000..1608c83 --- /dev/null +++ b/src/components/tableWrapper/TablePaginatedWrapper.jsx @@ -0,0 +1,121 @@ +import { useEffect, useState } from "react"; +import MainBtn from "../MainBtn"; +import Icons from "../Icons"; + + +export default function TablePaginatedWrapper({ + data = [], + itemsPerPage = 5, + pagination, + setPage, + isFetching, + filterItem, + children, +}) { + const [isLoading, setIsLoading] = useState(isFetching) + const [searchTerm, setSearchTerm] = useState(""); + const [filteredData, setFilteredData] = useState(data); + + const [currentPage, setCurrentPage] = useState(0); + const [newData, setNewData] = useState([]); + + const numberOfSelection = itemsPerPage; + + const handlePrev = () => { + setPage(prev => prev - 1) + }; + const handleNext = () => { + setPage(prev => prev + 1) + }; + + const handleSearch = ({ target: { value } }, name) => { + setSearchTerm(value); + let newFilteredData = data.filter((item) => + item[name].toLowerCase().startsWith(value.toLowerCase()) + ); + setFilteredData(newFilteredData); + setCurrentPage(0); + }; + + useEffect(() => { + setIsLoading(true) + setTimeout(()=>{ + setNewData( + filteredData?.slice(currentPage, numberOfSelection + currentPage) + ); + setIsLoading(false) + },1000) + }, [currentPage, filteredData, numberOfSelection]); + + useEffect(()=>{ + setCurrentPage(0) + },[itemsPerPage]) + + return ( +
+ {data.length > 0 && filterItem && ( +
+ {filterItem.map((item, index) => ( + + ))} +
+ )} + +
+
+ {children({ data: newData })} +
+ +
+
Showing + {isLoading ? '----' : `page ${pagination?.current_page}`} of {pagination?.total_pages} +
+ {(newData.length >= 0) && +
+ + + + + + +
+ } +
+
+ + {isLoading && } +
+ ); +} + +const TableIsLoading = () => { + return ( +
+

Loading...

+
+ ) +} diff --git a/src/services/queryKeys.js b/src/services/queryKeys.js index f9100ae..72aad99 100644 --- a/src/services/queryKeys.js +++ b/src/services/queryKeys.js @@ -1,6 +1,7 @@ const queryKeys = { dashboard: ['dashboard'], loans: ['loans'], + transactions: ['transactions'], apply_loan: ['apply'], select_loan: ['select-loan'], approved_loan: ['approved-loan'], diff --git a/src/services/siteServices.js b/src/services/siteServices.js index 76b3b51..5483879 100644 --- a/src/services/siteServices.js +++ b/src/services/siteServices.js @@ -56,12 +56,18 @@ export const getDashData = (reqData) => { return getAuxEnd(`/dashboard`, postData) } -// FUNCTION TO GET APPLIED LOANS TABLE +// FUNCTION TO GET LOANS TABLE export const getLoans = (reqData) => { const postData = { ...reqData } return getAuxEnd(`/loans`, postData) } +// FUNCTION TO GET TRANSACTIONS TABLE +export const getTransactions = (reqData) => { + const postData = { ...reqData } + return getAuxEnd(`/transactions`, postData) +} +