// Copyright (C) 2022-present Daniel31x13 // This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. // You should have received a copy of the GNU General Public License along with this program. If not, see . import { ExtendedLink } from "@/types/global"; import { faFolder, faArrowUpRightFromSquare, faEllipsis, faPenToSquare, faTrashCan, } from "@fortawesome/free-solid-svg-icons"; import { faFileImage, faFilePdf } from "@fortawesome/free-regular-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useState } from "react"; import Image from "next/image"; import Dropdown from "./Dropdown"; import useLinkStore from "@/store/links"; import Modal from "./Modal"; import EditLink from "./Modal/EditLink"; export default function ({ link, count, }: { link: ExtendedLink; count: number; }) { const [expandDropdown, setExpandDropdown] = useState(false); const [editModal, setEditModal] = useState(false); const [archiveLabel, setArchiveLabel] = useState("Archived Formats"); const { removeLink } = useLinkStore(); const url = new URL(link.url); const formattedDate = new Date(link.createdAt).toLocaleString("en-US", { year: "numeric", month: "short", day: "numeric", }); const toggleEditModal = () => { setEditModal(!editModal); }; return (
{editModal ? ( ) : null} { const target = e.target as HTMLElement; target.style.opacity = "0"; }} /> { const target = e.target as HTMLElement; target.style.opacity = "0"; }} />

{count + 1}.

{link.name}

{link.title}

{link.collection.name}

{link.tags.map((e, i) => (

# {e.name}

))}

{formattedDate}

{url.host}

setExpandDropdown(!expandDropdown)} id="edit-dropdown" className="text-gray-500 inline-flex rounded-md cursor-pointer hover:bg-white hover:outline outline-sky-100 outline-1 duration-100 p-1" >

{archiveLabel}

setArchiveLabel("Archived Formats")} > setArchiveLabel("Screenshot")} target="_blank" > setArchiveLabel("PDF")} > setArchiveLabel("Wayback Machine")} />
{expandDropdown ? ( , onClick: () => { setEditModal(true); setExpandDropdown(false); }, }, { name: "Delete", icon: , onClick: () => { removeLink(link); setExpandDropdown(false); }, }, ]} onClickOutside={(e: Event) => { const target = e.target as HTMLInputElement; if (target.id !== "edit-dropdown") setExpandDropdown(false); }} className="absolute top-9 right-0 w-36" /> ) : null}
); }