import { Block, Text, View } from '@tarojs/components' import { XgInternalEvents } from 'xgplayer-mp-taro-core' import { Control, ControlLeft, ControlMid, ControlRight, ExitFullscreenButton, formatTime, FullscreenButton, MiddleButton, PopupLayer, Progress, // SettingButton, Top, TopLeft, TopMid, TopRight } from 'xgplayer-mp-taro-ui' import { ReactNode, useContext, useState } from 'react' import { IDefinition, XgVideoProps } from '../../types/xg-video' import { XGVideoContext } from '../../xg-video-context' import { PlaybackQualityList } from '../playbackQualityList' import { PlaybackRateList } from '../playbackRateList' import { TopTitle } from '../shortTopTitle' import './index.scss' interface ControlOverlayProps extends XgVideoProps { children?: ReactNode } enum PopupContentTypes { Rate, Quality } export function ControlOverlay(props: ControlOverlayProps) { const context = useContext(XGVideoContext) const { definitionList } = context const { playbackRateList, title } = props const [showPopup, setShowPopup] = useState(false) const [popupContentType, setPopupContentType] = useState() let popupLayerContent function onPlaybackRateBtnClick() { setPopupContentType(PopupContentTypes.Rate) setShowPopup(true) } function onRateItemSelected() { setPopupContentType(undefined) setShowPopup(false) } function onPlaybackQualityBtnClick() { setPopupContentType(PopupContentTypes.Quality) setShowPopup(true) } function onQualityItemSelected(to: IDefinition, from?: IDefinition) { setPopupContentType(undefined) setShowPopup(false) context.eventCenter.trigger(XgInternalEvents.PlaybackQualityChange, to, from, context) } function onProgressSeeked(percent) { const target = context.duration * percent context.ctx?.seek(target) } switch (popupContentType) { case PopupContentTypes.Rate: popupLayerContent = ( ) break case PopupContentTypes.Quality: popupLayerContent = ( ) break } function getCurDefinitionQualityName() { if (Array.isArray(definitionList)) { const curQuality = definitionList.filter((val) => val.quality === context.definition)[0] if (curQuality) { return curQuality.text } } return '-' } return ( {showPopup ? ( {popupLayerContent} ) : ( {context.isFullScreen && } {title} {/* {context.isFullScreen && } */} {formatTime(context.currentTime)} /{formatTime(context.duration)} {!context.isFullScreen && } {context.isFullScreen && Array.isArray(playbackRateList) && playbackRateList.length > 0 && ( 倍速 )} {context.isFullScreen && Array.isArray(definitionList) && definitionList.length > 0 && ( {getCurDefinitionQualityName()} )} )} ) }