Files
myeasycms-v2/packages/analytics/src/analytics-manager.ts
Giancarlo Buomprisco 5eefa7ff16 Add events handling and enhance analytics tracking (#47)
* Add events handling and enhance analytics tracking

Added a new events system to track user actions throughout the application. Specific significant events such as user signup, sign-in, and checkout have dedicated handlers. Updated the analytics system to handle these event triggers and improved analytics reporting. An analytics provider has been implemented to manage event subscriptions and analytics event mappings.

* Remove unused dependencies from package.json files

Unused packages "@tanstack/react-table" and "next" have been removed from the packages/shared and tooling directories respectively. These changes help ensure that only needed packages are included in the project, reducing potential security risks and unnecessary processing overhead.

* Update dependencies

Multiple package versions were updated including "@tanstack/react-query" and "lucide-react"
2024-07-22 14:03:03 +08:00

74 lines
2.0 KiB
TypeScript

import { NullAnalyticsService } from './null-analytics-service';
import type {
AnalyticsManager,
AnalyticsService,
CreateAnalyticsManagerOptions,
} from './types';
/**
* Creates an analytics manager that can be used to track page views and events. The manager is initialized with a
* default provider and can be switched to a different provider at any time. The manager will use a NullAnalyticsService
* if the provider is not registered.
* @param options
*/
export function createAnalyticsManager<T extends string, Config extends object>(
options: CreateAnalyticsManagerOptions<T, Config>,
): AnalyticsManager {
let activeService: AnalyticsService = NullAnalyticsService;
const getActiveService = (): AnalyticsService => {
if (activeService === NullAnalyticsService) {
console.debug(
'Analytics service not initialized. Using NullAnalyticsService.',
);
}
return activeService;
};
const initialize = (provider: T, config: Config) => {
const factory = options.providers[provider];
if (!factory) {
console.warn(
`Analytics provider '${provider}' not registered. Using NullAnalyticsService.`,
);
activeService = NullAnalyticsService;
return;
}
activeService = factory(config);
activeService.initialize();
};
// Initialize with the default provider
initialize(options.defaultProvider, {} as Config);
return {
identify: (userId: string, traits?: Record<string, string>) => {
return getActiveService().identify(userId, traits);
},
/**
* Track a page view with the given URL.
* @param url
*/
trackPageView: (url: string) => {
return getActiveService().trackPageView(url);
},
/**
* Track an event with the given name and properties.
* @param eventName
* @param eventProperties
*/
trackEvent: (
eventName: string,
eventProperties?: Record<string, string | string[]>,
) => {
return getActiveService().trackEvent(eventName, eventProperties);
},
};
}