stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
53 lines (44 loc) • 1.2 kB
text/typescript
import type { Channel, ReactionResponse, UserResponse } from 'stream-chat';
import { insertReaction, updateReaction } from '../store/apis';
export const addReactionToLocalState = async ({
channel,
enforceUniqueReaction,
messageId,
reactionType,
user,
}: {
channel: Channel;
enforceUniqueReaction: boolean;
messageId: string;
reactionType: string;
user: UserResponse;
}) => {
const message = channel.state.messages.find(({ id }) => id === messageId);
if (!message) {
return;
}
const reaction: ReactionResponse = {
created_at: new Date().toISOString(),
message_id: messageId,
type: reactionType,
updated_at: new Date().toISOString(),
user,
user_id: user?.id,
};
const hasOwnReaction = message.own_reactions && message.own_reactions.length > 0;
const messageWithReaction = channel.state.addReaction(reaction, undefined, enforceUniqueReaction);
if (!messageWithReaction) {
return;
}
if (enforceUniqueReaction && hasOwnReaction) {
await updateReaction({
message: messageWithReaction,
reaction,
});
} else {
await insertReaction({
message: messageWithReaction,
reaction,
});
}
};