Skip to content

Commit 1bdda56

Browse files
committed
WIP: Add tracking
1 parent 7dd515b commit 1bdda56

13 files changed

Lines changed: 165 additions & 27 deletions

package-lock.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"@protobuf-ts/runtime": "2.9.1",
5454
"@types/bootstrap": "^5.2.10",
5555
"@types/eslint": "^8.56.10",
56+
"@types/gtag.js": "^0.0.20",
5657
"@types/minimist": "^1.2.5",
5758
"@types/node": "^22.0.0",
5859
"@types/uuid": "^10.0.0",

ui/core/components/detailed_results.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,19 @@ export class DetailedResults extends Component {
303303

304304
const simButton = simButtonRef.value!;
305305
simButton?.addEventListener('click', () => {
306+
gtag('event', 'sim:actions', {
307+
event_category: 'simulate',
308+
event_label: 'once',
309+
});
306310
this.simUI?.runSimOnce();
307311
});
308312

309313
const deathButton = deathButtonRef.value!;
310314
deathButton?.addEventListener('click', () => {
315+
gtag('event', 'sim:actions', {
316+
event_category: 'simulate',
317+
event_label: 'death',
318+
});
311319
if (this.latestDeathSeeds.length > 1) {
312320
this.simUI?.sim.setFixedRngSeed(TypedEvent.nextEventID(), Number(this.latestDeathSeeds.pop()));
313321
this.recentlyEditedSeed = true;

ui/core/components/exporter.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ export abstract class Exporter extends BaseModal {
2121
constructor(parent: HTMLElement, options: ExporterOptions) {
2222
super(parent, 'exporter', { title: options.title, header: true, footer: true });
2323

24+
const titleAsSlug = options.title.toLowerCase().replaceAll(' ', '-');
25+
gtag('event', 'page_view', {
26+
page_title: options.title,
27+
page_location: `${window.location.href}/export/${titleAsSlug}`,
28+
});
29+
2430
this.textElem = <textarea spellcheck={false} className="exporter-textarea form-control" />;
2531
this.body.append(this.textElem);
2632

@@ -37,7 +43,7 @@ export abstract class Exporter extends BaseModal {
3743
<button className="exporter-button btn btn-primary download-button ms-2" ref={downloadBtnRef}>
3844
<i className="fa fa-download me-1"></i>
3945
{i18n.t('export.json.download_button')}
40-
</button>
46+
</button>,
4147
);
4248

4349
const downloadButton = downloadBtnRef.value!;

ui/core/components/importer.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,14 @@ export abstract class Importer extends BaseModal {
2020

2121
constructor(parent: HTMLElement, options: ImporterOptions) {
2222
super(parent, 'importer', { title: options.title, footer: true, disposeOnClose: false });
23+
const titleAsSlug = options.title.toLowerCase().replaceAll(' ', '-');
24+
gtag('event', 'page_view', {
25+
page_title: options.title,
26+
page_location: `${window.location.href}/import/${titleAsSlug}`,
27+
});
2328

2429
this.allowFileUpload = options.allowFileUpload || false;
25-
const uploadInputId = 'upload-input-' + options.title.toLowerCase().replaceAll(' ', '-');
30+
const uploadInputId = 'upload-input-' + titleAsSlug;
2631

2732
const descriptionElemRef = ref<HTMLDivElement>();
2833
const textElemRef = ref<HTMLTextAreaElement>();
@@ -33,7 +38,7 @@ export abstract class Importer extends BaseModal {
3338
<div>
3439
<div ref={descriptionElemRef} className="import-description"></div>
3540
<textarea ref={textElemRef} className="importer-textarea form-control" attributes={{ spellcheck: false }}></textarea>
36-
</div>
41+
</div>,
3742
);
3843

3944
this.footer!.appendChild(
@@ -49,7 +54,7 @@ export abstract class Importer extends BaseModal {
4954
<i className="fa fa-download me-1"></i>
5055
{i18n.t('import.json.import_button')}
5156
</button>
52-
</div>
57+
</div>,
5358
);
5459

5560
this.descriptionElem = descriptionElemRef.value!;

ui/core/components/individual_sim_ui/talents_tab.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ export class TalentsTab<SpecType extends Spec> extends SimTab {
5151
changedEvent: (player: Player<any>) => player.talentsChangeEmitter,
5252
getValue: (player: Player<any>) => player.getTalentsString(),
5353
setValue: (eventID: EventID, player: Player<any>, newValue: string) => {
54+
gtag('event', 'sim:actions', {
55+
event_category: 'talents',
56+
event_label: 'update'
57+
});
5458
player.setTalentsString(eventID, newValue);
5559
},
5660
});

ui/core/components/raid_sim_action.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ export function addRaidSimAction(simUI: SimUI): RaidSimResultsManager {
1818
let waitAbort = false;
1919

2020
simUI.addAction(i18n.t('sidebar.buttons.simulate'), 'dps-action', async ev => {
21+
gtag('event', 'sim:actions', {
22+
event_category: 'simulate',
23+
event_label: 'simulate',
24+
value: simUI.sim.getIterations(),
25+
});
2126
const button = ev.target as HTMLButtonElement;
2227
button.disabled = true;
2328
if (!isRunning) {

ui/core/components/settings_menu.tsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ export class SettingsMenu extends BaseModal {
7272
content: i18n.t('info.options.restore_defaults.tooltip'),
7373
});
7474
restoreDefaultsButton.value.addEventListener('click', () => {
75+
gtag('event', 'sim:actions', {
76+
event_category: 'restore-defaults',
77+
event_label: 'restore'
78+
});
7579
this.simUI.applyDefaults(TypedEvent.nextEventID());
7680
new Toast({
7781
variant: 'success',
@@ -119,6 +123,11 @@ export class SettingsMenu extends BaseModal {
119123
return idx == -1 ? defaultLang : idx;
120124
},
121125
setValue: (eventID: EventID, sim: Sim, newValue: number) => {
126+
gtag('event', 'sim:actions', {
127+
event_category: 'language',
128+
event_label: 'update',
129+
value: langs[newValue],
130+
});
122131
sim.setLanguage(eventID, langs[newValue] || 'en');
123132
setLang(langs[newValue] || 'en');
124133
},
@@ -149,6 +158,11 @@ export class SettingsMenu extends BaseModal {
149158
changedEvent: (sim: Sim) => sim.showExperimentalChangeEmitter,
150159
getValue: (sim: Sim) => sim.getShowExperimental(),
151160
setValue: (eventID: EventID, sim: Sim, newValue: boolean) => {
161+
gtag('event', 'sim:actions', {
162+
event_category: 'show-experimental',
163+
event_label: 'update',
164+
value: newValue,
165+
});
152166
sim.setShowExperimental(eventID, newValue);
153167
},
154168
});
@@ -177,7 +191,14 @@ export class SettingsMenu extends BaseModal {
177191
labelTooltip: 'Use web workers to spread sim workload over multiple CPU cores.',
178192
changedEvent: (sim: Sim) => sim.wasmConcurrencyChangeEmitter,
179193
getValue: (sim: Sim) => sim.getWasmConcurrency(),
180-
setValue: (eventID, sim, newValue) => sim.setWasmConcurrency(eventID, newValue),
194+
setValue: (eventID, sim, newValue) => {
195+
gtag('event', 'sim:actions', {
196+
event_category: 'concurrency',
197+
event_label: 'update',
198+
value: newValue,
199+
});
200+
sim.setWasmConcurrency(eventID, newValue);
201+
},
181202
values: values,
182203
});
183204

ui/core/components/sim_header.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,13 @@ export class SimHeader extends Component {
206206
icon: 'fas fa-cog fa-lg',
207207
tooltip: i18n.t('info.sim_options'),
208208
classes: 'sim-options',
209-
onclick: () => settingsMenu.open(),
209+
onclick: () => {
210+
gtag('event', 'page_view', {
211+
page_title: "Options",
212+
page_location: `${window.location.href}/settings-menu`,
213+
});
214+
settingsMenu.open();
215+
},
210216
});
211217
}
212218

ui/core/components/sim_tab.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { SimUI } from "../sim_ui";
2-
import { Component } from "./component";
1+
import { SimUI } from '../sim_ui';
2+
import { Component } from './component';
33

44
export interface SimTabConfig {
5-
identifier: string,
6-
title: string,
5+
identifier: string;
6+
title: string;
77
}
88

99
export abstract class SimTab extends Component {
@@ -25,8 +25,7 @@ export abstract class SimTab extends Component {
2525
this.rootElem.id = this.config.identifier;
2626
this.rootElem.classList.add('tab-pane', 'fade');
2727

28-
if (parentElem.childNodes.length == 0)
29-
this.rootElem.classList.add('active', 'show');
28+
if (parentElem.childNodes.length == 0) this.rootElem.classList.add('active', 'show');
3029

3130
this.navItem = this.buildNavItem();
3231
this.navLink = this.navItem.children[0] as HTMLElement;
@@ -35,6 +34,13 @@ export abstract class SimTab extends Component {
3534
this.rootElem.appendChild(this.contentContainer);
3635

3736
this.simUI.simHeader.addSimTabLink(this);
37+
38+
this.navItem.addEventListener('click', () => {
39+
gtag('event', 'page_view', {
40+
page_title: config.title,
41+
page_location: `${window.location.href}/${config.identifier}`,
42+
});
43+
});
3844
}
3945

4046
private buildNavItem(): HTMLElement {
@@ -59,7 +65,7 @@ export abstract class SimTab extends Component {
5965

6066
protected buildColumn(index: number, customCssClass: string): HTMLElement {
6167
const column = document.createElement('div');
62-
column.classList.add('tab-panel-col', `${customCssClass}-${index}`)
68+
column.classList.add('tab-panel-col', `${customCssClass}-${index}`);
6369
return column;
6470
}
6571
}

0 commit comments

Comments
 (0)