Skip to content

Commit 7b8dbf4

Browse files
CrahunGitTomás López
andauthored
Feature/globally disabled tracking (#40)
* Added ability to disable tracking on certain pages * Fixed method names for tracking dependency * Fixed dependency scoped for tracking state * Fixed renamed bug * - Globally disable tracking (not renabled) * Added ocumentation to readme * Seggregate disable behaviour into IAnalytics(globally) and ITrackingNavigationState (current page) * Improved global disable toggle Co-authored-by: Tomás López <tlopez@facephi.com>
1 parent dca3e04 commit 7b8dbf4

7 files changed

Lines changed: 54 additions & 17 deletions

File tree

README.md

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ https://nuget.org/packages/Blazor-Analytics
1010

1111
First, import the namespaces in `_Imports.razor`
1212

13-
```
13+
```csharp
1414
@using Blazor.Analytics
1515
@using Blazor.Analytics.Components
1616
```
1717

1818
Then, add the `NavigationTracker` component below your Router in `App.razor`.<br/>
1919
The tracker listens to every navigation change while it's rendered on a page.
2020

21-
```diff
21+
```csharp diff
2222
<Router ... />
2323
+ <NavigationTracker />
2424
```
@@ -27,7 +27,7 @@ The tracker listens to every navigation change while it's rendered on a page.
2727

2828
Edit `_Host.cshtml` and apply the following change:
2929

30-
```diff
30+
```html diff
3131
<script src="_framework/blazor.server.js"></script>
3232
+ <script src="_content/Blazor-Analytics/blazor-analytics.js"></script>
3333
```
@@ -36,7 +36,7 @@ Edit `_Host.cshtml` and apply the following change:
3636

3737
Edit `index.html` and apply the following change:
3838

39-
```diff
39+
```html diff
4040
<script src="_framework/blazor.webassembly.js"></script>
4141
+ <script src="_content/Blazor-Analytics/blazor-analytics.js"></script>
4242
```
@@ -45,7 +45,7 @@ Edit `index.html` and apply the following change:
4545

4646
Inside your main `Startup`/`Program`, call `AddGoogleAnalytics`. This will configure your GTAG_ID automatically.
4747

48-
```diff
48+
```csharp diff
4949
+ services.AddGoogleAnalytics("YOUR_GTAG_ID");
5050
```
5151

@@ -56,7 +56,7 @@ Inside your main `Startup`/`Program`, call `AddGoogleAnalytics`. This will confi
5656
<br>Or<br>
5757
Call `IAnalytics.TrackEvent` passing the `EventName`, `Value` and `Category` (optional).
5858

59-
```
59+
```csharp
6060
@inject Blazor.Analytics.IAnalytics Analytics
6161

6262
Analytics.TrackEvent("generate_lead", new {currency = "USD", value = 99.99});
@@ -66,20 +66,33 @@ Analytics.TrackEvent("generate_lead", new {currency = "USD", value = 99.99});
6666

6767
1.- Inject ITrackingState on blazor component
6868

69-
```
69+
```csharp
7070
@using Blazor.Analytics.Abstractions
71-
@inject ITrackingState DisableNavigation
71+
@using Blazor.Analytics
72+
73+
@inject ITrackingNavigationState TrackingNavigationState
74+
@inject IAnalytics GlobalTracking
7275
```
7376

7477
2.- Disable tracking on initialized
75-
```
78+
2.1 For current page
79+
```csharp
7680
protected override void OnInitialized()
7781
{
7882
DisableNavigation.DisableTracking();
7983
}
8084
```
85+
2.2 For whole application
86+
```csharp
87+
protected override void OnInitialized()
88+
{
89+
GlobalTracking.Disable();
90+
}
91+
```
8192

8293
# Changelog
94+
### v3.7.1
95+
- Support for globally enable/disable tracking for the whole application
8396
### v3.7.0
8497
- Support for disable tracking on any page
8598
### v3.1.0

demo/DemoApp/DemoApp.Client/Pages/Counter.razor

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
@page "/counter"
22

33
@using Blazor.Analytics.Abstractions
4+
@using Blazor.Analytics
45
@inject ITrackingNavigationState TrackingNavigationState
6+
@inject IAnalytics GlobalTracking
57

68
<h1>Counter</h1>
79

@@ -18,6 +20,7 @@
1820
protected override void OnInitialized()
1921
{
2022
TrackingNavigationState.DisableTracking();
23+
GlobalTracking.Disable();
2124
}
2225

2326
private void IncrementCount()

demo/DemoApp/DemoApp.Server/Pages/Counter.razor

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
@page "/counter"
22

33
@using Blazor.Analytics.Abstractions
4+
@using Blazor.Analytics
45
@inject ITrackingNavigationState TrackingNavigationState
6+
@inject IAnalytics GlobalTracking
57

68
<h1>Counter</h1>
79

@@ -18,12 +20,13 @@
1820
protected override void OnInitialized()
1921
{
2022
TrackingNavigationState.DisableTracking();
23+
GlobalTracking.Disable();
2124
}
2225

2326
private void IncrementCount()
2427
{
2528
currentCount++;
26-
//Analytics.TrackEvent("Increment", currentCount, "CountPage");
29+
Analytics.TrackEvent("Increment", currentCount, "CountPage");
2730

2831
//Example of how to track a generic event (see also https://developers.google.com/gtagjs/reference/ga4-events)
2932
Analytics.TrackEvent("generate_lead", new { currency = "USD", value = currentCount });

src/Blazor.Analytics/Abstractions/IAnalytics.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,8 @@ public interface IAnalytics
1111
Task TrackEvent(string eventName, string eventCategory = null, string eventLabel = null, int? eventValue = null);
1212
Task TrackEvent(string eventName, int eventValue, string eventCategory = null, string eventLabel = null);
1313
Task TrackEvent(string eventName, object eventData);
14+
15+
void Enable();
16+
void Disable();
1417
}
1518
}

src/Blazor.Analytics/Abstractions/ITrackingNavigationState.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ namespace Blazor.Analytics.Abstractions
77
public interface ITrackingNavigationState
88
{
99
void EnableTracking();
10-
1110
void DisableTracking();
12-
1311
bool IsTrackingEnabled();
1412
}
1513
}

src/Blazor.Analytics/Components/TrackingNavigationState.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ namespace Blazor.Analytics.GoogleAnalytics
77
{
88
public class TrackingNavigationState : ITrackingNavigationState
99
{
10-
private bool _isEnableTracking = true;
10+
private bool _isTrackingEnabled = true;
1111

12-
public void DisableTracking() => _isEnableTracking = false;
12+
public void DisableTracking() => _isTrackingEnabled = false;
1313

14-
public void EnableTracking() => _isEnableTracking = true;
14+
public void EnableTracking() => _isTrackingEnabled = true;
1515

16-
public bool IsTrackingEnabled() => _isEnableTracking;
16+
public bool IsTrackingEnabled() => _isTrackingEnabled;
1717
}
1818
}

src/Blazor.Analytics/GoogleAnalytics/GoogleAnalyticsStrategy.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Threading.Tasks;
3+
using Blazor.Analytics.Abstractions;
34
using Blazor.Analytics.Constants;
45
using Microsoft.JSInterop;
56

@@ -8,13 +9,15 @@ namespace Blazor.Analytics.GoogleAnalytics
89
public sealed class GoogleAnalyticsStrategy : IAnalytics
910
{
1011
private readonly IJSRuntime _jsRuntime;
12+
private bool _isGloballyEnabledTracking = true;
1113

1214
private string _trackingId = null;
1315
public bool _isInitialized = false;
1416
public bool _debug = false;
1517

1618
public GoogleAnalyticsStrategy(
17-
IJSRuntime jsRuntime)
19+
IJSRuntime jsRuntime
20+
)
1821
{
1922
_jsRuntime = jsRuntime;
2023
}
@@ -41,6 +44,11 @@ await _jsRuntime.InvokeAsync<string>(
4144

4245
public async Task TrackNavigation(string uri)
4346
{
47+
if (!_isGloballyEnabledTracking)
48+
{
49+
return;
50+
}
51+
4452
if (!_isInitialized)
4553
{
4654
await Initialize(_trackingId);
@@ -71,6 +79,11 @@ public Task TrackEvent(string eventName, int eventValue, string eventCategory =
7179

7280
public async Task TrackEvent(string eventName, object eventData)
7381
{
82+
if (!_isGloballyEnabledTracking)
83+
{
84+
return;
85+
}
86+
7487
if (!_isInitialized)
7588
{
7689
await Initialize(_trackingId);
@@ -80,5 +93,9 @@ await _jsRuntime.InvokeAsync<string>(
8093
GoogleAnalyticsInterop.TrackEvent,
8194
eventName, eventData);
8295
}
96+
97+
public void Enable() => _isGloballyEnabledTracking = true;
98+
99+
public void Disable() => _isGloballyEnabledTracking = false;
83100
}
84101
}

0 commit comments

Comments
 (0)