diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-11-02 19:38:17 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-11-02 19:38:17 +0000 |
| commit | bb00c99678ce3ca0493599c730a357f9daf2346b (patch) | |
| tree | ec06bc462962c36a0aea867f9a83061c99795cb6 /apps/web/lib | |
| parent | 965c603de3b834f71ec7a99e60ddc3d9532e860c (diff) | |
| download | karakeep-bb00c99678ce3ca0493599c730a357f9daf2346b.tar.zst | |
refactor: improve the userLocalSetting server functions
Diffstat (limited to 'apps/web/lib')
| -rw-r--r-- | apps/web/lib/userLocalSettings/userLocalSettings.ts | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/apps/web/lib/userLocalSettings/userLocalSettings.ts b/apps/web/lib/userLocalSettings/userLocalSettings.ts index 25c10e1b..aff3645c 100644 --- a/apps/web/lib/userLocalSettings/userLocalSettings.ts +++ b/apps/web/lib/userLocalSettings/userLocalSettings.ts @@ -16,46 +16,33 @@ export async function getUserLocalSettings(): Promise<UserLocalSettings> { ); } -export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) { +async function readModifyWrite( + modifier: (settings: UserLocalSettings) => Partial<UserLocalSettings>, +) { const userSettings = (await cookies()).get(USER_LOCAL_SETTINGS_COOKIE_NAME); - const parsed = parseUserLocalSettings(userSettings?.value); + const parsed = + parseUserLocalSettings(userSettings?.value) ?? defaultUserLocalSettings(); + const updated = { ...parsed, ...modifier(parsed) }; (await cookies()).set({ name: USER_LOCAL_SETTINGS_COOKIE_NAME, - value: JSON.stringify({ ...parsed, bookmarkGridLayout: layout }), + value: JSON.stringify(updated), maxAge: 34560000, // Chrome caps max age to 400 days sameSite: "lax", }); } +export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) { + await readModifyWrite(() => ({ bookmarkGridLayout: layout })); +} + export async function updateInterfaceLang(lang: string) { - 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, lang }), - maxAge: 34560000, // Chrome caps max age to 400 days - sameSite: "lax", - }); + await readModifyWrite(() => ({ lang })); } export async function updateGridColumns(gridColumns: number) { - 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, gridColumns }), - maxAge: 34560000, // Chrome caps max age to 400 days - sameSite: "lax", - }); + await readModifyWrite(() => ({ gridColumns })); } export async function updateShowNotes(showNotes: boolean) { - 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, showNotes }), - maxAge: 34560000, // Chrome caps max age to 400 days - sameSite: "lax", - }); + await readModifyWrite(() => ({ showNotes })); } |
