import LinkCard from "@/components/LinkViews/LinkComponents/LinkCard"; import { LinkIncludingShortenedCollectionAndTags, ViewMode, } from "@/types/global"; import { useEffect } from "react"; import { useInView } from "react-intersection-observer"; import LinkMasonry from "@/components/LinkViews/LinkComponents/LinkMasonry"; import Masonry from "react-masonry-css"; import resolveConfig from "tailwindcss/resolveConfig"; import tailwindConfig from "../../tailwind.config.js"; import { useMemo } from "react"; import LinkList from "@/components/LinkViews/LinkComponents/LinkList"; export function CardView({ links, editMode, isLoading, placeholders, hasNextPage, placeHolderRef, }: { links?: LinkIncludingShortenedCollectionAndTags[]; editMode?: boolean; isLoading?: boolean; placeholders?: number[]; hasNextPage?: boolean; placeHolderRef?: any; }) { return (
{links?.map((e, i) => { return ( ); })} {(hasNextPage || isLoading) && placeholders?.map((e, i) => { return (
); })}
); } export function MasonryView({ links, editMode, isLoading, placeholders, hasNextPage, placeHolderRef, }: { links?: LinkIncludingShortenedCollectionAndTags[]; editMode?: boolean; isLoading?: boolean; placeholders?: number[]; hasNextPage?: boolean; placeHolderRef?: any; }) { const fullConfig = resolveConfig(tailwindConfig as any); const breakpointColumnsObj = useMemo(() => { return { default: 5, 1900: 4, 1500: 3, 880: 2, 550: 1, }; }, []); return ( {links?.map((e, i) => { return ( ); })} {(hasNextPage || isLoading) && placeholders?.map((e, i) => { return (
); })}
); } export function ListView({ links, editMode, isLoading, placeholders, hasNextPage, placeHolderRef, }: { links?: LinkIncludingShortenedCollectionAndTags[]; editMode?: boolean; isLoading?: boolean; placeholders?: number[]; hasNextPage?: boolean; placeHolderRef?: any; }) { return (
{links?.map((e, i) => { return ( ); })} {(hasNextPage || isLoading) && placeholders?.map((e, i) => { return (
); })}
); } export default function Links({ layout, links, editMode, placeholderCount, useData, }: { layout: ViewMode; links?: LinkIncludingShortenedCollectionAndTags[]; editMode?: boolean; placeholderCount?: number; useData?: any; }) { const { ref, inView } = useInView(); useEffect(() => { if (inView && useData?.fetchNextPage && useData?.hasNextPage) { useData.fetchNextPage(); } }, [useData, inView]); if (layout === ViewMode.List) { return ( ); } else if (layout === ViewMode.Masonry) { return ( ); } else { // Default to card view return ( ); } } const placeholderCountToArray = (num?: number) => num ? Array.from({ length: num }, (_, i) => i + 1) : [];