@docusaurus/theme-search-algolia 0.0.0-4376 → 0.0.0-4383
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/lib/{theme/hooks/useSearchQuery.d.ts → client/index.d.ts} +1 -3
- package/lib/client/index.js +7 -0
- package/lib/client/useAlgoliaContextualFacetFilters.d.ts +7 -0
- package/lib/{theme/hooks → client}/useAlgoliaContextualFacetFilters.js +1 -1
- package/lib/theme/SearchBar/index.js +3 -4
- package/lib/theme/SearchMetadata/index.d.ts +3 -2
- package/lib/theme/SearchMetadata/index.js +1 -1
- package/lib/theme/SearchPage/index.js +2 -3
- package/lib/validateThemeConfig.d.ts +5 -0
- package/lib/validateThemeConfig.js +5 -6
- package/package.json +16 -11
- package/src/client/index.ts +8 -0
- package/src/{theme/hooks → client}/useAlgoliaContextualFacetFilters.ts +1 -2
- package/src/theme/SearchBar/index.tsx +3 -4
- package/src/theme/SearchMetadata/index.tsx +2 -6
- package/src/theme/SearchPage/index.tsx +2 -2
- package/src/theme-search-algolia.d.ts +15 -26
- package/src/validateThemeConfig.ts +1 -2
- package/lib/theme/hooks/useAlgoliaContextualFacetFilters.d.ts +0 -8
- package/lib/theme/hooks/useSearchQuery.js +0 -43
- package/src/theme/hooks/useSearchQuery.ts +0 -63
|
@@ -4,6 +4,4 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
declare function useSearchQuery(): SearchQuery;
|
|
9
|
-
export default useSearchQuery;
|
|
7
|
+
export { useAlgoliaContextualFacetFilters } from './useAlgoliaContextualFacetFilters';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export { useAlgoliaContextualFacetFilters } from './useAlgoliaContextualFacetFilters';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useAlgoliaContextualFacetFilters(): (string | string[])[];
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { useContextualSearchFilters } from '@docusaurus/theme-common';
|
|
8
8
|
// Translate search-engine agnostic search filters to Algolia search filters
|
|
9
|
-
export
|
|
9
|
+
export function useAlgoliaContextualFacetFilters() {
|
|
10
10
|
const { locale, tags } = useContextualSearchFilters();
|
|
11
11
|
// seems safe to convert locale->language, see AlgoliaSearchMetadata comment
|
|
12
12
|
const languageFilter = `language:${locale}`;
|
|
@@ -12,10 +12,9 @@ import { useHistory } from '@docusaurus/router';
|
|
|
12
12
|
import { useBaseUrlUtils } from '@docusaurus/useBaseUrl';
|
|
13
13
|
import Link from '@docusaurus/Link';
|
|
14
14
|
import Head from '@docusaurus/Head';
|
|
15
|
-
import
|
|
16
|
-
import { isRegexpStringMatch } from '@docusaurus/theme-common';
|
|
15
|
+
import { isRegexpStringMatch, useSearchPage } from '@docusaurus/theme-common';
|
|
17
16
|
import { DocSearchButton, useDocSearchKeyboardEvents } from '@docsearch/react';
|
|
18
|
-
import useAlgoliaContextualFacetFilters from '@theme/
|
|
17
|
+
import { useAlgoliaContextualFacetFilters } from '@docusaurus/theme-search-algolia/client';
|
|
19
18
|
import { translate } from '@docusaurus/Translate';
|
|
20
19
|
import styles from './styles.module.css';
|
|
21
20
|
let DocSearchModal = null;
|
|
@@ -23,7 +22,7 @@ function Hit({ hit, children, }) {
|
|
|
23
22
|
return <Link to={hit.url}>{children}</Link>;
|
|
24
23
|
}
|
|
25
24
|
function ResultsFooter({ state, onClose }) {
|
|
26
|
-
const { generateSearchPageLink } =
|
|
25
|
+
const { generateSearchPageLink } = useSearchPage();
|
|
27
26
|
return (<Link to={generateSearchPageLink(state.query)} onClick={onClose}>
|
|
28
27
|
See all {state.context.nbHits} results
|
|
29
28
|
</Link>);
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
+
/// <reference types="@docusaurus/theme-classic" />
|
|
7
8
|
/// <reference types="react" />
|
|
8
|
-
import type {
|
|
9
|
-
declare function SearchMetadata({ locale, version, tag
|
|
9
|
+
import type { Props } from '@theme/SearchMetadata';
|
|
10
|
+
declare function SearchMetadata({ locale, version, tag }: Props): JSX.Element;
|
|
10
11
|
export default SearchMetadata;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import Head from '@docusaurus/Head';
|
|
9
9
|
// Override default/agnostic SearchMetas to use Algolia-specific metadata
|
|
10
|
-
function SearchMetadata({ locale, version, tag
|
|
10
|
+
function SearchMetadata({ locale, version, tag }) {
|
|
11
11
|
// Seems safe to consider here the locale is the language,
|
|
12
12
|
// as the existing docsearch:language filter is afaik a regular string-based filter
|
|
13
13
|
const language = locale;
|
|
@@ -13,10 +13,9 @@ import clsx from 'clsx';
|
|
|
13
13
|
import Head from '@docusaurus/Head';
|
|
14
14
|
import Link from '@docusaurus/Link';
|
|
15
15
|
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
|
16
|
-
import { useTitleFormatter, usePluralForm, isRegexpStringMatch, useDynamicCallback, } from '@docusaurus/theme-common';
|
|
16
|
+
import { useTitleFormatter, usePluralForm, isRegexpStringMatch, useDynamicCallback, useSearchPage, } from '@docusaurus/theme-common';
|
|
17
17
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
18
18
|
import { useAllDocsData } from '@docusaurus/plugin-content-docs/client';
|
|
19
|
-
import useSearchQuery from '@theme/hooks/useSearchQuery';
|
|
20
19
|
import Layout from '@theme/Layout';
|
|
21
20
|
import Translate, { translate } from '@docusaurus/Translate';
|
|
22
21
|
import styles from './styles.module.css';
|
|
@@ -67,7 +66,7 @@ function SearchPage() {
|
|
|
67
66
|
algolia: { appId, apiKey, indexName, externalUrlRegex }, }, }, i18n: { currentLocale }, } = useDocusaurusContext();
|
|
68
67
|
const documentsFoundPlural = useDocumentsFoundPlural();
|
|
69
68
|
const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers();
|
|
70
|
-
const { searchQuery, setSearchQuery } =
|
|
69
|
+
const { searchQuery, setSearchQuery } = useSearchPage();
|
|
71
70
|
const initialSearchResultState = {
|
|
72
71
|
items: [],
|
|
73
72
|
query: null,
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Joi } from '@docusaurus/utils-validation';
|
|
8
8
|
import type { ThemeConfig, Validate, ValidationResult } from '@docusaurus/types';
|
|
9
|
+
export declare const DEFAULT_CONFIG: {
|
|
10
|
+
contextualSearch: boolean;
|
|
11
|
+
appId: string;
|
|
12
|
+
searchParameters: {};
|
|
13
|
+
};
|
|
9
14
|
export declare const Schema: Joi.ObjectSchema<any>;
|
|
10
15
|
export declare function validateThemeConfig({ validate, themeConfig, }: {
|
|
11
16
|
validate: Validate<ThemeConfig>;
|
|
@@ -6,27 +6,26 @@
|
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.validateThemeConfig = exports.Schema = void 0;
|
|
9
|
+
exports.validateThemeConfig = exports.Schema = exports.DEFAULT_CONFIG = void 0;
|
|
10
10
|
const utils_validation_1 = require("@docusaurus/utils-validation");
|
|
11
|
-
|
|
11
|
+
exports.DEFAULT_CONFIG = {
|
|
12
12
|
contextualSearch: false,
|
|
13
13
|
// By default, all Docusaurus sites are using the same AppId
|
|
14
14
|
// This has been designed on purpose with Algolia.
|
|
15
15
|
appId: 'BH4D9OD16A',
|
|
16
16
|
searchParameters: {},
|
|
17
17
|
};
|
|
18
|
-
exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
19
18
|
exports.Schema = utils_validation_1.Joi.object({
|
|
20
19
|
algolia: utils_validation_1.Joi.object({
|
|
21
20
|
// Docusaurus attributes
|
|
22
|
-
contextualSearch: utils_validation_1.Joi.boolean().default(DEFAULT_CONFIG.contextualSearch),
|
|
21
|
+
contextualSearch: utils_validation_1.Joi.boolean().default(exports.DEFAULT_CONFIG.contextualSearch),
|
|
23
22
|
externalUrlRegex: utils_validation_1.Joi.string().optional(),
|
|
24
23
|
// Algolia attributes
|
|
25
|
-
appId: utils_validation_1.Joi.string().default(DEFAULT_CONFIG.appId),
|
|
24
|
+
appId: utils_validation_1.Joi.string().default(exports.DEFAULT_CONFIG.appId),
|
|
26
25
|
apiKey: utils_validation_1.Joi.string().required(),
|
|
27
26
|
indexName: utils_validation_1.Joi.string().required(),
|
|
28
27
|
searchParameters: utils_validation_1.Joi.object()
|
|
29
|
-
.default(DEFAULT_CONFIG.searchParameters)
|
|
28
|
+
.default(exports.DEFAULT_CONFIG.searchParameters)
|
|
30
29
|
.unknown(),
|
|
31
30
|
})
|
|
32
31
|
.label('themeConfig.algolia')
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@docusaurus/theme-search-algolia",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-4383",
|
|
4
4
|
"description": "Algolia search component for Docusaurus.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
|
+
"exports": {
|
|
7
|
+
"./client": "./lib/client/index.js",
|
|
8
|
+
".": "./lib/index.js"
|
|
9
|
+
},
|
|
6
10
|
"types": "src/theme-search-algolia.d.ts",
|
|
7
11
|
"publishConfig": {
|
|
8
12
|
"access": "public"
|
|
@@ -17,25 +21,26 @@
|
|
|
17
21
|
"build": "yarn build:server && yarn build:browser && yarn build:copy",
|
|
18
22
|
"build:server": "tsc --project tsconfig.server.json",
|
|
19
23
|
"build:browser": "tsc --project tsconfig.browser.json",
|
|
20
|
-
"build:copy": "node copyUntypedFiles.
|
|
24
|
+
"build:copy": "node copyUntypedFiles.mjs"
|
|
21
25
|
},
|
|
22
26
|
"dependencies": {
|
|
23
27
|
"@docsearch/react": "^3.0.0-alpha.39",
|
|
24
|
-
"@docusaurus/core": "0.0.0-
|
|
25
|
-
"@docusaurus/logger": "0.0.0-
|
|
26
|
-
"@docusaurus/theme-common": "0.0.0-
|
|
27
|
-
"@docusaurus/theme-translations": "0.0.0-
|
|
28
|
-
"@docusaurus/utils": "0.0.0-
|
|
29
|
-
"@docusaurus/utils-validation": "0.0.0-
|
|
28
|
+
"@docusaurus/core": "0.0.0-4383",
|
|
29
|
+
"@docusaurus/logger": "0.0.0-4383",
|
|
30
|
+
"@docusaurus/theme-common": "0.0.0-4383",
|
|
31
|
+
"@docusaurus/theme-translations": "0.0.0-4383",
|
|
32
|
+
"@docusaurus/utils": "0.0.0-4383",
|
|
33
|
+
"@docusaurus/utils-validation": "0.0.0-4383",
|
|
30
34
|
"algoliasearch": "^4.10.5",
|
|
31
35
|
"algoliasearch-helper": "^3.5.5",
|
|
32
36
|
"clsx": "^1.1.1",
|
|
33
37
|
"eta": "^1.12.3",
|
|
34
38
|
"lodash": "^4.17.20",
|
|
35
|
-
"tslib": "^2.3.1"
|
|
39
|
+
"tslib": "^2.3.1",
|
|
40
|
+
"utility-types": "^3.10.0"
|
|
36
41
|
},
|
|
37
42
|
"devDependencies": {
|
|
38
|
-
"@docusaurus/module-type-aliases": "0.0.0-
|
|
43
|
+
"@docusaurus/module-type-aliases": "0.0.0-4383",
|
|
39
44
|
"fs-extra": "^10.0.0"
|
|
40
45
|
},
|
|
41
46
|
"peerDependencies": {
|
|
@@ -45,5 +50,5 @@
|
|
|
45
50
|
"engines": {
|
|
46
51
|
"node": ">=14"
|
|
47
52
|
},
|
|
48
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "6ccc0daea1a7b1413cd32f515a9e661c4007a355"
|
|
49
54
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export {useAlgoliaContextualFacetFilters} from './useAlgoliaContextualFacetFilters';
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type {useAlgoliaContextualFacetFiltersReturns} from '@theme/hooks/useAlgoliaContextualFacetFilters';
|
|
9
8
|
import {useContextualSearchFilters} from '@docusaurus/theme-common';
|
|
10
9
|
|
|
11
10
|
// Translate search-engine agnostic search filters to Algolia search filters
|
|
12
|
-
export
|
|
11
|
+
export function useAlgoliaContextualFacetFilters() {
|
|
13
12
|
const {locale, tags} = useContextualSearchFilters();
|
|
14
13
|
|
|
15
14
|
// seems safe to convert locale->language, see AlgoliaSearchMetadata comment
|
|
@@ -13,10 +13,9 @@ import {useHistory} from '@docusaurus/router';
|
|
|
13
13
|
import {useBaseUrlUtils} from '@docusaurus/useBaseUrl';
|
|
14
14
|
import Link from '@docusaurus/Link';
|
|
15
15
|
import Head from '@docusaurus/Head';
|
|
16
|
-
import
|
|
17
|
-
import {isRegexpStringMatch} from '@docusaurus/theme-common';
|
|
16
|
+
import {isRegexpStringMatch, useSearchPage} from '@docusaurus/theme-common';
|
|
18
17
|
import {DocSearchButton, useDocSearchKeyboardEvents} from '@docsearch/react';
|
|
19
|
-
import useAlgoliaContextualFacetFilters from '@theme/
|
|
18
|
+
import {useAlgoliaContextualFacetFilters} from '@docusaurus/theme-search-algolia/client';
|
|
20
19
|
import {translate} from '@docusaurus/Translate';
|
|
21
20
|
import styles from './styles.module.css';
|
|
22
21
|
|
|
@@ -56,7 +55,7 @@ type ResultsFooterProps = {
|
|
|
56
55
|
};
|
|
57
56
|
|
|
58
57
|
function ResultsFooter({state, onClose}: ResultsFooterProps) {
|
|
59
|
-
const {generateSearchPageLink} =
|
|
58
|
+
const {generateSearchPageLink} = useSearchPage();
|
|
60
59
|
|
|
61
60
|
return (
|
|
62
61
|
<Link to={generateSearchPageLink(state.query)} onClick={onClose}>
|
|
@@ -8,14 +8,10 @@
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
|
|
10
10
|
import Head from '@docusaurus/Head';
|
|
11
|
-
import type {
|
|
11
|
+
import type {Props} from '@theme/SearchMetadata';
|
|
12
12
|
|
|
13
13
|
// Override default/agnostic SearchMetas to use Algolia-specific metadata
|
|
14
|
-
function SearchMetadata({
|
|
15
|
-
locale,
|
|
16
|
-
version,
|
|
17
|
-
tag,
|
|
18
|
-
}: SearchMetadataProps): JSX.Element {
|
|
14
|
+
function SearchMetadata({locale, version, tag}: Props): JSX.Element {
|
|
19
15
|
// Seems safe to consider here the locale is the language,
|
|
20
16
|
// as the existing docsearch:language filter is afaik a regular string-based filter
|
|
21
17
|
const language = locale;
|
|
@@ -22,10 +22,10 @@ import {
|
|
|
22
22
|
usePluralForm,
|
|
23
23
|
isRegexpStringMatch,
|
|
24
24
|
useDynamicCallback,
|
|
25
|
+
useSearchPage,
|
|
25
26
|
} from '@docusaurus/theme-common';
|
|
26
27
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
27
28
|
import {useAllDocsData} from '@docusaurus/plugin-content-docs/client';
|
|
28
|
-
import useSearchQuery from '@theme/hooks/useSearchQuery';
|
|
29
29
|
import Layout from '@theme/Layout';
|
|
30
30
|
import Translate, {translate} from '@docusaurus/Translate';
|
|
31
31
|
import styles from './styles.module.css';
|
|
@@ -162,7 +162,7 @@ function SearchPage(): JSX.Element {
|
|
|
162
162
|
const documentsFoundPlural = useDocumentsFoundPlural();
|
|
163
163
|
|
|
164
164
|
const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers();
|
|
165
|
-
const {searchQuery, setSearchQuery} =
|
|
165
|
+
const {searchQuery, setSearchQuery} = useSearchPage();
|
|
166
166
|
const initialSearchResultState: ResultDispatcherState = {
|
|
167
167
|
items: [],
|
|
168
168
|
query: null,
|
|
@@ -6,23 +6,23 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
declare module '@docusaurus/theme-search-algolia' {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
import type {DeepPartial} from 'utility-types';
|
|
10
|
+
|
|
11
|
+
export type ThemeConfig = {
|
|
12
|
+
algolia: {
|
|
13
|
+
contextualSearch: boolean;
|
|
14
|
+
externalUrlRegex?: string;
|
|
15
|
+
appId: string;
|
|
16
|
+
apiKey: string;
|
|
17
|
+
indexName: string;
|
|
18
|
+
searchParameters: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type UserThemeConfig = DeepPartial<ThemeConfig>;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
declare module '@theme/
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
export default function useAlgoliaContextualFacetFilters(): useAlgoliaContextualFacetFiltersReturns;
|
|
24
|
+
declare module '@docusaurus/theme-search-algolia/client' {
|
|
25
|
+
export function useAlgoliaContextualFacetFilters(): [string, string[]];
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
declare module '@theme/SearchPage' {
|
|
@@ -30,17 +30,6 @@ declare module '@theme/SearchPage' {
|
|
|
30
30
|
export default SearchPage;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
declare module '@theme/SearchMetadata' {
|
|
34
|
-
export type SearchMetadataProps = {
|
|
35
|
-
readonly locale?: string;
|
|
36
|
-
readonly version?: string;
|
|
37
|
-
readonly tag?: string;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const SearchMetadata: (props: SearchMetadataProps) => JSX.Element;
|
|
41
|
-
export default SearchMetadata;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
33
|
declare module '@theme/SearchBar' {
|
|
45
34
|
const SearchBar: () => JSX.Element;
|
|
46
35
|
export default SearchBar;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import {Joi} from '@docusaurus/utils-validation';
|
|
9
9
|
import type {ThemeConfig, Validate, ValidationResult} from '@docusaurus/types';
|
|
10
10
|
|
|
11
|
-
const DEFAULT_CONFIG = {
|
|
11
|
+
export const DEFAULT_CONFIG = {
|
|
12
12
|
contextualSearch: false, // future: maybe we want to enable this by default
|
|
13
13
|
|
|
14
14
|
// By default, all Docusaurus sites are using the same AppId
|
|
@@ -17,7 +17,6 @@ const DEFAULT_CONFIG = {
|
|
|
17
17
|
|
|
18
18
|
searchParameters: {},
|
|
19
19
|
};
|
|
20
|
-
exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
21
20
|
|
|
22
21
|
export const Schema = Joi.object({
|
|
23
22
|
algolia: Joi.object({
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/
|
|
7
|
-
import type { useAlgoliaContextualFacetFiltersReturns } from '@theme/hooks/useAlgoliaContextualFacetFilters';
|
|
8
|
-
export default function useAlgoliaContextualFacetFilters(): useAlgoliaContextualFacetFiltersReturns;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/
|
|
7
|
-
import { useHistory } from '@docusaurus/router';
|
|
8
|
-
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
9
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
10
|
-
const SEARCH_PARAM_QUERY = 'q';
|
|
11
|
-
function useSearchQuery() {
|
|
12
|
-
const history = useHistory();
|
|
13
|
-
const { siteConfig: { baseUrl }, } = useDocusaurusContext();
|
|
14
|
-
const [searchQuery, setSearchQueryState] = useState('');
|
|
15
|
-
// Init search query just after React hydration
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
var _a;
|
|
18
|
-
const searchQueryStringValue = (_a = new URLSearchParams(window.location.search).get(SEARCH_PARAM_QUERY)) !== null && _a !== void 0 ? _a : '';
|
|
19
|
-
setSearchQueryState(searchQueryStringValue);
|
|
20
|
-
}, []);
|
|
21
|
-
const setSearchQuery = useCallback((newSearchQuery) => {
|
|
22
|
-
const searchParams = new URLSearchParams(window.location.search);
|
|
23
|
-
if (newSearchQuery) {
|
|
24
|
-
searchParams.set(SEARCH_PARAM_QUERY, newSearchQuery);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
searchParams.delete(SEARCH_PARAM_QUERY);
|
|
28
|
-
}
|
|
29
|
-
history.replace({
|
|
30
|
-
search: searchParams.toString(),
|
|
31
|
-
});
|
|
32
|
-
setSearchQueryState(newSearchQuery);
|
|
33
|
-
}, [history]);
|
|
34
|
-
const generateSearchPageLink = useCallback((targetSearchQuery) =>
|
|
35
|
-
// Refer to https://github.com/facebook/docusaurus/pull/2838
|
|
36
|
-
`${baseUrl}search?q=${encodeURIComponent(targetSearchQuery)}`, [baseUrl]);
|
|
37
|
-
return {
|
|
38
|
-
searchQuery,
|
|
39
|
-
setSearchQuery,
|
|
40
|
-
generateSearchPageLink,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
export default useSearchQuery;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import {useHistory} from '@docusaurus/router';
|
|
9
|
-
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
10
|
-
import {useCallback, useEffect, useState} from 'react';
|
|
11
|
-
import type {SearchQuery} from '@theme/hooks/useSearchQuery';
|
|
12
|
-
|
|
13
|
-
const SEARCH_PARAM_QUERY = 'q';
|
|
14
|
-
|
|
15
|
-
function useSearchQuery(): SearchQuery {
|
|
16
|
-
const history = useHistory();
|
|
17
|
-
const {
|
|
18
|
-
siteConfig: {baseUrl},
|
|
19
|
-
} = useDocusaurusContext();
|
|
20
|
-
|
|
21
|
-
const [searchQuery, setSearchQueryState] = useState('');
|
|
22
|
-
|
|
23
|
-
// Init search query just after React hydration
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
const searchQueryStringValue =
|
|
26
|
-
new URLSearchParams(window.location.search).get(SEARCH_PARAM_QUERY) ?? '';
|
|
27
|
-
|
|
28
|
-
setSearchQueryState(searchQueryStringValue);
|
|
29
|
-
}, []);
|
|
30
|
-
|
|
31
|
-
const setSearchQuery = useCallback(
|
|
32
|
-
(newSearchQuery: string) => {
|
|
33
|
-
const searchParams = new URLSearchParams(window.location.search);
|
|
34
|
-
|
|
35
|
-
if (newSearchQuery) {
|
|
36
|
-
searchParams.set(SEARCH_PARAM_QUERY, newSearchQuery);
|
|
37
|
-
} else {
|
|
38
|
-
searchParams.delete(SEARCH_PARAM_QUERY);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
history.replace({
|
|
42
|
-
search: searchParams.toString(),
|
|
43
|
-
});
|
|
44
|
-
setSearchQueryState(newSearchQuery);
|
|
45
|
-
},
|
|
46
|
-
[history],
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
const generateSearchPageLink = useCallback(
|
|
50
|
-
(targetSearchQuery: string) =>
|
|
51
|
-
// Refer to https://github.com/facebook/docusaurus/pull/2838
|
|
52
|
-
`${baseUrl}search?q=${encodeURIComponent(targetSearchQuery)}`,
|
|
53
|
-
[baseUrl],
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
return {
|
|
57
|
-
searchQuery,
|
|
58
|
-
setSearchQuery,
|
|
59
|
-
generateSearchPageLink,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export default useSearchQuery;
|