Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/components/search/Search.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,26 @@
import {useEffect, useState} from 'react';
import {searchMetadata} from '../../data/search';
import {DocSearch} from './docsearch/DocSearch';
import type {DocSearchHit} from './docsearch/types';
import './docsearch/docsearch.css';

// import '@docsearch/css';

// The Algolia crawler indexes production, so every hit URL is absolute
// (https://sourcegraph.com/docs/...). Rewrite them to root-relative paths so
// results resolve against whichever deployment is being viewed (Vercel
// preview, local dev, or prod) instead of always jumping to prod.
const PROD_DOCS_URL_PREFIX = 'https://sourcegraph.com/docs';
const basePath = process.env.NEXT_PUBLIC_DOCS_BASE_PATH || '';

const toLocalUrl = (url: string): string =>
url.startsWith(PROD_DOCS_URL_PREFIX)
? basePath + url.slice(PROD_DOCS_URL_PREFIX.length)
: url;

const transformItems = (items: DocSearchHit[]): DocSearchHit[] =>
items.map(item => ({...item, url: toLocalUrl(item.url)}));

const getInitialQuery = () => {
if (typeof window !== 'undefined' && window?.location?.href) {
const url = new URL(window.location.href);
Expand Down Expand Up @@ -32,6 +48,7 @@ export const Search = () => {
apiKey={algoliaConfig.apiKey}
initialQuery={initialQuery}
maxResultsPerGroup={algoliaConfig.maxResultsPerGroup}
transformItems={transformItems}
/>
);
};