import { InboxIcon, LoaderIcon, MessageCircleIcon } from "lucide-react"; import { observer } from "mobx-react-lite"; import { useState } from "react"; import toast from "react-hot-toast"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { activityServiceClient } from "@/grpcweb"; import useAsyncEffect from "@/hooks/useAsyncEffect"; import useNavigateTo from "@/hooks/useNavigateTo"; import { cn } from "@/lib/utils"; import { memoStore, userStore } from "@/store"; import { activityNamePrefix } from "@/store/common"; import { Inbox, Inbox_Status } from "@/types/proto/api/v1/inbox_service"; import { Memo } from "@/types/proto/api/v1/memo_service"; import { User } from "@/types/proto/api/v1/user_service"; import { useTranslate } from "@/utils/i18n"; interface Props { inbox: Inbox; } const MemoCommentMessage = observer(({ inbox }: Props) => { const t = useTranslate(); const navigateTo = useNavigateTo(); const [relatedMemo, setRelatedMemo] = useState(undefined); const [sender, setSender] = useState(undefined); const [initialized, setInitialized] = useState(false); useAsyncEffect(async () => { if (!inbox.activityId) { return; } const activity = await activityServiceClient.getActivity({ name: `${activityNamePrefix}${inbox.activityId}`, }); if (activity.payload?.memoComment) { const memoCommentPayload = activity.payload.memoComment; const memo = await memoStore.getOrFetchMemoByName(memoCommentPayload.relatedMemo, { skipStore: true, }); setRelatedMemo(memo); const sender = await userStore.getOrFetchUserByName(inbox.sender); setSender(sender); setInitialized(true); } }, [inbox.activityId]); const handleNavigateToMemo = async () => { if (!relatedMemo) { return; } navigateTo(`/${relatedMemo.name}`); if (inbox.status === Inbox_Status.UNREAD) { handleArchiveMessage(true); } }; const handleArchiveMessage = async (silence = false) => { await userStore.updateInbox( { name: inbox.name, status: Inbox_Status.ARCHIVED, }, ["status"], ); if (!silence) { toast.success(t("message.archived-successfully")); } }; return (

Comment

{initialized ? ( <>
{inbox.createTime?.toLocaleString()}
{inbox.status === Inbox_Status.UNREAD && ( handleArchiveMessage()} />

{t("common.archive")}

)}

{t("inbox.memo-comment", { user: sender?.displayName || sender?.username, memo: relatedMemo?.name, interpolation: { escapeValue: false }, })}

) : (
)}
); }); export default MemoCommentMessage;