39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
|
import type { InsightsEvent } from "./types";
|
||
|
import { getQueryForObject } from "./utils";
|
||
|
|
||
|
export function addQueryId(events: InsightsEvent[]): InsightsEvent[] {
|
||
|
return events.map((event) => {
|
||
|
if (!isValidEventForQueryIdLookup(event)) {
|
||
|
return event;
|
||
|
}
|
||
|
const objectIDsWithInferredQueryID: string[] = [];
|
||
|
const updatedObjectData = event.objectIDs?.map((objectID, i) => {
|
||
|
const objectData = event.objectData?.[i];
|
||
|
if (objectData?.queryID) {
|
||
|
return objectData;
|
||
|
}
|
||
|
|
||
|
const [queryID] = getQueryForObject(event.index, objectID) ?? [];
|
||
|
if (queryID) {
|
||
|
objectIDsWithInferredQueryID.push(objectID);
|
||
|
}
|
||
|
return {
|
||
|
...objectData,
|
||
|
queryID
|
||
|
};
|
||
|
});
|
||
|
if (objectIDsWithInferredQueryID.length === 0) {
|
||
|
return event;
|
||
|
}
|
||
|
return {
|
||
|
...event,
|
||
|
objectData: updatedObjectData,
|
||
|
objectIDsWithInferredQueryID
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function isValidEventForQueryIdLookup(event: InsightsEvent): boolean {
|
||
|
return !event.queryID && event.eventType === "conversion";
|
||
|
}
|