diff options
| author | Mohamed Bassem <me@mbassem.com> | 2024-04-14 00:51:56 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-14 00:51:56 +0300 |
| commit | 4f17ea61cbb11a72712a1ea8c98904a1cc513e41 (patch) | |
| tree | 4f1dd775e25feb3495ddb208c5fe4aa03c66fe3a /apps/web/lib/userLocalSettings/bookmarksLayout.tsx | |
| parent | cf0df0e6d84a76649d8cbf8adcbf83efb6e883ab (diff) | |
| download | karakeep-4f17ea61cbb11a72712a1ea8c98904a1cc513e41.tar.zst | |
feature(web): Allow changing the bookmark grid layout (#98)
Diffstat (limited to 'apps/web/lib/userLocalSettings/bookmarksLayout.tsx')
| -rw-r--r-- | apps/web/lib/userLocalSettings/bookmarksLayout.tsx | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/apps/web/lib/userLocalSettings/bookmarksLayout.tsx b/apps/web/lib/userLocalSettings/bookmarksLayout.tsx new file mode 100644 index 00000000..424046b9 --- /dev/null +++ b/apps/web/lib/userLocalSettings/bookmarksLayout.tsx @@ -0,0 +1,37 @@ +"use client"; + +import type { z } from "zod"; +import { createContext, useContext } from "react"; + +import type { BookmarksLayoutTypes, zUserLocalSettings } from "./types"; + +const defaultLayout: BookmarksLayoutTypes = "masonry"; + +export const UserLocalSettingsCtx = createContext< + z.infer<typeof zUserLocalSettings> +>({ + bookmarkGridLayout: defaultLayout, +}); + +function useUserLocalSettings() { + return useContext(UserLocalSettingsCtx); +} + +export function useBookmarkLayout() { + const settings = useUserLocalSettings(); + return settings.bookmarkGridLayout; +} + +export function bookmarkLayoutSwitch<T>( + layout: BookmarksLayoutTypes, + data: Record<BookmarksLayoutTypes, T>, +) { + return data[layout]; +} + +export function useBookmarkLayoutSwitch<T>( + data: Record<BookmarksLayoutTypes, T>, +) { + const layout = useBookmarkLayout(); + return data[layout]; +} |
