UNPKG

@livelike/react-native

Version:

LiveLike React Native package

59 lines (50 loc) 1.71 kB
import { useMemo } from 'react'; import { IUserReactionCountDetail } from '@livelike/javascript'; import { UserReactionsForTargetId, userReactionStore } from '../store'; import { useReactionPacks } from './useReactionPacks'; import { useSelectedFieldStore } from './useSelectedFieldStore'; export type UserReactionState = IUserReactionCountDetail & { imageSrc: string; }; export type UserReactionsForTargetIdState = { [key: string]: UserReactionState; }; export type UseUserReactionsArg = { reactionSpaceId: string; targetId: string; }; const initialUserReactionValue: UserReactionsForTargetId = {}; export function useUserReactions({ reactionSpaceId, targetId, }: UseUserReactionsArg) { const targetIdUserReactions = useSelectedFieldStore( userReactionStore, () => userReactionStore.get()?.[reactionSpaceId]?.[targetId] || initialUserReactionValue ); const { reactionPacks } = useReactionPacks({ reactionSpaceId }); const validUserReactions: UserReactionsForTargetIdState = useMemo(() => { if (!reactionPacks.length || !Object.keys(targetIdUserReactions).length) { return initialUserReactionValue as UserReactionsForTargetIdState; } return reactionPacks.reduce<UserReactionsForTargetIdState>( (_allReactions, pack) => { pack.emojis.forEach((emoji) => { if (targetIdUserReactions[emoji.id]) { _allReactions[emoji.id] = { ...targetIdUserReactions[emoji.id], imageSrc: emoji.file, }; } }); return _allReactions; }, {} ); }, [targetIdUserReactions, reactionPacks]); return { userReactions: validUserReactions, }; }