diff options
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 +}; |