lifetracker/apps/web/lib/userLocalSettings/userLocalSettings.ts

51 lines
1.7 KiB
TypeScript

"use server";
import { cookies } from "next/headers";
import { getServerAuthSession } from "@/server/auth";
import type { BookmarksLayoutTypes, Timezones } from "./types";
import {
defaultUserLocalSettings,
parseUserLocalSettings,
USER_LOCAL_SETTINGS_COOKIE_NAME,
} from "./types";
export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) {
const userSettings = cookies().get(USER_LOCAL_SETTINGS_COOKIE_NAME);
const parsed = parseUserLocalSettings(userSettings?.value);
cookies().set({
name: USER_LOCAL_SETTINGS_COOKIE_NAME,
value: JSON.stringify({ ...parsed, bookmarkGridLayout: layout }),
maxAge: 34560000, // Chrome caps max age to 400 days
sameSite: "lax",
});
}
export async function updateTimezoneCookie(timezone: Timezones) {
const userSettings = (await cookies()).get(USER_LOCAL_SETTINGS_COOKIE_NAME);
const parsed = parseUserLocalSettings(userSettings?.value);
(await cookies()).set({
name: USER_LOCAL_SETTINGS_COOKIE_NAME,
value: JSON.stringify({ ...parsed, timezone: timezone }),
maxAge: 34560000, // Chrome caps max age to 400 days
sameSite: "lax",
});
}
export async function getUserLocalSettings() {
const parsed = parseUserLocalSettings(
(await cookies()).get(USER_LOCAL_SETTINGS_COOKIE_NAME)?.value
)
const session = (await getServerAuthSession());
const dbTimezone = session?.user?.timezone as string | undefined;
// if (parsed?.timezone) {
// // console.log("Found timezone in cookie:", parsed.timezone);
// return parsed;
// }
return {
bookmarkGridLayout: parsed?.bookmarkGridLayout ?? defaultUserLocalSettings().bookmarkGridLayout,
timezone: parsed!.timezone || dbTimezone || defaultUserLocalSettings().timezone,
}
}