import { CollectionIncludingMembersAndLinkCount, LinkIncludingShortenedCollectionAndTags, } from "@/types/global"; import { useEffect, useState } from "react"; import useLinkStore from "@/store/links"; import useCollectionStore from "@/store/collections"; import unescapeString from "@/lib/client/unescapeString"; import LinkActions from "@/components/LinkViews/LinkComponents/LinkActions"; import LinkDate from "@/components/LinkViews/LinkComponents/LinkDate"; import LinkCollection from "@/components/LinkViews/LinkComponents/LinkCollection"; import LinkIcon from "@/components/LinkViews/LinkComponents/LinkIcon"; import Link from "next/link"; type Props = { link: LinkIncludingShortenedCollectionAndTags; count: number; className?: string; }; export default function LinkGrid({ link, count, className }: Props) { const { collections } = useCollectionStore(); const { links } = useLinkStore(); let shortendURL; try { shortendURL = new URL(link.url || "").host.toLowerCase(); } catch (error) { console.log(error); } const [collection, setCollection] = useState( collections.find( (e) => e.id === link.collection.id ) as CollectionIncludingMembersAndLinkCount ); useEffect(() => { setCollection( collections.find( (e) => e.id === link.collection.id ) as CollectionIncludingMembersAndLinkCount ); }, [collections, links]); return (
link.url && window.open(link.url || "", "_blank")} className="cursor-pointer" >

{unescapeString(link.name || link.description) || link.url}

· {link.url ? (
{ e.preventDefault(); window.open(link.url || "", "_blank"); }} className="flex items-center hover:opacity-60 cursor-pointer duration-100" >

{shortendURL}

) : (
{link.type}
)}

{unescapeString(link.description)}

{link.tags[0] ? (
{link.tags.map((e, i) => ( { e.stopPropagation(); }} className="btn btn-xs btn-ghost truncate max-w-[19rem]" > #{e.name} ))}
) : undefined}
{}} linkInfo={false} link={link} collection={collection} />
); }