Skip to content

Commit 0b4be2c

Browse files
author
Matthew Foyle
committed
chg/add-redux
1 parent 947941d commit 0b4be2c

File tree

12 files changed

+170
-126
lines changed

12 files changed

+170
-126
lines changed

package.json

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
"react-router-dom": "^4.1.1",
2121
"react-spinkit": "^3.0.0",
2222
"react-tap-event-plugin": "^2.0.1",
23+
"redux-logger": "^3.0.6",
24+
"redux-promise": "^0.5.3",
25+
"redux-thunk": "^2.2.0",
2326
"semantic-ui-css": "^2.2.10",
2427
"semantic-ui-react": "^0.68.5"
2528
},

src/actions/index.js

+18-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
1-
import * as types from '../constants/ActionTypes';
2-
3-
export function TFH() {
4-
return {
5-
type: types.TFH,
6-
name
7-
};
8-
}
1+
var api = require('../utils/moltin.js');
2+
3+
export function fetchOrders() {
4+
5+
return function(dispatch) {
6+
7+
api.GetOrders()
8+
9+
.then((orders) => {
10+
dispatch({type: "Fetch_Orders_End", payload: orders.data})
11+
})
12+
13+
.catch((err) => {
14+
dispatch({type: "Fetch_Orders_Error", payload: err})
15+
})
16+
17+
}
18+
};

src/components/Nav.js

+34-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { Component } from 'react';
22
import { Menu, Icon } from 'semantic-ui-react';
3+
import { connect } from 'react-redux';
34
import Orders from './Orders';
45
import Revenue from './Revenue';
56
import BestSellers from './BestSellers';
@@ -9,9 +10,34 @@ import {
910
Route,
1011
Link
1112
} from 'react-router-dom';
13+
var api = require('../utils/moltin.js');
14+
15+
const mapStateToProps = state => {
16+
return {
17+
orders: state.orders
18+
}
19+
}
1220

1321
class Nav extends Component {
1422

23+
constructor(props) {
24+
super();
25+
}
26+
27+
componentDidMount() {
28+
29+
this.props.dispatch((dispatch) => {
30+
dispatch({type: "Fetch_Orders_Start"})
31+
32+
api.GetOrders()
33+
34+
.then((orders) => {
35+
dispatch({type: "Fetch_Orders_End", payload: orders})
36+
})
37+
})
38+
39+
}
40+
1541
render() {
1642
return (
1743
<Router>
@@ -30,8 +56,13 @@ class Nav extends Component {
3056
<TimeNav />
3157
</Menu>
3258

33-
<Route exact path="/" component={Orders}/>
34-
<Route path="/revenue" component={Revenue}/>
59+
<Route exact path="/" render={(props) => (
60+
<Orders {...props} />
61+
)}/>
62+
63+
<Route path="/revenue" render={(props) => (
64+
<Revenue {...props} />
65+
)}/>
3566
<Route path="/best-sellers" component={BestSellers}/>
3667

3768
</div>
@@ -40,4 +71,4 @@ class Nav extends Component {
4071
}
4172
};
4273

43-
export default Nav;
74+
export default connect(mapStateToProps)(Nav);

src/components/Orders.js

+23-33
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,58 @@
11
import React, { Component } from 'react';
22
import * as moment from 'moment';
3+
import { connect } from 'react-redux';
34
import Line from './Line_Chart'
45
import Bar from './Bar_Chart'
56
import '../App.css';
67
import {Tabs, Tab} from 'material-ui/Tabs';
78
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
89
import Center from 'react-center';
910
var Spinner = require('react-spinkit');
10-
var api = require('../utils/moltin.js');
11+
12+
const mapStateToProps = state => {
13+
return {
14+
orders: state.orders
15+
}
16+
}
1117

1218
class Orders extends Component {
1319

1420
constructor(props) {
1521
super();
16-
this.state = {orders: null};
17-
}
18-
19-
componentDidMount() {
20-
api.GetOrders()
21-
.then((orders) => {
22-
this.setState(() => {
23-
return {
24-
orders: orders
25-
}
26-
})
27-
})
28-
29-
.catch((error) => {
30-
console.log(error)
31-
})
32-
3322
}
3423

3524
render() {
3625

37-
if(this.state.orders !== null) {
26+
var orderData = this.props.orders.orders;
27+
if(orderData !== null) {
3828

3929
var past = (days) => {
4030
return moment().subtract(days, 'days').format('YYYY-MM-DD');
4131
}
4232
var Today = moment().format('YYYY-MM-DD');
4333

44-
var OrdersLessThanSevenDaysAgo = this.state.orders.data.filter(function(order) {
34+
var OrdersLessThanSevenDaysAgo = orderData.data.filter(function(order) {
4535
return order.meta.timestamps.created_at.slice(0,10) > past(7);
4636
})
4737

48-
var Data = [0, 0, 0, 0, 0, 0, 0]
38+
var Data7d = [0, 0, 0, 0, 0, 0, 0]
4939

5040
OrdersLessThanSevenDaysAgo.forEach(function(order) {
5141

5242
switch(order.meta.timestamps.created_at.slice(0,10)) {
53-
case Today : Data[6]++;
43+
case Today : Data7d[6]++;
5444
break;
55-
case past(1) : Data[5]++;
45+
case past(1) : Data7d[5]++;
5646
break;
57-
case past(2) : Data[4]++;
47+
case past(2) : Data7d[4]++;
5848
break;
59-
case past(3) : Data[3]++;
49+
case past(3) : Data7d[3]++;
6050
break;
61-
case past(4) : Data[2]++;
51+
case past(4) : Data7d[2]++;
6252
break;
63-
case past(5) : Data[1]++;
53+
case past(5) : Data7d[1]++;
6454
break;
65-
case past(6) : Data[0]++;
55+
case past(6) : Data7d[0]++;
6656
break;
6757
default : return;
6858
}
@@ -73,7 +63,7 @@ class Orders extends Component {
7363
labels: [moment(moment().subtract(6, 'days')).format("MMM Do YYYY"), moment(moment().subtract(5, 'days')).format("MMM Do YYYY"), moment(moment().subtract(4, 'days')).format("MMM Do YYYY"), moment(moment().subtract(3, 'days')).format("MMM Do YYYY"), moment(moment().subtract(2, 'days')).format("MMM Do YYYY"), moment(moment().subtract(1, 'days')).format("MMM Do YYYY"), moment().calendar()],
7464
datasets: [{
7565
label: '# of Orders',
76-
data: Data,
66+
data: Data7d,
7767
backgroundColor: [
7868
'rgba(255, 99, 132, 0.2)',
7969
'rgba(54, 162, 235, 0.2)',
@@ -120,11 +110,11 @@ class Orders extends Component {
120110
</Tabs>
121111
</MuiThemeProvider>
122112
)
123-
124-
};
113+
114+
}
125115

126116
else {
127-
console.log('no data')
117+
128118
return (
129119
<div style={{height: 100 + '%', width: 100 + '%'}}>
130120
<Center style={{paddingTop: 250}}>
@@ -136,4 +126,4 @@ class Orders extends Component {
136126
}
137127
}
138128

139-
export default Orders;
129+
export default connect(mapStateToProps)(Orders);

src/components/Revenue.js

+25-48
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,35 @@
11
import React, { Component } from 'react';
22
import * as moment from 'moment';
3+
import { connect } from 'react-redux';
34
import '../App.css';
45
import Center from 'react-center';
56
import { Statistic, Card, Icon } from 'semantic-ui-react'
67
import * as Spinner from 'react-spinkit';
78
import { Grid, Row, Col } from 'react-bootstrap';
89
import {percentDiff} from 'percentage-difference';
9-
var api = require('../utils/moltin.js')
1010
var format = require('format-number');
1111

12+
const mapStateToProps = state => {
13+
return {
14+
orders: state.orders
15+
}
16+
}
17+
1218
class Revenue extends Component {
1319

1420
constructor(props) {
1521
super();
16-
this.state = {orders: null};
17-
}
18-
19-
componentDidMount() {
20-
api.GetOrders()
21-
.then((orders) => {
22-
this.setState(() => {
23-
return {
24-
orders: orders
25-
}
26-
})
27-
})
28-
29-
.catch((error) => {
30-
console.log(error)
31-
})
32-
3322
}
3423

3524
render() {
3625

26+
var revenue24h = 0;
3727
var revenue7 = 0;
3828
var revenue14 = 0;
39-
var revenueMonth = 0;
40-
var revenueTwoMonths = 0;
41-
42-
if(this.state.orders !== null) {
29+
var orderData = this.props.orders.orders;
4330

31+
if(orderData !== null) {
32+
console.log(this.props)
4433
var past = (num, frame) => {
4534
return moment().subtract(num, frame).format('YYYY-MM-DD');
4635
};
@@ -51,44 +40,32 @@ class Revenue extends Component {
5140
// })
5241
// }
5342

54-
var OrdersLessThanSevenDaysAgo = this.state.orders.data.filter(function(order) {
43+
var OrdersLessThanTwentyFourHoursAgo = orderData.data.filter(function(order) {
44+
return order.meta.timestamps.created_at.slice(0,10) > past(24, 'hours');
45+
});
46+
47+
OrdersLessThanTwentyFourHoursAgo.forEach(function(order) {
48+
revenue24h = revenue24h + order.meta.display_price.with_tax.amount/100
49+
});
50+
51+
var OrdersLessThanSevenDaysAgo = orderData.data.filter(function(order) {
5552
return order.meta.timestamps.created_at.slice(0,10) > past(7, 'days');
5653
});
5754

5855
OrdersLessThanSevenDaysAgo.forEach(function(order) {
5956
revenue7 = revenue7 + order.meta.display_price.with_tax.amount/100
6057
});
6158

62-
var OrdersLessThanFourteenDaysAgo = this.state.orders.data.filter(function(order) {
59+
var OrdersLessThanFourteenDaysAgo = orderData.data.filter(function(order) {
6360
return order.meta.timestamps.created_at.slice(0,10) > past(14, 'days') && order.meta.timestamps.created_at.slice(0,10) < past(7, 'days');
6461
});
6562

6663
OrdersLessThanFourteenDaysAgo.forEach(function(order) {
6764
revenue14 = revenue14 + order.meta.display_price.with_tax.amount/100
6865
});
6966

70-
71-
var OrdersLessThanOneMonthAgo = this.state.orders.data.filter(function(order) {
72-
return order.meta.timestamps.created_at.slice(0,10) > past(1, 'month');
73-
});
74-
75-
OrdersLessThanOneMonthAgo.forEach(function(order) {
76-
revenueMonth = revenueMonth + order.meta.display_price.with_tax.amount/100
77-
});
78-
79-
var OrdersLessThanTwoMonthAgo = this.state.orders.data.filter(function(order) {
80-
return order.meta.timestamps.created_at.slice(0,10) > past(2, 'months');
81-
});
82-
83-
OrdersLessThanTwoMonthAgo.forEach(function(order) {
84-
revenueTwoMonths = revenueTwoMonths + order.meta.display_price.with_tax.amount/100
85-
});
86-
87-
// var round_revTwoMonths = Math.round(revenueTwoMonths);
88-
// var formatted_revTwoMonths = format({prefix: '$'})(round_revTwoMonths);
89-
//
90-
// var round_revMonth = Math.round(revenueMonth);
91-
// var formatted_revMonth = format({prefix: '$'})(round_revMonth);
67+
// var round_rev24h = Math.round(revenue24h);
68+
// var formatted_rev24h = format({prefix: '$'})(round_rev24h);
9269

9370
var round_rev7 = Math.round(revenue7);
9471
var formatted_rev7 = format({prefix: '$'})(round_rev7);
@@ -98,7 +75,7 @@ class Revenue extends Component {
9875

9976
var diff = percentDiff(round_rev14, round_rev7, true);
10077

101-
// console.log(round_revMonth)
78+
// console.log(round_rev24h)
10279
// console.log(round_revTwoMonths)
10380

10481
return (
@@ -155,4 +132,4 @@ class Revenue extends Component {
155132
}
156133
}
157134

158-
export default Revenue;
135+
export default connect(mapStateToProps)(Revenue);

src/components/TimeNav.js

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { Component } from 'react';
22
import { Menu } from 'semantic-ui-react';
3+
import { connect } from 'react-redux';
34

45
class TimeNav extends Component {
56

@@ -8,10 +9,13 @@ class TimeNav extends Component {
89
this.state = {time: null};
910
}
1011

11-
componentDidMount() {
12-
};
12+
handleItemClick = (e, { name }) => {
13+
this.setState({ activeItem: name })
1314

14-
handleItemClick = (e, { name }) => this.setState({ activeItem: name })
15+
this.props.dispatch((dispatch) => {
16+
dispatch({type: name, payload: name})
17+
})
18+
}
1519

1620
render() {
1721
const { activeItem } = this.state
@@ -30,4 +34,4 @@ class TimeNav extends Component {
3034
}
3135
};
3236

33-
export default TimeNav;
37+
export default connect()(TimeNav);

src/index.js

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@ import React from 'react';
22
import App from './App';
33
import { Provider } from 'react-redux';
44
import { render } from 'react-dom';
5-
//import registerServiceWorker from './registerServiceWorker';
6-
import { createStore } from 'redux';
7-
import ChartsApp from './reducers/reducers.js';
5+
import store from './store';
86
import 'semantic-ui-css/semantic.min.css';
97
import './index.css';
10-
11-
let store = createStore(ChartsApp)
8+
//import registerServiceWorker from './registerServiceWorker';
129

1310
render(
1411
<Provider store={store}>

0 commit comments

Comments
 (0)