From 55cfff1cea7c4a7d19a9957cd34557881b97cc2f Mon Sep 17 00:00:00 2001
From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com>
Date: Wed, 15 Nov 2023 22:17:05 +0700
Subject: [PATCH] feat: available order detail page

---
 src/App.tsx                                   |   2 +
 src/components/AvailableOrderCard.tsx         |  56 ++++----
 .../AvailableOrderDetailInterface.ts          |   8 ++
 src/interfaces/AvailableOrderInterface.ts     |   4 +-
 src/interfaces/OrderDetailInterface.ts        |   5 +
 src/pages/AvailableOrderDetail.tsx            | 122 +++++++++++++++++-
 6 files changed, 169 insertions(+), 28 deletions(-)
 create mode 100644 src/interfaces/AvailableOrderDetailInterface.ts
 create mode 100644 src/interfaces/OrderDetailInterface.ts

diff --git a/src/App.tsx b/src/App.tsx
index 8669e22..6245fc1 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -7,6 +7,7 @@ import Logout from './utils/Logout'
 import { isLoggedIn } from './utils/LocalStorage'
 import Balance from './pages/Balance'
 import AvailableOrder from './pages/AvailableOrder'
+import AvailableOrderDetail from './pages/AvailableOrderDetail'
 
 function App() {
 
@@ -18,6 +19,7 @@ function App() {
         <Routes>
           <Route path='/Balance' element={<Balance/>}/>
           <Route path='/AvailableOrder' element={<AvailableOrder/>}/>
+          <Route path='/AvailableOrderDetail' element={<AvailableOrderDetail/>}/>
           <Route path='/Logout' element={<Logout/>}/>
           <Route path='*' element={<NotFound/>}/>
         </Routes>
diff --git a/src/components/AvailableOrderCard.tsx b/src/components/AvailableOrderCard.tsx
index 458c430..52c6f10 100644
--- a/src/components/AvailableOrderCard.tsx
+++ b/src/components/AvailableOrderCard.tsx
@@ -4,6 +4,8 @@ import {
   CardBody, 
   CardHeader, 
   Heading,
+  LinkBox,
+  LinkOverlay,
   Stack,
   StackDivider,
   Text
@@ -21,31 +23,35 @@ export default function AvailableOrderCard({order} : paramInterface) {
     borderColor={"black"}
     borderRadius={20}
     >
-    <CardHeader>
-      <Heading>
-        {order.address}
-      </Heading>
-    </CardHeader>
-    <CardBody>
-      <Stack divider={<StackDivider/>} spacing={1}>
-        <Box>
-          <Text fontSize={"lg"} fontWeight={"bold"}>
-            Nama Pemesan
-          </Text>
-          <Text>
-            {order.customerName}
-          </Text>
-        </Box>
-        <Box>
-          <Text fontSize={"lg"} fontWeight={"bold"}>
-            Ongkos Kirim
-          </Text>
-          <Text>
-            {order.salary}
-          </Text>
-        </Box>
-      </Stack>
-    </CardBody>
+    <LinkBox>
+      <CardHeader>
+        <Heading>
+          <LinkOverlay href="/AvailableOrderDetail">
+            {order.address}
+          </LinkOverlay>
+        </Heading>
+      </CardHeader>
+      <CardBody>
+        <Stack divider={<StackDivider/>} spacing={1}>
+          <Box>
+            <Text fontSize={"lg"} fontWeight={"bold"}>
+              Nama Pemesan
+            </Text>
+            <Text>
+              {order.customerName}
+            </Text>
+          </Box>
+          <Box>
+            <Text fontSize={"lg"} fontWeight={"bold"}>
+              Ongkos Kirim
+            </Text>
+            <Text>
+              {order.salary}
+            </Text>
+          </Box>
+        </Stack>
+      </CardBody>
+    </LinkBox>
   </Card>
   );
 }
diff --git a/src/interfaces/AvailableOrderDetailInterface.ts b/src/interfaces/AvailableOrderDetailInterface.ts
new file mode 100644
index 0000000..0bb0ca2
--- /dev/null
+++ b/src/interfaces/AvailableOrderDetailInterface.ts
@@ -0,0 +1,8 @@
+import OrderDetailInterface from "./OrderDetailInterface"
+
+export default interface AvailableOrderDetailInterface {
+    address : string
+    customerName : string
+    salary : number
+    orderDetails : OrderDetailInterface[]
+}
diff --git a/src/interfaces/AvailableOrderInterface.ts b/src/interfaces/AvailableOrderInterface.ts
index d566fbf..450b455 100644
--- a/src/interfaces/AvailableOrderInterface.ts
+++ b/src/interfaces/AvailableOrderInterface.ts
@@ -1,6 +1,6 @@
 
 export default interface AvailableOrderInterface {
-    address : string,
-    customerName : string,
+    address : string
+    customerName : string
     salary : number
 }
diff --git a/src/interfaces/OrderDetailInterface.ts b/src/interfaces/OrderDetailInterface.ts
new file mode 100644
index 0000000..71920e5
--- /dev/null
+++ b/src/interfaces/OrderDetailInterface.ts
@@ -0,0 +1,5 @@
+
+export default interface OrderDetailInterface {
+    productName : string
+    quantity : number
+}
\ No newline at end of file
diff --git a/src/pages/AvailableOrderDetail.tsx b/src/pages/AvailableOrderDetail.tsx
index 6e698ac..ce1d5f2 100644
--- a/src/pages/AvailableOrderDetail.tsx
+++ b/src/pages/AvailableOrderDetail.tsx
@@ -1 +1,121 @@
-// TODO : 
+import { 
+  Box, 
+  Button, 
+  Heading,
+  Stack,
+  StackDivider,
+  Table,
+  TableContainer,
+  Tbody,
+  Td,
+  Text,
+  Th,
+  Thead,
+  Tr,
+} from '@chakra-ui/react'
+import { useState } from 'react'
+import AvailableOrderDetailInterface from '../interfaces/AvailableOrderDetailInterface';
+  
+  // TODO : fetch data from SOAP
+const dummyData : AvailableOrderDetailInterface = {
+  address : "jl.ngawi",
+  customerName : "rusdi",
+  salary : 69,
+  orderDetails : [
+    {
+      productName : "pisau cukur",
+      quantity : 69
+    },
+    {
+      productName : "ivan gunawan",
+      quantity : 420
+    },
+    {
+      productName : "pisau cukur 2",
+      quantity : 692
+    },
+    {
+      productName : "ivan gunawan 2",
+      quantity : 4202
+    },
+  ]
+}
+
+  export default function AvailableOrderDetail() {
+    const [order, setOrder] = useState<AvailableOrderDetailInterface>(dummyData);
+    // TODO : implement pick order functionality
+  
+    return (
+      <Box
+        minH={"95vh"}
+        py={10}
+        px={50}
+        bg={"red.800"}>
+        <Stack
+          align={'center'}
+          bg={"white"}
+          py={10}
+          >
+          <Heading p={5}>
+            {order.address}
+          </Heading>
+          
+          <Stack divider={<StackDivider/>} spacing={2}>
+            <Box>
+              <Text fontSize={"lg"} fontWeight={"bold"}>
+                Nama Pemesan
+              </Text>
+              <Text>
+                {order.customerName}
+              </Text>
+            </Box>
+            <Box>
+              <Text fontSize={"lg"} fontWeight={"bold"}>
+                Ongkos Kirim
+              </Text>
+              <Text>
+                {order.salary}
+              </Text>
+            </Box>
+            <Box>
+              <Text fontSize={"lg"} fontWeight={"bold"} align={"center"}>
+                Detail Pesanan
+              </Text>
+            </Box>
+            <TableContainer>
+              <Table variant='simple'>
+                <Thead>
+                  <Tr>
+                    <Th>Nama Produk</Th>
+                    <Th>Jumlah</Th>
+                  </Tr>
+                </Thead>
+                <Tbody>
+                  {order.orderDetails.map((detail) => (
+                    <Tr>
+                      <Td>{detail.productName}</Td>
+                      <Td>{detail.quantity}</Td>
+                    </Tr>
+                  ))}
+                </Tbody>
+              </Table>
+            </TableContainer>
+            <Button
+              display={{ base: 'none', md: 'inline-flex' }}
+              fontSize={'sm'}
+              fontWeight={600}
+              bg={"pink.300"}
+              color={'black'}
+              _hover={{
+                bg: 'blue.300',
+              }}
+              >
+              Ambil Order
+            </Button>
+            {/* TODO : table */}
+          </Stack>
+        </Stack>
+      </Box>
+    );
+  }
+  
\ No newline at end of file
-- 
GitLab