diff options
Diffstat (limited to 'packages/gitbook-core/src/lib')
-rw-r--r-- | packages/gitbook-core/src/lib/connect.js | 8 | ||||
-rw-r--r-- | packages/gitbook-core/src/lib/createContext.js | 25 | ||||
-rw-r--r-- | packages/gitbook-core/src/lib/createPlugin.js | 17 |
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 || []; |