Commit 479b998f authored by Alex Segers's avatar Alex Segers

[AFP-97] Create 'useAllOrders' and 'useOrder' hooks for DRYer API calls (@asegers)"

parent 6ca99d4b
export {default as useAllOrders} from './useAllOrders'
export * from './useGoogleAuth'
export {default as useOrder} from './useOrder'
\ No newline at end of file
import {useState, useEffect } from 'react'
import { OrderService } from 'services'
import { Order } from 'Order'
enum ResStatus {
IDLE = "IDLE",
FETCHING = "FETCHING",
SUCCESS = "SUCCESS",
ERROR = "ERROR"
}
const useAllOrders = () => {
const [status, setStatus] = useState<ResStatus>(ResStatus.IDLE);
const [data, setData] = useState<Order[]>([]);
const [error, setError] = useState(null);
useEffect(() => {
const fetchOrders = async () => {
setStatus(ResStatus.FETCHING);
try {
const ordersData = await OrderService.allOrders()
setData(ordersData);
setStatus(ResStatus.SUCCESS)
} catch (err) {
setError(err)
setStatus(ResStatus.ERROR);
}
};
fetchOrders();
}, []);
return { status, data, orders: data, error, ResStatus };
};
export default useAllOrders;
\ No newline at end of file
import {useState, useEffect } from 'react'
import { OrderService } from 'services'
import { Order } from 'Order'
enum ResStatus {
IDLE = "IDLE",
FETCHING = "FETCHING",
SUCCESS = "SUCCESS",
ERROR = "ERROR"
}
const useOrder = (orderId: string) => {
const [status, setStatus] = useState<ResStatus>(ResStatus.IDLE);
const [data, setData] = useState<Order | null>(null);
const [error, setError] = useState(null);
useEffect(() => {
const fetchOrders = async () => {
setStatus(ResStatus.FETCHING);
try {
const orderData = await OrderService.orderById(orderId)
setData(orderData);
setStatus(ResStatus.SUCCESS)
} catch (err) {
setError(err)
setStatus(ResStatus.ERROR);
}
};
fetchOrders();
}, []);
return { status, data, order: data, error, ResStatus };
};
export default useOrder;
\ No newline at end of file
import React, {useState, useEffect} from 'react' import React, {useState, useEffect} from 'react'
import {OrderDetails} from 'components' import {OrderDetails} from 'components'
import { Order } from 'Order'; import { Order } from 'Order';
import { useAllOrders } from 'hooks'
const OrderIndexPage = () => { const OrderIndexPage = () => {
let [orders, setOrders] = useState([]); const { orders } = useAllOrders();
useEffect(() => {
const apiUrl = 'http://localhost:8080/api/orders';
fetch(apiUrl).then((response) => response.json())
.then((data) => {
console.log('This is your data', data)
setOrders(data);
});
}, [setOrders])
const orderDetailsArr = orders.map((order: Order, idx: any) => { const orderDetailsArr = orders.map((order: Order, idx: any) => {
return <tr key={idx}><OrderDetails return <tr key={idx}><OrderDetails
......
import React, {useState, useEffect} from 'react'; import { useParams } from 'react-router-dom';
import {OrderShowDetails} from 'components'; import {OrderShowDetails} from 'components';
import { Order, Item } from 'Order'; import { Order, Item } from 'Order';
import { useOrder } from 'hooks'
const OrderShowPage = (props: any) => { const OrderShowPage = () => {
const location = props.match.params.id; const { id } = useParams<any>();
const apiUrl = 'http://localhost:8080/api/orders/' + location; const { order} = useOrder(id)
const [order, setOrder] = useState<Order>();
const [items, setItems] = useState<Item[]>()
useEffect(() => {
fetch(apiUrl).then((response) => response.json())
.then((data) => {
console.log('This is your order', data)
setOrder(data);
setItems(data.orderItems)
});
}, [setOrder, setItems, apiUrl])
if (!order) { if (!order) {
return(<></>); return(<></>);
} }
return ( return (
<> <div>
<span> <span>
<h3>Order Date: {order.orderCreatedAt}</h3> <h3>Order Date: {order.orderCreatedAt}</h3>
<h3>Order Number: {order.id}</h3> <h3>Order Number: {order.id}</h3>
<h3>Order Status: {order.orderStatus}</h3> <h3>Order Status: {order.orderStatus}</h3>
</span> </span>
<OrderShowDetails items={items}/> <OrderShowDetails items={order.orderItems}/>
</> </div>
) )
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment