mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-14 20:24:56 +02:00
34 lines
1.5 KiB
JavaScript
34 lines
1.5 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
import { useCallback } from 'react';
|
|
import { isRegexpStringMatch } from '@docusaurus/theme-common';
|
|
import { useBaseUrlUtils } from '@docusaurus/useBaseUrl';
|
|
import { useAlgoliaThemeConfig } from './useAlgoliaThemeConfig';
|
|
function replacePathname(pathname, replaceSearchResultPathname) {
|
|
return replaceSearchResultPathname
|
|
? pathname.replaceAll(new RegExp(replaceSearchResultPathname.from, 'g'), replaceSearchResultPathname.to)
|
|
: pathname;
|
|
}
|
|
/**
|
|
* Process the search result url from Algolia to its final form, ready to be
|
|
* navigated to or used as a link
|
|
*/
|
|
export function useSearchResultUrlProcessor() {
|
|
const { withBaseUrl } = useBaseUrlUtils();
|
|
const { algolia: { externalUrlRegex, replaceSearchResultPathname }, } = useAlgoliaThemeConfig();
|
|
return useCallback((url) => {
|
|
const parsedURL = new URL(url);
|
|
// Algolia contains an external domain => navigate to URL
|
|
if (isRegexpStringMatch(externalUrlRegex, parsedURL.href)) {
|
|
return url;
|
|
}
|
|
// Otherwise => transform to relative URL for SPA navigation
|
|
const relativeUrl = `${parsedURL.pathname + parsedURL.hash}`;
|
|
return withBaseUrl(replacePathname(relativeUrl, replaceSearchResultPathname));
|
|
}, [withBaseUrl, externalUrlRegex, replaceSearchResultPathname]);
|
|
}
|