From 3b48cec17ddad412d0d50da4031e6f18e9436423 Mon Sep 17 00:00:00 2001 From: Ihor Kalnytskyi Date: Thu, 4 Jan 2018 15:03:17 +0200 Subject: [PATCH] Use immutable.Map() as initial state for store We already use immutable.js classes in state to be protected from accidental state mutation. However, the protect is not complete as the root object is still plain Object() instance. So let's complete protection by using immutable.js Map as root object for state. Besides, having root state as immutable.js Map we make it easier to convert the whole state to plain JS in tests. --- package-lock.json | 5 +++++ package.json | 1 + src/components/RecentSnippets.jsx | 4 ++-- src/components/Snippet.jsx | 2 +- src/components/Syntaxes.jsx | 2 +- src/reducers/index.js | 2 +- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d6f6b4..241d994 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8840,6 +8840,11 @@ "symbol-observable": "1.1.0" } }, + "redux-immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz", + "integrity": "sha1-Ohoy32Y2ZGK2NpHw4dw15HK7yfM=" + }, "redux-thunk": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz", diff --git a/package.json b/package.json index 96cd240..147ee39 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "react-redux": "^5.0.6", "react-router-dom": "^4.2.2", "redux": "^3.7.2", + "redux-immutable": "^4.0.0", "redux-thunk": "^2.2.0" }, "devDependencies": { diff --git a/src/components/RecentSnippets.jsx b/src/components/RecentSnippets.jsx index e3b08be..dd39187 100644 --- a/src/components/RecentSnippets.jsx +++ b/src/components/RecentSnippets.jsx @@ -26,6 +26,6 @@ class RecentSnippets extends React.Component { } export default connect(state => ({ - snippets: state.snippets, - recent: state.recent, + snippets: state.get('snippets'), + recent: state.get('recent'), }))(RecentSnippets); diff --git a/src/components/Snippet.jsx b/src/components/Snippet.jsx index 14566c5..e4e76e8 100644 --- a/src/components/Snippet.jsx +++ b/src/components/Snippet.jsx @@ -83,5 +83,5 @@ class Snippet extends React.Component { } export default connect((state, ownProps) => ({ - snippet: state.snippets.get(Number(ownProps.match.params.id)), + snippet: state.getIn(['snippets', Number(ownProps.match.params.id)]), }))(Snippet); diff --git a/src/components/Syntaxes.jsx b/src/components/Syntaxes.jsx index 89cb21b..e135428 100644 --- a/src/components/Syntaxes.jsx +++ b/src/components/Syntaxes.jsx @@ -57,5 +57,5 @@ class Syntaxes extends React.Component { } export default connect(state => ({ - syntaxes: state.syntaxes, + syntaxes: state.get('syntaxes'), }))(Syntaxes); diff --git a/src/reducers/index.js b/src/reducers/index.js index 85492a5..62d442d 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -1,5 +1,5 @@ import { List, Map, fromJS } from 'immutable'; -import { combineReducers } from 'redux'; +import { combineReducers } from 'redux-immutable'; const snippets = (state = Map(), action) => { switch (action.type) {