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.load_more_sessions} )} > ) : ( {$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;
{$content.no_stream_sessions_message}