Commit fb6e492d authored by Darrick Yong's avatar Darrick Yong

add create/edit actions

parent 07cb5fe4
...@@ -9,10 +9,15 @@ const receiveOrders = (payload) => ({ ...@@ -9,10 +9,15 @@ const receiveOrders = (payload) => ({
payload, payload,
}) })
// const receiveOrder = (order) => ({ const receiveOrder = (order) => ({
// type: RECEIVE_ORDER, type: RECEIVE_ORDER,
// order, order,
// }) })
const updateOrder = (order) => ({
type: UPDATE_ORDER,
order,
})
export const fetchOrders = () => (dispatch) => { export const fetchOrders = () => (dispatch) => {
OrderAPIUtil.getOrders() OrderAPIUtil.getOrders()
...@@ -20,3 +25,15 @@ export const fetchOrders = () => (dispatch) => { ...@@ -20,3 +25,15 @@ export const fetchOrders = () => (dispatch) => {
dispatch(receiveOrders(res)) dispatch(receiveOrders(res))
}); });
} }
export const createOrder = (order) => (dispatch) =>
OrderAPIUtil.createOrder(order)
.then(res => {
dispatch(receiveOrder(res))
});
export const editOrder = (order) => (dispatch) =>
OrderAPIUtil.editOrder(order)
.then(res => {
dispatch(updateOrder(res))
});
\ No newline at end of file
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import OrderIndexItem from './OrderIndexItem'; import OrderIndexItem from './OrderIndexItem';
import { connect } from "react-redux"; import { connect } from "react-redux";
import { fetchOrders } from '../../actions/order_actions'; import { createOrder, fetchOrders, editOrder } from '../../actions/order_actions';
const OrderIndex = ({ orders, fetchOrders }) => { const OrderIndex = ({
orders,
fetchOrders,
createOrder,
editOrder,
}) => {
const [fetchAttempted, setFetchAttempted] = useState(false); const [fetchAttempted, setFetchAttempted] = useState(false);
useEffect(() => { useEffect(() => {
...@@ -16,6 +21,8 @@ const OrderIndex = ({ orders, fetchOrders }) => { ...@@ -16,6 +21,8 @@ const OrderIndex = ({ orders, fetchOrders }) => {
return ( return (
<div> <div>
<h1>Order Index</h1> <h1>Order Index</h1>
<button onClick={createOrder}>Create New Order</button>
<button onClick={editOrder}>Update Order</button>
{orders.allIds.map(orderId => { {orders.allIds.map(orderId => {
const order = orders.byId[orderId]; const order = orders.byId[orderId];
return <OrderIndexItem key={order.id} order={order} /> return <OrderIndexItem key={order.id} order={order} />
...@@ -31,6 +38,8 @@ const mapStateToProps = (state) => ({ ...@@ -31,6 +38,8 @@ const mapStateToProps = (state) => ({
const mapDispatchToProps = dispatch => ({ const mapDispatchToProps = dispatch => ({
fetchOrders: () => dispatch(fetchOrders()), fetchOrders: () => dispatch(fetchOrders()),
createOrder: order => dispatch(createOrder(order)),
editOrder: order => dispatch(editOrder(order)),
}) })
export default connect(mapStateToProps, mapDispatchToProps)(OrderIndex) export default connect(mapStateToProps, mapDispatchToProps)(OrderIndex)
import { RECEIVE_ORDERS } from "../../actions/order_actions"; import {
RECEIVE_ORDER,
RECEIVE_ORDERS,
UPDATE_ORDER,
} from "../../actions/order_actions";
const initialState = { const initialState = {
byId: {}, byId: {},
allIds: [], allIds: [],
} };
const OrdersReducer = (oldState = initialState, action) => { const OrdersReducer = (oldState = initialState, action) => {
Object.freeze(oldState); Object.freeze(oldState);
const newState = { ...oldState };
const order = action.order || null;
switch (action.type) { switch (action.type) {
case RECEIVE_ORDERS: case RECEIVE_ORDERS:
return action.payload; return action.payload;
case RECEIVE_ORDER:
newState.byId[order.id] = order;
newState.allIds.unshift(order.id);
return newState;
case UPDATE_ORDER:
newState.byId[order.id] = order;
return newState;
default: default:
return oldState; return oldState;
} }
} };
export default OrdersReducer; export default OrdersReducer;
\ No newline at end of file
// import axios from 'axios'; // import axios from 'axios';
const sampleRes = { const sampleGetAll = {
allIds: ["1", "2", "3"], allIds: ["1", "2", "3"],
byId: { byId: {
1: { "1": {
id: "1", id: "1",
orderId: "o1", orderId: "o1",
status: "unfulfilled", status: "unfulfilled",
}, },
2: { "2": {
id: "2", id: "2",
orderId: "o2", orderId: "o2",
status: "unfulfilled", status: "unfulfilled",
}, },
3: { "3": {
id: "3", id: "3",
orderId: "o3", orderId: "o3",
status: "unfulfilled", status: "unfulfilled",
...@@ -21,14 +21,49 @@ const sampleRes = { ...@@ -21,14 +21,49 @@ const sampleRes = {
}, },
}; };
const promise = new Promise( (resolve, reject) => { const sampleNew = {
resolve(sampleRes) id: "4",
orderId: "o4",
status: "unfulfilled",
};
const sampleUpdateFul = {
id: "3",
orderId: "o3",
status: "fulfilled",
};
const sampleUpdateCan = {
id: "2",
orderId: "o2",
status: "cancelled",
};
const getAllPromise = new Promise( (resolve, reject) => {
resolve(sampleGetAll)
})
const createNewPromise = new Promise( (resolve, reject) => {
resolve(sampleNew)
})
const updateFulfillPromise = new Promise( (resolve, reject) => {
resolve(sampleUpdateFul)
})
const updateCancelPromise = new Promise( (resolve, reject) => {
resolve(sampleUpdateCan)
}) })
export const getOrders = () => { export const getOrders = () => {
return promise; return getAllPromise;
}; };
export const createOrder = (order) => {
return createNewPromise;
}
export const editOrder = (order) => {
return updateFulfillPromise;
}
// export const getOrders =() => { // export const getOrders =() => {
// return axios.get("http://localhost:8080/api/orders"); // return axios.get("http://localhost:8080/api/orders");
// } // }
\ No newline at end of file
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