@100mslive/roomkit-react
Version:

101 lines (94 loc) • 3.34 kB
JSX
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>
);
};