aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib/userLocalSettings
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-11-02 19:38:17 +0000
committerMohamed Bassem <me@mbassem.com>2025-11-02 19:38:17 +0000
commitbb00c99678ce3ca0493599c730a357f9daf2346b (patch)
treeec06bc462962c36a0aea867f9a83061c99795cb6 /apps/web/lib/userLocalSettings
parent965c603de3b834f71ec7a99e60ddc3d9532e860c (diff)
downloadkarakeep-bb00c99678ce3ca0493599c730a357f9daf2346b.tar.zst
refactor: improve the userLocalSetting server functions
Diffstat (limited to 'apps/web/lib/userLocalSettings')
-rw-r--r--apps/web/lib/userLocalSettings/userLocalSettings.ts41
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 }));
}