1.0.5 • Published 3 years ago

redux-persist-complex-transform v1.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

Info

This transform allows filter, encrypt, compress, versioning and expiring persisted data from redux-persist. Also works with immutable and seamless-immutable data structures.

Installation

npm install redux-persist-complex-transform

or

yarn add redux-persist-complex-transform

Configuration

VariableTypeDescription
config{key: string: {Options & Exclusive options}}Configures transformation of the selected reducers. (key represents a reducer name used in redux store)
dataStructurestringState data structure. The only available options: 'plain', 'immutable', 'seamless-immutable'. (default: plain)
passwordstringPassword for a data encryption. (optional)
whitelistArraySpecifies reducers on which this transform should be applied. (default: all listed in the config above)

Options

VariableTypeDescription
defaultState{key: string: any}Redefines the default state for the selected reducer. (required only with the default (autoMergeLevel1) state reconciler, otherwise it's optional)
expirenumberAn expiration time in minutes. (default: 0 -> never)
versionstringState version. (optional)

Expiring or changing the version, turns a persisted state of the selected reducer to default.

Exclusive options

Only a one option from each of these groups can be applied at the same time.

VariableTypeDescription
encryptbooleanSpecify, if the reducer state should be encrypted on its way to a storage. (default: false)
compressbooleanSpecify, if the reducer state should be compressed on its way to a storage. (default: false)
VariableTypeDescription
blacklistArrayExcludes the selected variables from persist. (optional)
whitelistArrayDefines which an only variables will be persistent. (optional)

Some examples:

1) Plain object state with the default (autoMergeLevel1) state reconciler.

import complexTransform from 'redux-persist-complex-transform'
import { reducer as UserDataReduxReducer, INITIAL_STATE as UserDataInitial } from '../Redux/UserDataRedux'
import { reducer as AppDataReduxReducer, INITIAL_STATE as AppDataInitial } from '../Redux/AppDataRedux'

const reduxConfig = {
  appData: {
    defaultState: AppDataInitial,
    blacklist: ['some variable excluded from persist'],
    compress: true,
    version: 2,
  },
  userData: {
    defaultState: UserDataInitial,
    encrypt: true,
    version: 1,
  },
}, whitelist = Object.keys(reduxConfig)

const persistConfig = {
  key: 'app',
  storage: localForage.createInstance({
    drive: localForage.INDEXEDDB,
    name: 'MyAPP',
  }),
  transforms: [
    complexTransform({
      config: reduxConfig,
      password: '12345',
      whitelist,
    }),
  ],
  whitelist,
}

const rootReducer = () =>
  persistReducer(persistConfig,
    combineReducers({
      appData: AppDataReduxReducer,
      userData: UserDataReduxReducer,
    })
  )

2) Plain object state with the autoMergeLevel2 state reconciler.

import complexTransform from 'redux-persist-complex-transform'
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2'
import { reducer as UserDataReduxReducer } from '../Redux/UserDataRedux'
import { reducer as AppDataReduxReducer } from '../Redux/AppDataRedux'

const reduxConfig = {
  appData: {
    blacklist: ['some variable excluded from persist'],
    compress: true,
    version: 2,
  },
  userData: {
    encrypt: true,
    version: 1,
  },
}, whitelist = Object.keys(reduxConfig)

const persistConfig = {
  key: 'app',
  stateReconciler: autoMergeLevel2,
  storage: localForage.createInstance({
    drive: localForage.INDEXEDDB,
    name: 'MyAPP',
  }),
  transforms: [
    complexTransform({
      config: reduxConfig,
      password: '12345',
      whitelist,
    }),
  ],
  whitelist,
}

const rootReducer = () =>
  persistReducer(persistConfig,
    combineReducers({
      appData: AppDataReduxReducer,
      userData: UserDataReduxReducer,
    })
  )

3) Seamless-immutable state with an appropriate state reconciler.

import complexTransform from 'redux-persist-complex-transform'
import { seamlessImmutableReconciler } from 'redux-persist-seamless-immutable'
import { reducer as UserDataReduxReducer } from '../Redux/UserDataRedux'
import { reducer as AppDataReduxReducer } from '../Redux/AppDataRedux'

const reduxConfig = {
  appData: {
    blacklist: ['some variable excluded from persist'],
    compress: true,
    version: 2,
  },
  userData: {
    encrypt: true,
    version: 1,
  },
}, whitelist = Object.keys(reduxConfig)

const persistConfig = {
  key: 'app',
  stateReconciler: seamlessImmutableReconciler,
  storage: localForage.createInstance({
    drive: localForage.INDEXEDDB,
    name: 'MyAPP',
  }),
  transforms: [
    complexTransform({
      config: reduxConfig,
      dataStructure: 'seamless-immutable',
      password: '12345',
      whitelist,
    }),
  ],
  whitelist,
}

const rootReducer = () =>
  persistReducer(persistConfig,
    combineReducers({
      appData: AppDataReduxReducer,
      userData: UserDataReduxReducer,
    })
  )