import { Dropdown, Menu, MenuButton } from "@mui/joy"; import { useRef, useState } from "react"; import useClickAway from "react-use/lib/useClickAway"; import Icon from "@/components/Icon"; import { memoServiceClient } from "@/grpcweb"; import { MemoNamePrefix, useMemoStore } from "@/store/v1"; import { Memo } from "@/types/proto/api/v2/memo_service"; import { Reaction_Type } from "@/types/proto/api/v2/reaction_service"; import { stringifyReactionType } from "./ReactionView"; interface Props { memo: Memo; } const REACTION_TYPES = [ Reaction_Type.THUMBS_UP, Reaction_Type.THUMBS_DOWN, Reaction_Type.LAUGH, Reaction_Type.HEART, Reaction_Type.ROCKET, Reaction_Type.EYES, ]; const ReactionSelector = (props: Props) => { const { memo } = props; const memoStore = useMemoStore(); const [open, setOpen] = useState(false); const containerRef = useRef(null); useClickAway(containerRef, () => { setOpen(false); }); const handleReactionClick = async (reaction: Reaction_Type) => { try { await memoServiceClient.upsertMemoReaction({ id: memo.id, reaction: { contentId: `${MemoNamePrefix}${memo.id}`, reactionType: reaction, }, }); await memoStore.getOrFetchMemoById(memo.id, { skipCache: true, }); } catch (error) { // skip error. } }; return ( setOpen(isOpen)}>
{REACTION_TYPES.map((reactionType) => { return (
handleReactionClick(reactionType)} > {stringifyReactionType(reactionType)}
); })}
); }; export default ReactionSelector;