Skip to content

Commit

Permalink
refactor(headless): migrate recommendation interface load event (#3471)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexprudhomme authored Dec 13, 2023
1 parent a645812 commit b644bdf
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ import {
} from '../../utils/validate-payload';
import {AnalyticsAsyncThunk} from '../analytics/analytics-utils';
import {fromAnalyticsStateToAnalyticsParams} from '../configuration/analytics-params';
import {logRecommendationUpdate} from './recommendation-analytics-actions';
import {SearchAction} from '../search/search-actions';
import {
logRecommendationUpdate,
recommendationInterfaceLoad,
} from './recommendation-analytics-actions';

export type StateNeededByGetRecommendations = ConfigurationSection &
RecommendationSection &
Expand Down Expand Up @@ -59,9 +63,8 @@ export const getRecommendations = createAsyncThunk<
async (_, {getState, rejectWithValue, extra: {apiClient}}) => {
const state = getState();
const startedAt = new Date().getTime();
const fetched = await apiClient.recommendations(
await buildRecommendationRequest(state)
);
const request = await buildRecommendationRequest(state);
const fetched = await apiClient.recommendations(request);
const duration = new Date().getTime() - startedAt;
if (isErrorResponse(fetched)) {
return rejectWithValue(fetched.error);
Expand Down Expand Up @@ -114,11 +117,30 @@ export const buildRecommendationRequest = async (
visitorId: await getVisitorID(s.configuration.analytics),
}),
...(s.configuration.analytics.enabled &&
(await fromAnalyticsStateToAnalyticsParams(s.configuration.analytics))),
(await buildAnalyticsSection(s, recommendationInterfaceLoad()))),
...(s.configuration.search.authenticationProviders.length && {
authentication: s.configuration.search.authenticationProviders.join(','),
}),
...(s.pagination && {
numberOfResults: s.pagination.numberOfResults,
}),
});

const buildAnalyticsSection = async (
state: StateNeededByGetRecommendations,
action: SearchAction
) => {
const eventDescription =
state.configuration.analytics.analyticsMode === 'legacy'
? undefined
: {
customData: action.getEventExtraPayload(state),
actionCause: action.actionCause,
type: action.actionCause,
};

return await fromAnalyticsStateToAnalyticsParams(
state.configuration.analytics,
eventDescription
);
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {ItemClick} from '@coveo/relay-event-types';
import {RecommendationAnalyticsProvider} from '../../api/analytics/recommendations-analytics';
import {SearchAnalyticsProvider} from '../../api/analytics/search-analytics';
import {Result} from '../../api/search/search/result';
import {
ClickAction,
Expand All @@ -10,14 +11,25 @@ import {
LegacySearchAction,
validateResultPayload,
} from '../analytics/analytics-utils';
import {SearchPageEvents} from '../analytics/search-action-cause';
import {SearchAction} from '../search/search-actions';

//TODO: KIT-2859
export const logRecommendationUpdate = (): LegacySearchAction =>
makeAnalyticsAction(
'analytics/recommendation/update',
(client) => client.makeRecommendationInterfaceLoad(),
(getState) => new RecommendationAnalyticsProvider(getState)
);

export const recommendationInterfaceLoad = (): SearchAction => {
return {
actionCause: SearchPageEvents.recommendationInterfaceLoad,
getEventExtraPayload: (state) =>
new SearchAnalyticsProvider(() => state).getBaseMetadata(),
};
};

export const logRecommendationOpen = (result: Result): ClickAction =>
makeAnalyticsAction({
prefix: 'analytics/recommendation/open',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ import {
logRecentQueryClick,
recentQueryClick,
} from '../features/recent-queries/recent-queries-analytics-actions';
import {
logRecommendationUpdate,
recommendationInterfaceLoad,
} from '../features/recommendation/recommendation-analytics-actions';
import {executeSearch} from '../features/search/search-actions';
import {
logResultsSort,
Expand Down Expand Up @@ -916,4 +920,17 @@ describe('Analytics Search Migration', () => {

assertNextEqualsLegacy(callSpy);
});

it('analytics/recommendation/update', async () => {
const action = executeSearch({
legacy: logRecommendationUpdate(),
next: recommendationInterfaceLoad(),
});

legacySearchEngine.dispatch(action);
nextSearchEngine.dispatch(action);
await wait();

assertNextEqualsLegacy(callSpy);
});
});

0 comments on commit b644bdf

Please sign in to comment.