From 9b7e2af450ac05a27b384ed4e5877616537d81fb Mon Sep 17 00:00:00 2001 From: "John Huang@tthqws02" Date: Sun, 21 Nov 2021 22:56:45 -0500 Subject: [PATCH] ADD: order display on the screen --- src/components/api/index.js | 4 +- src/components/api/orders/useGetOrders.jsx | 31 +++++++ src/components/api/orders/useSetOrder.jsx | 25 ++++++ src/components/mainPage/landing.jsx | 12 ++- src/components/orders/index.js | 1 + src/components/orders/orders.jsx | 99 ++++++++++++++++++++++ 6 files changed, 167 insertions(+), 5 deletions(-) create mode 100644 src/components/api/orders/useGetOrders.jsx create mode 100644 src/components/api/orders/useSetOrder.jsx create mode 100644 src/components/orders/index.js create mode 100644 src/components/orders/orders.jsx diff --git a/src/components/api/index.js b/src/components/api/index.js index a994737..0d51424 100644 --- a/src/components/api/index.js +++ b/src/components/api/index.js @@ -1 +1,3 @@ -export { useGetProd } from "./products/useGetProd"; \ No newline at end of file +export { useGetProd } from "./products/useGetProd"; +export { useGetOrders } from "./orders/useGetOrders"; +export { useSetOrder } from "./orders/useSetOrder"; \ No newline at end of file diff --git a/src/components/api/orders/useGetOrders.jsx b/src/components/api/orders/useGetOrders.jsx new file mode 100644 index 0000000..b6bc86f --- /dev/null +++ b/src/components/api/orders/useGetOrders.jsx @@ -0,0 +1,31 @@ +// By JCH, 20211121 +// Using the ApolloClient Hook to create our own custom Hook + +import { gql, useQuery } from "@apollo/client"; + +const getOrdersAPI = (orderID) => gql` + query getOrderInfo { + getOrderInfo(orderID:${orderID}) { + orderID + items { + productName + price + } + totalAmount + orderDate + email + orderByFirstName + orderByLastName + } + } +`; + + +// custom hook for query +const useGetOrders = (orderID) => { + // I omitted the error in the return + const { loading, data } = useQuery(getOrdersAPI(orderID)); + return loading ? null : data.getOrderInfo; +}; + +export { useGetOrders }; diff --git a/src/components/api/orders/useSetOrder.jsx b/src/components/api/orders/useSetOrder.jsx new file mode 100644 index 0000000..eda832b --- /dev/null +++ b/src/components/api/orders/useSetOrder.jsx @@ -0,0 +1,25 @@ +// By JCH, 20211121 +// Using the ApolloClient Hook to create our own custom Hook + +import { gql, useMutation } from "@apollo/client"; + +const setOrderInfoAPI = gql` + mutation setOrderInfo($orderInfo: orderInfoInput) { + setOrderInfo(orderInfo: $orderInfo) + } +`; + +// custom hook for mutation +const useSetOrder = () => { + // Hook for update + const setOrder = (orderInfo) => { + // call the hook + updateOrderData({ variables: { orderInfo: orderInfo } }); + }; + + // Apollo useMutation Hook + const [updateOrderData, { results }] = useMutation(setOrderInfoAPI); + return [{ results }, setOrder]; +}; + +export { useSetOrder }; diff --git a/src/components/mainPage/landing.jsx b/src/components/mainPage/landing.jsx index 3df21c5..e4b6d05 100644 --- a/src/components/mainPage/landing.jsx +++ b/src/components/mainPage/landing.jsx @@ -1,18 +1,22 @@ import React, { useState } from "react"; import "./home.css"; -import { PayPal, Purchase, ShowCase, Home } from '.'; -import { AllProducts} from "../products" +import { PayPal, Purchase, ShowCase, Home } from "."; +import { AllProducts } from "../products"; +import { Orders } from "../orders"; // component const Details = () => { const [cart, setCart] = useState([]); + const [orderID, setOrderID] = useState(null); return ( <> - + {/* you can try 600011 in orderID */} + + - + ); }; diff --git a/src/components/orders/index.js b/src/components/orders/index.js new file mode 100644 index 0000000..b3ad4b3 --- /dev/null +++ b/src/components/orders/index.js @@ -0,0 +1 @@ +export {default as Orders} from './orders'; diff --git a/src/components/orders/orders.jsx b/src/components/orders/orders.jsx new file mode 100644 index 0000000..ce00588 --- /dev/null +++ b/src/components/orders/orders.jsx @@ -0,0 +1,99 @@ +import React, {useEffect} from "react"; +import { useGetOrders, useSetOrder } from "../api"; + +const sampleOrder = { + items: [ + { productName: "B1-14MR", price: 129.99 }, + { productName: "W2C", price: 29.99 }, + { productName: "PSU-24VDC", price: 19.99} + ], + totalAmount: 179.97, + orderDate: "2021-11-22", + email: "pocketooth@gmail.com", + orderByFirstName: "John", + orderByLastName: "Huang", + }; + +// re-arrange to make invoice detail a self-contained element +const Orders = ({ orderID, setOrderID }) => { + const orders = useGetOrders(orderID); + const [results, setOrder] = useSetOrder(); + + useEffect(() => { + if (results.data) { + let orderID = results.data.setOrderInfo.split(':').pop(); + setOrderID(orderID); + console.log("results:",orderID) + } + }, [results, setOrderID]); //didUpdate + + const onClick = (event) => { + setOrder(sampleOrder); + console.log("sample order button clicked"); + }; + + let getItems = (order) => { + return ( + <> + {order.items?.map((item, index) => { + return ( +
  • + {item.productName} - ${item.price} +
  • + ); + })} + + ); + }; + + let MyOrders = () => { + if (orders) { + return ( + + + + + + + + + + + {orders.map((order) => { + return ( + + + + + + + ); + })} + + +
    IDitemsAmount
    {order.orderID}{getItems(order)}${order.totalAmount}
    + ); + } else { + return ( + <> +

    Loading...

    + + ); + } + }; + + return ( +
    +
    + + Fetch order list from https://api.oemautomation.com:3001{" "} + +
    + + +
    +
    + ); +}; + +export default Orders;