diff --git a/backend/app/site_settings/default_settings.yml b/backend/app/site_settings/default_settings.yml index d6ecfe5a..7709fea2 100644 --- a/backend/app/site_settings/default_settings.yml +++ b/backend/app/site_settings/default_settings.yml @@ -58,6 +58,11 @@ website: data_type: str description: "The link to the discord" client: true + ga_id: + default: "" + data_type: str + description: "Google Analytics ID" + client: true custom_js: custom_js_example_questions: diff --git a/frontend/app/package.json b/frontend/app/package.json index 4236b2f6..009f071a 100644 --- a/frontend/app/package.json +++ b/frontend/app/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "@hookform/resolvers": "^3.6.0", + "@next/third-parties": "^14.2.5", "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-alert-dialog": "^1.1.1", "@radix-ui/react-aspect-ratio": "^1.1.0", diff --git a/frontend/app/src/api/site-settings.ts b/frontend/app/src/api/site-settings.ts index 8a95c53a..f494e75e 100644 --- a/frontend/app/src/api/site-settings.ts +++ b/frontend/app/src/api/site-settings.ts @@ -41,6 +41,7 @@ export interface PublicWebsiteSettings { 'custom_js_button_label': string; 'custom_js_button_img_src': string; 'custom_js_logo_src': string; + 'ga_id': string | null; } const settingsItemSchema = z.object({ diff --git a/frontend/app/src/app/layout.tsx b/frontend/app/src/app/layout.tsx index 033dacc7..6c3c5093 100644 --- a/frontend/app/src/app/layout.tsx +++ b/frontend/app/src/app/layout.tsx @@ -1,6 +1,7 @@ import { getPublicSiteSettings } from '@/api/site-settings'; import { RootProviders } from '@/app/RootProviders'; import { auth } from '@/lib/auth'; +import { GoogleAnalytics } from '@next/third-parties/google'; import type { Metadata } from 'next'; import { Inter } from 'next/font/google'; import './globals.css'; @@ -39,6 +40,7 @@ export default async function RootLayout ({ {children} + {settings.ga_id && }