generated from nhcarrigan/template
43 lines
982 B
TypeScript
43 lines
982 B
TypeScript
/**
|
|
* @copyright 2026 NHCarrigan
|
|
* @license Naomi's Public License
|
|
* @author Naomi Carrigan
|
|
*/
|
|
|
|
import { Injectable, inject } from '@angular/core';
|
|
import { Router, NavigationEnd } from '@angular/router';
|
|
import { filter } from 'rxjs/operators';
|
|
|
|
declare global {
|
|
interface Window {
|
|
plausible?: (event: string, options?: { props?: Record<string, string> }) => void;
|
|
}
|
|
}
|
|
|
|
@Injectable({
|
|
providedIn: 'root'
|
|
})
|
|
export class AnalyticsService {
|
|
private router = inject(Router);
|
|
|
|
initialise(): void {
|
|
this.router.events.pipe(
|
|
filter((event): event is NavigationEnd => event instanceof NavigationEnd)
|
|
).subscribe((event) => {
|
|
this.trackPageView(event.urlAfterRedirects);
|
|
});
|
|
}
|
|
|
|
private trackPageView(path: string): void {
|
|
if (window.plausible) {
|
|
window.plausible('pageview', {
|
|
props: {
|
|
domain: 'library.nhcarrigan.com',
|
|
page: 'Naomi\'s Library',
|
|
path: path || '/'
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|