Newton's Poleless Magnet

    @snowpact/redux-persist-immutable-expire

    1.0.0 • Public • Published

    redux-persist-immutable-expire

    Create expiring storage for your Redux stores that uses Immutable

    npm

    Expiring transformer for redux-persist – Create expiring storage for your Redux Immutable stores.

    So you tried Redux Persist expire and it didn't work for your project because you're using Immutable ? You uses React Boiler Plate and you want to include an easy way to expire your reducers ?

    Thanks @kamranahmedse for his really easy to use Redux Persist expire transformer. I tweaked his code to adapt his plugin for Immutable.

    Installation

    yarn add redux-persist-immutable-expire

    Usage

    Create a transform using expireReducer(reducerKey, config) where reducerKey is the reducer to which expiry is to be applied and configuration can be used to configure expire behavior.

    const { persistReducer, persistStore } = require("redux-persist");
    import immutableTransform from "redux-persist-transform-immutable";
    
    // Import the transformer creator
    const expireImmutableReducer = require("redux-persist-immutable-expire");
    
    // Create persisted reducers using redux-persist
    const persistedReducers = persistReducer(
      {
        transforms: [
          // Create a transformer by passing the reducer key and configuration. Values
          // shown below are the available configurations with default values
          expireImmutableReducer("preference", {
            // (Optional) Key to be used for the time relative to which store is to be expired
            persistedAtKey: "__persisted_at",
            // (Required) Seconds after which store will be expired
            expireSeconds: null,
            // (Optional) State to be used for resetting e.g. provide initial reducer state
            expiredState: {},
            // (Optional) Use it if you don't want to manually set the time in the reducer i.e. at `persistedAtKey`
            // and want the store to  be automatically expired if the record is not updated in the `expireSeconds` time
            autoExpire: false,
          }),
          // You can add more `expireReducer` calls here for different reducers
          immutableTransform(), // immutable transform needs to be after expireImmutableReducers
        ],
      },
      rootReducer
    );
    
    export const store = createStore(persistedReducers);
    export const persist = persistStore(store);

    Examples

    Here is the configuration for the common usecases

    Expire the item in store if it has not been updated for the past n seconds

    // Reset `preference` key to empty object if it has not been updated for the past hour
    expireImmutableReducer("preference", {
      expireSeconds: 3600,
    });

    Reset an item to empty array after it has not been updated for the past 30 minutes

    // Reset `preference` key to given defaults if it has not been updated for the past hour
    expireImmutableReducer("preference", {
      expireSeconds: 1800,
      expiredState: {
        viewType: "list",
        token: "",
      },
    });

    Expire the item in store after 30 minutes of loading it

    // Reset `users` key to empty array if it had been loaded 30 minutes ago
    expireImmutableReducer('users', {
        persistedAtKey: 'loadedAt',
        expireSeconds: 1800,
        expiredState: []        // Reset to empty array after expiry
    })
    
    // Note that in this case, you have to manually set the `loadedAt` in
    // this case e.g. your reducer might look like this
    ...
    case USERS_LOADED:
        return {
          loadedAt: moment(),  // or use (new Date()).toJSON()
          users: payload
        };
    ...

    Feel free to open an issue if you need help with some specific usecase.

    Contributions

    • Report issues with problems and suggestions
    • Open pull request with improvements

    License

    MIT © SnowPact

    Install

    npm i @snowpact/redux-persist-immutable-expire

    DownloadsWeekly Downloads

    1

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    15 kB

    Total Files

    5

    Last publish

    Collaborators

    • fr073n