import { Tooltip } from "@mui/joy"; import classNames from "classnames"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { activityServiceClient } from "@/grpcweb"; import useNavigateTo from "@/hooks/useNavigateTo"; import { useInboxStore, extractUsernameFromName, useMemoStore } from "@/store/v1"; import { Activity } from "@/types/proto/api/v2/activity_service"; import { Inbox, Inbox_Status } from "@/types/proto/api/v2/inbox_service"; import { useTranslate } from "@/utils/i18n"; import Icon from "../Icon"; interface Props { inbox: Inbox; } const MemoCommentMessage = ({ inbox }: Props) => { const t = useTranslate(); const navigateTo = useNavigateTo(); const inboxStore = useInboxStore(); const memoStore = useMemoStore(); const [activity, setActivity] = useState(undefined); useEffect(() => { if (!inbox.activityId) { return; } activityServiceClient .getActivity({ id: inbox.activityId, }) .then(({ activity }) => { setActivity(activity); }); }, [inbox.activityId]); const handleNavigateToMemo = async () => { const relatedMemoId = activity?.payload?.memoComment?.relatedMemoId; if (!relatedMemoId) { return; } const memo = await memoStore.getOrFetchMemoById(relatedMemoId); if (!memo) { toast.error("Memo not found"); return; } navigateTo(`/m/${memo.name}`); if (inbox.status === Inbox_Status.UNREAD) { handleArchiveMessage(true); } }; const handleArchiveMessage = async (silence = false) => { await inboxStore.updateInbox( { name: inbox.name, status: Inbox_Status.ARCHIVED, }, ["status"] ); if (!silence) { toast.success("Archived"); } }; return (
{inbox.createTime?.toLocaleString()}
{inbox.status === Inbox_Status.UNREAD && ( handleArchiveMessage()} /> )}

{t("inbox.memo-comment", { user: extractUsernameFromName(inbox.sender), memo: `memo#${activity?.payload?.memoComment?.relatedMemoId}`, })}

); }; export default MemoCommentMessage;