Skip to content

Commit 9eaf18a

Browse files
feat(docsearch): introduce resultsFooterComponent option
1 parent 5df5069 commit 9eaf18a

3 files changed

Lines changed: 29 additions & 3 deletions

File tree

src/DocSearchModal.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
createAutocomplete,
44
AutocompleteState,
55
} from '@francoischalifour/autocomplete-core';
6-
import { getAlgoliaHits } from '@francoischalifour/autocomplete-preset-algolia';
6+
import { getAlgoliaResults } from '@francoischalifour/autocomplete-preset-algolia';
77

88
import { MAX_QUERY_SIZE } from './constants';
99
import {
@@ -35,6 +35,7 @@ export function DocSearchModal({
3535
onClose = noop,
3636
transformItems = (x) => x,
3737
hitComponent = Hit,
38+
resultsFooterComponent = () => null,
3839
navigator,
3940
}: DocSearchModalProps) {
4041
const [state, setState] = React.useState<
@@ -144,7 +145,7 @@ export function DocSearchModal({
144145
];
145146
}
146147

147-
return getAlgoliaHits({
148+
return getAlgoliaResults({
148149
searchClient,
149150
queries: [
150151
{
@@ -193,7 +194,9 @@ export function DocSearchModal({
193194

194195
throw error;
195196
})
196-
.then((hits: DocSearchHit[]) => {
197+
.then((results) => {
198+
const hits: DocSearchHit[] = results[0].hits;
199+
const nbHits: number = results[0].nbHits;
197200
const sources = groupBy(hits, (hit) => hit.hierarchy.lvl0);
198201

199202
// We store the `lvl0`s to display them as search suggestions
@@ -207,6 +210,8 @@ export function DocSearchModal({
207210
});
208211
}
209212

213+
setContext({ nbHits });
214+
210215
return Object.values<DocSearchHit[]>(sources).map((items) => {
211216
return {
212217
onSelect({ suggestion }) {
@@ -339,6 +344,7 @@ export function DocSearchModal({
339344
{...autocomplete}
340345
state={state}
341346
hitComponent={hitComponent}
347+
resultsFooterComponent={resultsFooterComponent}
342348
recentSearches={recentSearches}
343349
favoriteSearches={favoriteSearches}
344350
onItemClick={(item) => {

src/ResultsScreen.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ interface ResultsScreenProps
1616
React.KeyboardEvent
1717
> {
1818
state: AutocompleteState<InternalDocSearchHit>;
19+
resultsFooterComponent(props: {
20+
state: AutocompleteState<InternalDocSearchHit>;
21+
}): JSX.Element;
1922
onItemClick(item: InternalDocSearchHit): void;
2023
}
2124

@@ -69,6 +72,10 @@ export function ResultsScreen(props: ResultsScreenProps) {
6972
/>
7073
);
7174
})}
75+
76+
<section className="DocSearch-HitsFooter">
77+
<props.resultsFooterComponent state={props.state} />
78+
</section>
7279
</div>
7380
);
7481
}

src/style.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,19 @@ html[data-theme='dark'] {
412412
color: var(--docsearch-highlight-color);
413413
}
414414

415+
.DocSearch-HitsFooter {
416+
margin-bottom: var(--docsearch-spacing);
417+
padding: var(--docsearch-spacing);
418+
color: var(--docsearch-muted-color);
419+
display: flex;
420+
justify-content: center;
421+
}
422+
423+
.DocSearch-HitsFooter a {
424+
color: inherit;
425+
border-bottom: 1px solid;
426+
}
427+
415428
.DocSearch-Hit {
416429
display: flex;
417430
position: relative;

0 commit comments

Comments
 (0)