diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-09-28 18:14:35 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-09-28 18:14:35 +0200 |
commit | 287c80b2e116572669f2a7073731ba7350e3619a (patch) | |
tree | 1572bab423b927e16bca4d56020aeec6442fe1a9 /packages/gitbook-plugin-search/src/actions/search.js | |
parent | 26fc021b900f6b28a180fa8360313b3193e6bf5e (diff) | |
download | gitbook-287c80b2e116572669f2a7073731ba7350e3619a.zip gitbook-287c80b2e116572669f2a7073731ba7350e3619a.tar.gz gitbook-287c80b2e116572669f2a7073731ba7350e3619a.tar.bz2 |
Start search plugin
Diffstat (limited to 'packages/gitbook-plugin-search/src/actions/search.js')
-rw-r--r-- | packages/gitbook-plugin-search/src/actions/search.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/packages/gitbook-plugin-search/src/actions/search.js b/packages/gitbook-plugin-search/src/actions/search.js new file mode 100644 index 0000000..e9852cc --- /dev/null +++ b/packages/gitbook-plugin-search/src/actions/search.js @@ -0,0 +1,49 @@ +const { Promise, Immutable } = require('gitbook-core'); +const { List } = Immutable; +const TYPES = require('./types'); + +/** + * Start a search query + * @param {String} q + * @return {Action} + */ +function query(q) { + return (dispatch, getState) => { + const handlers = getState().search; + + dispatch({ type: TYPES.UPDATE_QUERY, query: q }); + + return Promise.reduce(handlers, (results, handler) => { + return Promise(handler(q)) + .then(handlerResults => results.concat(handlerResults)); + }, List()) + .then(results => { + dispatch({ type: TYPES.UPDATE_RESULTS, query: q }); + }); + }; +} + +/** + * Register a search handler + * @param {String} name + * @param {Function} handler + * @return {Action} + */ +function registerHandler(name, handler) { + return { type: TYPES.REGISTER_HANDLER, name, handler }; +} + +/** + * Unregister a search handler + * @param {String} name + * @return {Action} + */ +function unregisterHandler(name) { + return { type: TYPES.UNREGISTER_HANDLER, name }; +} + +module.exports = { + query, + registerHandler, + unregisterHandler +}; |