diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index e058f325c..cfea600e7 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -89,6 +89,7 @@ "mcp-handler": "catalog:", "next": "catalog:", "postcss-preset-mantine": "catalog:", + "posthog-js": "catalog:", "prismjs": "catalog:", "react": "catalog:", "react-dom": "catalog:", diff --git a/apps/nextjs/src/app/[locale]/layout.tsx b/apps/nextjs/src/app/[locale]/layout.tsx index a9c6b65cb..dbb81dc49 100644 --- a/apps/nextjs/src/app/[locale]/layout.tsx +++ b/apps/nextjs/src/app/[locale]/layout.tsx @@ -139,11 +139,11 @@ export default async function Layout(props: { suppressHydrationWarning > - + diff --git a/apps/nextjs/src/app/[locale]/manage/settings/_components/analytics.settings.tsx b/apps/nextjs/src/app/[locale]/manage/settings/_components/analytics.settings.tsx index ed2dfcce8..9ad50b432 100644 --- a/apps/nextjs/src/app/[locale]/manage/settings/_components/analytics.settings.tsx +++ b/apps/nextjs/src/app/[locale]/manage/settings/_components/analytics.settings.tsx @@ -17,9 +17,10 @@ interface AnalyticsSettingsProps { export const AnalyticsSettings = ({ initialData }: AnalyticsSettingsProps) => { const t = useScopedI18n("management.page.settings.section.analytics"); + const { instanceId: _, ...formDefaults } = initialData; const form = useForm({ - initialValues: initialData, - onValuesChange: (updatedValues, _) => { + initialValues: formDefaults, + onValuesChange: (updatedValues, _prev) => { if (!form.isValid()) { return; } diff --git a/apps/nextjs/src/components/layout/analytics.tsx b/apps/nextjs/src/components/layout/analytics.tsx index 8d81fa13c..a59c65b7e 100644 --- a/apps/nextjs/src/components/layout/analytics.tsx +++ b/apps/nextjs/src/components/layout/analytics.tsx @@ -1,16 +1,24 @@ -import Script from "next/script"; +"use client"; -import { UMAMI_WEBSITE_ID } from "@homarr/analytics"; -import { db } from "@homarr/db"; -import { getServerSettingByKeyAsync } from "@homarr/db/queries"; +import { useEffect } from "react"; -export const Analytics = async () => { - // For static pages it will not find any analytics data so we do not include the script on them - const analytics = await getServerSettingByKeyAsync(db, "analytics").catch(() => null); +const POSTHOG_KEY = "phc_vYBmGWNbRshvfeC7EHfeSmUm2pD2Neg5nGqzJuGvS8Hs"; +const POSTHOG_HOST = "https://hog.homarr.dev"; - if (analytics?.enableGeneral) { - return