diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-10-05 13:36:38 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-10-05 13:36:38 +0200 |
commit | 86848e7acb5e5308297a0e4aaf0a164e7f9bf5f2 (patch) | |
tree | 745ec1374b3a051fb5c0660c4f4a6154e9abc70a | |
parent | 9ce3646d6e0d10035b6528e5384189fbed3d18c6 (diff) | |
download | gitbook-86848e7acb5e5308297a0e4aaf0a164e7f9bf5f2.zip gitbook-86848e7acb5e5308297a0e4aaf0a164e7f9bf5f2.tar.gz gitbook-86848e7acb5e5308297a0e4aaf0a164e7f9bf5f2.tar.bz2 |
Fix format of lunr results
-rw-r--r-- | packages/gitbook-plugin-lunr/src/actions.js | 6 | ||||
-rw-r--r-- | packages/gitbook-plugin-lunr/src/index.js | 10 | ||||
-rw-r--r-- | packages/gitbook-plugin-lunr/src/reducer.js | 4 | ||||
-rw-r--r-- | packages/gitbook-plugin-search/src/actions/search.js | 8 | ||||
-rw-r--r-- | packages/gitbook-plugin-search/src/models/Result.js | 14 |
5 files changed, 35 insertions, 7 deletions
diff --git a/packages/gitbook-plugin-lunr/src/actions.js b/packages/gitbook-plugin-lunr/src/actions.js index 8ead7ef..4d878c7 100644 --- a/packages/gitbook-plugin-lunr/src/actions.js +++ b/packages/gitbook-plugin-lunr/src/actions.js @@ -19,6 +19,12 @@ function load(json) { */ function fetch() { return (dispatch, getState) => { + const { idx } = getState().lunr; + + if (idx) { + return GitBook.Promise.resolve(); + } + return GitBook.Promise.resolve() .then(() => { // TODO: resolve the file correctly diff --git a/packages/gitbook-plugin-lunr/src/index.js b/packages/gitbook-plugin-lunr/src/index.js index eab5975..1135f51 100644 --- a/packages/gitbook-plugin-lunr/src/index.js +++ b/packages/gitbook-plugin-lunr/src/index.js @@ -7,10 +7,16 @@ const actions = require('./actions'); * @param {String} query * @return {Promise<List>} */ -function searchHandler(query, dispatch) { +function searchHandler(query, dispatch, getState) { + // Fetch the index if non loaded return dispatch(actions.fetch()) + + // Execute the search .then(() => { - return []; + const { idx, store } = getState().lunr; + const results = idx.search(query); + + return results.map(({ref}) => store.get(ref).toJS()); }); } diff --git a/packages/gitbook-plugin-lunr/src/reducer.js b/packages/gitbook-plugin-lunr/src/reducer.js index 48c3c23..7e317c4 100644 --- a/packages/gitbook-plugin-lunr/src/reducer.js +++ b/packages/gitbook-plugin-lunr/src/reducer.js @@ -4,6 +4,10 @@ const { Record } = GitBook.Immutable; const { TYPES } = require('./actions'); +/* + We store the lunr index an the document index in the store. + */ + const LunrState = Record({ idx: null, store: {} diff --git a/packages/gitbook-plugin-search/src/actions/search.js b/packages/gitbook-plugin-search/src/actions/search.js index 8c1c08c..6f8f8ad 100644 --- a/packages/gitbook-plugin-search/src/actions/search.js +++ b/packages/gitbook-plugin-search/src/actions/search.js @@ -1,6 +1,8 @@ const { Promise, Immutable } = require('gitbook-core'); const { List } = Immutable; + const TYPES = require('./types'); +const Result = require('../models/Result'); /* Search workflow: @@ -49,6 +51,9 @@ function handleQuery(q) { handlers.toArray(), (results, handler) => { return Promise.resolve(handler(q, dispatch, getState, actions)) + .then(handlerResults => { + return handlerResults.map(result => new Result(result)); + }) .then(handlerResults => results.concat(handlerResults)); }, List() @@ -56,9 +61,6 @@ function handleQuery(q) { .then( results => { dispatch({ type: TYPES.END, query: q, results }); - }, - error => { - console.error(error); } ); }; diff --git a/packages/gitbook-plugin-search/src/models/Result.js b/packages/gitbook-plugin-search/src/models/Result.js index 71c6d9d..0012b2b 100644 --- a/packages/gitbook-plugin-search/src/models/Result.js +++ b/packages/gitbook-plugin-search/src/models/Result.js @@ -1,10 +1,20 @@ const GitBook = require('gitbook-core'); const { Record } = GitBook.Immutable; -const Result = Record({ +const DEFAULTS = { url: String(''), title: String(''), body: String('') -}); +}; + +class Result extends Record(DEFAULTS) { + constructor(spec) { + if (!spec.url || !spec.title) { + throw new Error('"url" and "title" are required to create a search result'); + } + + super(spec); + } +} module.exports = Result; |