UNPKG

@replyke/core

Version:

Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.

41 lines 1.8 kB
import { useCallback } from "react"; import { useReplykeDispatch, useReplykeSelector } from "../../../store/hooks"; import { updateReactions } from "../../../store/slices/chatSlice"; import { selectUser } from "../../../store/slices/userSlice"; import { selectUser as selectAuthUser } from "../../../store/slices/authSlice"; import useAxiosPrivate from "../../../config/useAxiosPrivate"; import useProject from "../../projects/useProject"; import { handleError } from "../../../utils/handleError"; function useToggleReaction() { const dispatch = useReplykeDispatch(); const { projectId } = useProject(); const axios = useAxiosPrivate(); const user = useReplykeSelector(selectUser); const authUser = useReplykeSelector(selectAuthUser); const currentUserId = (user || authUser)?.id ?? ""; const toggle = useCallback(async ({ conversationId, messageId, emoji, }) => { if (!projectId) throw new Error("No projectId available."); try { const response = await axios.post(`/${projectId}/chat/conversations/${conversationId}/messages/${messageId}/reactions`, { emoji }); const { reactionCounts, userReactions, delta } = response.data; dispatch(updateReactions({ conversationId, messageId, reactionCounts, userId: currentUserId, emoji, delta, currentUserId, })); return { reactionCounts, userReactions }; } catch (err) { handleError(err, "Failed to toggle reaction"); throw err; } }, [projectId, currentUserId, axios, dispatch]); return toggle; } export default useToggleReaction; //# sourceMappingURL=useToggleReaction.js.map