This commit is contained in:
Clippii
2026-06-21 10:28:18 +01:00
parent b3bcaef57a
commit 353cfb7636
2 changed files with 168 additions and 137 deletions
+55 -37
View File
@@ -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