import { forwardRef, useRef, useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import PropTypes from 'prop-types'; import { createAnimationProps, getDefaultBounceTransition } from '../../../../helpers/animationPropsHelper'; import { clsm, noop } from '../../../../utils'; import { Settings } from '../../../../assets/icons'; import { streamManager as $content } from '../../../../content'; import { useBroadcast } from '../../../../contexts/Broadcast'; import { useModal, MODAL_TYPE } from '../../../../contexts/Modal'; import { useResponsiveDevice } from '../../../../contexts/ResponsiveDevice'; import useLatest from '../../../../hooks/useLatest'; import GoLiveHeader from './GoLiveHeader'; import GoLiveStreamButton from './GoLiveStreamButton'; import WebBroadcastControl from './WebBroadcastControl'; const $webBroadcastContent = $content.stream_manager_web_broadcast; const GoLiveContainer = forwardRef( ( { isBroadcastCardOpen, isOpen, onCollapse, setIsWebBroadcastAnimating, webBroadcastContainerRef, webBroadcastControllerButtons, webBroadcastParentContainerRef }, previewRef ) => { const [isFullScreen, setIsFullScreen] = useState(false); const settingsButtonRef = useRef(); const shouldAnimateStreamingButton = useLatest(false); const { isBroadcasting } = useBroadcast(); const { openModal } = useModal(); const { isDesktopView } = useResponsiveDevice(); const handleOnCollapse = () => { shouldAnimateStreamingButton.current = false; if (isBroadcasting) shouldAnimateStreamingButton.current = true; onCollapse(); }; const handleSettingsClick = () => { openModal({ type: MODAL_TYPE.STREAM_BROADCAST_SETTINGS, lastFocusedElement: settingsButtonRef }); }; const webBroadcastControllerWithSettingsButton = [ ...webBroadcastControllerButtons, { onClick: handleSettingsClick, ariaLabel: 'Open video and audio settings modal', withRef: true, icon: , tooltip: $webBroadcastContent.open_settings } ]; return ( setIsWebBroadcastAnimating(true)} onAnimationComplete={() => setIsWebBroadcastAnimating(false)} > {isDesktopView && ( )} {(isOpen || !isDesktopView) && ( )} ); } ); GoLiveContainer.propTypes = { isBroadcastCardOpen: PropTypes.bool.isRequired, isOpen: PropTypes.bool.isRequired, onCollapse: PropTypes.func.isRequired, setIsWebBroadcastAnimating: PropTypes.func, webBroadcastContainerRef: PropTypes.object.isRequired, webBroadcastControllerButtons: PropTypes.array.isRequired, webBroadcastParentContainerRef: PropTypes.object.isRequired }; GoLiveContainer.defaultProps = { setIsWebBroadcastAnimating: noop }; export default GoLiveContainer;