Skip to content

Commit d3f26d4

Browse files
committed
clean up api and services so we can better mirror api and server side data fetching
1 parent effb015 commit d3f26d4

File tree

18 files changed

+49009
-48926
lines changed

18 files changed

+49009
-48926
lines changed

gulpfile.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const paths = {
1717
'routes/**/*',
1818
'keystone.js',
1919
'package.json',
20-
'!routes/redux-render/**/*.js'
20+
'!routes/redux-render/**/*.jsx'
2121
],
2222
/**
2323
* gulp-sass configuration
@@ -41,8 +41,7 @@ const paths = {
4141
'webpack-server': {
4242
config: 'webpack-server.config.js',
4343
watch_files: [
44-
'public/js/src/**/*',
45-
'routes/redux-render/index.jsx',
44+
'routes/redux-render/**/*.jsx',
4645
'webpack-server.config.js'
4746
]
4847
},

public/js/dist/home.js

Lines changed: 21 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/js/dist/reset-password.js

Lines changed: 20 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/js/dist/signin.js

Lines changed: 20 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/js/src/containers/App.js

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,24 @@
22
import React from 'react'
33
import ReactDOM from 'react-dom'
44

5-
import { createStore, applyMiddleware, compose } from 'redux'
6-
import { Provider } from 'react-redux'
7-
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom'
8-
import reducer from '../reducers'
9-
import thunk from 'redux-thunk'
10-
import { createLogger } from 'redux-logger'
11-
12-
import dataServices from '../actions'
5+
import { Route } from 'react-router-dom'
136

147
import NavigationBar from './NavigationBar'
158
import Home from './Home'
169
import Admin from './Admin'
1710

18-
import style from '../../../styles/src/site.scss'
19-
20-
// Grab the state from a global variable injected into the server-generated HTML
21-
const preloaded_state = window.__PRELOADED_STATE__
22-
23-
// Allow the passed state to be garbage-collected
24-
delete window.__PRELOADED_STATE__
25-
2611
export default class App extends React.Component {
2712
constructor(){
2813
super()
29-
30-
31-
const middleware = [ thunk, ...dataServices ]
32-
// if (process.env.NODE_ENV !== 'production') {
33-
// middleware.push(createLogger())
34-
// }
35-
36-
this.store = createStore(
37-
reducer,
38-
preloaded_state,
39-
applyMiddleware(...middleware)
40-
)
41-
42-
this.store.dispatch({type: 'REQUEST_DOCUMENTS'})
43-
this.store.dispatch({type: 'REQUEST_USER'})
44-
this.store.dispatch({type: 'REQUEST_USERS'})
4514
}
4615

4716
render(){
4817
return (
49-
<Provider store={this.store}>
50-
<Router>
51-
<div>
52-
<NavigationBar store={this.store}/>
53-
<Route exact={true} path="/app" component={Home} />
54-
<Route path="/app/admin" component={Admin} />
55-
</div>
56-
</Router>
57-
</Provider>
18+
<div>
19+
<NavigationBar store={this.props.store}/>
20+
<Route exact={true} path="/app" component={Home} />
21+
<Route path="/app/admin" component={Admin} />
22+
</div>
5823
)
5924
}
6025
}

public/js/src/home.js

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,51 @@ import React from 'react'
33
import { hydrate } from 'react-dom'
44
import { AppContainer } from 'react-hot-loader'
55

6+
import { createStore, applyMiddleware, compose } from 'redux'
7+
import { Provider } from 'react-redux'
8+
import reducer from './reducers'
9+
import thunk from 'redux-thunk'
10+
import { createLogger } from 'redux-logger'
11+
import { BrowserRouter as Router, Route } from 'react-router-dom'
12+
13+
import dataServices from './actions'
14+
615
import App from './containers/App'
716

8-
const home_elem = document.getElementById('Home')
17+
import style from '../../styles/src/site.scss'
18+
19+
// Grab the state from a global variable injected into the server-generated HTML
20+
const preloaded_state = window.__PRELOADED_STATE__
21+
22+
// Allow the passed state to be garbage-collected
23+
delete window.__PRELOADED_STATE__
24+
25+
const middleware = [ thunk, ...dataServices ]
26+
// if (process.env.NODE_ENV !== 'production') {
27+
// middleware.push(createLogger())
28+
// }
29+
30+
const store = createStore(
31+
reducer,
32+
preloaded_state,
33+
applyMiddleware(...middleware)
34+
)
35+
36+
// This is how you would trigger Ajax calls to fetch redux data
37+
// store.dispatch({type: 'REQUEST_DOCUMENTS'})
38+
// store.dispatch({type: 'REQUEST_USER'})
39+
// store.dispatch({type: 'REQUEST_USERS'})
940

1041
const render = Component => {
1142
const NextApp = require('./containers/App').default
1243
hydrate(
1344
<AppContainer>
14-
<NextApp />
15-
</AppContainer>, home_elem
45+
<Provider store={store}>
46+
<Router>
47+
<NextApp store={store}/>
48+
</Router>
49+
</Provider>
50+
</AppContainer>, document.getElementById('Home')
1651
)
1752
}
1853

routes/api/documents.js

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,34 @@ const s3 = new S3({
66
region: process.env.S3_REGION
77
})
88

9-
let getLoggedInUsers = (req, res, next) => {
10-
keystone.list('Document').model.find({
11-
users: req.user.id
12-
}).populate('investment').exec((err, documents) => {
13-
if(err){
14-
return res.status(500).jsonp({
15-
error: err.message,
16-
success: false,
17-
data: {}
18-
})
19-
}
20-
res.jsonp({
21-
error: '',
22-
success: true,
23-
data: {
24-
documents
25-
}
26-
})
27-
})
9+
const {documents} = require('../services/documents')
10+
11+
const { authErrResponse, errResponse, successResponse } = require('./helpers')
12+
13+
let getLoggedInUsers = async (req, res, next) => {
14+
if(!req.user) return authErrResponse({res})
15+
16+
try {
17+
let documents = await documents.getLoggedInUsers(req, res, next)
18+
successResponse({res, data: { documents }})
19+
}
20+
catch(err){
21+
errResponse({err, res})
22+
}
2823
}
2924

3025
let getDocumentsFileContents = (req, res, next) => {
26+
if(!req.user) return authErrResponse({res})
27+
3128
keystone.list('Document').model.find({
3229
users: req.user.id,
3330
_id: req.params.document_id
3431
}).exec((err, documents) => {
3532
if(err){
36-
return res.status(500).jsonp({
37-
error: err.message,
38-
success: false,
39-
data: {}
40-
})
33+
return errResponse({err, res})
4134
}
4235
else if(documents.length === 0){
43-
return res.status(500).jsonp({
44-
error: 'File not found',
45-
success: false,
46-
data: {}
47-
})
36+
return errResponse({err: new Error('File not found'), res})
4837
}
4938
const document = documents[0]
5039
const params = {

routes/api/helpers/index.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
let authErrResponse = ({res, status = 404, data = {}}) => (
2+
res.status(status).jsonp({
3+
error: 'You must be signed in to do that',
4+
success: false,
5+
data
6+
})
7+
)
8+
9+
let errResponse = ({err, res, status = 500, data = {}}) => {
10+
11+
console.log(err)
12+
13+
return res.status(status).jsonp({
14+
error: err.message,
15+
success: false,
16+
data
17+
})
18+
}
19+
20+
let successResponse = ({res, data, status = 200}) => (
21+
res.status(status).jsonp({
22+
error: '',
23+
success: true,
24+
data
25+
})
26+
)
27+
28+
module.exports.authErrResponse = authErrResponse
29+
module.exports.errResponse = errResponse
30+
module.exports.successResponse = successResponse

0 commit comments

Comments
 (0)