Skip to content

Commit cacade4

Browse files
feat (api): Adds ability for click insights events to be triggered (#1916)
* Adds ability for click insights events to be triggered * Bump bundlesize * Cleanup insights click defenition * Update packages/docsearch-react/src/DocSearchModal.tsx Co-authored-by: François Chalifour <[email protected]> * Inline creating insights event parameters --------- Co-authored-by: François Chalifour <[email protected]>
1 parent f783d9d commit cacade4

File tree

5 files changed

+52
-5
lines changed

5 files changed

+52
-5
lines changed

bundlesize.config.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
},
77
{
88
"path": "packages/docsearch-react/dist/umd/index.js",
9-
"maxSize": "22.47 kB"
9+
"maxSize": "22.57 kB"
1010
},
1111
{
1212
"path": "packages/docsearch-js/dist/umd/index.js",
13-
"maxSize": "30.33 kB"
13+
"maxSize": "30.43 kB"
1414
}
1515
]
1616
}

packages/docsearch-react/src/DocSearchModal.tsx

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import type { AutocompleteState } from '@algolia/autocomplete-core';
2-
import { createAutocomplete } from '@algolia/autocomplete-core';
1+
import {
2+
type AlgoliaInsightsHit,
3+
createAutocomplete,
4+
} from '@algolia/autocomplete-core';
35
import React from 'react';
46

57
import { MAX_QUERY_SIZE } from './constants';
@@ -14,6 +16,7 @@ import { SearchBox } from './SearchBox';
1416
import { createStoredSearches } from './stored-searches';
1517
import type {
1618
DocSearchHit,
19+
DocSearchState,
1720
InternalDocSearchHit,
1821
StoredDocSearchHit,
1922
} from './types';
@@ -66,7 +69,7 @@ export function DocSearchModal({
6669
...screenStateTranslations
6770
} = translations;
6871
const [state, setState] = React.useState<
69-
AutocompleteState<InternalDocSearchHit>
72+
DocSearchState<InternalDocSearchHit>
7073
>({
7174
query: '',
7275
collections: [],
@@ -130,6 +133,28 @@ export function DocSearchModal({
130133
[favoriteSearches, recentSearches, disableUserPersonalization]
131134
);
132135

136+
const sendItemClickEvent = React.useCallback(
137+
(item: InternalDocSearchHit) => {
138+
if (!state.context.algoliaInsightsPlugin || !item.__autocomplete_id)
139+
return;
140+
141+
const insightsItem = item as AlgoliaInsightsHit;
142+
143+
const insightsClickParams = {
144+
eventName: 'Item Selected',
145+
index: insightsItem.__autocomplete_indexName,
146+
items: [insightsItem],
147+
positions: [item.__autocomplete_id],
148+
queryID: insightsItem.__autocomplete_queryID,
149+
};
150+
151+
state.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(
152+
insightsClickParams
153+
);
154+
},
155+
[state.context.algoliaInsightsPlugin]
156+
);
157+
133158
const autocomplete = React.useMemo(
134159
() =>
135160
createAutocomplete<
@@ -476,6 +501,9 @@ export function DocSearchModal({
476501
translations={screenStateTranslations}
477502
getMissingResultsUrl={getMissingResultsUrl}
478503
onItemClick={(item, event) => {
504+
// If insights is active, send insights click event
505+
sendItemClickEvent(item);
506+
479507
saveRecentSearch(item);
480508
if (!isModifierEvent(event)) {
481509
onClose();

packages/docsearch-react/src/types/DocSearchHit.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,5 @@ export declare type DocSearchHit = {
8484
appId: string;
8585
apiKey: string;
8686
};
87+
__autocomplete_id?: number;
8788
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type {
2+
AutocompleteContext,
3+
AutocompleteInsightsApi,
4+
AutocompleteState,
5+
BaseItem,
6+
} from '@algolia/autocomplete-core';
7+
8+
interface DocSearchContext extends AutocompleteContext {
9+
algoliaInsightsPlugin?: {
10+
insights: AutocompleteInsightsApi;
11+
};
12+
}
13+
14+
export interface DocSearchState<TItem extends BaseItem>
15+
extends AutocompleteState<TItem> {
16+
context: DocSearchContext;
17+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from './DocSearchHit';
2+
export * from './DocSearchState';
23
export * from './InternalDocSearchHit';
34
export * from './StoredDocSearchHit';

0 commit comments

Comments
 (0)