From af4043624bfae39949c296c07576ab8cbf1795e5 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 12 Mar 2025 13:10:54 +0100 Subject: [PATCH] add theme mode cookie --- src/routes/+layout.server.ts | 2 ++ src/routes/+layout.svelte | 24 ++++++++++++++++++++++-- src/routes/api/theme-mode/+server.ts | 23 +++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/routes/api/theme-mode/+server.ts diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index 6bee57ab..20f88a8c 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -1,9 +1,11 @@ export const load = ({ locals, cookies }) => { const { user, isUSRegion, wsURL } = locals; + return { user: user || undefined, isUSRegion, cookieConsent: cookies?.get("cookie-consent"), + themeMode: cookies?.get("theme-mode"), wsURL, }; }; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 120a9828..78bedaa4 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -240,12 +240,32 @@ isAfterMarketClose.set(isAfterMarketCloseValue); }; - function handleModeChange() { + +setMode(data?.themeMode); + +async function handleModeChange() { if ($mode === "light") { setMode("dark"); + } else { setMode("light"); } + + const postData = { + mode: $mode, + }; + + const response = await fetch("/api/theme-mode", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(postData), + }); // make a POST request to the server with the FormData object + + const output = await response.json(); + console.log(output) + } @@ -1238,7 +1258,7 @@ --> - + {#if Cookie && $showCookieConsent === true} diff --git a/src/routes/api/theme-mode/+server.ts b/src/routes/api/theme-mode/+server.ts new file mode 100644 index 00000000..b0f78a76 --- /dev/null +++ b/src/routes/api/theme-mode/+server.ts @@ -0,0 +1,23 @@ +import type { RequestHandler } from "./$types"; + +export const POST = (async ({ request, cookies }) => { + let output = "error"; + const data = await request.json(); + const mode = data?.mode; + + try { + cookies.set("theme-mode", mode, { + httpOnly: true, + sameSite: "lax", + secure: true, + path: "/", + maxAge: 60 * 60 * 24 * 365, // 1 Year consent + }); + + output = "success"; + } catch (e) { + console.log(e); + } + + return new Response(JSON.stringify(output)); +}) satisfies RequestHandler;