blob: aff3645c625fd888388bca7c493917eabdd8450d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
"use server";
import { cookies } from "next/headers";
import type { BookmarksLayoutTypes, UserLocalSettings } from "./types";
import {
defaultUserLocalSettings,
parseUserLocalSettings,
USER_LOCAL_SETTINGS_COOKIE_NAME,
} from "./types";
export async function getUserLocalSettings(): Promise<UserLocalSettings> {
const userSettings = (await cookies()).get(USER_LOCAL_SETTINGS_COOKIE_NAME);
return (
parseUserLocalSettings(userSettings?.value) ?? defaultUserLocalSettings()
);
}
async function readModifyWrite(
modifier: (settings: UserLocalSettings) => Partial<UserLocalSettings>,
) {
const userSettings = (await cookies()).get(USER_LOCAL_SETTINGS_COOKIE_NAME);
const parsed =
parseUserLocalSettings(userSettings?.value) ?? defaultUserLocalSettings();
const updated = { ...parsed, ...modifier(parsed) };
(await cookies()).set({
name: USER_LOCAL_SETTINGS_COOKIE_NAME,
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) {
await readModifyWrite(() => ({ lang }));
}
export async function updateGridColumns(gridColumns: number) {
await readModifyWrite(() => ({ gridColumns }));
}
export async function updateShowNotes(showNotes: boolean) {
await readModifyWrite(() => ({ showNotes }));
}
|