Skip to content

Commit 1dfa9ba

Browse files
committed
feat(docs): Track events for interaction
fixes #38
1 parent a6352fb commit 1dfa9ba

9 files changed

Lines changed: 53 additions & 12 deletions

File tree

projects/ngqp-demo/src/app/demo.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<a class="nav-item" routerLink="/docs" routerLinkActive="active">
1515
<span class="nav-link">Documentation</span>
1616
</a>
17-
<a class="nav-item" href="/api-docs">
17+
<a class="nav-item" href="/api-docs" (click)="onSwitchToApiDocs()">
1818
<span class="nav-link">API</span>
1919
</a>
2020
</div>

projects/ngqp-demo/src/app/demo.component.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ export class DemoComponent {
2727
analytics.startTracking(router);
2828
}
2929

30+
public onSwitchToApiDocs() {
31+
this.analytics.trackEvent(`Switched to API Docs`);
32+
}
33+
3034
}

projects/ngqp-demo/src/app/shared/analytics.service.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ export class AnalyticsService {
2323
map(event => event as NavigationEnd),
2424
).subscribe(event => {
2525
const url = event.urlAfterRedirects;
26-
gtag('config', 'UA-131508204-1', { 'page_path': url });
26+
27+
try {
28+
gtag('config', 'UA-131508204-1', { 'page_path': url });
29+
} catch (ignored) {
30+
// Ignored
31+
}
2732
});
2833
}
2934

@@ -32,7 +37,11 @@ export class AnalyticsService {
3237
return;
3338
}
3439

35-
gtag('event', action);
40+
try {
41+
gtag('event', action);
42+
} catch (ignored) {
43+
// Ignored
44+
}
3645
}
3746

3847
}

projects/ngqp-demo/src/app/shared/demo-browser/demo-browser.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="demo-browser__toolbar">
22
<div class="demo-browser__buttons">
33
<button class="demo-browser__button" title="{{ routerAdapter.history.length }} previous route(s)"
4-
(click)="routerAdapter.goBack()" [disabled]="routerAdapter.history.length === 0">
4+
(click)="goBack()" [disabled]="routerAdapter.history.length === 0">
55
<fa-icon [icon]="faArrowLeft" size="1x"></fa-icon>
66
</button>
77
</div>
@@ -12,7 +12,7 @@
1212
<span>app.io</span>
1313
</span>
1414
<input #urlInput type="text" class="demo-browser__url__input"
15-
[ngModel]="routerAdapter.url" (keyup.enter)="routerAdapter.navigateToQueryParamString($event.target.value)" />
15+
[ngModel]="routerAdapter.url" (keyup.enter)="routeTo($event.target.value)" />
1616
</div>
1717
</div>
1818

projects/ngqp-demo/src/app/shared/demo-browser/demo-browser.component.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core';
2-
import { Params } from '@angular/router';
32
import { Subject } from 'rxjs';
43
import { takeUntil } from 'rxjs/operators';
54
import { faArrowLeft } from '@fortawesome/free-solid-svg-icons';
65
import { NGQP_ROUTER_ADAPTER, QueryParamGroup } from '@ngqp/core';
76
import { TestRouterAdapter } from '../../test-router-adapter.service';
7+
import { AnalyticsService } from '../analytics.service';
88

99
@Component({
1010
selector: 'demo-browser',
@@ -29,7 +29,10 @@ export class DemoBrowserComponent implements OnInit, OnDestroy {
2929

3030
private destroy$ = new Subject<void>();
3131

32-
constructor(@Inject(NGQP_ROUTER_ADAPTER) public routerAdapter: TestRouterAdapter) {
32+
constructor(
33+
@Inject(NGQP_ROUTER_ADAPTER) public routerAdapter: TestRouterAdapter,
34+
private analytics: AnalyticsService,
35+
) {
3336
}
3437

3538
public ngOnInit() {
@@ -48,4 +51,14 @@ export class DemoBrowserComponent implements OnInit, OnDestroy {
4851
this.destroy$.complete();
4952
}
5053

54+
public goBack(): void {
55+
this.routerAdapter.goBack();
56+
this.analytics.trackEvent('Pressed back button in demo browser');
57+
}
58+
59+
public routeTo(url: string) {
60+
this.routerAdapter.navigateToQueryParamString(url);
61+
this.analytics.trackEvent('Changed URL in demo browser');
62+
}
63+
5164
}

projects/ngqp-demo/src/app/shared/demo-example/demo-example.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
<ngb-tabset [destroyOnHide]="false" class="bordered no-padding">
2-
<ngb-tab title="Demo">
1+
<ngb-tabset [destroyOnHide]="false" (tabChange)="onTabChange($event)" class="bordered no-padding">
2+
<ngb-tab id="Demo" title="Demo">
33
<ng-template ngbTabContent>
44
<ng-content></ng-content>
55
</ng-template>
66
</ngb-tab>
77

8-
<ngb-tab *ngIf="markup" title="HTML">
8+
<ngb-tab *ngIf="markup" id="HTML" title="HTML">
99
<ng-template ngbTabContent>
1010
<demo-snippet type="html" [code]="markup" class="m-0"></demo-snippet>
1111
</ng-template>
1212
</ngb-tab>
1313

14-
<ngb-tab *ngIf="typescript" title="Typescript">
14+
<ngb-tab *ngIf="typescript" id="Typescript" title="Typescript">
1515
<ng-template ngbTabContent>
1616
<demo-snippet type="typescript" [code]="typescript" class="m-0"></demo-snippet>
1717
</ng-template>

projects/ngqp-demo/src/app/shared/demo-example/demo-example.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { Component, Input } from '@angular/core';
2+
import { NgbTabChangeEvent } from '@ng-bootstrap/ng-bootstrap';
3+
import { AnalyticsService } from '../analytics.service';
24

35
@Component({
46
selector: 'demo-example',
@@ -13,4 +15,10 @@ export class DemoExampleComponent {
1315
@Input()
1416
public typescript: string;
1517

18+
constructor(private analytics: AnalyticsService) {}
19+
20+
public onTabChange(event: NgbTabChangeEvent) {
21+
this.analytics.trackEvent(`Switched to ${event.nextId} tab`);
22+
}
23+
1624
}

projects/ngqp-demo/src/app/shared/docs-item/docs-item.component.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919

2020
<ul class="nav flex-column text-muted pt-1">
2121
<li *ngFor="let fragment of fragmentService.fragments" class="nav-item">
22-
<a class="nav-link" [attr.data-indent]="fragment.indent" routerLink="." [fragment]="fragment.id">
22+
<a class="nav-link" [attr.data-indent]="fragment.indent"
23+
routerLink="." [fragment]="fragment.id" (click)="onTocClick(fragment.name)">
2324
{{ fragment.name }}
2425
</a>
2526
</li>

projects/ngqp-demo/src/app/shared/docs-item/docs-item.component.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { FragmentsService } from '../docs-fragment/fragments.service';
44
import { ActivatedRoute } from '@angular/router';
55
import { getPageForRoute } from '../../demo-docs.routes';
66
import { DocsPage } from '../../docs-page';
7+
import { AnalyticsService } from '../analytics.service';
78

89
@Component({
910
selector: 'docs-item',
@@ -19,8 +20,13 @@ export class DocsItemComponent {
1920
public navigationCollapsed = true;
2021

2122
constructor(public fragmentService: FragmentsService,
23+
private analytics: AnalyticsService,
2224
private route: ActivatedRoute) {
2325
this.docsPage = getPageForRoute(this.route.snapshot.url[0]);
2426
}
2527

28+
public onTocClick(name: string): void {
29+
this.analytics.trackEvent(`Clicked TOC Link: ${this.docsPage}:${name}`);
30+
}
31+
2632
}

0 commit comments

Comments
 (0)