aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib/userLocalSettings/userLocalSettings.ts
blob: 11bd0a8498b96a131170a47769c190a86dadb29b (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
49
50
"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()
  );
}

export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) {
  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, bookmarkGridLayout: layout }),
    maxAge: 34560000, // Chrome caps max age to 400 days
    sameSite: "lax",
  });
}

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",
  });
}

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",
  });
}