import { t } from "@lingui/core/macro"; import { HiEllipsisHorizontal, HiLink, HiOutlineCheckCircle, HiOutlineTrash, } from "react-icons/hi2"; import { authClient } from "@kan/auth/client"; import Dropdown from "~/components/Dropdown"; import { usePermissions } from "~/hooks/usePermissions"; import { useModal } from "~/providers/modal"; import { usePopup } from "~/providers/popup"; export default function CardDropdown({ cardPublicId, isTemplate, boardPublicId, cardCreatedBy, }: { cardPublicId: string; isTemplate?: boolean; boardPublicId?: string; cardCreatedBy?: string | null; }) { const { openModal } = useModal(); const { showPopup } = usePopup(); const { canEditCard, canDeleteCard } = usePermissions(); const { data: session } = authClient.useSession(); const isCreator = cardCreatedBy && session?.user.id === cardCreatedBy; const handleCopyCardLink = async () => { const path = isTemplate && boardPublicId ? `/templates/${boardPublicId}/cards/${cardPublicId}` : `/cards/${cardPublicId}`; const url = `${window.location.origin}${path}`; try { await navigator.clipboard.writeText(url); showPopup({ header: t`Link copied`, icon: "success", message: t`Card URL copied to clipboard`, }); } catch (error) { console.error(error); showPopup({ header: t`Unable to copy link`, icon: "error", message: t`Please try again.`, }); } }; const items = [ { label: t`Copy card link`, action: handleCopyCardLink, icon: , }, ...(canEditCard ? [ { label: t`Add checklist`, action: () => openModal("ADD_CHECKLIST"), icon: ( ), }, ] : []), ...(canDeleteCard || isCreator ? [ { label: t`Delete card`, action: () => openModal("DELETE_CARD"), icon: ( ), }, ] : []), ]; if (items.length === 0) { return null; } return ( ); }