import { motion } from 'framer-motion'; import { useCallback, useLayoutEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { Close } from '../../../../../assets/icons'; import { clsm } from '../../../../../utils'; import { createAnimationProps } from '../../../../../helpers/animationPropsHelper'; import { player as $content } from '../../../../../content'; import { useResponsiveDevice } from '../../../../../contexts/ResponsiveDevice'; import Button from '../../../../../components/Button'; import useClickAway from '../../../../../hooks/useClickAway'; import { usePlayerContext } from '../../../contexts/Player'; export const POPUP_ID = 'rendition'; const RenditionSettingPopup = ({ closeQualitiesContainer, isOpen, qualities, selectedQualityName, settingsButtonRef, updateQuality }) => { const [qualitiesContainerPos, setQualitiesContainerPos] = useState(null); const { isMobileView } = useResponsiveDevice(); const { qualitiesContainerRef } = usePlayerContext(); const onSelectQualityHandler = useCallback( (event) => { const { name } = event.target; if (name) { updateQuality(name); closeQualitiesContainer(); } }, [closeQualitiesContainer, updateQuality] ); useClickAway( [qualitiesContainerRef, settingsButtonRef], closeQualitiesContainer ); useLayoutEffect(() => { if (isOpen && qualitiesContainerRef?.current) { const { height: qualitiesContainerHeight, width: qualitiesContainerWidth } = qualitiesContainerRef.current.getBoundingClientRect(); setQualitiesContainerPos({ top: -qualitiesContainerHeight - 8, left: -qualitiesContainerWidth / 2 + 24 // (container width / 2) + (icon width / 2) }); } else { setQualitiesContainerPos(null); } }, [isOpen, qualities, qualitiesContainerRef]); return ( <> {isMobileView && ( )} {isMobileView && (

{$content.video_quality}

)}
{qualities .filter(({ name }) => name !== 'audio_only') .map(({ name }) => name ? ( ) : null )}
); }; RenditionSettingPopup.propTypes = { closeQualitiesContainer: PropTypes.func.isRequired, isOpen: PropTypes.bool, qualities: PropTypes.arrayOf(PropTypes.object), selectedQualityName: PropTypes.string.isRequired, settingsButtonRef: PropTypes.shape({ current: PropTypes.object }), updateQuality: PropTypes.func.isRequired }; RenditionSettingPopup.defaultProps = { isOpen: false, qualities: [{ name: 'Auto' }], settingsButtonRef: { current: null } }; export default RenditionSettingPopup;