From 6fbe06a43b432fc87ae17a73d4d12ed1da1da16d Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sun, 12 Jun 2016 23:26:18 +0200 Subject: [PATCH 1/2] Improve default transformer, Close #161 --- README.md | 45 +++++---------------------------------------- src/defaults.js | 10 +++++++--- 2 files changed, 12 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 32cf337..e747ce2 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,6 @@ * [Transform `Symbol()` action type to string](#transform-symbol-action-type-to-string) * [Log everything except actions with certain type](#log-everything-except-actions-with-certain-type) * [Collapse actions with certain type](#collapse-actions-with-certain-type) - * [Transform Immutable (without `combineReducers`)](#transform-immutable-without-combinereducers) - * [Transform Immutable (with `combineReducers`)](#transform-immutable-with-combinereducers) * [Log batched actions](#log-batched-actions) * [License](#license) @@ -56,9 +54,9 @@ createLogger(options?: Object) => LoggerMiddleware logErrors = true: Boolean, // Should the logger catch, log, and re-throw errors? collapsed, // Takes a boolean or optionally a function that receives `getState` function for accessing current store state and `action` object as parameters. Returns `true` if the log group should be collapsed, `false` otherwise. predicate, // If specified this function will be called before each action is processed with this middleware. - stateTransformer, // Transform state before print. Eg. convert Immutable object to plain JSON. - actionTransformer, // Transform state before print. Eg. convert Immutable object to plain JSON. - errorTransformer, // Transform state before print. Eg. convert Immutable object to plain JSON. + stateTransformer, // Transform state before print. + actionTransformer, // Transform state before print. + errorTransformer, // Transform state before print. diff = false: Boolean, // Show diff between states. diffPredicate // Filter function for showing states diff.' } @@ -126,12 +124,12 @@ Receives `getState` function for accessing current store state and `action` obj *Default: `null` (always log)* #### __stateTransformer = (state: Object) => state__ -Transform state before print. Eg. convert Immutable object to plain JSON. +Transform state before print. *Default: identity function* #### __actionTransformer = (action: Object) => action__ -Transform action before print. Eg. convert Immutable object to plain JSON. +Transform action before print. *Default: identity function* @@ -192,39 +190,6 @@ createLogger({ }); ``` -### Transform Immutable (without `combineReducers`) -```javascript -import { Iterable } from 'immutable'; - -const stateTransformer = (state) => { - if (Iterable.isIterable(state)) return state.toJS(); - else return state; -}; - -const logger = createLogger({ - stateTransformer, -}); -``` - -### Transform Immutable (with `combineReducers`) -```javascript -const logger = createLogger({ - stateTransformer: (state) => { - let newState = {}; - - for (var i of Object.keys(state)) { - if (Immutable.Iterable.isIterable(state[i])) { - newState[i] = state[i].toJS(); - } else { - newState[i] = state[i]; - } - }; - - return newState; - } -}); -``` - ### Log batched actions Thanks to [@smashercosmo](https://github.com/smashercosmo) ```javascript diff --git a/src/defaults.js b/src/defaults.js index b1ab5d7..6bc61a5 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -1,3 +1,7 @@ +// Ensure object with toJSON method is converted to plain object. Useful for +// Immutable.js. https://github.com/evgenyrodionov/redux-logger/issues/161 +const ensurePlainObject = object => JSON.parse(JSON.stringify(state)); + export default { level: `log`, logger: console, @@ -6,9 +10,9 @@ export default { predicate: undefined, duration: false, timestamp: true, - stateTransformer: state => state, - actionTransformer: action => action, - errorTransformer: error => error, + stateTransformer: state => ensurePlainObject(state), + actionTransformer: action => ensurePlainObject(action), + errorTransformer: error => ensurePlainObject(error), colors: { title: () => `#000000`, prevState: () => `#9E9E9E`, From 1a75738a852a7db8253a66a83a6512ed2ddad20f Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sun, 12 Jun 2016 23:28:22 +0200 Subject: [PATCH 2/2] Fix typo --- src/defaults.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/defaults.js b/src/defaults.js index 6bc61a5..f327781 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -1,6 +1,6 @@ // Ensure object with toJSON method is converted to plain object. Useful for // Immutable.js. https://github.com/evgenyrodionov/redux-logger/issues/161 -const ensurePlainObject = object => JSON.parse(JSON.stringify(state)); +const ensurePlainObject = object => JSON.parse(JSON.stringify(object)); export default { level: `log`,