UNPKG

@100mslive/roomkit-react

Version:

![Banner](https://github.com/100mslive/web-sdks/blob/06c65259912db6ccd8617f2ecb6fef51429251ec/prebuilt-banner.png)

101 lines (94 loc) 3.34 kB
import React, { useState } from 'react'; import { useMedia } from 'react-use'; import data from '@emoji-mart/data/sets/14/apple.json'; import { init } from 'emoji-mart'; import { selectAvailableRoleNames, selectIsConnectedToRoom, selectLocalPeerID, useCustomEvent, useHMSStore, } from '@100mslive/react-sdk'; import { EmojiIcon } from '@100mslive/react-icons'; import { EmojiCard } from './Footer/EmojiCard'; // import { ToastManager } from './Toast/ToastManager'; import { Dropdown } from '../../Dropdown'; import { Box } from '../../Layout'; import { config as cssConfig } from '../../Theme'; import { Tooltip } from '../../Tooltip'; import IconButton from '../IconButton'; import { useRoomLayoutConferencingScreen } from '../provider/roomLayoutProvider/hooks/useRoomLayoutScreen'; import { useDropdownList } from './hooks/useDropdownList'; import { useLandscapeHLSStream, useMobileHLSStream } from '../common/hooks'; import { EMOJI_REACTION_TYPE } from '../common/constants'; init({ data }); export const EmojiReaction = ({ showCard = false }) => { const [open, setOpen] = useState(false); const isConnected = useHMSStore(selectIsConnectedToRoom); const { elements } = useRoomLayoutConferencingScreen(); useDropdownList({ open: open, name: 'EmojiReaction' }); // const hmsActions = useHMSActions(); const roles = useHMSStore(selectAvailableRoleNames); const localPeerId = useHMSStore(selectLocalPeerID); // const { isStreamingOn } = useRecordingStreaming(); const isMobile = useMedia(cssConfig.media.md); const isLandscape = useMedia(cssConfig.media.ls); const isMobileHLSStream = useMobileHLSStream(); const isLandscapeStream = useLandscapeHLSStream(); const { sendEvent } = useCustomEvent({ type: EMOJI_REACTION_TYPE, }); const sendReaction = async emojiId => { const data = { type: EMOJI_REACTION_TYPE, emojiId: emojiId, senderId: localPeerId, }; // TODO: RT find a way to figure out hls-viewer roles sendEvent(data, { roleNames: roles }); window.showFlyingEmoji?.({ emojiId, senderId: localPeerId }); /* if (isStreamingOn) { try { await hmsActions.sendHLSTimedMetadata([ { payload: JSON.stringify(data), duration: 2, }, ]); } catch (error) { console.log(error); ToastManager.addToast({ title: error.message }); } } */ }; if (!isConnected || !elements.emoji_reactions) { return null; } if (showCard) { return <EmojiCard sendReaction={sendReaction} />; } return ( <Dropdown.Root open={open} onOpenChange={setOpen}> <Dropdown.Trigger asChild data-testid="emoji_reaction_btn"> <IconButton css={ isMobile || isLandscape ? { bg: '$surface_default', r: '$round', border: '1px solid $border_bright' } : {} } > <Tooltip title="Emoji reaction"> <Box> <EmojiIcon /> </Box> </Tooltip> </IconButton> </Dropdown.Trigger> <Dropdown.Content sideOffset={5} align={isMobileHLSStream || isLandscapeStream ? 'end' : 'center'} css={{ p: '$8', bg: '$surface_default' }} > <EmojiCard sendReaction={sendReaction} /> </Dropdown.Content> </Dropdown.Root> ); };