From 6a4be0791197b59bc7f4cb98a6418058d07a8c78 Mon Sep 17 00:00:00 2001 From: gnezim Date: Wed, 15 Apr 2026 00:15:43 +0300 Subject: [PATCH] Add useAnalytics hook with server-safe NoopAnalytics fallback --- src/observability/analytics/provider.tsx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/observability/analytics/provider.tsx diff --git a/src/observability/analytics/provider.tsx b/src/observability/analytics/provider.tsx new file mode 100644 index 00000000..121b607d --- /dev/null +++ b/src/observability/analytics/provider.tsx @@ -0,0 +1,23 @@ +import { createContext, useContext } from "react"; +import type { Analytics } from "./types.js"; + +const NOOP_ANALYTICS: Analytics = { + track() {}, + page() {}, +}; + +/** + * React context for the Analytics instance. + * Exported for use by AnalyticsLoader (which sets the provider value). + */ +export const AnalyticsContext = createContext(null); + +/** + * Returns the Analytics instance from context. + * Server-side and before AnalyticsLoader initializes: returns NoopAnalytics. + * Client-side after init: returns the real facade instance. + */ +export function useAnalytics(): Analytics { + const analytics = useContext(AnalyticsContext); + return analytics ?? NOOP_ANALYTICS; +}