import React, { useRef, useState } from 'react'; import { useMedia } from 'react-use'; import { HMSPeer, selectAvailableRoleNames, selectPeerByID, useHMSActions, useHMSStore } from '@100mslive/react-sdk'; import { ChevronDownIcon, ChevronUpIcon, CrossIcon } from '@100mslive/react-icons'; import { Button } from '../../Button'; import { Dropdown } from '../../Dropdown'; import { Box, Flex } from '../../Layout'; import { Dialog } from '../../Modal'; import { Sheet } from '../../Sheet'; import { Text } from '../../Text'; import { config as cssConfig } from '../../Theme'; import { Tooltip } from '../../Tooltip'; const HighlightTerm = ({ value }: { value: string | undefined }) => { return value ? ( '{value.slice(0, 100)} {value.length > 100 ? '...' : ''}' ) : ( <> ); }; const RoleChangeContent = ({ peer, onOpenChange, isMobile = false, }: { peer: HMSPeer; onOpenChange: (open: boolean) => void; isMobile?: boolean; }) => { const roles = useHMSStore(selectAvailableRoleNames).filter( role => role !== peer?.roleName && role !== '__internal_recorder', ); const [selectedRole, setRole] = useState(roles.filter(role => role !== peer?.roleName)?.[0] || peer?.roleName); const hmsActions = useHMSActions(); const [open, setOpen] = useState(false); const triggerRef = useRef(); return ( <> Switch Role {isMobile && onOpenChange(false)} />} Switch the role of from to {selectedRole} {open ? : } {roles.map(role => ( setRole(role)} css={{ w: `${triggerRef.current?.clientWidth}px` }} > {role} ))} {!isMobile && ( )} ); }; export const RoleChangeModal = ({ peerId, onOpenChange, }: { peerId: string; onOpenChange: (open: boolean) => void; }) => { const peer = useHMSStore(selectPeerByID(peerId)); const isMobile = useMedia(cssConfig.media.md); if (!peer) { return null; } if (isMobile) { return ( ); } return ( ); };