PiotrKujawa / redux-deep-persist

Redux Deep Persist creates a redux-persist configuration for any level of a nested state.
MIT License
40 stars 2 forks source link

Redux Deep Persist

npm version build status npm downloads license

Demo Page

About this package

Redux Deep Perist contains transforms and state reconciler for Redux Persist giving you a possibility to define a nested configuration for your redux-persist.

If your redux state is deeply nested you don't have to create multiple, nested persist configs. You can easily create a whitelist or a blacklist for fields at any level of your state, using simple dot notation ['someProp.secondLevel.thirdLevel.anotherLevel']

Redux documentation recommends to keep the state as flat as possible, but it is not always possible. Redux Deep Persist may be very helpful in a situation when deep nesting is hard to avoid.

Installation

npm install redux-deep-persist

Usage

Configuration is similar to the Redux Persist, the only difference is you don't have to define nested persist configs. You can use getPersistConfig which will return the correct configuration you need.

It doesn't matter how deep you want to persist your state.

Example

State:

{
    property1: {
        a1: {
            b1: {
                c1: 'some value'
            }
        },
        a2: {
            b2: {
                c2: 'some value',
                d2: 'some value'
            }
        }
    },
    property2: {
        a1: {
            b1: {
                c1: {
                    d1: 'some value'
                }
            }
        }
        a2: 'some value'
    },
}

Configuration

import { getPersistConfig } from 'redux-deep-persist';

const config = getPersistConfig({
    key: 'root',
    storage: LocalStorage, // whatever storage you use
    whitelist: [
        'property1.a1.b1',  
        'property1.a2.b2.c2',  
        'property2.a2',
    ],
    rootReducer, // your root reducer must be also passed here
    ... // any other props from original redux-persist config omitting the state reconciler
})

Whitelist configuration property contains paths that define pieces of your state to be kept in your storage.

Use cases

{
    ...
    whitelist: ['a.b.4.c.8.5'] // the numbers represent indexes of arrays
}

Errors and their meaning

The package has config validators and if your config is wrong you may see the following errors:

Examples repository

Contributors

I want to thank Andrzej Wilde and David de Rosier for all their support and accurate reviews.

License

MIT