contentful-redux

1.0.0 • Public • Published

contentful-redux

Build Status codecov npm Greenkeeper badge

This library provides an implementation of the Contentful sync API for redux and reselect. contentful-redux handles the complete synchronization workflow (including cyclic link resolution, localization, and incremental syncing) and lets you consume your contents from Contentful as easy-to-use selectors.

If you are not already familiar with redux (and reselect), you should familiarize yourself with those first before trying to integrate contentful-redux into your project.

Installation

contentful-redux is provided as a collection of CommonJS modules, which can be installed using npm:

npm install --save contententful@5 contentful-redux

or using yarn:

yarn add contentful@5 contentful-redux

Usage

  1. Setup contentful-redux (contentful.js):
import { createClient } from 'contentful';
import contentfulRedux from 'contentfulRedux';
 
export const { actions, reducer, middleware, selectors } = contentfulRedux({
    createClient,
    space: 'YOUR_SPACE_ID',
    accessToken: 'YOUR_ACCESS_TOKEN',
    stateSelector: state => state.contentful
});
  1. Include the contentful reducer in your reducer:
import { combineReducers } from 'redux';
import { reducer as contentful } from './contentful';
 
export const reducer = combineReducers({
    contentful,
    // your other reducers
});
  1. Include the contentful middleware in your redux store configuration:
import { applyMiddleware, createStore } from 'redux';
import { middleware as contentful } from './contentful';
 
export const configureStore = () => {
    return createStore(reducer, null, applyMiddleware(contentful));
};
  1. Derive your reselect selectors from the base selectors provided by contentful-redux:
import { createSelector } from 'reselect';
import { selectors } from './contentful';
 
export const myModelEntities = createSelector(
    selectors.entries, selectors.contentTypes,
    (entries, contentTypes) => entries.filter(each => each.__contentType__ === contentTypes.myModel)
);
  1. Dispatch a sync action whenever you want:
import { actions } from './contentful';
dispatch(actions.sync());

API Documentation

contentfulRedux(options)

Option Required Default Description
accessToken yes - Your contentful CDA access token
clientParams no {} Additional arguments to be passed to createClient
createClient yes - The desired variant of the contentful.js client factory method
localeSelector no () => null A selector returning the locale to be used, e.g.
(state) => state.currentLocale
space yes - The id of the contentful space to by synced
stateSelector yes - A selector returning the portion of the state which is managed by the contentful-redux reducer, e.g.
(state) => state.contentful

Action creators

The following redux action creators are provided by contentful-redux:

sync([spaceId])

Argument Required Default Description
spaceId no options.space The id of the space to be synced. There must be a middleware installed wich is registered with the same space id

Selectors

The following reselect selectors are provided by contentful-redux:

Selector Returns Description
assets array A list of all known assets in the contentful space
contentTypes object A map from content type ids to the meta information about the corresponding content type
defaultLocale object The locale which is defined as default of the contentful space
entries array A list of all known entries in the contentful space
isSyncing boolean true while a sync operation is in progress
lastSync object Meta-information about the results of the last sync attempt
locales array The locales which are defined for the contentful space
space object Meta-information about your contentful space

Changelog

License

This software is licensed under the MIT License. View the license.

Copyright © 2018 Leo Schweizer

Package Sidebar

Install

npm i contentful-redux

Weekly Downloads

1

Version

1.0.0

License

MIT

Unpacked Size

56.7 kB

Total Files

12

Last publish

Collaborators

  • leoschweizer