import { forwardRef, useCallback, useEffect, useReducer } from 'react'; import { AnimatePresence } from 'framer-motion'; import PropTypes from 'prop-types'; import { clsm } from '../../../../utils'; import { ChevronDown, ChevronUp, ExpandScreen } from '../../../../assets/icons'; import { streamManager as $content } from '../../../../content'; import { useBroadcast } from '../../../../contexts/Broadcast'; import Button from '../../../../components/Button/Button'; import useResize from '../../../../hooks/useResize'; import WebBroadcastFullScreen from './WebBroadcastFullScreen'; const GoLiveHeader = forwardRef( ( { isFullScreen, onCollapse, setIsFullScreen, webBroadcastContainerRef, webBroadcastControllerButtons, webBroadcastParentContainerRef }, previewRef ) => { const { isBroadcasting, resetPreview } = useBroadcast(); const [dimensions, updateDimensions] = useReducer( (prevState, nextState) => ({ ...prevState, ...nextState }), { animationInitialWidth: 0, animationInitialHeight: 0, animationInitialLeft: 0, animationInitialTop: 0 } ); useEffect(() => { resetPreview(); }, [resetPreview, isFullScreen]); const calculateTopAndLeftValues = useCallback(() => { const left = webBroadcastParentContainerRef.current.offsetLeft + 64; const top = webBroadcastParentContainerRef.current.offsetTop; return { left, top }; }, [webBroadcastParentContainerRef]); const handleToggleFullscreen = () => { if (isFullScreen) { setIsFullScreen(false); } else { const { top, left } = calculateTopAndLeftValues(); const width = webBroadcastContainerRef.current.offsetWidth; const height = webBroadcastContainerRef.current.offsetHeight; updateDimensions({ animationInitialWidth: width, animationInitialHeight: height, animationInitialLeft: left, animationInitialTop: top }); setIsFullScreen(true); } }; const calculateBaseTopAndLeftOnResize = () => { const { top, left } = calculateTopAndLeftValues(); updateDimensions({ animationInitialLeft: left, animationInitialTop: top }); }; useResize(calculateBaseTopAndLeftOnResize); return (
{isFullScreen && ( )}
); } ); GoLiveHeader.propTypes = { isFullScreen: PropTypes.bool.isRequired, onCollapse: PropTypes.func.isRequired, setIsFullScreen: PropTypes.func.isRequired, webBroadcastContainerRef: PropTypes.object.isRequired, webBroadcastControllerButtons: PropTypes.array.isRequired, webBroadcastParentContainerRef: PropTypes.object.isRequired }; export default GoLiveHeader;