1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
import * as serverData from "../../../foundation/json-parsing/server-data";
/**
* This is a workaround for Search Focus Page based on existing metrics tech debt in Search Results Page.
*
* # Context
* - In CrystalB, impressions for SFP now includes a recent searches shelf which needs to update dynamically as searches are performed.
*
* # What is the Workaround?
* The JetEngine Metrics API is designed to work s.t.:
* 1. JS populates `parentId`, which JetEngine Metric APIs uses **internally** to refer to between `ImpressionMetrics`.
* 2. Native generates `impressionParentId`, which is refers `impressionId` of parent assigned during serialization -
*
* Here, we instead:
* 1. JS populates `parentId` as normal
* 2. `event-linter` iterates through the impressions, finds the parent containers, and adds parent impression ids.
* 3. Native generates `impressionParentId` as normal where possible.
*
* # Why Workaround?
* 1. There are existing hacks for impression parents, e.g. fake `ad_container` and native child trackers w/ parent ID attribution.
* 2. AppStore is stuck between old ASK metrics and new JE metrics APIs. Our JS builders and existing native metrics are intertwined in a way that makes using JS defined `parentId` attribution nontrivial.
* 3. We need to dynamically update the recent searches shelf every time a search is performed.
*
* See `search-results-impressions` for more background.
*/
/**
* Update the `impression` field, attributing impressionParentIds per workaround above.
* @param eventFields Event fields to modify **in place**.
*/
export function decorateImpressionParentId(eventFields) {
var _a;
const impressions = serverData.asArrayOrEmpty(eventFields, "impressions");
// Find result parent id.
let recentsParentImpressionId;
for (const impression of impressions) {
const canonicalId = serverData.asString(impression, "canonicalId");
if (canonicalId === "R8804") {
recentsParentImpressionId = (_a = serverData.asString(impression, "impressionId")) !== null && _a !== void 0 ? _a : undefined; // *NOT* id.
break;
}
}
if (!recentsParentImpressionId) {
return;
}
// Update impressions for search results
eventFields["impressions"] = impressions.map((impression) => {
const canonicalId = serverData.asString(impression, "canonicalId");
const impressionType = serverData.asString(impression, "impressionType");
if (serverData.isNullOrEmpty(canonicalId) &&
impressionType === "link" &&
impression != null &&
serverData.asString(impression, "impressionParentId") == null) {
impression["impressionParentId"] = recentsParentImpressionId;
}
return impression;
});
}
//# sourceMappingURL=search-focus-impressions.js.map
|