From 61b2a5516db9a7dc7c5bb2a1f6e09e053e5be68f Mon Sep 17 00:00:00 2001 From: RodrigoTomeES Date: Fri, 13 Dec 2019 13:57:42 +0100 Subject: [PATCH] Moved fetching orders to redux --- src/containers/Orders/Orders.js | 69 ++++++++++++++++---------------- src/store/actions/actionTypes.js | 4 ++ src/store/actions/index.js | 3 +- src/store/actions/order.js | 40 ++++++++++++++++++ src/store/reducers/order.js | 25 ++++++++++++ 5 files changed, 106 insertions(+), 35 deletions(-) diff --git a/src/containers/Orders/Orders.js b/src/containers/Orders/Orders.js index 146d9da..5fc4e08 100644 --- a/src/containers/Orders/Orders.js +++ b/src/containers/Orders/Orders.js @@ -1,48 +1,49 @@ import React, {Component} from 'react'; import axios from '../../axios-orders'; +import {connect} from 'react-redux'; import Order from '../../components/Order/Order'; import withErrorHandler from '../../hoc/withErrorHandler/withErrorHandler'; +import * as actions from '../../store/actions/index'; +import Spinner from '../../components/UI/Spinner/Spinner'; class Orders extends Component { - state = { - orders: [], - loading: true - } - componentDidMount() { - axios.get('/orders.json') - .then(res => { - const fetchedOrders = []; - for (let key in res.data) { - fetchedOrders.push({ - id: key, - ...res.data[key] - }); - } - this.setState({ - loading: false, - orders: fetchedOrders - }); - }) - .catch(err => { - this.setState({loading: false}); - }); + this.props.onFetchOrders(); } render() { - return ( -
- {this.state.orders.map(order => ( - - ))} -
- ); + let orders = ; + + if (!this.props.loading) { + orders = ( +
+ {this.props.orders.map(order => ( + + ))} +
+ ); + } + + return orders; } } -export default withErrorHandler(Orders, axios); \ No newline at end of file +const mapStateToProps = state => { + return { + orders: state.order.orders, + loading: state.order.loading + }; +}; + +const mapDispatchToProps = dispatch => { + return { + onFetchOrders: () => dispatch(actions.fetchOrders()) + }; +}; + +export default connect(mapStateToProps, mapDispatchToProps)(withErrorHandler(Orders, axios)); \ No newline at end of file diff --git a/src/store/actions/actionTypes.js b/src/store/actions/actionTypes.js index dfc7a49..bf945d3 100644 --- a/src/store/actions/actionTypes.js +++ b/src/store/actions/actionTypes.js @@ -7,3 +7,7 @@ export const PURCHASE_BURGER_START = 'PURCHASE_BURGER_START'; export const PURCHASE_BURGER_SUCCESS = 'PURCHASE_BURGER_SUCCESS'; export const PURCHASE_BURGER_FAIL = 'PURCHASE_BURGER_FAIL'; export const PURCHASE_BURGER_INIT = 'PURCHASE_INIT'; + +export const FETCH_ORDERS_START = 'FETCH_ORDERS_START'; +export const FETCH_ORDERS_SUCCESS = 'FETCH_ORDERS_SUCCESS'; +export const FETCH_ORDERS_FAIL = 'FETCH_ORDERS_FAIL'; diff --git a/src/store/actions/index.js b/src/store/actions/index.js index 2ec3a28..db374b6 100644 --- a/src/store/actions/index.js +++ b/src/store/actions/index.js @@ -6,5 +6,6 @@ export { export { purchaseBurger, - purchaseBurgerInit + purchaseBurgerInit, + fetchOrders } from './order'; \ No newline at end of file diff --git a/src/store/actions/order.js b/src/store/actions/order.js index 5c41ee8..38075a4 100644 --- a/src/store/actions/order.js +++ b/src/store/actions/order.js @@ -40,3 +40,43 @@ export const purchaseBurgerInit = () => { type: actionTypes.PURCHASE_BURGER_INIT }; }; + +export const fetchOrdersSuccess = (orders) => { + return { + type: actionTypes.FETCH_ORDERS_SUCCESS, + orders: orders + }; +}; + +export const fetchOrdersFail = (error) => { + return { + type: actionTypes.FETCH_ORDERS_FAIL, + error: error + }; +}; + +export const fetchOrdersStart = () => { + return { + type: actionTypes.FETCH_ORDERS_START + }; +}; + +export const fetchOrders = () => { + return dispatch => { + dispatch(fetchOrdersStart()); + axios.get('/orders.json') + .then(res => { + const fetchedOrders = []; + for (let key in res.data) { + fetchedOrders.push({ + id: key, + ...res.data[key] + }); + } + dispatch(fetchOrdersSuccess(fetchedOrders)); + }) + .catch(err => { + dispatch(fetchOrdersFail(err)); + }); + }; +}; diff --git a/src/store/reducers/order.js b/src/store/reducers/order.js index 4ed4192..fb51f78 100644 --- a/src/store/reducers/order.js +++ b/src/store/reducers/order.js @@ -22,6 +22,15 @@ const reducer = (state = initialState, action) => { case actionTypes.PURCHASE_BURGER_FAIL: updatedState = purchaseBurgerFail(state, action, updatedState); break; + case actionTypes.FETCH_ORDERS_START: + updatedState = fetchOrdersStart(state, action, updatedState); + break; + case actionTypes.FETCH_ORDERS_SUCCESS: + updatedState = fetchOrdersSuccess(state, action, updatedState); + break; + case actionTypes.FETCH_ORDERS_FAIL: + updatedState = fetchOrdersFail(state, action, updatedState); + break; default: console.log("[Order Reducer] Action default case"); break; @@ -58,3 +67,19 @@ const purchaseBurgerFail = (state, action, updatedState) => { updatedState.loading = false; return updatedState; } + +const fetchOrdersStart = (state, action, updatedState) => { + updatedState.loading = true; + return updatedState; +} + +const fetchOrdersSuccess = (state, action, updatedState) => { + updatedState.loading = false; + updatedState.orders = action.orders; + return updatedState; +} + +const fetchOrdersFail = (state, action, updatedState) => { + updatedState.loading = false; + return updatedState; +}