import React, { useState } from "react"; import { LinkIncludingShortenedCollectionAndTags } from "@linkwarden/types/global"; import { useTranslation } from "next-i18next"; import { useDeleteLink } from "@linkwarden/router/links"; import Drawer from "../Drawer"; import LinkDetails from "../LinkDetails"; import Link from "next/link"; import usePermissions from "@/hooks/usePermissions"; import { useRouter } from "next/router"; import toast from "react-hot-toast"; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu"; import { Button } from "../ui/button"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; type Props = { onClose: Function; onDelete: Function; onUpdateArchive: Function; onPin: Function; link: LinkIncludingShortenedCollectionAndTags; activeMode?: "view" | "edit"; }; export default function LinkModal({ onClose, onDelete, onUpdateArchive, onPin, link, activeMode, }: Props) { const { t } = useTranslation(); const permissions = usePermissions(link.collection.id as number); const router = useRouter(); const isPublicRoute = router.pathname.startsWith("/public") ? true : false; const deleteLink = useDeleteLink({ toast, t }); const [mode, setMode] = useState<"view" | "edit">(activeMode || "view"); const handleDelete = async (e: React.MouseEvent) => { setTimeout(() => (document.body.style.pointerEvents = ""), 0); if (e.shiftKey && link.id) { deleteLink.mutateAsync(link.id); onClose(); } else { onDelete(); onClose(); } }; return (
{(permissions === true || permissions?.canUpdate) && !isPublicRoute && ( setMode(index === "view" ? "view" : "edit") } > View Edit )}
{!isPublicRoute && ( { (document.activeElement as HTMLElement)?.blur(); onPin(); }} > {link.pinnedBy?.[0] ? t("unpin") : t("pin_to_dashboard")} {link.type === "url" && (permissions === true || permissions?.canUpdate) && ( { setTimeout( () => (document.body.style.pointerEvents = ""), 0 ); onUpdateArchive(); onClose(); }} > {t("refresh_preserved_formats")} )} {(permissions === true || permissions?.canDelete) && ( <> {t("delete")} )} )} {link.url && ( )}
setMode(mode)} onUpdateArchive={() => { setTimeout(() => (document.body.style.pointerEvents = ""), 0); onUpdateArchive(); onClose(); }} />
); }