Skip to content

Commit

Permalink
Update search_click event params using search query
Browse files Browse the repository at this point in the history
  • Loading branch information
yansavitski committed May 4, 2023
1 parent 855ce9a commit c185c90
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 62 deletions.
103 changes: 50 additions & 53 deletions packages/search-ui-analytics-plugin/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,55 @@ export interface AnalyticsPluginOptions {
client?: Pick<Tracker, "trackEvent">;
}

const transformFilterValues = (values: FilterValue[]): string[] => {
const transformBasicValue = (value: string | boolean | number) =>
value.toString();
const transformRangeValue = (value: FilterValueRange) =>
`${value.from || "*"}-${value.to || "*"}`;
const transformSearchQueryEvent = (event: Omit<SearchQueryEvent, "type">) => {
const transformFilterValues = (values: FilterValue[]): string[] => {
const transformBasicValue = (value: string | boolean | number) =>
value.toString();
const transformRangeValue = (value: FilterValueRange) =>
`${value.from || "*"}-${value.to || "*"}`;

return values.reduce<string[]>((res, value) => {
if (Array.isArray(value)) {
return [...res, ...value.map(transformBasicValue)];
}
return values.reduce<string[]>((res, value) => {
if (Array.isArray(value)) {
return [...res, ...value.map(transformBasicValue)];
}

return [
...res,
typeof value === "object"
? transformRangeValue(value)
: transformBasicValue(value)
];
}, []);
};

return [
...res,
typeof value === "object"
? transformRangeValue(value)
: transformBasicValue(value)
];
}, []);
return {
search: {
query: event.query,
filters: event.filters.reduce(
(res, filter) => ({
...res,
[filter.field]: transformFilterValues(filter.values)
}),
{}
),
page: {
current: event.currentPage,
size: event.resultsPerPage
},
results: {
items: [],
total_results: event.totalResults
},
sort: event.sort
?.filter(
(sort) => sort.direction === "desc" || sort.direction === "asc"
)
.map((sort) => ({
name: sort.field,
direction: sort.direction as "asc" | "desc"
}))
}
};
};

type TrackerParams<
Expand All @@ -54,47 +85,13 @@ const mapEventToTrackerParams: Record<
ResultSelected: (event: ResultSelectedEvent) => [
"search_click",
{
document: { id: event.documentId, index: event.origin },
search: {
query: event.query,
results: {
items: [],
total_results: event.totalResults
},
search_application: "search-ui"
}
...transformSearchQueryEvent(event),
document: { id: event.documentId, index: event.origin }
}
],
SearchQuery: (event: SearchQueryEvent) => [
"search",
{
search: {
query: event.query,
filters: event.filters.reduce(
(res, filter) => ({
...res,
[filter.field]: transformFilterValues(filter.values)
}),
{}
),
page: {
current: event.currentPage,
size: event.resultsPerPage
},
results: {
items: [],
total_results: event.totalResults
},
sort: event.sort
?.filter(
(sort) => sort.direction === "desc" || sort.direction === "asc"
)
.map((sort) => ({
name: sort.field,
direction: sort.direction as "asc" | "desc"
}))
}
}
transformSearchQueryEvent(event)
]
};

Expand Down
4 changes: 3 additions & 1 deletion packages/search-ui/src/__tests__/Events.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,9 @@ describe("when an API connector and handler are both provided", () => {
origin: "autocomplete",
position: 1,
query: "test",
tags: []
tags: [],
filters: [],
totalResults: 0
};

events.emit(event);
Expand Down
19 changes: 16 additions & 3 deletions packages/search-ui/src/actions/trackAutocompleteClickThrough.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,16 @@ export default function trackAutocompleteClickThrough(
);
}

const { autocompletedResultsRequestId, searchTerm, autocompletedResults } =
this.state;
const {
autocompletedResultsRequestId,
searchTerm,
autocompletedResults,
current,
resultsPerPage,
totalResults,
filters,
sort
} = this.state;
const resultIndex = autocompletedResults.findIndex(
(result) => result._meta.id === documentId
);
Expand All @@ -46,6 +54,11 @@ export default function trackAutocompleteClickThrough(
query: searchTerm,
position: resultIndex,
origin: "autocomplete",
tags
tags,
totalResults,
filters,
sort,
currentPage: current,
resultsPerPage: resultsPerPage
});
}
10 changes: 8 additions & 2 deletions packages/search-ui/src/actions/trackClickThrough.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ export default function trackClickThrough(
results,
current,
resultsPerPage,
totalResults
totalResults,
filters,
sort
}: SearchState = this.state;

const resultIndexOnPage = results.findIndex(
Expand All @@ -51,6 +53,10 @@ export default function trackClickThrough(
origin: "results",
position: resultIndexOnPage,
tags,
totalResults
totalResults,
filters,
sort,
currentPage: current,
resultsPerPage: resultsPerPage
});
}
4 changes: 1 addition & 3 deletions packages/search-ui/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,13 +254,11 @@ interface AutocompleteSuggestionSelectedEvent extends BaseEvent {
position: number;
}

export interface ResultSelectedEvent extends BaseEvent {
export interface ResultSelectedEvent extends Omit<SearchQueryEvent, "type"> {
type: "ResultSelected";
query: string;
documentId: string;
position: number;
origin: "autocomplete" | "results";
totalResults?: number;
}

interface FacetFilterSelectedEvent extends BaseEvent {
Expand Down

0 comments on commit c185c90

Please sign in to comment.