import type { BookmarksLayoutTypes } from "@/lib/userLocalSettings/types"; import React from "react"; import Link from "next/link"; import { bookmarkLayoutSwitch, useBookmarkLayout, } from "@/lib/userLocalSettings/bookmarksLayout"; import { cn } from "@/lib/utils"; import dayjs from "dayjs"; import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; import { isBookmarkStillTagging } from "@hoarder/shared-react/utils/bookmarkUtils"; import BookmarkActionBar from "./BookmarkActionBar"; import TagList from "./TagList"; interface Props { bookmark: ZBookmark; image: (layout: BookmarksLayoutTypes, className: string) => React.ReactNode; title?: React.ReactNode; content?: React.ReactNode; footer?: React.ReactNode; className?: string; fitHeight?: boolean; wrapTags: boolean; } function BottomRow({ footer, bookmark, }: { footer?: React.ReactNode; bookmark: ZBookmark; }) { return (
{footer && <>{footer}•} {dayjs(bookmark.createdAt).format("MMM DD")}
); } function ListView({ bookmark, image, title, content, footer, className, }: Props) { return (
{image("list", "object-cover rounded-lg size-32")}
{title && (
{title}
)} {content &&
{content}
}
); } function GridView({ bookmark, image, title, content, footer, className, wrapTags, layout, fitHeight = false, }: Props & { layout: BookmarksLayoutTypes }) { const img = image("grid", "h-56 min-h-56 w-full object-cover rounded-t-lg"); return (
{img &&
{img}
}
{title && (
{title}
)} {content &&
{content}
}
); } export function BookmarkLayoutAdaptingCard(props: Props) { const layout = useBookmarkLayout(); return bookmarkLayoutSwitch(layout, { masonry: , grid: , list: , }); }