UNPKG

@amityco/ts-sdk-react-native

Version:

Amity Social Cloud Typescript SDK

95 lines (81 loc) 2.85 kB
import { getActiveClient } from '~/client/api'; import { ingestInCache } from '~/cache/api/ingestInCache'; import { createEventSubscriber } from '~/core/events'; import { prepareMessagePayload } from '~/messageRepository/utils'; /** * ```js * import { onReactorRemovedLocal } from '@amityco/ts-sdk' * const dispose = onReactorRemoved('post', postId, reactor => { * // ... * }) * ``` * * Fired when an {@link Amity.InternalReactor} has been removed * * @param {@link Amity.ReactableType} referenceType * @param {string} referenceId * @param callback The function to call when the event was fired * @returns an {@link Amity.Unsubscriber} function to stop listening * * @category Events * */ export const onReactorRemovedLocal = ( referenceType: Amity.ReactableType, referenceId: Amity.Reaction['referenceId'], callback: Amity.Listener<Amity.InternalReactor>, ): Amity.Unsubscriber => { const client = getActiveClient(); const callbackWrapper = ( referenceType_: Amity.ReactableType, referenceId_: Amity.Reaction['referenceId'], reaction: Amity.InternalReactor, ) => { if (referenceType_ === referenceType && referenceId_ === referenceId) { callback(reaction); } }; if (referenceType === 'message') { const filter = async (rawPayload: Amity.MessagePayload) => { const payload = await prepareMessagePayload(rawPayload); if (!payload.reactions[0]) return; ingestInCache(payload); callbackWrapper('message', payload.messages[0].messageId, payload.reactions[0]); }; return createEventSubscriber( client, 'reaction/onReactorRemoved', 'message.reactionRemoved', filter, ); } if (referenceType === 'post') { const filter = (payload: Amity.LocalEvents['local.post.removeReaction']) => { callbackWrapper('post', payload.post.postId, payload.reactor); }; return createEventSubscriber( client, 'local.post.removeReaction', 'local.post.removeReaction', filter, ); } if (referenceType === 'story') { const filter = (payload: Amity.StoryReactionPayload) => { const { reactions, ...rest } = payload; ingestInCache(rest as Amity.StoryPayload); ingestInCache({ reactors: reactions }); if (payload.stories.length === 0 || payload.reactions.length === 0) return; callbackWrapper('story', payload.stories[0].storyId, payload.reactions[0]); }; return createEventSubscriber(client, 'story.reactionRemoved', 'story.reactionRemoved', filter); } const filter = (payload: Amity.LocalEvents['local.comment.removeReaction']) => { callbackWrapper('comment', payload.comment.commentId, payload.reactor); }; return createEventSubscriber( client, 'local.comment.removeReaction', 'local.comment.removeReaction', filter, ); };