Skip to content

Commit

Permalink
feat(docsearch): introduce disableUserPersonalization API
Browse files Browse the repository at this point in the history
  • Loading branch information
francoischalifour committed Jul 9, 2020
1 parent 77dacee commit a40cc03
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
4 changes: 3 additions & 1 deletion src/DocSearch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
AutocompleteState,
} from '@francoischalifour/autocomplete-core';

import { DocSearchHit, InternalDocSearchHit } from './types';
import { DocSearchHit, InternalDocSearchHit, SearchClient } from './types';
import { DocSearchButton } from './DocSearchButton';
import { DocSearchModal } from './DocSearchModal';
import { useDocSearchKeyboardEvents } from './useDocSearchKeyboardEvents';
Expand All @@ -25,6 +25,8 @@ export interface DocSearchProps
resultsFooterComponent?(props: {
state: AutocompleteState<InternalDocSearchHit>;
}): JSX.Element | null;
transformSearchClient?(searchClient: SearchClient): SearchClient;
disableUserPersonalization?: boolean;
}

export function DocSearch(props: DocSearchProps) {
Expand Down
15 changes: 12 additions & 3 deletions src/DocSearchModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { MAX_QUERY_SIZE } from './constants';
import {
DocSearchHit,
InternalDocSearchHit,
SearchClient,
StoredDocSearchHit,
} from './types';
import { groupBy, identity, noop } from './utils';
Expand All @@ -24,7 +23,6 @@ import { ScreenState } from './ScreenState';
import { Footer } from './Footer';

interface DocSearchModalProps extends DocSearchProps {
transformSearchClient?(searchClient: SearchClient): SearchClient;
initialScrollY: number;
onClose?(): void;
}
Expand All @@ -42,6 +40,7 @@ export function DocSearchModal({
navigator,
initialScrollY = 0,
transformSearchClient = identity,
disableUserPersonalization = false,
}: DocSearchModalProps) {
const [state, setState] = React.useState<
AutocompleteState<InternalDocSearchHit>
Expand Down Expand Up @@ -79,6 +78,10 @@ export function DocSearchModal({

const saveRecentSearch = React.useCallback(
function saveRecentSearch(item: InternalDocSearchHit) {
if (disableUserPersonalization) {
return;
}

// We don't store `content` record, but their parent if available.
const search = item.type === 'content' ? item.__docsearch_parent : item;

Expand All @@ -92,7 +95,7 @@ export function DocSearchModal({
recentSearches.add(search);
}
},
[favoriteSearches, recentSearches]
[favoriteSearches, recentSearches, disableUserPersonalization]
);

const autocomplete = React.useMemo(
Expand Down Expand Up @@ -120,6 +123,10 @@ export function DocSearchModal({
// @ts-ignore Temporarily ignore bad typing in autocomplete-core.
getSources({ query, state, setContext, setStatus }) {
if (!query) {
if (disableUserPersonalization) {
return [];
}

return [
{
onSelect({ suggestion }) {
Expand Down Expand Up @@ -263,6 +270,7 @@ export function DocSearchModal({
placeholder,
navigator,
transformItems,
disableUserPersonalization,
]
);

Expand Down Expand Up @@ -351,6 +359,7 @@ export function DocSearchModal({
state={state}
hitComponent={hitComponent}
resultsFooterComponent={resultsFooterComponent}
disableUserPersonalization={disableUserPersonalization}
recentSearches={recentSearches}
favoriteSearches={favoriteSearches}
onItemClick={(item) => {
Expand Down
5 changes: 4 additions & 1 deletion src/StartScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,16 @@ interface StartScreenProps
onItemClick(item: StoredDocSearchHit): void;
recentSearches: StoredSearchPlugin<StoredDocSearchHit>;
favoriteSearches: StoredSearchPlugin<StoredDocSearchHit>;
disableUserPersonalization: boolean;
}

export function StartScreen(props: StartScreenProps) {
if (props.state.status === 'idle' && props.hasSuggestions === false) {
return (
<div className="DocSearch-StartScreen">
<p className="DocSearch-Help">No recent searches</p>
{!props.disableUserPersonalization && (
<p className="DocSearch-Help">No recent searches</p>
)}
</div>
);
}
Expand Down

0 comments on commit a40cc03

Please sign in to comment.