From 20d20a296c87f8bc0aa6f776e5a7d384308a3312 Mon Sep 17 00:00:00 2001 From: Sarah Dayan <5370675+sarahdayan@users.noreply.github.com> Date: Fri, 20 Oct 2023 11:57:07 +0200 Subject: [PATCH] feat: allow extra arguments in `sendEvent` signature (#1210) --- .../__tests__/createSearchInsightsApi.test.ts | 36 ++++++++++++++ .../src/createSearchInsightsApi.ts | 47 ++++++++++++++----- .../src/types/AutocompleteInsightsApi.ts | 3 ++ 3 files changed, 74 insertions(+), 12 deletions(-) diff --git a/packages/autocomplete-plugin-algolia-insights/src/__tests__/createSearchInsightsApi.test.ts b/packages/autocomplete-plugin-algolia-insights/src/__tests__/createSearchInsightsApi.test.ts index c9a6e5e26..12f601ed9 100644 --- a/packages/autocomplete-plugin-algolia-insights/src/__tests__/createSearchInsightsApi.test.ts +++ b/packages/autocomplete-plugin-algolia-insights/src/__tests__/createSearchInsightsApi.test.ts @@ -252,6 +252,42 @@ describe('createSearchInsightsApi', () => { }); }); + test('allows arbitrary additional data to be sent', () => { + const insightsClient = jest.fn(); + const insightsApi = createSearchInsightsApi(insightsClient); + + insightsApi.convertedObjectIDsAfterSearch({ + // Regular properties + eventName: 'Items Added to cart', + index: 'index1', + items: getAlgoliaItems(1), + queryID: 'queryID', + // Extra additional properties + eventSubtype: 'purchase', + objectData: [ + { discount: 0, price: 100, quantity: 1, queryID: 'queryID' }, + ], + value: 100, + currency: 'USD', + }); + + expect(insightsClient).toHaveBeenCalledWith( + 'convertedObjectIDsAfterSearch', + { + eventName: 'Items Added to cart', + index: 'index1', + objectIDs: ['0'], + queryID: 'queryID', + eventSubtype: 'purchase', + objectData: [ + { discount: 0, price: 100, quantity: 1, queryID: 'queryID' }, + ], + value: 100, + currency: 'USD', + } + ); + }); + test('viewedObjectIDs() splits large payloads into multiple chunks', () => { const insightsClient = jest.fn(); const insightsApi = createSearchInsightsApi(insightsClient); diff --git a/packages/autocomplete-plugin-algolia-insights/src/createSearchInsightsApi.ts b/packages/autocomplete-plugin-algolia-insights/src/createSearchInsightsApi.ts index 7ec9a0fc9..778ea243a 100644 --- a/packages/autocomplete-plugin-algolia-insights/src/createSearchInsightsApi.ts +++ b/packages/autocomplete-plugin-algolia-insights/src/createSearchInsightsApi.ts @@ -11,6 +11,7 @@ import { ConvertedObjectIDsParams, InsightsClient, InsightsClientMethod, + WithArbitraryParams, InsightsParamsWithItems, ViewedFiltersParams, ViewedObjectIDsParams, @@ -83,13 +84,17 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { */ clickedObjectIDsAfterSearch( ...params: Array< - InsightsParamsWithItems + WithArbitraryParams< + InsightsParamsWithItems + > > ) { if (params.length > 0) { sendToInsights( 'clickedObjectIDsAfterSearch', - mapToInsightsParamsApi(params), + mapToInsightsParamsApi< + InsightsParamsWithItems + >(params), params[0].items ); } @@ -100,12 +105,16 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids/ */ clickedObjectIDs( - ...params: Array> + ...params: Array< + WithArbitraryParams> + > ) { if (params.length > 0) { sendToInsights( 'clickedObjectIDs', - mapToInsightsParamsApi(params), + mapToInsightsParamsApi< + InsightsParamsWithItems + >(params), params[0].items ); } @@ -115,7 +124,9 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { * * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-filters/ */ - clickedFilters(...params: ClickedFiltersParams[]) { + clickedFilters( + ...params: Array> + ) { if (params.length > 0) { searchInsights('clickedFilters', ...params); } @@ -127,13 +138,17 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { */ convertedObjectIDsAfterSearch( ...params: Array< - InsightsParamsWithItems + WithArbitraryParams< + InsightsParamsWithItems + > > ) { if (params.length > 0) { sendToInsights( 'convertedObjectIDsAfterSearch', - mapToInsightsParamsApi(params), + mapToInsightsParamsApi< + InsightsParamsWithItems + >(params), params[0].items ); } @@ -144,12 +159,16 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids/ */ convertedObjectIDs( - ...params: Array> + ...params: Array< + WithArbitraryParams> + > ) { if (params.length > 0) { sendToInsights( 'convertedObjectIDs', - mapToInsightsParamsApi(params), + mapToInsightsParamsApi< + InsightsParamsWithItems + >(params), params[0].items ); } @@ -159,7 +178,9 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { * * @link https://www.algolia.com/doc/api-reference/api-methods/converted-filters/ */ - convertedFilters(...params: ConvertedFiltersParams[]) { + convertedFilters( + ...params: Array> + ) { if (params.length > 0) { searchInsights('convertedFilters', ...params); } @@ -170,7 +191,9 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-object-ids/ */ viewedObjectIDs( - ...params: Array> + ...params: Array< + WithArbitraryParams> + > ) { if (params.length > 0) { params @@ -202,7 +225,7 @@ export function createSearchInsightsApi(searchInsights: InsightsClient) { * * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-filters/ */ - viewedFilters(...params: ViewedFiltersParams[]) { + viewedFilters(...params: Array>) { if (params.length > 0) { searchInsights('viewedFilters', ...params); } diff --git a/packages/autocomplete-plugin-algolia-insights/src/types/AutocompleteInsightsApi.ts b/packages/autocomplete-plugin-algolia-insights/src/types/AutocompleteInsightsApi.ts index 8d5deff46..d883bb755 100644 --- a/packages/autocomplete-plugin-algolia-insights/src/types/AutocompleteInsightsApi.ts +++ b/packages/autocomplete-plugin-algolia-insights/src/types/AutocompleteInsightsApi.ts @@ -6,6 +6,9 @@ export type AutocompleteInsightsApi = ReturnType< typeof createSearchInsightsApi >; +export type WithArbitraryParams> = + Record & TParams; + export type InsightsParamsWithItems = Omit & { items: AlgoliaInsightsHit[];