"use client"; import { useMemo } from "react"; import { ActionButton } from "@/components/ui/action-button"; 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 } 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({ bookmarks, hasNextPage = false, fetchNextPage = () => ({}), isFetchingNextPage = false, showEditorCard = false, }: { bookmarks: ZBookmark[]; showEditorCard?: boolean; hasNextPage?: boolean; isFetchingNextPage?: boolean; fetchNextPage?: () => void; }) { const breakpointConfig = useMemo(() => getBreakpointConfig(), []); if (bookmarks.length == 0 && !showEditorCard) { return

No bookmarks

; } return ( <> {showEditorCard && ( )} {bookmarks.map((b) => renderBookmark(b))} {hasNextPage && ( fetchNextPage()} className="mx-auto w-min" variant="ghost" > Load More )} ); }