@docusaurus/theme-search-algolia 2.0.0-beta.7b2723717 → 2.0.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +10 -10
- package/src/index.js +1 -1
- package/src/templates/opensearch.js +3 -1
- package/src/theme/SearchPage/index.js +14 -20
- package/src/theme/hooks/useSearchQuery.js +35 -16
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@docusaurus/theme-search-algolia",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.8",
|
|
4
4
|
"description": "Algolia search component for Docusaurus.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -13,15 +13,15 @@
|
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@docsearch/react": "^3.0.0-alpha.
|
|
17
|
-
"@docusaurus/core": "2.0.0-beta.
|
|
18
|
-
"@docusaurus/theme-common": "2.0.0-beta.
|
|
19
|
-
"@docusaurus/utils": "2.0.0-beta.
|
|
20
|
-
"@docusaurus/utils-validation": "2.0.0-beta.
|
|
21
|
-
"algoliasearch": "^4.
|
|
22
|
-
"algoliasearch-helper": "^3.
|
|
16
|
+
"@docsearch/react": "^3.0.0-alpha.39",
|
|
17
|
+
"@docusaurus/core": "2.0.0-beta.8",
|
|
18
|
+
"@docusaurus/theme-common": "2.0.0-beta.8",
|
|
19
|
+
"@docusaurus/utils": "2.0.0-beta.8",
|
|
20
|
+
"@docusaurus/utils-validation": "2.0.0-beta.8",
|
|
21
|
+
"algoliasearch": "^4.10.5",
|
|
22
|
+
"algoliasearch-helper": "^3.5.5",
|
|
23
23
|
"clsx": "^1.1.1",
|
|
24
|
-
"eta": "^1.12.
|
|
24
|
+
"eta": "^1.12.3",
|
|
25
25
|
"lodash": "^4.17.20"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"engines": {
|
|
32
32
|
"node": ">=12.13.0"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "4f9b8d76d1eab9f20ddfad9865a1388ea2ce1c9c"
|
|
35
35
|
}
|
package/src/index.js
CHANGED
|
@@ -12,7 +12,9 @@ module.exports = `
|
|
|
12
12
|
<ShortName><%= it.title %></ShortName>
|
|
13
13
|
<Description>Search <%= it.title %></Description>
|
|
14
14
|
<InputEncoding>UTF-8</InputEncoding>
|
|
15
|
-
|
|
15
|
+
<% if (it.favicon) { _%>
|
|
16
|
+
<Image width="16" height="16" type="image/x-icon"><%= it.favicon %></Image>
|
|
17
|
+
<% } _%>
|
|
16
18
|
<Url type="text/html" method="get" template="<%= it.url %>search?q={searchTerms}"/>
|
|
17
19
|
<Url type="application/opensearchdescription+xml" rel="self" template="<%= it.url %>opensearch.xml" />
|
|
18
20
|
<moz:SearchForm><%= it.url %></moz:SearchForm>
|
|
@@ -16,7 +16,11 @@ import clsx from 'clsx';
|
|
|
16
16
|
import Head from '@docusaurus/Head';
|
|
17
17
|
import Link from '@docusaurus/Link';
|
|
18
18
|
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
useTitleFormatter,
|
|
21
|
+
usePluralForm,
|
|
22
|
+
useDynamicCallback,
|
|
23
|
+
} from '@docusaurus/theme-common';
|
|
20
24
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
21
25
|
import {useAllDocsData} from '@theme/hooks/useDocs';
|
|
22
26
|
import useSearchQuery from '@theme/hooks/useSearchQuery';
|
|
@@ -125,8 +129,7 @@ function SearchPage() {
|
|
|
125
129
|
const documentsFoundPlural = useDocumentsFoundPlural();
|
|
126
130
|
|
|
127
131
|
const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers();
|
|
128
|
-
const {
|
|
129
|
-
const [searchQuery, setSearchQuery] = useState(searchValue);
|
|
132
|
+
const {searchQuery, setSearchQuery} = useSearchQuery();
|
|
130
133
|
const initialSearchResultState = {
|
|
131
134
|
items: [],
|
|
132
135
|
query: null,
|
|
@@ -173,6 +176,7 @@ function SearchPage() {
|
|
|
173
176
|
},
|
|
174
177
|
initialSearchResultState,
|
|
175
178
|
);
|
|
179
|
+
|
|
176
180
|
const algoliaClient = algoliaSearch(appId, apiKey);
|
|
177
181
|
const algoliaHelper = algoliaSearchHelper(algoliaClient, indexName, {
|
|
178
182
|
hitsPerPage: 15,
|
|
@@ -271,7 +275,7 @@ function SearchPage() {
|
|
|
271
275
|
description: 'The search page title for empty query',
|
|
272
276
|
});
|
|
273
277
|
|
|
274
|
-
const makeSearch = (page = 0) => {
|
|
278
|
+
const makeSearch = useDynamicCallback((page = 0) => {
|
|
275
279
|
algoliaHelper.addDisjunctiveFacetRefinement('docusaurus_tag', 'default');
|
|
276
280
|
algoliaHelper.addDisjunctiveFacetRefinement('language', currentLocale);
|
|
277
281
|
|
|
@@ -285,23 +289,19 @@ function SearchPage() {
|
|
|
285
289
|
);
|
|
286
290
|
|
|
287
291
|
algoliaHelper.setQuery(searchQuery).setPage(page).search();
|
|
288
|
-
};
|
|
292
|
+
});
|
|
289
293
|
|
|
290
294
|
useEffect(() => {
|
|
291
295
|
if (!loaderRef) {
|
|
292
296
|
return undefined;
|
|
293
297
|
}
|
|
298
|
+
const currentObserver = observer.current;
|
|
294
299
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return () => {
|
|
298
|
-
observer.current.unobserve(loaderRef);
|
|
299
|
-
};
|
|
300
|
+
currentObserver.observe(loaderRef);
|
|
301
|
+
return () => currentObserver.unobserve(loaderRef);
|
|
300
302
|
}, [loaderRef]);
|
|
301
303
|
|
|
302
304
|
useEffect(() => {
|
|
303
|
-
updateSearchPath(searchQuery);
|
|
304
|
-
|
|
305
305
|
searchResultStateDispatcher({type: 'reset'});
|
|
306
306
|
|
|
307
307
|
if (searchQuery) {
|
|
@@ -311,7 +311,7 @@ function SearchPage() {
|
|
|
311
311
|
makeSearch();
|
|
312
312
|
}, 300);
|
|
313
313
|
}
|
|
314
|
-
}, [searchQuery, docsSearchVersionsHelpers.searchVersions]);
|
|
314
|
+
}, [searchQuery, docsSearchVersionsHelpers.searchVersions, makeSearch]);
|
|
315
315
|
|
|
316
316
|
useEffect(() => {
|
|
317
317
|
if (!searchResultState.lastPage || searchResultState.lastPage === 0) {
|
|
@@ -319,13 +319,7 @@ function SearchPage() {
|
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
makeSearch(searchResultState.lastPage);
|
|
322
|
-
}, [searchResultState.lastPage]);
|
|
323
|
-
|
|
324
|
-
useEffect(() => {
|
|
325
|
-
if (searchValue && searchValue !== searchQuery) {
|
|
326
|
-
setSearchQuery(searchValue);
|
|
327
|
-
}
|
|
328
|
-
}, [searchValue]);
|
|
322
|
+
}, [makeSearch, searchResultState.lastPage]);
|
|
329
323
|
|
|
330
324
|
return (
|
|
331
325
|
<Layout wrapperClassName="search-page-wrapper">
|
|
@@ -5,27 +5,34 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {useHistory
|
|
9
|
-
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
|
8
|
+
import {useHistory} from '@docusaurus/router';
|
|
10
9
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
10
|
+
import {useCallback, useEffect, useState} from 'react';
|
|
11
11
|
|
|
12
12
|
const SEARCH_PARAM_QUERY = 'q';
|
|
13
13
|
|
|
14
14
|
function useSearchQuery() {
|
|
15
15
|
const history = useHistory();
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
const {
|
|
17
|
+
siteConfig: {baseUrl},
|
|
18
|
+
} = useDocusaurusContext();
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
const [searchQuery, setSearchQueryState] = useState('');
|
|
21
|
+
|
|
22
|
+
// Init search query just after React hydration
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const searchQueryStringValue =
|
|
25
|
+
new URLSearchParams(window.location.search).get(SEARCH_PARAM_QUERY) ?? '';
|
|
26
|
+
|
|
27
|
+
setSearchQueryState(searchQueryStringValue);
|
|
28
|
+
}, []);
|
|
29
|
+
|
|
30
|
+
const setSearchQuery = useCallback(
|
|
31
|
+
(newSearchQuery) => {
|
|
32
|
+
const searchParams = new URLSearchParams(window.location.search);
|
|
33
|
+
|
|
34
|
+
if (newSearchQuery) {
|
|
35
|
+
searchParams.set(SEARCH_PARAM_QUERY, newSearchQuery);
|
|
29
36
|
} else {
|
|
30
37
|
searchParams.delete(SEARCH_PARAM_QUERY);
|
|
31
38
|
}
|
|
@@ -33,11 +40,23 @@ function useSearchQuery() {
|
|
|
33
40
|
history.replace({
|
|
34
41
|
search: searchParams.toString(),
|
|
35
42
|
});
|
|
43
|
+
setSearchQueryState(newSearchQuery);
|
|
36
44
|
},
|
|
37
|
-
|
|
45
|
+
[history],
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
const generateSearchPageLink = useCallback(
|
|
49
|
+
(targetSearchQuery) => {
|
|
38
50
|
// Refer to https://github.com/facebook/docusaurus/pull/2838
|
|
39
|
-
return `${baseUrl}search?q=${encodeURIComponent(
|
|
51
|
+
return `${baseUrl}search?q=${encodeURIComponent(targetSearchQuery)}`;
|
|
40
52
|
},
|
|
53
|
+
[baseUrl],
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
searchQuery,
|
|
58
|
+
setSearchQuery,
|
|
59
|
+
generateSearchPageLink,
|
|
41
60
|
};
|
|
42
61
|
}
|
|
43
62
|
|