diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index d0403f7..b2e1c81 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -380,14 +380,16 @@ function canonicalTeamName(detail, fallback = '') { function normalizeAnalyticsPreferences(value) { if (!value || typeof value !== 'object') return { ...defaultAnalyticsPreferences } + const analytics = Boolean(value.analytics) + return { chosen: Boolean(value.chosen) && value.version === analyticsConsentVersion, - analytics: Boolean(value.analytics), - device: Boolean(value.device), - display: Boolean(value.display), - locale: Boolean(value.locale), - referrer: Boolean(value.referrer), - diagnostics: Boolean(value.diagnostics), + analytics, + device: analytics && Boolean(value.device), + display: analytics && Boolean(value.display), + locale: analytics && Boolean(value.locale), + referrer: analytics && Boolean(value.referrer), + diagnostics: analytics && Boolean(value.diagnostics), version: analyticsConsentVersion, } } @@ -2048,7 +2050,21 @@ function ConsentBanner({ preferences, onChoose }) { }, [isOpen]) function updateDraft(key, value) { - setDraft((current) => ({ ...current, [key]: value })) + setDraft((current) => { + if (key === 'analytics' && !value) { + return { + ...current, + analytics: false, + device: false, + display: false, + locale: false, + referrer: false, + diagnostics: false, + } + } + + return { ...current, [key]: value } + }) } function savePreferences(nextPreferences) { @@ -2056,6 +2072,23 @@ function ConsentBanner({ preferences, onChoose }) { setIsOpen(false) } + function declineAll() { + savePreferences({ ...defaultAnalyticsPreferences, chosen: true }) + } + + function allowAll() { + savePreferences({ + chosen: true, + analytics: true, + device: true, + display: true, + locale: true, + referrer: true, + diagnostics: true, + version: analyticsConsentVersion, + }) + } + if (!isOpen) { return (