@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docusaurus/theme-search-algolia",
3
- "version": "2.0.0-beta.7b2723717",
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.36",
17
- "@docusaurus/core": "2.0.0-beta.7b2723717",
18
- "@docusaurus/theme-common": "2.0.0-beta.7b2723717",
19
- "@docusaurus/utils": "2.0.0-beta.7b2723717",
20
- "@docusaurus/utils-validation": "2.0.0-beta.7b2723717",
21
- "algoliasearch": "^4.8.4",
22
- "algoliasearch-helper": "^3.3.4",
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.1",
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": "9e83295ec3d4c57038591cd5a497b2a0cb439bf6"
34
+ "gitHead": "4f9b8d76d1eab9f20ddfad9865a1388ea2ce1c9c"
35
35
  }
package/src/index.js CHANGED
@@ -60,7 +60,7 @@ function theme(context) {
60
60
  renderOpenSearchTemplate({
61
61
  title,
62
62
  url: url + baseUrl,
63
- favicon: normalizeUrl([url, baseUrl, favicon]),
63
+ favicon: favicon ? normalizeUrl([url, baseUrl, favicon]) : null,
64
64
  }),
65
65
  );
66
66
  } catch (err) {
@@ -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
- <Image width="16" height="16" type="image/x-icon"><%= it.favicon %></Image>
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 {useTitleFormatter, usePluralForm} from '@docusaurus/theme-common';
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 {searchValue, updateSearchPath} = useSearchQuery();
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
- observer.current.observe(loaderRef);
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, useLocation} from '@docusaurus/router';
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 location = useLocation();
17
- const {siteConfig: {baseUrl} = {}} = useDocusaurusContext();
16
+ const {
17
+ siteConfig: {baseUrl},
18
+ } = useDocusaurusContext();
18
19
 
19
- return {
20
- searchValue:
21
- (ExecutionEnvironment.canUseDOM &&
22
- new URLSearchParams(location.search).get(SEARCH_PARAM_QUERY)) ||
23
- '',
24
- updateSearchPath: (searchValue) => {
25
- const searchParams = new URLSearchParams(location.search);
26
-
27
- if (searchValue) {
28
- searchParams.set(SEARCH_PARAM_QUERY, searchValue);
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
- generateSearchPageLink: (searchValue) => {
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(searchValue)}`;
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