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