@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
41 lines • 1.8 kB
JavaScript
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