From 43a7700f5f117dd5dbe8f0710d2958310b96c759 Mon Sep 17 00:00:00 2001 From: NumminorihSF Date: Mon, 7 Aug 2017 15:49:22 +0700 Subject: [PATCH] Add custom state copier Now there is a problem with immutable structure. After stringify/parse, we have immutable#toString() but not real object. --- src/index.js | 1 + src/react.js | 20 ++++++++++++++++++-- src/utils.js | 7 ++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index d93f842..29ac71d 100644 --- a/src/index.js +++ b/src/index.js @@ -11,5 +11,6 @@ module.exports = { setTransactionName: opbeatReact.setTransactionName, getServiceContainer: opbeatReact.getServiceContainer, addFilter: opbeatReact.addFilter, + setStateCopier: opbeatReact.setStateCopier, wrapRouter: wrapRouter } diff --git a/src/react.js b/src/react.js index d41488c..00978d9 100644 --- a/src/react.js +++ b/src/react.js @@ -70,7 +70,8 @@ function configure (config, factory) { if (configService.get('sendStateOnException')) { var store = configService.get('redux._store') if (store && store.getState) { - data.extra['Store state'] = JSON.parse(JSON.stringify(store.getState())) + var copyState = getStateCopier() + data.extra['Store state'] = copyState(store.getState()) } var lastActions = configService.get('redux._lastActions') @@ -140,6 +141,20 @@ function setTransactionName (transactionName, transactionType) { } } +function getStateCopier () { + var copy = configService.get('redux._copyState') + + if (copy) { + return copy + } + + return reactUtils.defaultCopyState +} + +function setStateCopier (copy) { + configService.set('redux._copyState', copy) +} + module.exports = { configure: configure, setUserContext: function setUserContext (userContext) { @@ -156,5 +171,6 @@ module.exports = { startTransaction: startTransaction, setTransactionName: setTransactionName, getServiceContainer: getServiceContainer, - addFilter: addFilter + addFilter: addFilter, + setStateCopier: setStateCopier } diff --git a/src/utils.js b/src/utils.js index 1a76ef9..9b1c666 100644 --- a/src/utils.js +++ b/src/utils.js @@ -107,11 +107,16 @@ function patchObject (target, name, patchFn) { return delegate } +function defaultCopyState (state) { + return JSON.parse(JSON.stringify(state)) +} + module.exports = { nodeName: nodeName, isTopLevelWrapper: isTopLevelWrapper, RingBuffer: RingBuffer, DOMNodeName: DOMNodeName, inBrowser: inBrowser, - patchObject: patchObject + patchObject: patchObject, + defaultCopyState: defaultCopyState }