stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
50 lines (46 loc) • 1.4 kB
text/typescript
import type { Channel, UserResponse } from 'stream-chat';
export const removeReactionFromLocalState = ({
channel,
messageId,
reactionType,
user,
}: {
channel: Channel;
messageId: string;
reactionType: string;
user: UserResponse;
}) => {
const message = channel.state.messages.find(({ id }) => id === messageId);
if (!message || !channel?.id || !user?.id) {
return;
}
message.own_reactions = message.own_reactions?.filter(
(reaction) => reaction.type !== reactionType,
);
message.latest_reactions = message.latest_reactions?.filter(
(r) => !(r.user_id === user?.id && r.type === reactionType),
);
if (message.reaction_groups?.[reactionType]) {
if (
message.reaction_groups[reactionType].count > 0 ||
message.reaction_groups[reactionType].sum_scores > 0
) {
message.reaction_groups[reactionType].count = Math.max(
0,
message.reaction_groups[reactionType].count - 1,
);
message.reaction_groups[reactionType].sum_scores = Math.max(
0,
message.reaction_groups[reactionType].sum_scores - 1,
);
if (
message.reaction_groups[reactionType].count === 0 ||
message.reaction_groups[reactionType].sum_scores === 0
) {
delete message.reaction_groups[reactionType];
}
} else {
delete message.reaction_groups[reactionType];
}
}
};