"use client";
import { useMemo } from "react";
import { ActionButton } from "@/components/ui/action-button";
import { api } from "@/lib/trpc";
import tailwindConfig from "@/tailwind.config";
import { Slot } from "@radix-ui/react-slot";
import Masonry from "react-masonry-css";
import resolveConfig from "tailwindcss/resolveConfig";
import type {
ZBookmark,
ZGetBookmarksRequest,
ZGetBookmarksResponse,
} from "@hoarder/trpc/types/bookmarks";
import AssetCard from "./AssetCard";
import EditorCard from "./EditorCard";
import LinkCard from "./LinkCard";
import TextCard from "./TextCard";
function BookmarkCard({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
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 = ;
break;
case "text":
comp = ;
break;
case "asset":
comp = ;
break;
}
return {comp};
}
export default function BookmarksGrid({
query,
bookmarks: initialBookmarks,
showEditorCard = false,
}: {
query: ZGetBookmarksRequest;
bookmarks: ZGetBookmarksResponse;
showEditorCard?: boolean;
itemsPerPage?: number;
}) {
const { data, fetchNextPage, hasNextPage, isFetchingNextPage } =
api.bookmarks.getBookmarks.useInfiniteQuery(query, {
initialData: () => ({
pages: [initialBookmarks],
pageParams: [query.cursor],
}),
initialCursor: null,
getNextPageParam: (lastPage) => lastPage.nextCursor,
});
const breakpointConfig = useMemo(() => getBreakpointConfig(), []);
const bookmarks = data!.pages.flatMap((b) => b.bookmarks);
if (bookmarks.length == 0) {
return
No bookmarks
;
}
return (
<>
{showEditorCard && (
)}
{bookmarks.map((b) => renderBookmark(b))}
{hasNextPage && (
fetchNextPage()}
className="mx-auto w-min"
variant="ghost"
>
Load More
)}
>
);
}