diff options
Diffstat (limited to 'apps/web/lib/userLocalSettings')
| -rw-r--r-- | apps/web/lib/userLocalSettings/bookmarksLayout.tsx | 7 | ||||
| -rw-r--r-- | apps/web/lib/userLocalSettings/types.ts | 1 | ||||
| -rw-r--r-- | apps/web/lib/userLocalSettings/userLocalSettings.ts | 21 |
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", + }); +} |
