fixers?
This commit is contained in:
+55
-37
@@ -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 (
|
||||
<button
|
||||
@@ -2075,11 +2108,11 @@ function ConsentBanner({ preferences, onChoose }) {
|
||||
<div
|
||||
aria-labelledby="consent-title"
|
||||
aria-modal="true"
|
||||
className="fixed inset-0 z-50 grid place-items-center bg-black/45 px-4 py-6 backdrop-blur-[2px]"
|
||||
className="fixed inset-0 z-50 grid place-items-center overflow-y-auto bg-black/45 px-4 py-4 backdrop-blur-[2px] sm:py-6"
|
||||
role="dialog"
|
||||
>
|
||||
<div className="w-full max-w-2xl rounded-md border border-border bg-fury-white p-5 text-text shadow-[0_24px_70px_rgba(0,0,0,0.24)] sm:p-6">
|
||||
<div className="max-w-xl">
|
||||
<div className="flex min-h-[18rem] max-h-[calc(100dvh-2rem)] w-full max-w-2xl resize-y flex-col overflow-hidden rounded-md border border-border bg-fury-white p-5 text-text shadow-[0_24px_70px_rgba(0,0,0,0.24)] sm:max-h-[calc(100dvh-3rem)] sm:p-6">
|
||||
<div className="max-w-xl shrink-0">
|
||||
<h2 id="consent-title" className="text-xl font-semibold">
|
||||
Cookie and analytics settings
|
||||
</h2>
|
||||
@@ -2097,7 +2130,7 @@ function ConsentBanner({ preferences, onChoose }) {
|
||||
|
||||
{isConfiguring ? (
|
||||
<>
|
||||
<div className="mt-5 space-y-3">
|
||||
<div className="mt-5 min-h-0 space-y-3 overflow-y-auto pr-1">
|
||||
<PreferenceToggle
|
||||
checked
|
||||
description="Stores this consent choice so the popup does not appear on every page."
|
||||
@@ -2147,10 +2180,10 @@ function ConsentBanner({ preferences, onChoose }) {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="mt-5 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end">
|
||||
<div className="mt-5 flex shrink-0 flex-col-reverse gap-2 sm:flex-row sm:justify-end">
|
||||
<button
|
||||
className="rounded-md border border-border px-4 py-2 text-sm font-semibold text-text-soft transition hover:bg-surface hover:text-text"
|
||||
onClick={() => savePreferences({ ...defaultAnalyticsPreferences, chosen: true })}
|
||||
onClick={declineAll}
|
||||
type="button"
|
||||
>
|
||||
Decline all
|
||||
@@ -2164,18 +2197,7 @@ function ConsentBanner({ preferences, onChoose }) {
|
||||
</button>
|
||||
<button
|
||||
className="rounded-md bg-fury-cyan px-4 py-2 text-sm font-semibold text-bg transition hover:bg-fury-aqua"
|
||||
onClick={() =>
|
||||
savePreferences({
|
||||
chosen: true,
|
||||
analytics: true,
|
||||
device: true,
|
||||
display: true,
|
||||
locale: true,
|
||||
referrer: true,
|
||||
diagnostics: true,
|
||||
version: analyticsConsentVersion,
|
||||
})
|
||||
}
|
||||
onClick={allowAll}
|
||||
type="button"
|
||||
>
|
||||
Allow all
|
||||
@@ -2184,6 +2206,13 @@ function ConsentBanner({ preferences, onChoose }) {
|
||||
</>
|
||||
) : (
|
||||
<div className="mt-5 flex flex-col gap-2 sm:flex-row sm:justify-end">
|
||||
<button
|
||||
className="rounded-md border border-border px-4 py-2 text-sm font-semibold text-text-soft transition hover:bg-surface hover:text-text"
|
||||
onClick={declineAll}
|
||||
type="button"
|
||||
>
|
||||
Decline all
|
||||
</button>
|
||||
<button
|
||||
className="rounded-md border border-border px-4 py-2 text-sm font-semibold text-text transition hover:bg-surface"
|
||||
onClick={() => setIsConfiguring(true)}
|
||||
@@ -2193,18 +2222,7 @@ function ConsentBanner({ preferences, onChoose }) {
|
||||
</button>
|
||||
<button
|
||||
className="rounded-md bg-fury-cyan px-4 py-2 text-sm font-semibold text-bg transition hover:bg-fury-aqua"
|
||||
onClick={() =>
|
||||
savePreferences({
|
||||
chosen: true,
|
||||
analytics: true,
|
||||
device: true,
|
||||
display: true,
|
||||
locale: true,
|
||||
referrer: true,
|
||||
diagnostics: true,
|
||||
version: analyticsConsentVersion,
|
||||
})
|
||||
}
|
||||
onClick={allowAll}
|
||||
type="button"
|
||||
>
|
||||
Allow all
|
||||
|
||||
Reference in New Issue
Block a user