Skip to content

Commit 73d6234

Browse files
authored
Merge pull request #2187 from lindapaiste/refactor/redux-toolkit
Install and configure Redux Toolkit
2 parents e77bc6a + 70c901d commit 73d6234

File tree

10 files changed

+519
-450
lines changed

10 files changed

+519
-450
lines changed

Diff for: client/middleware.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createListenerMiddleware } from '@reduxjs/toolkit';
2+
3+
const listenerMiddleware = createListenerMiddleware();
4+
5+
export default listenerMiddleware;

Diff for: client/modules/App/App.jsx

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
22
import React, { useEffect, useRef, useState } from 'react';
33
import { useDispatch, useSelector } from 'react-redux';
44
import { useLocation } from 'react-router-dom';
5-
import getConfig from '../../utils/getConfig';
5+
import { showReduxDevTools } from '../../store';
66
import DevTools from './components/DevTools';
77
import { setPreviousPath } from '../IDE/actions/ide';
88
import { setLanguage } from '../IDE/actions/preferences';
@@ -52,9 +52,7 @@ const App = ({ children }) => {
5252
return (
5353
<div className="app">
5454
<CookieConsent hide={hide} />
55-
{isMounted &&
56-
!window.devToolsExtension &&
57-
getConfig('NODE_ENV') === 'development' && <DevTools />}
55+
{isMounted && showReduxDevTools() && <DevTools />}
5856
{children}
5957
</div>
6058
);

Diff for: client/modules/IDE/selectors/collections.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createSelector } from 'reselect';
1+
import { createSelector } from '@reduxjs/toolkit';
22
import differenceInMilliseconds from 'date-fns/differenceInMilliseconds';
33
import { find, orderBy } from 'lodash';
44
import { DIRECTION } from '../actions/sorting';

Diff for: client/modules/IDE/selectors/files.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createSelector } from 'reselect';
1+
import { createSelector } from '@reduxjs/toolkit';
22

33
const selectFiles = (state) => state.files;
44

Diff for: client/modules/IDE/selectors/project.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createSelector } from 'reselect';
1+
import { createSelector } from '@reduxjs/toolkit';
22

33
export const selectProjectOwner = (state) => state.project.owner;
44
export const selectProjectId = (state) => state.project.id;

Diff for: client/modules/IDE/selectors/projects.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createSelector } from 'reselect';
1+
import { createSelector } from '@reduxjs/toolkit';
22
import differenceInMilliseconds from 'date-fns/differenceInMilliseconds';
33
import { orderBy } from 'lodash';
44
import { DIRECTION } from '../actions/sorting';

Diff for: client/modules/IDE/selectors/users.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createSelector } from 'reselect';
1+
import { createSelector } from '@reduxjs/toolkit';
22
import getConfig from '../../../utils/getConfig';
33

44
export const getAuthenticated = (state) => state.user.authenticated;

Diff for: client/store.js

+24-18
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,36 @@
1-
import { createStore, applyMiddleware, compose } from 'redux';
2-
import thunk from 'redux-thunk';
1+
import { configureStore } from '@reduxjs/toolkit';
2+
import listenerMiddleware from './middleware';
33
import DevTools from './modules/App/components/DevTools';
44
import rootReducer from './reducers';
55
import { clearState, loadState } from './persistState';
66
import getConfig from './utils/getConfig';
77

8-
export default function configureStore(initialState) {
9-
const enhancers = [applyMiddleware(thunk)];
10-
11-
if (getConfig('CLIENT') && getConfig('NODE_ENV') === 'development') {
12-
// Enable DevTools only when rendering on client and during development.
13-
enhancers.push(
14-
window.devToolsExtension
15-
? window.devToolsExtension()
16-
: DevTools.instrument()
17-
);
18-
}
8+
// Enable DevTools only when rendering on client and during development.
9+
// Display the dock monitor only if no browser extension is found.
10+
export function showReduxDevTools() {
11+
return (
12+
getConfig('CLIENT') &&
13+
getConfig('NODE_ENV') === 'development' &&
14+
!window.__REDUX_DEVTOOLS_EXTENSION__
15+
);
16+
}
1917

18+
export default function setupStore(initialState) {
2019
const savedState = loadState();
2120
clearState();
2221

23-
const store = createStore(
24-
rootReducer,
25-
savedState != null ? savedState : initialState,
26-
compose(...enhancers)
27-
);
22+
const store = configureStore({
23+
reducer: rootReducer,
24+
middleware: (getDefaultMiddleware) =>
25+
getDefaultMiddleware({
26+
thunk: true,
27+
serializableCheck: true,
28+
// TODO: enable immutableCheck once the mutations are fixed.
29+
immutableCheck: false
30+
}).concat(listenerMiddleware.middleware),
31+
preloadedState: savedState || initialState,
32+
enhancers: showReduxDevTools() ? [DevTools.instrument()] : []
33+
});
2834

2935
if (module.hot) {
3036
// Enable Webpack hot module replacement for reducers

0 commit comments

Comments
 (0)