aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib/userLocalSettings/bookmarksLayout.tsx
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2024-04-14 00:51:56 +0300
committerGitHub <noreply@github.com>2024-04-14 00:51:56 +0300
commit4f17ea61cbb11a72712a1ea8c98904a1cc513e41 (patch)
tree4f1dd775e25feb3495ddb208c5fe4aa03c66fe3a /apps/web/lib/userLocalSettings/bookmarksLayout.tsx
parentcf0df0e6d84a76649d8cbf8adcbf83efb6e883ab (diff)
downloadkarakeep-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.tsx37
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];
+}