Skip to content

Commit 230fd04

Browse files
committed
update package and use @loadable/component instead of loadable-components
1 parent 2139cc0 commit 230fd04

21 files changed

+121
-109
lines changed

.babelrc

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
}
2222
],
2323
"add-module-exports",
24-
"loadable-components/babel",
24+
"@loadable/babel-plugin",
2525
[
2626
"@babel/plugin-transform-runtime",
2727
{

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Basically page component is implemented using React.PureComponent.
7373
/* @flow */
7474

7575
import * as React from 'react';
76-
import Helmet from 'react-helmet';
76+
import { Helmet } from 'react-helmet-async';
7777
import Button from 'components/Button';
7878
import Title from 'components/Title';
7979
import SubTitle from 'components/SubTitle';

index.js

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
if (process.env.NODE_ENV === 'production') {
2-
global.manifest = require('./dist/public/static/javascripts/manifest.json');
32
require('./dist/server');
43
} else {
54
require('@babel/register');

package.json

+46-44
Original file line numberDiff line numberDiff line change
@@ -34,89 +34,91 @@
3434
"heroku-postbuild": "npm run build"
3535
},
3636
"dependencies": {
37-
"@babel/polyfill": "^7.4.4",
37+
"@babel/polyfill": "^7.6.0",
38+
"@loadable/babel-plugin": "^5.10.3",
39+
"@loadable/component": "^5.10.3",
40+
"@loadable/server": "^5.10.3",
41+
"@loadable/webpack-plugin": "^5.7.1",
3842
"axios": "^0.19.0",
3943
"body-parser": "^1.19.0",
4044
"compression": "^1.7.4",
4145
"cookie-parser": "^1.4.4",
4246
"express": "^5.0.0-alpha.7",
43-
"helmet": "^3.18.0",
47+
"helmet": "^3.21.1",
4448
"hpp": "^0.2.2",
4549
"html-minifier": "^4.0.0",
4650
"jsonwebtoken": "^8.5.1",
47-
"loadable-components": "^2.2.3",
4851
"morgan": "^1.9.1",
4952
"nprogress": "^0.2.0",
50-
"path-to-regexp": "^3.0.0",
51-
"react": "^16.8.6",
53+
"path-to-regexp": "^3.1.0",
54+
"react": "^16.10.1",
5255
"react-cookie": "1.0.5",
53-
"react-dom": "^16.8.6",
54-
"react-helmet": "^5.2.1",
56+
"react-dom": "^16.10.1",
57+
"react-helmet-async": "^1.0.3",
5558
"react-redux": "5.1.1",
56-
"react-router-config": "5.0.1",
57-
"react-router-dom": "^4.3.1",
59+
"react-router-config": "5.1.1",
60+
"react-router-dom": "^5.1.2",
5861
"redux": "^4.0.4",
59-
"redux-nprogress": "^1.0.2",
6062
"redux-thunk": "^2.3.0",
61-
"serialize-javascript": "^1.7.0",
63+
"serialize-javascript": "^2.1.0",
6264
"serve-favicon": "^2.5.0",
63-
"styled-components": "^4.3.2",
64-
"styled-reset": "^3.0.0"
65+
"styled-components": "^4.4.0",
66+
"styled-reset": "^4.0.1"
6567
},
6668
"devDependencies": {
67-
"@babel/core": "^7.5.4",
68-
"@babel/plugin-transform-runtime": "^7.5.0",
69-
"@babel/preset-env": "^7.5.4",
69+
"@babel/core": "^7.6.2",
70+
"@babel/plugin-transform-runtime": "^7.6.2",
71+
"@babel/preset-env": "^7.6.2",
7072
"@babel/preset-flow": "^7.0.0",
7173
"@babel/preset-react": "^7.0.0",
72-
"@babel/register": "^7.4.4",
73-
"@storybook/addon-links": "^5.1.9",
74-
"@storybook/react": "^5.1.9",
75-
"babel-eslint": "^10.0.2",
76-
"babel-jest": "^24.8.0",
74+
"@babel/register": "^7.6.2",
75+
"@storybook/addon-links": "^5.2.1",
76+
"@storybook/react": "^5.2.1",
77+
"babel-eslint": "^10.0.3",
78+
"babel-jest": "^24.9.0",
7779
"babel-loader": "^8.0.6",
7880
"babel-plugin-add-module-exports": "^1.0.2",
7981
"babel-plugin-dynamic-import-node": "^2.3.0",
8082
"babel-plugin-module-resolver": "^3.2.0",
8183
"babel-plugin-styled-components": "^1.10.6",
8284
"clean-webpack-plugin": "1.0.1",
83-
"copy-webpack-plugin": "^5.0.3",
85+
"copy-webpack-plugin": "^5.0.4",
8486
"enzyme": "^3.10.0",
8587
"enzyme-adapter-react-16": "^1.14.0",
86-
"enzyme-to-json": "^3.3.5",
87-
"eslint": "^6.0.1",
88-
"eslint-config-airbnb": "^17.1.1",
89-
"eslint-config-prettier": "^6.0.0",
88+
"enzyme-to-json": "^3.4.1",
89+
"eslint": "^6.5.1",
90+
"eslint-config-airbnb": "^18.0.1",
91+
"eslint-config-prettier": "^6.3.0",
9092
"eslint-import-resolver-babel-module": "^5.1.0",
91-
"eslint-plugin-flowtype": "^3.11.1",
92-
"eslint-plugin-import": "^2.18.0",
93+
"eslint-plugin-flowtype": "^4.3.0",
94+
"eslint-plugin-import": "^2.18.2",
9395
"eslint-plugin-jsx-a11y": "^6.2.3",
94-
"eslint-plugin-prettier": "^3.1.0",
95-
"eslint-plugin-react": "^7.14.2",
96-
"flow-bin": "^0.102.0",
97-
"flow-typed": "^2.5.2",
96+
"eslint-plugin-prettier": "^3.1.1",
97+
"eslint-plugin-react": "^7.15.1",
98+
"flow-bin": "^0.109.0",
99+
"flow-typed": "^2.6.1",
98100
"friendly-errors-webpack-plugin": "^1.7.0",
99-
"jest": "^24.8.0",
101+
"jest": "^24.9.0",
100102
"jest-styled-components": "^6.3.3",
101103
"json-loader": "^0.5.7",
102-
"nodemon": "^1.19.1",
104+
"nodemon": "^1.19.3",
103105
"prettier": "^1.18.2",
104106
"raf": "^3.4.1",
105-
"react-hot-loader": "^4.12.6",
107+
"react-hot-loader": "^4.12.14",
106108
"redux-logger": "^3.0.6",
107109
"string-replace-webpack-plugin": "^0.1.3",
108-
"stylelint": "^10.1.0",
109-
"stylelint-config-prettier": "^5.2.0",
110-
"stylelint-config-standard": "^18.3.0",
110+
"stylelint": "^11.0.0",
111+
"stylelint-config-prettier": "^6.0.0",
112+
"stylelint-config-standard": "^19.0.0",
111113
"stylelint-config-styled-components": "^0.1.1",
112114
"stylelint-processor-styled-components": "^1.8.0",
113-
"uglifyjs-webpack-plugin": "^2.1.3",
114-
"webpack": "^4.35.3",
115-
"webpack-bundle-analyzer": "^3.3.2",
116-
"webpack-cli": "^3.3.5",
117-
"webpack-dev-middleware": "^3.7.0",
115+
"uglifyjs-webpack-plugin": "^2.2.0",
116+
"webpack": "^4.41.0",
117+
"webpack-bundle-analyzer": "^3.5.2",
118+
"webpack-cli": "^3.3.9",
119+
"webpack-dev-middleware": "^3.7.2",
118120
"webpack-hot-middleware": "^2.25.0",
119-
"webpack-manifest-plugin": "^2.0.4",
121+
"webpack-manifest-plugin": "^2.2.0",
120122
"webpack-node-externals": "^1.7.2",
121123
"workbox-sw": "^4.3.1",
122124
"workbox-webpack-plugin": "^4.3.1"

src/client.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import React from 'react';
55
import ReactDOM from 'react-dom';
66
import { Provider } from 'react-redux';
77
import { BrowserRouter } from 'react-router-dom';
8-
import { loadComponents } from 'loadable-components';
8+
import { HelmetProvider } from 'react-helmet-async';
9+
import { loadableReady } from '@loadable/component';
910
import configureStore from 'utils/configureStore';
1011
import App from 'components/App';
1112
import { isDevelopment } from 'config/env';
@@ -14,12 +15,14 @@ const initialState = window.__INITIAL_STATE__;
1415
const store = configureStore(initialState);
1516
const root: ?Element = document.getElementById('root');
1617

17-
loadComponents().then(() => {
18+
loadableReady().then(() => {
1819
if (root) {
19-
ReactDOM.render(
20+
ReactDOM[isDevelopment ? 'render' : 'hydrate'](
2021
<Provider store={store}>
2122
<BrowserRouter>
22-
<App />
23+
<HelmetProvider>
24+
<App />
25+
</HelmetProvider>
2326
</BrowserRouter>
2427
</Provider>,
2528
root

src/components/App/index.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import * as React from 'react';
44
import { bindActionCreators, compose } from 'redux';
55
import { connect } from 'react-redux';
66
import { Route, withRouter } from 'react-router-dom';
7-
import Helmet from 'react-helmet';
8-
import { NProgress } from 'redux-nprogress';
7+
import { Helmet } from 'react-helmet-async';
98
import Container from 'components/Container';
109
import Footer from 'components/Footer';
1110
import Header from 'components/Header';
@@ -59,7 +58,6 @@ class App extends React.PureComponent<PageProps> {
5958
<Container>
6059
<Helmet meta={metaData} link={linkData} />
6160
<GlobalStyle />
62-
<NProgress />
6361
{error ? <Error hideError={hideError}>{error}</Error> : null}
6462
<Header
6563
isLoggedIn={isLoggedIn}

src/components/PreloadLink/index.js

+6-17
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import * as React from 'react';
44
import { compose } from 'redux';
55
import { connect } from 'react-redux';
66
import { withRouter } from 'react-router-dom';
7-
import { beginTask, endTask } from 'redux-nprogress';
87
import pathToRegexp from 'path-to-regexp';
98
import { endpoint } from 'config/url';
109
import routes from 'routes';
@@ -23,12 +22,11 @@ type DispatchProps = {
2322
state: ReduxState,
2423
};
2524

26-
function loadComponent(targetRoute, targetComponent) {
27-
if (targetRoute && targetComponent.loadingPromise === null) {
28-
targetComponent.load();
29-
return targetComponent.loadingPromise;
25+
function loadComponent(targetRoute) {
26+
if (targetRoute && targetRoute.component && targetRoute.component.load) {
27+
return targetRoute.component.load();
3028
}
31-
return Promise.resolve();
29+
return Promise.resolve({ default: { loadData: null } });
3230
}
3331
function getPageName(href) {
3432
return Object.keys(endpoint).find(key =>
@@ -58,33 +56,24 @@ function PreloadLink(props: StateProps & DispatchProps & Props) {
5856
history: { push },
5957
dispatch,
6058
state,
61-
isProgress = true,
6259
isLoadData = true,
6360
} = props;
6461
const authRoutes = routes[0].routes;
6562
const pageName = getPageName(href);
6663
const targetEndpoint = pageName ? endpoint[pageName] : '';
6764
const targetRoute = authRoutes.find(route => route.path === targetEndpoint);
68-
const targetComponent = targetRoute ? targetRoute.component : {};
6965
const params = getParams(targetEndpoint, href);
7066

7167
return React.cloneElement(children, {
7268
href,
7369
onClick: async e => {
7470
e.preventDefault();
75-
if (isProgress) {
76-
dispatch(beginTask());
77-
}
78-
await loadComponent(targetRoute, targetComponent);
79-
80-
const { loadData } = targetComponent;
71+
const loadedComponent = await loadComponent(targetRoute);
72+
const { loadData } = loadedComponent.default;
8173

8274
if (loadData && isLoadData) {
8375
await loadData(dispatch, state, params);
8476
}
85-
if (isProgress) {
86-
dispatch(endTask());
87-
}
8877
push(href);
8978
},
9079
});

src/pages/About/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22

33
import * as React from 'react';
4-
import Helmet from 'react-helmet';
4+
import { Helmet } from 'react-helmet-async';
55
import Title from 'components/Title';
66
import SubTitle from 'components/SubTitle';
77
import StackList from 'components/StackList';

src/pages/Home/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22

33
import * as React from 'react';
4-
import Helmet from 'react-helmet';
4+
import { Helmet } from 'react-helmet-async';
55
import Button from 'components/Button';
66
import Title from 'components/Title';
77
import SubTitle from 'components/SubTitle';

src/pages/Landing/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22

33
import * as React from 'react';
4-
import Helmet from 'react-helmet';
4+
import { Helmet } from 'react-helmet-async';
55
import LoginForm from 'components/LoginForm';
66
import Title from 'components/Title';
77
import type { PageProps } from 'types';

src/pages/NotFound/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22

33
import * as React from 'react';
4-
import Helmet from 'react-helmet';
4+
import { Helmet } from 'react-helmet-async';
55
import Title from 'components/Title';
66

77
export default function NotFoundPage() {

src/pages/RedirectAbout/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22

33
import * as React from 'react';
4-
import Helmet from 'react-helmet';
4+
import { Helmet } from 'react-helmet-async';
55
import { endpoint } from 'config/url';
66
import type { PageProps } from 'types';
77

src/pages/UserDetail/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22

33
import * as React from 'react';
4-
import Helmet from 'react-helmet';
4+
import { Helmet } from 'react-helmet-async';
55
import Title from 'components/Title';
66
import UserDetail from 'components/UserDetail';
77
import { fetchUser as fetchUserFromServer } from 'actions/user';

src/reducers/index.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
/* @flow */
22

33
import { combineReducers } from 'redux';
4-
import { nprogress } from 'redux-nprogress';
54
import user from 'reducers/user';
65
import ui from 'reducers/ui';
76
import type { Action } from 'types';
87

98
const reducers = {
10-
nprogress,
119
user,
1210
ui,
1311
};

0 commit comments

Comments
 (0)