import PropTypes from 'prop-types'; import { useEffect, useRef, useState, forwardRef } from 'react'; import { useLocation } from 'react-router-dom'; import { STREAM_MANAGER_DEFAULT_TAB } from '../../constants'; import { Provider as NotificationProvider } from '../../contexts/Notification'; import { clsm } from '../../utils'; import { streamManager as $content } from '../../content'; import { StreamManagerActions, StreamManagerChat, StreamManagerWebBroadcast } from './streamManagerCards'; import { useBroadcast } from '../../contexts/Broadcast'; import { useResponsiveDevice } from '../../contexts/ResponsiveDevice'; import StreamManagerActionModal from './streamManagerCards/StreamManagerActions/StreamManagerActionModal'; import Tabs from '../../components/Tabs/Tabs'; import WebBroadcastSettingsModal from './streamManagerCards/StreamManagerWebBroadcast/WebBroadcastSettingsModal'; const StreamManagerControlCenter = forwardRef( ({ setIsWebBroadcastAnimating }, previewRef) => { const { state } = useLocation(); const { isDesktopView, currentBreakpoint } = useResponsiveDevice(); const { resetPreview, initializeDevices, presetLayers, isBroadcasting } = useBroadcast(); const areDevicesInitialized = useRef(false); const webBroadcastParentContainerRef = useRef(); const [selectedTabIndex, setSelectedTabIndex] = useState( state?.streamManagerSelectedTab || 0 ); const [isBroadcastCardOpen, setIsBroadcastCardOpen] = useState( state?.isWebBroadcastContainerOpen || false ); // Initialize devices when the user opens the broadcast card for the first time useEffect(() => { if (areDevicesInitialized.current || !isBroadcastCardOpen) return; (async function () { await initializeDevices(); presetLayers.background.remove(); })(); areDevicesInitialized.current = true; }, [initializeDevices, presetLayers, isBroadcastCardOpen]); useEffect(() => { resetPreview(); if (isDesktopView) { setSelectedTabIndex(STREAM_MANAGER_DEFAULT_TAB); } }, [isDesktopView, resetPreview, state, isBroadcasting]); return ( <>
div]:px-0', '[&>div]:pt-0', '[&>div>button]:h-9' ])} > {!isDesktopView && ( { if (!isBroadcasting) { setIsBroadcastCardOpen(tab === 1); } setSelectedTabIndex(tab); }} tabs={[ { label: currentBreakpoint === 0 ? $content.stream_manager_web_broadcast.manage_stream.split( ' ' )[0] : $content.stream_manager_web_broadcast.manage_stream, panelIndex: 0 }, { label: $content.stream_manager_web_broadcast.go_live, panelIndex: 1 } ]} /> )}
{isDesktopView && ( setIsBroadcastCardOpen(true)} onCollapse={() => setIsBroadcastCardOpen(false)} setIsWebBroadcastAnimating={setIsWebBroadcastAnimating} /> )}
{!isDesktopView && ( setIsBroadcastCardOpen(true)} onCollapse={() => setIsBroadcastCardOpen(false)} /> )}
); } ); StreamManagerControlCenter.propTypes = { setIsWebBroadcastAnimating: PropTypes.func.isRequired }; export default StreamManagerControlCenter;