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"; import { isPWA } from "@/lib/client/utils"; import { generateLinkHref } from "@/lib/client/generateLinkHref"; import useAccountStore from "@/store/account"; import usePermissions from "@/hooks/usePermissions"; type Props = { link: LinkIncludingShortenedCollectionAndTags; count: number; className?: string; flipDropdown?: boolean; editMode?: boolean; }; export default function LinkCardCompact({ link, flipDropdown, editMode, }: Props) { const { collections } = useCollectionStore(); const { account } = useAccountStore(); const { links, setSelectedLinks, selectedLinks } = useLinkStore(); const handleCheckboxClick = ( link: LinkIncludingShortenedCollectionAndTags ) => { const linkIndex = selectedLinks.findIndex( (selectedLink) => selectedLink.id === link.id ); if (linkIndex !== -1) { const updatedLinks = [...selectedLinks]; updatedLinks.splice(linkIndex, 1); setSelectedLinks(updatedLinks); } else { setSelectedLinks([...selectedLinks, link]); } }; 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]); const permissions = usePermissions(collection?.id as number); const [showInfo, setShowInfo] = useState(false); const selectedStyle = selectedLinks.some((selectedLink) => selectedLink.id === link.id) ? "border border-primary bg-base-300" : "border-transparent"; const selectable = editMode && (permissions === true || permissions?.canCreate || permissions?.canDelete); const hoverStyles = !selectable ? "cursor-not-allowed" : "cursor-pointer"; return ( <>
selectable && handleCheckboxClick(link)} > {/* {showCheckbox && editMode && (permissions === true || permissions?.canCreate || permissions?.canDelete) && ( selectedLink.id === link.id )} onChange={() => handleCheckboxClick(link)} /> )} */} {!editMode ? ( <>

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

{collection && ( )} {link.url ? (

{shortendURL}

) : (
{link.type}
)}
setShowInfo(!showInfo)} // linkInfo={showInfo} /> {showInfo && (

Description


{link.description ? ( unescapeString(link.description) ) : ( No description provided. )}

{link.tags[0] && ( <>

Tags


{link.tags.map((e, i) => ( { e.stopPropagation(); }} className="btn btn-xs btn-ghost truncate max-w-[19rem]" > #{e.name} ))}
)}
)} ) : ( <>

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

{collection ? ( ) : undefined} {link.url ? (

{shortendURL}

) : (
{link.type}
)}
setShowInfo(!showInfo)} // linkInfo={showInfo} /> )}
); }