import { Tooltip } from "@mui/joy"; import classNames from "classnames"; import copy from "copy-to-clipboard"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { useLoaderData, useNavigate } from "react-router-dom"; import { showCommonDialog } from "../components/Alert"; import AnalyticsView from "../components/AnalyticsView"; import CreateShortcutDialog from "../components/CreateShortcutDialog"; import GenerateQRCodeDialog from "../components/GenerateQRCodeDialog"; import Icon from "../components/Icon"; import VisibilityIcon from "../components/VisibilityIcon"; import Dropdown from "../components/common/Dropdown"; import { absolutifyLink } from "../helpers/utils"; import { shortcutService } from "../services"; import useFaviconStore from "../stores/v1/favicon"; import useUserStore from "../stores/v1/user"; interface State { showEditModal: boolean; } const ShortcutDetail = () => { const { t } = useTranslation(); const navigate = useNavigate(); const shortcutId = (useLoaderData() as Shortcut).id; const shortcut = shortcutService.getShortcutById(shortcutId) as Shortcut; const currentUser = useUserStore().getCurrentUser(); const faviconStore = useFaviconStore(); const [state, setState] = useState({ showEditModal: false, }); const [favicon, setFavicon] = useState(undefined); const [showQRCodeDialog, setShowQRCodeDialog] = useState(false); const havePermission = currentUser.role === "ADMIN" || shortcut.creatorId === currentUser.id; const shortcutLink = absolutifyLink(`/s/${shortcut.name}`); useEffect(() => { faviconStore.getOrFetchUrlFavicon(shortcut.link).then((url) => { if (url) { setFavicon(url); } }); }, [shortcut.link]); const handleCopyButtonClick = () => { copy(shortcutLink); toast.success("Shortcut link copied to clipboard."); }; const handleDeleteShortcutButtonClick = (shortcut: Shortcut) => { showCommonDialog({ title: "Delete Shortcut", content: `Are you sure to delete shortcut \`${shortcut.name}\`? You cannot undo this action.`, style: "danger", onConfirm: async () => { await shortcutService.deleteShortcutById(shortcut.id); navigate("/", { replace: true, }); }, }); }; return ( <>
{favicon ? ( ) : ( )}
{shortcut.title} {shortcut.title ? ( (s/{shortcut.name}) ) : ( <> s/ {shortcut.name} )}
{havePermission && ( } > )}
{shortcut.description &&

{shortcut.description}

}
{shortcut.tags.map((tag) => { return ( #{tag} ); })} {shortcut.tags.length === 0 && No tags}
{shortcut.creator.nickname}
{t(`shortcut.visibility.${shortcut.visibility.toLowerCase()}.self`)}
{shortcut.view} visits

{t("analytics.self")}

{showQRCodeDialog && setShowQRCodeDialog(false)} />} {state.showEditModal && ( setState({ ...state, showEditModal: false, }) } /> )} ); }; export default ShortcutDetail;