Skip to content

Commit

Permalink
Split label into multiple custom dimensions
Browse files Browse the repository at this point in the history
  • Loading branch information
renatodellosso committed Jul 26, 2024
1 parent b701c62 commit 7b43a17
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 29 deletions.
16 changes: 7 additions & 9 deletions lib/API.ts
Original file line number Diff line number Diff line change
Expand Up @@ -244,15 +244,13 @@ export namespace API {

team.requests = removeDuplicates([...team.requests, data.userId]);

return res
.status(200)
.send(
await db.updateObjectById<Team>(
Collections.Teams,
new ObjectId(data.teamId),
team
)
);
await db.updateObjectById<Team>(
Collections.Teams,
new ObjectId(data.teamId),
team
)

return res.status(200).send({ result: "success" });
},

handleRequest: async (req, res, { db, data }) => {
Expand Down
71 changes: 55 additions & 16 deletions lib/client/Analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,58 +10,78 @@ enum EventCategory {
Comp = "Competition",
}

/**
* Event parameters must be added as custom dimensions in Google Analytics. Go to Admin > Custom definitions.
*/
type EventParams = UaEventOptions & {
teamNumber?: number;
username?: string;
league?: League;
gameId?: GameId;
compName?: string;
usePublicData?: boolean;
teamScouted?: number;
targetName?: string;
}

if (process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID !== undefined && process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID !== "")
ReactGA.initialize(process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID);

function triggerEvent(optionsOrName: string | UaEventOptions) {
function triggerEvent(params: EventParams) {
if (!ReactGA._hasLoadedGA)
console.error("Google Analytics not loaded");

if (!ReactGA.isInitialized)
console.error("Google Analytics not initialized");

console.log("Event triggered:", optionsOrName);
ReactGA.event(optionsOrName);
console.log("Event triggered:", params);
const { action, ...options } = params;
ReactGA.event(action, options);
}

export namespace Analytics {
export function onboardingCompleted(name: string, teamNumber: number, league: League) {
triggerEvent({
category: EventCategory.User,
action: "onboarding_complete",
label: `${name} joined ${league} ${teamNumber}`
username: name,
teamNumber,
league
});
}

export function newSignUp(name: string) {
triggerEvent({
category: EventCategory.User,
action: "new_sign_up",
label: name
username: name
});
}

export function signIn(name: string) {
triggerEvent({
category: EventCategory.User,
action: "sign_in",
label: name
username: name
});
}

export function teamCreated(number: number, name: string, league: League, username: string) {
export function teamCreated(number: number, league: League, username: string) {
triggerEvent({
category: EventCategory.Team,
action: "create_team",
label: `Team ${number} - ${name} (${league}) by ${username}`
teamNumber: number,
username,
league
});
}

export function requestedToJoinTeam(teamId: string, username: string) {
export function requestedToJoinTeam(teamNumber: number, username: string) {
triggerEvent({
category: EventCategory.Team,
action: "request_to_join_team",
label: `Team ${teamId} by ${username}`
teamNumber,
username
});
}

Expand All @@ -70,47 +90,66 @@ export namespace Analytics {
triggerEvent({
category: EventCategory.Team,
action: `team_join_request_${accepted ? "accepted" : "declined"}`,
label: `${league} ${teamNumber} by ${requesterName} ${accepted ? "Accepted" : "Declined"} by ${doneByName}`
label: accepted ? "accepted" : "declined",
teamNumber,
username: doneByName,
targetName: requesterName,
league
});
}

export function seasonCreated(gameId: GameId, teamNumber: number, username: string) {
triggerEvent({
category: EventCategory.Season,
action: "create_season",
label: `${gameId} for team ${teamNumber} by ${username}`
gameId,
teamNumber,
username
});
}

export function compCreated(compName: string, gameId: GameId, usePublicData: boolean, teamNumber: number, username: string) {
triggerEvent({
category: EventCategory.Season,
action: "create_competition",
label: `${compName} for ${gameId} by ${teamNumber} ${username} (public: ${usePublicData})`
compName,
gameId,
usePublicData,
teamNumber,
username
});
}

export function quantReportSubmitted(teamScouted: number, teamNumber: number, compName: string, username: string) {
triggerEvent({
category: EventCategory.Comp,
action: "submit_quantitative_report",
label: `${teamScouted} for ${compName} by ${teamNumber} ${username}. `
teamNumber,
username,
compName,
teamScouted
});
}

export function pitReportSubmitted(teamScouted: number, teamNumber: number, compName: string, username: string) {
triggerEvent({
category: EventCategory.Comp,
action: "submit_pit_report",
label: `${teamScouted} for ${compName} by ${teamNumber} ${username}`
teamNumber,
username,
compName,
teamScouted
});
}

export function subjectiveReportSubmitted(teamsWithComments: string[], teamNumber: number, compName: string, username: string) {
triggerEvent({
category: EventCategory.Comp,
action: "submit_subjective_report",
label: `[${teamsWithComments.join(", ")}] for ${compName} by ${teamNumber} ${username}`
label: teamsWithComments.join(", "),
teamNumber,
username,
compName
});
}
}
2 changes: 1 addition & 1 deletion pages/createTeam.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ export default function CreateTeam() {
league
);

Analytics.teamCreated(data.number, data.name, data.league, session?.user?.name ?? "Unknown User");
Analytics.teamCreated(data.number, data.league, session?.user?.name ?? "Unknown User");

const win: Window = window;
win.location = `/${newTeam.slug}`;
Expand Down
6 changes: 3 additions & 3 deletions pages/profile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ export default function Profile(props: { teamList: Team[] }) {
}
}, [session?.user]);

const requestTeam = async (teamId: string) => {
const requestTeam = async (teamId: string, teamNumber: number) => {
setLoadingRequest(true);
await api.requestToJoinTeam(user?._id, teamId);
setLoadingRequest(false);
setSentRequest(true);

Analytics.requestedToJoinTeam(teamId, user?.name ?? "Unknown User");
Analytics.requestedToJoinTeam(teamNumber, user?.name ?? "Unknown User");
};

return (
Expand Down Expand Up @@ -149,7 +149,7 @@ export default function Profile(props: { teamList: Team[] }) {
<div
className="bg-base-300 w-11/12 rounded-xl p-4 mt-2 border-2 border-base-300 transition ease-in hover:border-primary"
onClick={() => {
requestTeam(String(team._id));
requestTeam(String(team._id), team.number);
}}
key={team._id}
>
Expand Down

0 comments on commit 7b43a17

Please sign in to comment.