Skip to content

Commit 85430f9

Browse files
committed
upgrade
1 parent a4546ab commit 85430f9

File tree

16 files changed

+653
-805
lines changed

16 files changed

+653
-805
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ This is a starter boilerplate app I've put together using the following technolo
2424
* [Webpack Hot Middleware](https://github.com/glenjamin/webpack-hot-middleware)
2525
* [Redux](https://github.com/reactjs/redux)'s futuristic [Flux](https://facebook.github.io/react/blog/2014/05/06/flux.html) implementation
2626
* [Redux Dev Tools](https://github.com/reactjs/redux-devtools) for next generation DX (developer experience). Watch [Dan Abramov's talk](https://www.youtube.com/watch?v=xsSnOQynTHs).
27-
* [React Router Redux](https://github.com/reactjs/react-router-redux) Redux/React Router bindings.
2827
* [ESLint](http://eslint.org) to maintain a consistent code style
2928
* [react-final-form](https://github.com/final-form/react-final-form) to manage form state
3029
* [lru-memoize](https://github.com/erikras/lru-memoize) to speed up form validation

package.json

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,13 @@
6464
"classnames": "^2.2.5",
6565
"compression": "^1.6.2",
6666
"cookie-parser": "^1.4.3",
67-
"cookies": "^0.7.1",
6867
"cookies-js": "^1.2.3",
6968
"core-js": "^3.0.1",
7069
"express": "^4.15.4",
7170
"express-session": "^1.15.5",
7271
"feathers-authentication-hooks": "^0.3.0",
7372
"feathers-hooks-common": "^4.10.0",
74-
"feathers-nedb": "^3.1.0",
73+
"feathers-nedb": "^4.0.1",
7574
"final-form": "^4.6.1",
7675
"history": "^4.7.2",
7776
"http-proxy": "^1.16.2",
@@ -90,22 +89,20 @@
9089
"react": "^16.8.6",
9190
"react-bootstrap": "^0.32.1",
9291
"react-dom": "^16.8.6",
93-
"react-final-form": "^3.4.0",
92+
"react-final-form": "^4.1.0",
9493
"react-helmet": "^5.0.3",
9594
"react-loadable": "^5.3.0",
96-
"react-redux": "^5.0.6",
97-
"react-router": "^4.2.0",
98-
"react-router-bootstrap": "^0.24.4",
99-
"react-router-config": "^1.0.0-beta.4",
100-
"react-router-dom": "^4.2.2",
101-
"react-router-redux": "^5.0.0-alpha.9",
95+
"react-redux": "^7.0.2",
96+
"react-router": "^5.0.0",
97+
"react-router-bootstrap": "^0.25.0",
98+
"react-router-config": "^5.0.0",
99+
"react-router-dom": "^5.0.0",
102100
"recompose": "^0.30.0",
103101
"redial": "^0.5.0",
104102
"redux": "^4.0.0",
105103
"redux-auth-wrapper": "^2.0.2",
106104
"redux-logger": "^3.0.6",
107105
"redux-persist": "^5.3.4",
108-
"redux-persist-cookie-storage": "^1.0.0",
109106
"regenerator-runtime": "^0.13.2",
110107
"serialize-javascript": "^1.3.0",
111108
"serve-favicon": "^2.3.2",
@@ -141,18 +138,18 @@
141138
"bootstrap-loader": "^2.1.0",
142139
"bootstrap-sass": "^3.3.7",
143140
"chai": "^4.1.1",
144-
"clean-webpack-plugin": "^0.1.15",
141+
"clean-webpack-plugin": "^2.0.1",
145142
"concurrently": "^4.0.1",
146143
"cross-env": "^5.1.1",
147144
"css-loader": "^1.0.0",
148145
"eslint": "^5.2.0",
149146
"eslint-config-airbnb": "^17.0.0",
150147
"eslint-loader": "^2.0.0",
151-
"eslint-plugin-import": "^2.2.0",
148+
"eslint-plugin-import": "^2.17.1",
152149
"eslint-plugin-jsx-a11y": "^6.0.3",
153150
"eslint-plugin-react": "^7.2.1",
154151
"extract-text-webpack-plugin": "^4.0.0-beta.0",
155-
"file-loader": "^2.0.0",
152+
"file-loader": "^3.0.1",
156153
"font-awesome": "^4.7.0",
157154
"html-webpack-plugin": "^3.1.0",
158155
"husky": "^1.3.1",
@@ -161,13 +158,13 @@
161158
"jest-cli": "^24.7.1",
162159
"less": "^3.0.0-alpha.3",
163160
"less-loader": "^4.0.3",
164-
"lighthouse": "^3.0.3",
165-
"lint-staged": "^7.0.1",
166-
"mini-css-extract-plugin": "^0.4.2",
161+
"lighthouse": "^4.3.0",
162+
"lint-staged": "^8.1.5",
163+
"mini-css-extract-plugin": "^0.6.0",
167164
"node-sass": "^4.9.0",
168165
"piping": "^1.0.0-rc.4",
169166
"postcss": "^7.0.2",
170-
"postcss-browser-reporter": "^0.5.0",
167+
"postcss-browser-reporter": "^0.6.0",
171168
"postcss-cssnext": "^3.0.2",
172169
"postcss-import": "^12.0.0",
173170
"postcss-loader": "^3.0.0",
@@ -176,14 +173,11 @@
176173
"prettier-eslint-cli": "^4.6.1",
177174
"react-a11y": "^1.0.0",
178175
"react-hot-loader": "^4.0.0",
179-
"redux-devtools": "^3.3.2",
180-
"redux-devtools-dock-monitor": "^1.1.1",
181-
"redux-devtools-log-monitor": "^1.2.0",
182176
"resolve-url-loader": "^2.2.1",
183177
"sass-loader": "^7.0.1",
184178
"style-loader": "^0.23.0",
185179
"sw-precache-webpack-plugin": "^0.11.3",
186-
"uglifyjs-webpack-plugin": "^1.1.6",
180+
"terser-webpack-plugin": "^1.2.3",
187181
"url-loader": "^1.0.1",
188182
"webpack": "^4.7.0",
189183
"webpack-cli": "^3.0.0",

src/app.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,19 @@ export function createApp(req) {
2222
}
2323

2424
if (__SERVER__ && req) {
25+
const token = req.header('authorization') || (req.cookies && req.cookies['feathers-jwt']);
2526
const app = configureApp(
2627
rest(host('/api')).axios(
2728
axios.create({
2829
headers: {
2930
Cookie: req.get('cookie'),
30-
authorization: req.header('authorization') || ''
31+
Authorization: token
3132
}
3233
})
3334
)
3435
);
3536

36-
const accessToken = req.header('authorization') || (req.cookies && req.cookies['feathers-jwt']);
37-
app.set('accessToken', accessToken);
37+
app.set('accessToken', token);
3838

3939
return app;
4040
}

src/client.js

Lines changed: 48 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,26 @@ import 'core-js/stable';
55
import 'regenerator-runtime/runtime';
66
import React from 'react';
77
import ReactDOM from 'react-dom';
8-
import { ConnectedRouter } from 'react-router-redux';
8+
import { Router } from 'react-router';
99
import { renderRoutes } from 'react-router-config';
1010
import { trigger } from 'redial';
1111
import { createBrowserHistory } from 'history';
1212
import Loadable from 'react-loadable';
1313
import { AppContainer as HotEnabler } from 'react-hot-loader';
1414
import { getStoredState } from 'redux-persist';
15-
import { CookieStorage } from 'redux-persist-cookie-storage';
16-
import Cookies from 'cookies-js';
15+
import localForage from 'localforage';
1716
import { socket, createApp } from 'app';
1817
import createStore from 'redux/create';
1918
import apiClient from 'helpers/apiClient';
2019
import routes from 'routes';
2120
import isOnline from 'utils/isOnline';
2221
import asyncMatchRoutes from 'utils/asyncMatchRoutes';
23-
import { ReduxAsyncConnect, Provider } from 'components';
22+
import { RouterTrigger, Provider } from 'components';
23+
import NProgress from 'nprogress';
2424

2525
const persistConfig = {
2626
key: 'root',
27-
storage: new CookieStorage(Cookies),
27+
storage: localForage,
2828
stateReconciler(inboundState, originalState) {
2929
// Ignore state from cookies, only use preloadedState from window object
3030
return originalState;
@@ -76,44 +76,59 @@ initSocket();
7676
persistConfig
7777
});
7878

79-
const hydrate = async _routes => {
80-
const { components, match, params } = await asyncMatchRoutes(_routes, history.location.pathname);
81-
const triggerLocals = {
82-
...providers,
83-
store,
84-
match,
85-
params,
86-
history,
87-
location: history.location
88-
};
79+
const hydrate = _routes => {
80+
const triggerHooks = async (pathname, indicator = true) => {
81+
if (indicator) {
82+
NProgress.start();
83+
}
84+
85+
const { components, match, params } = await asyncMatchRoutes(_routes, pathname);
86+
const triggerLocals = {
87+
...providers,
88+
store,
89+
match,
90+
params,
91+
history,
92+
location: history.location
93+
};
8994

90-
// Don't fetch data for initial route, server has already done the work:
91-
if (window.__PRELOADED__) {
92-
// Delete initial data so that subsequent data fetches can occur:
93-
delete window.__PRELOADED__;
94-
} else {
95-
// Fetch mandatory data dependencies for 2nd route change onwards:
96-
await trigger('fetch', components, triggerLocals);
97-
}
98-
await trigger('defer', components, triggerLocals);
95+
await trigger('inject', components, triggerLocals);
96+
97+
// Don't fetch data for initial route, server has already done the work:
98+
if (window.__PRELOADED__) {
99+
// Delete initial data so that subsequent data fetches can occur:
100+
delete window.__PRELOADED__;
101+
} else {
102+
// Fetch mandatory data dependencies for 2nd route change onwards:
103+
await trigger('fetch', components, triggerLocals);
104+
}
105+
await trigger('defer', components, triggerLocals);
106+
107+
if (indicator) {
108+
NProgress.done();
109+
}
110+
};
99111

100-
ReactDOM.hydrate(
112+
const element = (
101113
<HotEnabler>
102114
<Provider store={store} {...providers}>
103-
<ConnectedRouter history={history}>
104-
<ReduxAsyncConnect routes={_routes} store={store} helpers={providers}>
105-
{renderRoutes(_routes)}
106-
</ReduxAsyncConnect>
107-
</ConnectedRouter>
115+
<Router history={history}>
116+
<RouterTrigger trigger={triggerHooks}>{renderRoutes(_routes)}</RouterTrigger>
117+
</Router>
108118
</Provider>
109-
</HotEnabler>,
110-
dest
119+
</HotEnabler>
111120
);
121+
122+
if (dest.hasChildNodes()) {
123+
ReactDOM.hydrate(element, dest);
124+
} else {
125+
ReactDOM.render(element, dest);
126+
}
112127
};
113128

114129
await Loadable.preloadReady();
115130

116-
await hydrate(routes);
131+
hydrate(routes);
117132

118133
// Hot reload
119134
if (module.hot) {
@@ -128,27 +143,6 @@ initSocket();
128143
// Server-side rendering check
129144
if (process.env.NODE_ENV !== 'production') {
130145
window.React = React; // enable debugger
131-
132-
if (!dest || !dest.firstChild || !dest.firstChild.attributes || !dest.firstChild.attributes['data-reactroot']) {
133-
console.error(
134-
'Server-side React render was discarded.\n'
135-
+ 'Make sure that your initial render does not contain any client-side code.'
136-
);
137-
}
138-
}
139-
140-
// Dev tools
141-
if (__DEVTOOLS__ && !window.devToolsExtension) {
142-
const devToolsDest = document.createElement('div');
143-
window.document.body.insertBefore(devToolsDest, null);
144-
let DevTools = require('./containers/DevTools/DevTools');
145-
DevTools = DevTools.__esModule ? DevTools.default : DevTools;
146-
ReactDOM.hydrate(
147-
<Provider store={store}>
148-
<DevTools />
149-
</Provider>,
150-
devToolsDest
151-
);
152146
}
153147

154148
// Service worker

src/components/ReduxAsyncConnect/ReduxAsyncConnect.js

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)