diff --git a/vite/src/views/customers/customer/analytics/AnalyticsView.tsx b/vite/src/views/customers/customer/analytics/AnalyticsView.tsx index 959e2b647..9b3cfd5c0 100644 --- a/vite/src/views/customers/customer/analytics/AnalyticsView.tsx +++ b/vite/src/views/customers/customer/analytics/AnalyticsView.tsx @@ -37,7 +37,7 @@ import { export const AnalyticsView = () => { const [eventNames, setEventNames] = useState([]); const [featureIds, setFeatureIds] = useState([]); - const [clickHouseDisabled, setClickHouseDisabled] = useState(false); + const [analyticsUnavailable, setAnalyticsUnavailable] = useState(false); const [hasCleared, setHasCleared] = useState(false); const [groupFilter, setGroupFilter] = useState(null); const [planDeselected, setPlanDeselected] = useState>(new Set()); @@ -267,18 +267,20 @@ export const AnalyticsView = () => { }, [chartData, chartConfig, groupBy, responseEventNames, totals]); useEffect(() => { - if ( - ( - error as { - response?: { - data?: { - code?: string; - }; + const code = ( + error as { + response?: { + data?: { + code?: string; }; - } - )?.response?.data?.code === ErrCode.TinybirdDisabled + }; + } + )?.response?.data?.code; + if ( + code === ErrCode.CloudflareAnalyticsUnavailable || + code === ErrCode.CloudflareAnalyticsUnsupportedQuery ) { - setClickHouseDisabled(true); + setAnalyticsUnavailable(true); } }, [error]); @@ -320,10 +322,10 @@ export const AnalyticsView = () => { ], ); - if (clickHouseDisabled) { + if (analyticsUnavailable) { return (
-

Tinybird is disabled

+

Analytics data is unavailable

); } diff --git a/vite/tests/views/customers/customer/analytics/analytics-errors-source.test.ts b/vite/tests/views/customers/customer/analytics/analytics-errors-source.test.ts new file mode 100644 index 000000000..45c26e22f --- /dev/null +++ b/vite/tests/views/customers/customer/analytics/analytics-errors-source.test.ts @@ -0,0 +1,25 @@ +import { readFileSync } from "node:fs"; +import { join } from "node:path"; +import { describe, expect, test } from "bun:test"; + +const source = readFileSync( + join( + import.meta.dir, + "../../../../../src/views/customers/customer/analytics/AnalyticsView.tsx", + ), + "utf8", +); + +describe("AnalyticsView error source", () => { + test("does not expose Tinybird disabled UI", () => { + expect(source).not.toContain("Tinybird is disabled"); + expect(source).not.toContain("ErrCode.TinybirdDisabled"); + expect(source).not.toContain("clickHouseDisabled"); + }); + + test("handles Cloudflare analytics availability errors", () => { + expect(source).toContain("ErrCode.CloudflareAnalyticsUnavailable"); + expect(source).toContain("ErrCode.CloudflareAnalyticsUnsupportedQuery"); + expect(source).toContain("Analytics data is unavailable"); + }); +});