aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/app/dashboard
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-03-02 20:26:26 +0000
committerMohamedBassem <me@mbassem.com>2024-03-02 20:26:26 +0000
commit012cef2829c7b65d487f44f14f9b296be73cfcfd (patch)
tree6a027bf25c69a2eef4a8dc93e41a8b781d48c814 /packages/web/app/dashboard
parentaf87cc87f7319243cf42b87780f8eed26712d038 (diff)
downloadkarakeep-012cef2829c7b65d487f44f14f9b296be73cfcfd.tar.zst
ui: Use a masonry library to maintain the order of the bookmark grid
Diffstat (limited to 'packages/web/app/dashboard')
-rw-r--r--packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx26
1 files changed, 22 insertions, 4 deletions
diff --git a/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx b/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx
index 433649af..293b7765 100644
--- a/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx
+++ b/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx
@@ -5,15 +5,32 @@ import { ZBookmark, ZGetBookmarksRequest } from "@/lib/types/api/bookmarks";
import { api } from "@/lib/trpc";
import TextCard from "./TextCard";
import { Slot } from "@radix-ui/react-slot";
+import Masonry from 'react-masonry-css';
+import resolveConfig from 'tailwindcss/resolveConfig'
+import tailwindConfig from '@/tailwind.config'
+import { useMemo } from "react";
+
+function getBreakpointConfig() {
+ const fullConfig = resolveConfig(tailwindConfig)
+
+ const breakpointColumnsObj: {[key: number]: number, default: number} = {
+ default: 3,
+ };
+ breakpointColumnsObj[parseInt(fullConfig.theme.screens.lg)] = 2;
+ breakpointColumnsObj[parseInt(fullConfig.theme.screens.md)] = 1;
+ breakpointColumnsObj[parseInt(fullConfig.theme.screens.sm)] = 1;
+ return breakpointColumnsObj;
+}
+
function renderBookmark(bookmark: ZBookmark) {
let comp;
switch (bookmark.content.type) {
case "link":
- comp = <LinkCard key={bookmark.id} bookmark={bookmark} />;
+ comp = <LinkCard bookmark={bookmark} />;
break;
case "text":
- comp = <TextCard key={bookmark.id} bookmark={bookmark} />;
+ comp = <TextCard bookmark={bookmark} />;
break;
}
return (
@@ -36,12 +53,13 @@ export default function BookmarksGrid({
const { data } = api.bookmarks.getBookmarks.useQuery(query, {
initialData: { bookmarks: initialBookmarks },
});
+ const breakpointConfig = useMemo(() => getBreakpointConfig(), []);
if (data.bookmarks.length == 0) {
return <p>No bookmarks</p>;
}
return (
- <div className="columns-1 gap-4 transition-all duration-300 md:columns-2 lg:columns-3">
+ <Masonry className="flex gap-4" breakpointCols={breakpointConfig} >
{data.bookmarks.map((b) => renderBookmark(b))}
- </div>
+ </Masonry>
);
}