// TODO: Refactor the bookmark layout grid to be generic and allow to pass the bookmark component generically. // This removes the need for handling the layout in this component. import { useMemo } from "react"; import { Skeleton } from "@/components/ui/skeleton"; import { bookmarkLayoutSwitch, useBookmarkLayout, useGridColumns, } from "@/lib/userLocalSettings/bookmarksLayout"; import tailwindConfig from "@/tailwind.config"; import Masonry from "react-masonry-css"; import resolveConfig from "tailwindcss/resolveConfig"; function getBreakpointConfig(userColumns: number) { const fullConfig = resolveConfig(tailwindConfig); const breakpointColumnsObj: { [key: number]: number; default: number } = { default: userColumns, }; const lgColumns = Math.max(1, Math.min(userColumns, userColumns - 1)); const mdColumns = Math.max(1, Math.min(userColumns, 2)); const smColumns = 1; breakpointColumnsObj[parseInt(fullConfig.theme.screens.lg)] = lgColumns; breakpointColumnsObj[parseInt(fullConfig.theme.screens.md)] = mdColumns; breakpointColumnsObj[parseInt(fullConfig.theme.screens.sm)] = smColumns; return breakpointColumnsObj; } function BookmarkCardSkeleton({ height }: { height: string }) { return (
); } export default function BookmarksGridSkeleton({ count = 12, }: { count?: number; }) { const layout = useBookmarkLayout(); const gridColumns = useGridColumns(); const breakpointConfig = useMemo( () => getBreakpointConfig(gridColumns), [gridColumns], ); const children = Array.from({ length: count }, (_, i) => ( )); return bookmarkLayoutSwitch(layout, { masonry: ( {children} ), grid: ( {children} ), list:
{children}
, compact:
{children}
, }); }