import { forwardRef, useEffect, useRef } from 'react'; import { motion } from 'framer-motion'; import PropTypes from 'prop-types'; import { clsm } from '../../../utils'; import { createAnimationProps } from '../../../helpers/animationPropsHelper'; import { dashboard as $dashboardContent } from '../../../content'; import { groupStreamSessions } from '../Header/utils'; import { useResponsiveDevice } from '../../../contexts/ResponsiveDevice'; import { useStreams } from '../../../contexts/Streams'; import Button from '../../../components/Button'; import StreamSessionButton from './StreamSessionButton'; const $content = $dashboardContent.header.session_navigator; const NavigatorPopup = forwardRef(({ isNavOpen, toggleNavPopup }, ref) => { const { canLoadMoreStreamSessions, isLoadingNextStreamSessionsPage, streamSessions, updateActiveStreamSession, throttledUpdateStreamSessions } = useStreams(); const { isDefaultResponsiveView } = useResponsiveDevice(); const loadMoreSessionsBtnRef = useRef(); const handleSessionClick = (streamSession) => { updateActiveStreamSession(streamSession); toggleNavPopup(); }; const handleLoadMoreStreamSessions = () => { throttledUpdateStreamSessions(true); }; useEffect(() => { if (!isLoadingNextStreamSessionsPage) { loadMoreSessionsBtnRef.current?.blur(); } }, [isLoadingNextStreamSessionsPage]); const renderPopup = () => (
{streamSessions?.length ? ( <> {groupStreamSessions(streamSessions).map( ({ groupLabel, sessionData }) => (

{groupLabel}

{sessionData.map((streamSession, i) => ( ))}
) )} {canLoadMoreStreamSessions && ( )} ) : ( {$content.no_stream_sessions}

{$content.no_stream_sessions_message}

)}
); return isDefaultResponsiveView ? ( renderPopup() ) : ( {renderPopup()} ); }); NavigatorPopup.defaultProps = { isNavOpen: false }; NavigatorPopup.propTypes = { isNavOpen: PropTypes.bool, toggleNavPopup: PropTypes.func.isRequired }; export default NavigatorPopup;