summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-core/src/lib
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-10-01 14:14:30 +0200
committerSamy Pesse <samypesse@gmail.com>2016-10-01 14:14:30 +0200
commitda83d9e91d419e1c843e3017098d25dbde22b500 (patch)
tree0cf3860171062794ef66a292f46fdd62e66dc780 /packages/gitbook-core/src/lib
parent2cf507a807b1070a445cadb28317a41385fbe50b (diff)
downloadgitbook-da83d9e91d419e1c843e3017098d25dbde22b500.zip
gitbook-da83d9e91d419e1c843e3017098d25dbde22b500.tar.gz
gitbook-da83d9e91d419e1c843e3017098d25dbde22b500.tar.bz2
Change api for registering components
Diffstat (limited to 'packages/gitbook-core/src/lib')
-rw-r--r--packages/gitbook-core/src/lib/connect.js8
-rw-r--r--packages/gitbook-core/src/lib/createContext.js25
-rw-r--r--packages/gitbook-core/src/lib/createPlugin.js17
3 files changed, 28 insertions, 22 deletions
diff --git a/packages/gitbook-core/src/lib/connect.js b/packages/gitbook-core/src/lib/connect.js
index e1b267e..2f2a212 100644
--- a/packages/gitbook-core/src/lib/connect.js
+++ b/packages/gitbook-core/src/lib/connect.js
@@ -2,6 +2,8 @@ const React = require('react');
const ReactRedux = require('react-redux');
const { injectIntl } = require('react-intl');
+const ContextShape = require('../shapes/Context');
+
/**
* Use the GitBook context provided by ContextProvider to map actions to props
* @param {ReactComponent} Component
@@ -20,13 +22,13 @@ function connectToActions(Component, mapActionsToProps) {
},
contextTypes: {
- gitbookContext: React.PropTypes.object.isRequired
+ gitbook: ContextShape.isRequired
},
render() {
- const { gitbookContext } = this.context;
+ const { gitbook } = this.context;
const { children, ...props } = this.props;
- const { actions, store } = gitbookContext;
+ const { actions, store } = gitbook;
const actionsProps = mapActionsToProps(actions, store.dispatch);
diff --git a/packages/gitbook-core/src/lib/createContext.js b/packages/gitbook-core/src/lib/createContext.js
index fdc0e0c..1b834e4 100644
--- a/packages/gitbook-core/src/lib/createContext.js
+++ b/packages/gitbook-core/src/lib/createContext.js
@@ -1,15 +1,22 @@
/* eslint-disable no-console */
-const { Record } = require('immutable');
const Redux = require('redux');
const ReduxThunk = require('redux-thunk').default;
+const Plugin = require('./models/Plugin');
+const Context = require('./models/Context');
const coreReducers = require('../reducers');
const composeReducer = require('./composeReducer');
-const GitBookContext = Record({
- store: null,
- actions: {}
-}, 'GitBookContext');
+const Components = require('./actions/components');
+const I18n = require('./actions/i18n');
+const Navigation = require('./actions/navigation');
+
+const corePlugin = Plugin({
+ reduce: coreReducers,
+ actions: {
+ Components, I18n, Navigation
+ }
+});
/**
* Create a new context containing redux store from an initial state and a list of plugins.
@@ -17,12 +24,14 @@ const GitBookContext = Record({
*
* @param {Array<Plugin>} plugins
* @param {Object} initialState
- * @return {GitBookContext} context
+ * @return {Context} context
*/
function createContext(plugins, initialState) {
+ plugins = [corePlugin].concat(plugins);
+
// Compose the reducer from core with plugins
const pluginReducers = plugins.map(plugin => plugin.reduce);
- const reducer = composeReducer(...[coreReducers].concat(pluginReducers));
+ const reducer = composeReducer(pluginReducers);
// Get actions from all plugins
const actions = plugins.reduce((accu, plugin) => {
@@ -43,7 +52,7 @@ function createContext(plugins, initialState) {
plugin.init(store.dispatch, store.getState, actions);
});
- return GitBookContext({
+ return Context({
store,
actions
});
diff --git a/packages/gitbook-core/src/lib/createPlugin.js b/packages/gitbook-core/src/lib/createPlugin.js
index 7a49053..f03bb94 100644
--- a/packages/gitbook-core/src/lib/createPlugin.js
+++ b/packages/gitbook-core/src/lib/createPlugin.js
@@ -1,24 +1,19 @@
-
-const defaultInit = ((dispatch, getState) => {});
-const defaultReduce = ((state, action) => state);
+const Plugin = require('../models/Plugin');
/**
* Create a plugin to extend the state and the views.
*
- * @param {Function(dispatch, state)} onInitialState
- * @param {Funciton(state, action)} onReduceState
+ * @param {Function(dispatch, state)} plugin.init
+ * @param {Function(state, action)} plugin.reduce
+ * @param {Object} plugin.actions
* @return {Plugin}
*/
function createPlugin({ init, reduce, actions }) {
- init = init || defaultInit;
- reduce = reduce || defaultReduce;
- actions = actions || {};
-
- const plugin = {
+ const plugin = Plugin({
init,
reduce,
actions
- };
+ });
if (typeof window !== 'undefined') {
window.gitbookPlugins = window.gitbookPlugins || [];