import React, { Fragment, useState } from 'react'; import { ConferencingScreen } from '@100mslive/types-prebuilt'; import { selectIsConnectedToRoom, selectPermissions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk'; import { ExitIcon, StopIcon, VerticalMenuIcon } from '@100mslive/react-icons'; import { Dropdown } from '../../../Dropdown'; import { Box, Flex } from '../../../Layout'; import { Dialog } from '../../../Modal'; import { Tooltip } from '../../../Tooltip'; import { EndSessionContent } from './EndSessionContent'; import { LeaveIconButton, MenuTriggerButton } from './LeaveAtoms'; import { LeaveCard } from './LeaveCard'; import { LeaveSessionContent } from './LeaveSessionContent'; // @ts-ignore: No implicit Any import { useDropdownList } from '../hooks/useDropdownList'; export const DesktopLeaveRoom = ({ leaveRoom, screenType, endRoom, container, }: { leaveRoom: (options?: { endStream?: boolean; sendReason?: boolean }) => Promise; screenType: keyof ConferencingScreen; endRoom: () => Promise; container?: HTMLElement; }) => { const [open, setOpen] = useState(false); const [showLeaveRoomAlert, setShowLeaveRoomAlert] = useState(false); const [showEndStreamAlert, setShowEndStreamAlert] = useState(false); const isConnected = useHMSStore(selectIsConnectedToRoom); const permissions = useHMSStore(selectPermissions); const { isStreamingOn } = useRecordingStreaming(); const showStream = screenType !== 'hls_live_streaming' && isStreamingOn && permissions?.hlsStreaming; const showLeaveOptions = (permissions?.hlsStreaming && isStreamingOn) || permissions?.endRoom; useDropdownList({ open: open || showEndStreamAlert || showLeaveRoomAlert, name: 'LeaveRoom' }); if (!permissions || !isConnected) { return null; } return ( {showLeaveOptions ? ( setShowLeaveRoomAlert(true)} > } onClick={async () => await leaveRoom({ sendReason: true })} css={{ p: '$8 $4' }} /> } onClick={() => { setOpen(false); setShowEndStreamAlert(true); }} css={{ p: '$8 $4' }} /> ) : ( { setShowLeaveRoomAlert(true); }} key="LeaveRoom" data-testid="leave_room_btn" > )} leaveRoom({ endStream: true }) : endRoom} isStreamingOn={isStreamingOn} isModal /> ); };