generated from thegrind/laravel-dockerized
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";
|
|
}
|