aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib/userLocalSettings
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/lib/userLocalSettings')
-rw-r--r--apps/web/lib/userLocalSettings/bookmarksLayout.tsx7
-rw-r--r--apps/web/lib/userLocalSettings/types.ts1
-rw-r--r--apps/web/lib/userLocalSettings/userLocalSettings.ts21
3 files changed, 28 insertions, 1 deletions
diff --git a/apps/web/lib/userLocalSettings/bookmarksLayout.tsx b/apps/web/lib/userLocalSettings/bookmarksLayout.tsx
index 424046b9..a122c6e7 100644
--- a/apps/web/lib/userLocalSettings/bookmarksLayout.tsx
+++ b/apps/web/lib/userLocalSettings/bookmarksLayout.tsx
@@ -2,6 +2,7 @@
import type { z } from "zod";
import { createContext, useContext } from "react";
+import { fallbackLng } from "@/lib/i18n/settings";
import type { BookmarksLayoutTypes, zUserLocalSettings } from "./types";
@@ -11,6 +12,7 @@ export const UserLocalSettingsCtx = createContext<
z.infer<typeof zUserLocalSettings>
>({
bookmarkGridLayout: defaultLayout,
+ lang: fallbackLng,
});
function useUserLocalSettings() {
@@ -22,6 +24,11 @@ export function useBookmarkLayout() {
return settings.bookmarkGridLayout;
}
+export function useInterfaceLang() {
+ const settings = useUserLocalSettings();
+ return settings.lang;
+}
+
export function bookmarkLayoutSwitch<T>(
layout: BookmarksLayoutTypes,
data: Record<BookmarksLayoutTypes, T>,
diff --git a/apps/web/lib/userLocalSettings/types.ts b/apps/web/lib/userLocalSettings/types.ts
index 08e38638..bcd2ff26 100644
--- a/apps/web/lib/userLocalSettings/types.ts
+++ b/apps/web/lib/userLocalSettings/types.ts
@@ -7,6 +7,7 @@ export type BookmarksLayoutTypes = z.infer<typeof zBookmarkGridLayout>;
export const zUserLocalSettings = z.object({
bookmarkGridLayout: zBookmarkGridLayout.optional().default("masonry"),
+ lang: z.string().optional().default("en"),
});
export type UserLocalSettings = z.infer<typeof zUserLocalSettings>;
diff --git a/apps/web/lib/userLocalSettings/userLocalSettings.ts b/apps/web/lib/userLocalSettings/userLocalSettings.ts
index 826e6cf0..311ad99f 100644
--- a/apps/web/lib/userLocalSettings/userLocalSettings.ts
+++ b/apps/web/lib/userLocalSettings/userLocalSettings.ts
@@ -2,12 +2,20 @@
import { cookies } from "next/headers";
-import type { BookmarksLayoutTypes } from "./types";
+import type { BookmarksLayoutTypes, UserLocalSettings } from "./types";
import {
+ defaultUserLocalSettings,
parseUserLocalSettings,
USER_LOCAL_SETTINGS_COOKIE_NAME,
} from "./types";
+export async function getUserLocalSettings(): Promise<UserLocalSettings> {
+ const userSettings = cookies().get(USER_LOCAL_SETTINGS_COOKIE_NAME);
+ return (
+ parseUserLocalSettings(userSettings?.value) ?? defaultUserLocalSettings()
+ );
+}
+
export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) {
const userSettings = cookies().get(USER_LOCAL_SETTINGS_COOKIE_NAME);
const parsed = parseUserLocalSettings(userSettings?.value);
@@ -18,3 +26,14 @@ export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) {
sameSite: "lax",
});
}
+
+export async function updateInterfaceLang(lang: string) {
+ 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, lang }),
+ maxAge: 34560000, // Chrome caps max age to 400 days
+ sameSite: "lax",
+ });
+}