diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-07-26 12:58:01 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-07-26 12:58:01 +0000 |
| commit | 154efe17421ca96d433fcc1f820ad460e1675bdc (patch) | |
| tree | 4336090648fe7196818bcc371104d3b603a68c0e /apps/web/lib/userLocalSettings | |
| parent | 8b4fb49cc066eef602d9d089e7b71d183231a8fd (diff) | |
| download | karakeep-154efe17421ca96d433fcc1f820ad460e1675bdc.tar.zst | |
feat: Configurable number of grid columns. Fixes #1713
Diffstat (limited to 'apps/web/lib/userLocalSettings')
| -rw-r--r-- | apps/web/lib/userLocalSettings/bookmarksLayout.tsx | 6 | ||||
| -rw-r--r-- | apps/web/lib/userLocalSettings/types.ts | 1 | ||||
| -rw-r--r-- | apps/web/lib/userLocalSettings/userLocalSettings.ts | 11 |
3 files changed, 18 insertions, 0 deletions
diff --git a/apps/web/lib/userLocalSettings/bookmarksLayout.tsx b/apps/web/lib/userLocalSettings/bookmarksLayout.tsx index a122c6e7..346c85e0 100644 --- a/apps/web/lib/userLocalSettings/bookmarksLayout.tsx +++ b/apps/web/lib/userLocalSettings/bookmarksLayout.tsx @@ -13,6 +13,7 @@ export const UserLocalSettingsCtx = createContext< >({ bookmarkGridLayout: defaultLayout, lang: fallbackLng, + gridColumns: 3, }); function useUserLocalSettings() { @@ -29,6 +30,11 @@ export function useInterfaceLang() { return settings.lang; } +export function useGridColumns() { + const settings = useUserLocalSettings(); + return settings.gridColumns; +} + 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 94c9bb21..c87c8c33 100644 --- a/apps/web/lib/userLocalSettings/types.ts +++ b/apps/web/lib/userLocalSettings/types.ts @@ -8,6 +8,7 @@ export type BookmarksLayoutTypes = z.infer<typeof zBookmarkGridLayout>; export const zUserLocalSettings = z.object({ bookmarkGridLayout: zBookmarkGridLayout.optional().default("masonry"), lang: z.string().optional().default("en"), + gridColumns: z.number().min(1).max(6).optional().default(3), }); export type UserLocalSettings = z.infer<typeof zUserLocalSettings>; diff --git a/apps/web/lib/userLocalSettings/userLocalSettings.ts b/apps/web/lib/userLocalSettings/userLocalSettings.ts index 311ad99f..85ec69a6 100644 --- a/apps/web/lib/userLocalSettings/userLocalSettings.ts +++ b/apps/web/lib/userLocalSettings/userLocalSettings.ts @@ -37,3 +37,14 @@ export async function updateInterfaceLang(lang: string) { sameSite: "lax", }); } + +export async function updateGridColumns(gridColumns: number) { + 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, gridColumns }), + maxAge: 34560000, // Chrome caps max age to 400 days + sameSite: "lax", + }); +} |
