From 1daf98a98608fff8eda5716f14edd892a224bca8 Mon Sep 17 00:00:00 2001 From: kmiola <kmiola@ethz.ch> Date: Mon, 18 Nov 2024 17:04:38 +0000 Subject: [PATCH] first attempt to move api calls to different file, works for bills, robustness has to be evaluated --- src/pages/CreditPaymentsList.tsx | 28 +++-------------------- src/pages/FetchData.tsx | 38 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 src/pages/FetchData.tsx diff --git a/src/pages/CreditPaymentsList.tsx b/src/pages/CreditPaymentsList.tsx index 4d3f94c..0a95449 100644 --- a/src/pages/CreditPaymentsList.tsx +++ b/src/pages/CreditPaymentsList.tsx @@ -3,7 +3,7 @@ import { Container, CircularProgress, Typography, Table, TableBody, TableCell, T import { billsReadBills, creditPaymentsReadCreditPayments, reimbursementsReadReimbursements, client, ledgersReadLedgers, kstsReadKsts } from '../client/services.gen'; import { BillsList, BillPublic_Output, CreditPaymentPublic_Output, CreditPaymentsList, ReimbursementsList, ReimbursementPublic_Output, LedgerPublic, KstPublic } from '../client/types.gen'; import { SelectChangeEvent } from '@mui/material/Select'; - +import { useFetchBills } from '../pages/FetchData.tsx' // Set the base URL and headers for the client client.setConfig({ baseUrl: import.meta.env.VITE_API_BASE_URL, @@ -15,7 +15,6 @@ client.setConfig({ export default function CreditPaymentsPage() { const [creditPayments, setCreditPayments] = useState<CreditPaymentPublic_Output[]>([]); const [reimbursements, setReimbursements] = useState<ReimbursementPublic_Output[]>([]); - const [bills, setBills] = useState<BillPublic_Output[]>([]); const [originalPayments, setOriginalPayments] = useState([]); const [filteredPayments, setFilteredPayments] = useState<any[]>([]); const [ledgerItems, setLedgerItems] = useState<LedgerPublic[]>([]); @@ -33,27 +32,7 @@ export default function CreditPaymentsPage() { amount: '', }); - const fetchBills = async () => { - setLoading(true); - setError(null); - - try { - const response = await billsReadBills(); - if (typeof response.data !== 'object' || !('items' in response.data)) { - console.error('Unexpected response format:', response.data); - setError('Received unexpected response format from the server.'); - return; - } - - const billsList = response.data as BillsList; - setBills(billsList.items); - } catch (err) { - console.error('Error fetching credit payments:', err); - setError('Error fetching credit payments'); - } finally { - setLoading(false); - } - }; + const fetchCreditPayments = async () => { setLoading(true); @@ -182,9 +161,8 @@ export default function CreditPaymentsPage() { console.log('Filtered Payments After Filtering:', filtered); setFilteredPayments(filtered); }; - + const { bills, loadingBill, errorBill } = useFetchBills(); useEffect(() => { - fetchBills(); fetchCreditPayments(); fetchReimbursements(); fetchLedgers(); diff --git a/src/pages/FetchData.tsx b/src/pages/FetchData.tsx new file mode 100644 index 0000000..76a02ea --- /dev/null +++ b/src/pages/FetchData.tsx @@ -0,0 +1,38 @@ +import { useState, useEffect } from "react"; +import { billsReadBills } from "../client/services.gen"; +import { BillsList, BillPublic_Output } from "../client/types.gen"; + +export function useFetchBills() { + const [bills, setBills] = useState<BillPublic_Output[]>([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState<string | null>(null); + + useEffect(() => { + const loadData = async () => { + setLoading(true); + setError(null); + + try { + const response = await billsReadBills(); + + if (typeof response.data !== "object" || !("items" in response.data)) { + console.error("Unexpected response format:", response.data); + setError("Received unexpected response format from the server."); + return; + } + + const billsList = response.data as BillsList; + setBills(billsList.items); + } catch (err) { + console.error("Error fetching bills:", err); + setError("Error fetching bills"); + } finally { + setLoading(false); + } + }; + + loadData(); + }, []); + + return { bills, loading, error }; +} -- GitLab