From afad7c082499ef26c9a9f218aa000d9a78eac401 Mon Sep 17 00:00:00 2001
From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com>
Date: Thu, 16 Nov 2023 23:36:09 +0700
Subject: [PATCH] feat: available order detail data show

---
 src/App.tsx                           |  2 +-
 src/api/Order.ts                      | 26 +++++++++++-
 src/components/AvailableOrderCard.tsx |  4 +-
 src/interfaces/OrderDetail.ts         |  2 +-
 src/pages/AvailableOrderDetail.tsx    | 61 ++++++++++++---------------
 src/utils/Order.ts                    | 12 +++++-
 6 files changed, 69 insertions(+), 38 deletions(-)

diff --git a/src/App.tsx b/src/App.tsx
index fef6093..4f806e8 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -24,7 +24,7 @@ function App() {
         <Routes>
           <Route path='/Balance' element={<Balance/>}/>
           <Route path='/AvailableOrder' element={<AvailableOrder/>}/>
-          <Route path='/AvailableOrderDetail' element={<AvailableOrderDetail/>}/>
+          <Route path='/AvailableOrderDetail/:id' element={<AvailableOrderDetail/>}/>
           <Route path='/PickedOrder' element={<PickedOrder/>}/>
           <Route path='/PickedOrderDetail' element={<PickedOrderDetail/>}/>
           <Route path='/History' element={<History/>}/>
diff --git a/src/api/Order.ts b/src/api/Order.ts
index ca415e0..e40bedb 100644
--- a/src/api/Order.ts
+++ b/src/api/Order.ts
@@ -1,5 +1,6 @@
 import axios from "axios";
 import OrderInterface from "../interfaces/OrderInterface";
+import OrderDetail from "../interfaces/OrderDetail";
 
 const REST_URL = "http://localhost:5000"; // TODO : using env
 
@@ -12,4 +13,27 @@ export async function fetchAvailableOrder() {
         alert(err);
         throw err;
     }
-}
\ No newline at end of file
+}
+
+export async function fetchOrderById(orderId : number) {
+    try {
+        const API_URL = REST_URL + "/order/order/" + orderId;
+        const response = await axios.get<OrderInterface>(API_URL);
+        return response;
+    } catch(err) {
+        alert(err);
+        throw err;
+    }
+}
+
+export async function fetchOrderDetails(orderId : number) {
+    try {
+        const API_URL = REST_URL + "/order/order-details/" + orderId;
+        const response = await axios.get<OrderDetail[]>(API_URL);
+        return response;
+    } catch(err) {
+        alert(err);
+        throw err;
+    }
+}
+
diff --git a/src/components/AvailableOrderCard.tsx b/src/components/AvailableOrderCard.tsx
index 7d2be41..1ca827c 100644
--- a/src/components/AvailableOrderCard.tsx
+++ b/src/components/AvailableOrderCard.tsx
@@ -15,6 +15,8 @@ import OrderInterface from '../interfaces/OrderInterface';
 type paramInterface = {order : OrderInterface};
 
 export default function AvailableOrderCard({order} : paramInterface) {
+  const hrefLink = `/AvailableOrderDetail/${order.id}`;
+  
   return (
   <Card
     width={"80%"}
@@ -26,7 +28,7 @@ export default function AvailableOrderCard({order} : paramInterface) {
     <LinkBox>
       <CardHeader>
         <Heading>
-          <LinkOverlay href="/AvailableOrderDetail">
+          <LinkOverlay href={hrefLink}>
             {order.alamat}
           </LinkOverlay>
         </Heading>
diff --git a/src/interfaces/OrderDetail.ts b/src/interfaces/OrderDetail.ts
index 2c8d017..ce03053 100644
--- a/src/interfaces/OrderDetail.ts
+++ b/src/interfaces/OrderDetail.ts
@@ -1,7 +1,7 @@
 
 export default interface OrderDetail {    
     id_pesanan ?: number
-    nama_produk ?: string
+    nama_product ?: string
     quantity ?: number
     harga ?: number
 }
\ No newline at end of file
diff --git a/src/pages/AvailableOrderDetail.tsx b/src/pages/AvailableOrderDetail.tsx
index 04f680c..cc02093 100644
--- a/src/pages/AvailableOrderDetail.tsx
+++ b/src/pages/AvailableOrderDetail.tsx
@@ -13,39 +13,33 @@ import {
   Thead,
   Tr,
 } from '@chakra-ui/react'
-import { useState } from 'react'
+import { useEffect, useState } from 'react'
 import OrderDetail from '../interfaces/OrderDetail';
 import OrderInterface from '../interfaces/OrderInterface';
-  
-// TODO : fetch data from SOAP
-const orderDummy : OrderInterface = {
-  alamat : "jl.ngawi",
-  nama_penerima : "rusdi",
-  biaya_pengiriman : 69,
-}
-const detailDummy : OrderDetail[] = [
-  {
-    nama_produk : "pisau cukur",
-    quantity : 69
-  },
-  {
-    nama_produk : "ivan gunawan",
-    quantity : 420
-  },
-  {
-    nama_produk : "pisau cukur 2",
-    quantity : 692
-  },
-  {
-    nama_produk : "ivan gunawan 2",
-    quantity : 4202
-  },
-]
+import { useParams } from 'react-router-dom';
+import { getOrderById, getOrderDetails } from '../utils/Order';
+
 
 export default function AvailableOrderDetail() {
-  const [order, setOrder] = useState<OrderInterface>(orderDummy);
-  const [orderDetails, setOrderDetails] = useState<OrderDetail[]>(detailDummy);
-  // TODO : implement pick order functionality
+  const { id } = useParams();
+  const orderId = parseInt(id ? id : "0");
+  const [order, setOrder] = useState<OrderInterface>();
+  const [orderDetails, setOrderDetails] = useState<OrderDetail[]>([]);
+
+  useEffect(() => {
+    const orderResponse = getOrderById(orderId);
+    const detailResponse = getOrderDetails(orderId);
+
+    orderResponse.then((response) => {
+      setOrder(response.data);
+      console.log("order", response.data);
+    });
+
+    detailResponse.then((response) => {
+      setOrderDetails(response.data);
+      console.log("detail", response.data);
+    });
+  }, []);
 
   return (
     <Box
@@ -59,7 +53,7 @@ export default function AvailableOrderDetail() {
         py={10}
         >
         <Heading p={5}>
-          {order.alamat}
+          {order?.alamat}
         </Heading>
         
         <Stack divider={<StackDivider/>} spacing={2}>
@@ -68,7 +62,7 @@ export default function AvailableOrderDetail() {
               Nama Pemesan
             </Text>
             <Text>
-              {order.nama_penerima}
+              {order?.nama_penerima}
             </Text>
           </Box>
           <Box>
@@ -76,7 +70,7 @@ export default function AvailableOrderDetail() {
               Ongkos Kirim
             </Text>
             <Text>
-              {order.biaya_pengiriman}
+              {order?.biaya_pengiriman}
             </Text>
           </Box>
           <Box>
@@ -95,13 +89,14 @@ export default function AvailableOrderDetail() {
               <Tbody>
                 {orderDetails.map((detail) => (
                   <Tr>
-                    <Td>{detail.nama_produk}</Td>
+                    <Td>{detail.nama_product}</Td>
                     <Td>{detail.quantity}</Td>
                   </Tr>
                 ))}
               </Tbody>
             </Table>
           </TableContainer>
+          {/* TODO : implement pick order */}
           <Button
             display={{ base: 'none', md: 'inline-flex' }}
             fontSize={'sm'}
diff --git a/src/utils/Order.ts b/src/utils/Order.ts
index ecf0873..63a48a6 100644
--- a/src/utils/Order.ts
+++ b/src/utils/Order.ts
@@ -1,6 +1,16 @@
-import { fetchAvailableOrder } from "../api/Order";
+import { fetchAvailableOrder, fetchOrderById, fetchOrderDetails } from "../api/Order";
 
 export async function getAvailableOrder() {
     const userDetail = await fetchAvailableOrder();
     return userDetail;
+}
+
+export async function getOrderById(orderId : number) {
+    const userDetail = await fetchOrderById(orderId);
+    return userDetail;
+}
+
+export async function getOrderDetails(orderId : number) {
+    const userDetail = await fetchOrderDetails(orderId);
+    return userDetail;
 }
\ No newline at end of file
-- 
GitLab