diff --git a/__tests__/components/providers/telemetry-provider.test.tsx b/__tests__/components/providers/telemetry-provider.test.tsx
index 6c7836bdca..9949d1d432 100644
--- a/__tests__/components/providers/telemetry-provider.test.tsx
+++ b/__tests__/components/providers/telemetry-provider.test.tsx
@@ -1,5 +1,12 @@
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { render, screen, waitFor } from "@testing-library/react";
+
+const useTelemetryMock = vi.hoisted(() => vi.fn());
+
+vi.mock("#/hooks/use-telemetry", () => ({
+ useTelemetry: useTelemetryMock,
+}));
+
import { TelemetryProvider } from "#/components/providers/telemetry-provider";
import * as telemetry from "#/services/telemetry";
@@ -24,6 +31,7 @@ describe("TelemetryProvider", () => {
initializeClientMock = vi
.spyOn(telemetry, "initializePostHogClient")
.mockResolvedValue(null);
+ useTelemetryMock.mockClear();
window.location.hash = "";
sessionStorage.clear();
});
@@ -77,6 +85,17 @@ describe("TelemetryProvider", () => {
});
});
+ it("mounts telemetry lifecycle when analytics are enabled", () => {
+ render(
+
+
+ ,
+ );
+
+ expect(screen.getByTestId("child")).toBeInTheDocument();
+ expect(useTelemetryMock).toHaveBeenCalledOnce();
+ });
+
it("keeps rendering children when eager initialization fails", async () => {
initializeClientMock.mockRejectedValueOnce(new Error("unavailable"));
@@ -90,7 +109,7 @@ describe("TelemetryProvider", () => {
await waitFor(() => expect(initializeClientMock).toHaveBeenCalledOnce());
});
- it("does not initialize when analytics are disabled", () => {
+ it("does not initialize telemetry lifecycle when analytics are disabled", () => {
render(
@@ -100,5 +119,6 @@ describe("TelemetryProvider", () => {
expect(screen.getByTestId("child")).toBeInTheDocument();
expect(configureTelemetryMock).toHaveBeenCalledWith(false);
expect(initializeClientMock).not.toHaveBeenCalled();
+ expect(useTelemetryMock).not.toHaveBeenCalled();
});
});
diff --git a/src/components/providers/telemetry-provider.tsx b/src/components/providers/telemetry-provider.tsx
index adaa9ffc2e..ced175a0b8 100644
--- a/src/components/providers/telemetry-provider.tsx
+++ b/src/components/providers/telemetry-provider.tsx
@@ -1,5 +1,6 @@
import React from "react";
import type { BootstrapConfig } from "posthog-js";
+import { useTelemetry } from "#/hooks/use-telemetry";
import {
configurePostHogBootstrap,
configureTelemetry,
@@ -62,6 +63,11 @@ function readBootstrapIds(): BootstrapConfig | undefined {
}
}
+function TelemetryLifecycle() {
+ useTelemetry();
+ return null;
+}
+
export function TelemetryProvider({
children,
config = {},
@@ -91,5 +97,10 @@ export function TelemetryProvider({
}
}, [analyticsEnabled, apiHost, apiKey, uiHost]);
- return children;
+ return (
+ <>
+ {analyticsEnabled ? : null}
+ {children}
+ >
+ );
}