Skip to content

Commit 89b6a49

Browse files
committed
feat: track featured snaps
1 parent b72dff4 commit 89b6a49

4 files changed

Lines changed: 42 additions & 4 deletions

File tree

static/js/public/featured-snaps.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import declareGlobal from "../libs/declare";
2+
import { trackFeaturedSnapClicked } from "../store/utils/featuredTracker";
23

34
type PackageData = {
45
apps: Array<string>;
@@ -31,21 +32,26 @@ async function buildCards(category: string): Promise<void> {
3132
);
3233

3334
featuredSnapCards.forEach((featuredSnapCard, index) => {
34-
buildCard(featuredSnapCard, localData[index]);
35+
buildCard(featuredSnapCard, localData[index], category, index);
3536
});
3637
} else {
3738
const response = await fetch(`/store/featured-snaps/${category}`);
3839
const data: Array<PackageData> = await response.json();
3940

4041
featuredSnapCards.forEach((featuredSnapCard, index) => {
41-
buildCard(featuredSnapCard, data[index]);
42+
buildCard(featuredSnapCard, data[index], category, index);
4243
});
4344

4445
window.sessionStorage.setItem(category, JSON.stringify(data));
4546
}
4647
}
4748

48-
function buildCard(featuredSnapCard: Element, data: PackageData) {
49+
function buildCard(
50+
featuredSnapCard: Element,
51+
data: PackageData,
52+
category: string,
53+
index: number,
54+
) {
4955
const placeholder = featuredSnapCard.querySelector(
5056
"[data-js='featured-snap-card-placeholder']",
5157
) as HTMLElement;
@@ -117,6 +123,16 @@ function buildCard(featuredSnapCard: Element, data: PackageData) {
117123
}
118124

119125
content.appendChild(clone);
126+
127+
content.addEventListener("click", () => {
128+
if (category === "featured") {
129+
trackFeaturedSnapClicked(
130+
data.package_name,
131+
index + 1,
132+
"home",
133+
);
134+
}
135+
});
120136
}
121137

122138
placeholder.classList.add("u-hide");

static/js/store/components/PackageList/PackageList.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from "@canonical/react-components";
1010

1111
import { PackageFilter } from "../PackageFilter";
12-
import { trackSearchResultClicked } from "../../utils";
12+
import { trackSearchResultClicked, trackFeaturedSnapClicked } from "../../utils";
1313

1414
import type { RefObject } from "react";
1515
import type { Category, Package, Packages } from "../../types";
@@ -143,6 +143,14 @@ function PackageList({
143143
1,
144144
packageData.package.name,
145145
);
146+
} else if (isFeatured) {
147+
trackFeaturedSnapClicked(
148+
packageData.package.name,
149+
(parseInt(currentPage) - 1) * ITEMS_PER_PAGE +
150+
index +
151+
1,
152+
"store",
153+
);
146154
}
147155
}}
148156
>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { trackEvent } from "@canonical/analytics-events";
2+
3+
export function trackFeaturedSnapClicked(
4+
snapName: string,
5+
position: number,
6+
source: "home" | "store",
7+
): void {
8+
trackEvent("snap_featured_snap_clicked", {
9+
snap_name: snapName,
10+
position,
11+
source,
12+
});
13+
}

static/js/store/utils/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export {
88
trackSearchResults,
99
trackSearchResultClicked,
1010
} from "./searchTracker";
11+
export { trackFeaturedSnapClicked } from "./featuredTracker";

0 commit comments

Comments
 (0)