1.0.0 • Published 6 years ago

contentful-redux v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

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)

OptionRequiredDefaultDescription
accessTokenyes-Your contentful CDA access token
clientParamsno{}Additional arguments to be passed to createClient
createClientyes-The desired variant of the contentful.js client factory method
localeSelectorno() => nullA selector returning the locale to be used, e.g.(state) => state.currentLocale
spaceyes-The id of the contentful space to by synced
stateSelectoryes-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])

ArgumentRequiredDefaultDescription
spaceIdnooptions.spaceThe 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:

SelectorReturnsDescription
assetsarrayA list of all known assets in the contentful space
contentTypesobjectA map from content type ids to the meta information about the corresponding content type
defaultLocaleobjectThe locale which is defined as default of the contentful space
entriesarrayA list of all known entries in the contentful space
isSyncingbooleantrue while a sync operation is in progress
lastSyncobjectMeta-information about the results of the last sync attempt
localesarrayThe locales which are defined for the contentful space
spaceobjectMeta-information about your contentful space

Changelog

License

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

Copyright © 2018 Leo Schweizer

1.0.0

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago