From 79d2d7b31d1058b76e42b96287be0bc724ebeba7 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Fri, 23 Oct 2020 19:12:06 -0300 Subject: [PATCH] MM-28968 Fix redux-persist serializer (#4918) --- app/store/index.ts | 4 ++-- app/store/utils.js | 12 ++++++++++++ app/store/utils.test.js | 31 ++++++++++++++++++++++++++++++- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/app/store/index.ts b/app/store/index.ts index 206f3facc..4aee106ee 100644 --- a/app/store/index.ts +++ b/app/store/index.ts @@ -18,7 +18,7 @@ import appReducer from 'app/reducers'; import {createReducer, getStoredState} from './helpers'; import {createMiddlewares} from './middlewares'; import Store from './store'; -import {transformSet} from './utils'; +import {transformSet, serialize} from './utils'; /** * Configures and constructs the redux store. Accepts the following parameters: @@ -167,7 +167,7 @@ export default function configureStore(storage: any, preloadedState: any = {}, o const defaultConfig: PersistConfig = { key: 'root', storage, - serialize: (state: GlobalState) => ({...state}), + serialize, deserialize: false, blacklist: ['device', 'navigation', 'requests', '_persist'], transforms: [ diff --git a/app/store/utils.js b/app/store/utils.js index 1e830e4d8..052f964a8 100644 --- a/app/store/utils.js +++ b/app/store/utils.js @@ -30,6 +30,18 @@ function transformToSet(incoming) { return state; } +export function serialize(state) { + if (!state) { + return state; + } + + if (Array.isArray(state)) { + return [...state]; + } + + return {...state}; +} + export function transformSet(incoming, setTransforms, toStorage = true) { const state = {...incoming}; diff --git a/app/store/utils.test.js b/app/store/utils.test.js index 237c985e0..10661f3fe 100644 --- a/app/store/utils.test.js +++ b/app/store/utils.test.js @@ -4,7 +4,7 @@ import DeviceInfo from 'react-native-device-info'; import initialState from '@store/initial_state'; -import {getStateForReset} from '@store/utils'; +import {getStateForReset, serialize} from '@store/utils'; /* const {currentUserId} = currentState.entities.users; @@ -106,3 +106,32 @@ describe('getStateForReset', () => { expect(app.previousVersion).toStrictEqual(currentState.app.version); }); }); + +describe('Store serialzer', () => { + it('should set the value to be undefined', () => { + const value = serialize(); + expect(value).toBeUndefined(); + }); + + it('should set the value to be null', () => { + const value = serialize(null); + expect(value).toBeNull(); + }); + + it('should set the value to be a new array with the same values', () => { + const initial = [1, 2, 3]; + const value = serialize(initial); + expect(initial === value).toEqual(false); + expect(value).toEqual(initial); + }); + + it('should set the value to be a new object with the same values', () => { + const initial = { + key: '123', + value: 'some value', + }; + const value = serialize(initial); + expect(initial === value).toEqual(false); + expect(value).toEqual(initial); + }); +});