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;