summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-plugin-search/src/actions
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook-plugin-search/src/actions')
-rw-r--r--packages/gitbook-plugin-search/src/actions/search.js49
-rw-r--r--packages/gitbook-plugin-search/src/actions/types.js7
2 files changed, 56 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
+};
diff --git a/packages/gitbook-plugin-search/src/actions/types.js b/packages/gitbook-plugin-search/src/actions/types.js
new file mode 100644
index 0000000..a88b1f0
--- /dev/null
+++ b/packages/gitbook-plugin-search/src/actions/types.js
@@ -0,0 +1,7 @@
+
+module.exports = {
+ REGISTER_HANDLER: 'search/register_handler',
+ UNREGISTER_HANDLER: 'search/unregister_handler',
+ UPDATE_QUERY: 'search/update_query',
+ UPDATE_RESULTS: 'search/update_results'
+};